williamr@2: // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@4: // apgcli.h williamr@2: // williamr@2: williamr@4: #ifndef __APGCLI_H__ williamr@2: #define __APGCLI_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: // classes referenced williamr@4: class RFile; williamr@4: class MArrayFiller; williamr@2: class CApaCommandLine; williamr@2: class CApaMaskedBitmap; williamr@2: class CApaLsSessionExtension; williamr@2: class CApaRegistrationResourceFileWriter; williamr@2: class CApaLocalisableResourceFileWriter; williamr@4: class CApaAppServiceInfoArray; williamr@2: williamr@4: #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: /** @internalComponent williamr@2: */ williamr@2: IMPORT_C TUint MinApplicationStackSize(); williamr@2: williamr@4: #endif //SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: williamr@4: williamr@2: /** williamr@4: This class holds the MIME-type recognition results of a recognized directory. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@4: class CDataRecognitionResultArray : public CBase williamr@2: { williamr@4: public: williamr@2: IMPORT_C CDataRecognitionResultArray(); williamr@4: IMPORT_C ~CDataRecognitionResultArray(); williamr@2: IMPORT_C const TFileName& Path() const; williamr@2: IMPORT_C TUint Count() const; williamr@2: IMPORT_C void GetDataRecognitionResultL(TDataRecognitionResult& aResult, const TUint aIndex) const; williamr@2: IMPORT_C void GetFileNameL(TFileName& aFileName, const TUint aIndex) const; williamr@4: public: williamr@2: TUint InternalizeL(const CBufFlat& aBuffer); williamr@2: void SetPath(const TFileName& aPath); williamr@2: private: williamr@4: NONSHARABLE_CLASS(CItem); williamr@2: TFileName iPath; williamr@4: RPointerArray iItems; williamr@2: }; williamr@2: williamr@2: williamr@2: /** A session with the application architecture server. williamr@2: williamr@2: The server provides access to a cached list of the applications on the device. williamr@2: williamr@2: To use this class, clients first need to connect to the server. williamr@2: williamr@2: Then, one of GetAllApps(), GetEmbeddableApps() or GetFilteredApps() needs to be called. williamr@2: These functions do some initialisation of server data in preparation for returning the williamr@2: application list (which is owned by the server). williamr@2: williamr@2: Then, GetNextApp() is called in a loop. The first time around, it populates the session's williamr@2: application list and retrieves the first application in the list. Further calls to GetNextApp() williamr@2: retrieve the remaining applications in the list, until RApaLsSession::ENoMoreAppsInList is williamr@2: returned. williamr@2: williamr@2: The session should be closed when it is no longer needed, before it goes out of scope. williamr@2: williamr@2: Various functions in RApaLsSession need to access the application list, and may return williamr@2: RApaLsSession::EAppListInvalid to indicate that the function was called before the initial williamr@2: population of the list is complete. If this occurs, you could try again after a short delay. williamr@2: williamr@2: This class provides many other functions, for instance launching applications, querying williamr@2: application-specific information, recognising data. williamr@2: williamr@2: @publishedAll williamr@2: @released */ williamr@4: class RApaLsSession : public RSessionBase williamr@2: { williamr@2: public: williamr@4: enum TApaLsErrorCode { williamr@2: /** A possible return value from GetNextApp(), to indicate that there are no more williamr@2: applications in the list. */ williamr@4: ENoMoreAppsInList = 1, williamr@2: /** Indicates that an RApaLsSession member function was called before the session's williamr@2: application list is fully populated. */ williamr@2: EAppListInvalid williamr@2: }; williamr@4: williamr@4: /** Defines the way an application is launched. williamr@4: This is no longer in use. Has no effect! */ williamr@2: enum TLaunchType { williamr@4: ELaunchNewApp = 1, williamr@2: ESwitchFiles williamr@2: }; williamr@4: public: // Session management williamr@2: IMPORT_C RApaLsSession(); williamr@2: IMPORT_C TInt Connect(); williamr@4: IMPORT_C void Close(); //lint !e1511 Member hides non-virtual member williamr@2: IMPORT_C TVersion Version() const; williamr@4: IMPORT_C void RegisterListPopulationCompleteObserver(TRequestStatus& aStatus) const; williamr@4: IMPORT_C TInt CancelListPopulationCompleteObserver() const; williamr@4: public: // Utilities williamr@4: IMPORT_C TInt IsProgram(const TDesC& aFileName, TBool& aProgram) const; williamr@4: IMPORT_C TInt MatchesSecurityPolicy(TBool& aMatches, TUid aAppUid, const TSecurityPolicy& aSecurityPolicy) const; williamr@4: public: // Application list initialization williamr@4: // Set up list of all apps williamr@4: IMPORT_C TInt GetAllApps() const; williamr@4: IMPORT_C TInt GetAllApps(TInt aScreenMode) const; williamr@4: IMPORT_C TInt GetEmbeddableApps() const; williamr@4: IMPORT_C TInt GetEmbeddableApps(TInt aScreenMode) const; williamr@4: // Set up filtered list of apps williamr@4: IMPORT_C TInt GetFilteredApps(const TApaEmbeddabilityFilter& aFilter) const; williamr@4: IMPORT_C TInt GetFilteredApps(const TApaEmbeddabilityFilter& aFilter, TInt aScreenMode) const; williamr@4: IMPORT_C TInt GetFilteredApps(TUint aCapabilityAttributeMask, TUint aCapabilityAttributeValue) const; williamr@4: IMPORT_C TInt GetFilteredApps(TUint aCapabilityAttributeMask, TUint aCapabilityAttributeValue, TInt aScreenMode) const; williamr@4: // Set up list of server "service" apps williamr@4: IMPORT_C TInt GetServerApps(TUid aServiceUid) const; williamr@4: IMPORT_C TInt GetServerApps(TUid aServiceUid, TInt aScreenMode) const; williamr@4: public: // Application list access williamr@4: // Get application count williamr@4: IMPORT_C TInt AppCount(TInt& aCount) const; williamr@4: IMPORT_C TInt EmbeddableAppCount(TInt& aCount) const; williamr@4: // Get next app in list williamr@2: IMPORT_C TInt GetNextApp(TApaAppInfo& aInfo) const; // call repeatedly, returns err (inc ENoMoreAppsInList,EAppListInvalid) williamr@2: IMPORT_C TInt GetNextApp(TApaAppInfo& aInfo,TInt aScreenMode) const; // call repeatedly, returns err (inc ENoMoreAppsInList,EAppListInvalid) williamr@4: public: // Application meta-data williamr@4: IMPORT_C TInt GetAppInfo(TApaAppInfo& aInfo, TUid aAppUid) const; williamr@4: IMPORT_C TInt GetAppViews(CApaAppViewArray& aAppViews, TUid aAppUid) const; williamr@4: williamr@2: IMPORT_C TInt SetAppShortCaption(const TDesC& aShortCaption, TLanguage aLanguage, TUid aAppUid); williamr@4: IMPORT_C TInt ApplicationLanguage(TUid aAppUid, TLanguage& aLanguage) const; williamr@4: IMPORT_C TInt GetAppCapability(TDes8& aCapabilityBuf,TUid aAppUid) const; williamr@4: IMPORT_C TInt GetAppOwnedFiles(CDesCArray& aAppOwnedFiles, TUid aAppUid) const; williamr@2: IMPORT_C TInt GetDefaultScreenNumber(TInt& aDefaultScreenNumber, TUid aAppUid) const; williamr@4: // Application icons williamr@4: IMPORT_C TInt GetAppIcon(TUid aAppUid, TInt aSize, CApaMaskedBitmap& aAppBitmap) const; williamr@4: IMPORT_C TInt GetAppIconSizes(TUid aAppUid, CArrayFixFlat& aArrayToFill) const; williamr@4: IMPORT_C TInt GetAppIcon(TUid aAppUid, TSize aSize, CApaMaskedBitmap& aAppBitmap) const; williamr@4: IMPORT_C TInt GetAppIcon(TUid aAppUid, HBufC*& aFullFileName) const; williamr@4: IMPORT_C TInt GetAppIcon(TUid aAppUid, RFile& aFile) const; williamr@4: IMPORT_C TInt NumberOfOwnDefinedIcons(TUid aAppUid, TInt& aCount) const; williamr@4: // View icons williamr@4: IMPORT_C TInt GetAppViewIcon(TUid aAppUid, TUid aViewUid, const TSize& aSize, CApaMaskedBitmap& aViewBitmap) const; williamr@4: IMPORT_C TInt GetAppViewIcon(TUid aAppUid, TUid aViewUid, HBufC*& aFullFileName) const; williamr@4: public: // Application start williamr@4: IMPORT_C TInt StartApp(const CApaCommandLine& aCommandLine); // This is only recommended for non document based apps williamr@4: IMPORT_C TInt StartApp(const CApaCommandLine& aCommandLine, TThreadId& aThreadId); williamr@4: IMPORT_C TInt StartApp(const CApaCommandLine& aCommandLine, TThreadId& aThreadId, TRequestStatus* aRequestStatusForRendezvous); williamr@2: williamr@4: IMPORT_C TInt StartDocument(const TDesC& aDocFileName, TThreadId& aThreadId, TLaunchType aUnused = ELaunchNewApp); williamr@4: IMPORT_C TInt StartDocument(const TDesC& aDocFileName, const TDataType& aDataType, TThreadId& aThreadId, TLaunchType aUnused = ELaunchNewApp); williamr@4: IMPORT_C TInt StartDocument(const TDesC& aDocFileName, TUid aAppUid, TThreadId& aThreadId, TLaunchType aUnused = ELaunchNewApp); williamr@4: IMPORT_C TInt StartDocument(RFile& aDocFile, TThreadId& aThreadId, TRequestStatus* aRequestStatusForRendezvous = NULL); williamr@4: IMPORT_C TInt StartDocument(RFile& aDocFile, const TDataType& aDataType, TThreadId& aThreadId, TRequestStatus* aRequestStatusForRendezvous = NULL); williamr@4: IMPORT_C TInt StartDocument(RFile& aDocFile, TUid aAppUid, TThreadId& aThreadId, TRequestStatus* aRequestStatusForRendezvous = NULL); williamr@4: IMPORT_C TInt CreateDocument(const TDesC& aDocFileName, TUid aAppUid, TThreadId& aThreadId, TLaunchType aUnused = ELaunchNewApp); williamr@4: public: // Data MIME-type recognizion williamr@4: // Minimum accepted confidence by which a data may be considered recognized williamr@4: IMPORT_C TInt SetAcceptedConfidence(TInt aConfidence); williamr@4: IMPORT_C TInt GetAcceptedConfidence(TInt& aConfidence) const; williamr@4: // Get a complete list of all known (recognizable) MIME types williamr@4: IMPORT_C TInt GetSupportedDataTypesL(CDataTypeArray& aDataTypes) const; williamr@4: // Recognize data williamr@4: IMPORT_C TInt RecognizeData(const TDesC8& aBuffer, TDataRecognitionResult& aDataType) const; williamr@2: IMPORT_C TInt RecognizeData(const TDesC& aName, const TDesC8& aBuffer, TDataRecognitionResult& aDataType) const; williamr@2: IMPORT_C TInt RecognizeData(const RFile& aFile, TDataRecognitionResult& aDataType) const; williamr@2: IMPORT_C TInt RecognizeSpecificData(const TDesC& aName, const TDesC8& aBuffer, const TDataType& aDataType, TBool& aResult) const; williamr@2: IMPORT_C TInt RecognizeSpecificData(const RFile& aFile, const TDataType& aDataType, TBool& aResult) const; williamr@4: // Recognize files williamr@4: IMPORT_C TInt RecognizeFilesL(const TDesC& aPath, CDataRecognitionResultArray& aResult) const; williamr@4: IMPORT_C void RecognizeFilesL(const TDesC& aPath, CDataRecognitionResultArray& aResult, TRequestStatus& aStatus); williamr@4: IMPORT_C TInt RecognizeFilesL(const TDesC& aPath, const TDesC8& aDataType, CDataRecognitionResultArray& aResult) const; williamr@4: IMPORT_C void RecognizeFilesL(const TDesC& aPath, const TDesC8& aDataType, CDataRecognitionResultArray& aResult, TRequestStatus& aStatus); williamr@4: IMPORT_C void CancelRecognizeFiles(); williamr@4: // Get application registered as capable of handling specified MIME data type williamr@2: IMPORT_C TInt AppForDataType(const TDataType& aDataType, TUid& aAppUid) const; williamr@2: IMPORT_C TInt AppForDocument(const TDesC& aFileName, TUid& aAppUid, TDataType& aDataType) const; williamr@2: IMPORT_C TInt AppForDocument(const RFile& aFile, TUid& aAppUid, TDataType& aDataType) const; williamr@4: // Register an applicatoin as capable of handling a specified MIME data type williamr@2: IMPORT_C TInt InsertDataMapping(const TDataType& aDataType, TDataTypePriority aPriority, TUid aUid); williamr@2: IMPORT_C TInt InsertDataMappingIfHigher(const TDataType& aDataType, TDataTypePriority aPriority, TUid aUid, TBool& aInserted); williamr@2: IMPORT_C TInt DeleteDataMapping(const TDataType& aDataType); williamr@4: // Amount of data used for recognition williamr@4: IMPORT_C TInt SetMaxDataBufSize(TInt aBufSize); williamr@4: IMPORT_C TInt GetMaxDataBufSize(TInt& aBufSize) const; williamr@4: IMPORT_C TInt GetPreferredBufSize(TInt& aPreferredBufSize) const; williamr@4: public: // Support for service-applications williamr@2: IMPORT_C CApaAppServiceInfoArray* GetAppServicesLC(TUid aAppUid) const; williamr@2: IMPORT_C CApaAppServiceInfoArray* GetServiceImplementationsLC(TUid aServiceUid) const; williamr@2: IMPORT_C CApaAppServiceInfoArray* GetServiceImplementationsLC(TUid aServiceUid, const TDataType& aDataType) const; williamr@2: IMPORT_C void GetAppServicesL(TUid aAppUid, CArrayFixFlat& aServiceUids) const; williamr@2: IMPORT_C CApaAppServiceInfoArray* GetAppServiceOpaqueDataLC(TUid aAppUid, TUid aServiceUid) const; williamr@2: IMPORT_C TInt AppForDataTypeAndService(const TDataType& aDataType, TUid aServiceUid, TUid& aAppUid) const; williamr@2: IMPORT_C TInt AppForDocumentAndService(const TDesC& aFileName, TUid aServiceUid, TUid& aAppUid, TDataType& aDataType) const; williamr@2: IMPORT_C TInt AppForDocumentAndService(const RFile& aFile, TUid aServiceUid, TUid& aAppUid, TDataType& aDataType) const; williamr@4: public: // for internal use only williamr@4: IMPORT_C TInt InsertDataMapping(const TDataType& aDataType, TDataTypePriority aPriority, TUid aUid, TUid aServiceUid); williamr@4: IMPORT_C TInt DeleteDataMapping(const TDataType& aDataType, TUid aServiceUid); williamr@4: IMPORT_C void NotifyOnDataMappingChange(TRequestStatus& aRequestStatus); williamr@4: IMPORT_C void CancelNotifyOnDataMappingChange(); williamr@4: IMPORT_C TInt GetAppByDataType(const TDataType& aDataType, TUid aServiceUid, TUid& aAppUid) const; williamr@4: public: // for internal use only williamr@4: IMPORT_C static void SetFsSessionL(RFs& aFsSession); williamr@4: IMPORT_C static void ClearFsSession(); williamr@4: IMPORT_C static RFs* FsSession(); williamr@4: IMPORT_C void SetNotify(TBool aCompleteImmediatelyIfNoScanImpendingOrInProgress, TRequestStatus& aStatus); williamr@4: IMPORT_C void CancelNotify(); williamr@4: public: // for internal use only williamr@4: // Support for non-native applications williamr@2: IMPORT_C void RegisterNonNativeApplicationTypeL(TUid aApplicationType, const TDesC& aNativeExecutable); williamr@2: IMPORT_C void DeregisterNonNativeApplicationTypeL(TUid aApplicationType); williamr@2: IMPORT_C void PrepareNonNativeApplicationsUpdatesL(); williamr@2: IMPORT_C void RegisterNonNativeApplicationL(TUid aApplicationType, const TDriveUnit& aDrive, CApaRegistrationResourceFileWriter& aRegistrationResourceFile, CApaLocalisableResourceFileWriter* aLocalisableResourceFile, const RFile* aIconFile); williamr@2: IMPORT_C void DeregisterNonNativeApplicationL(TUid aApplication); williamr@2: IMPORT_C void CommitNonNativeApplicationsUpdatesL(); williamr@2: IMPORT_C TInt RollbackNonNativeApplicationsUpdates(); williamr@2: IMPORT_C TInt GetAppType(TUid& aTypeUid, TUid aAppUid) const; williamr@2: IMPORT_C TInt ForceRegistration(const RPointerArray& aRegFiles); williamr@2: private: // Reserved for future use williamr@2: IMPORT_C virtual void RApaLsSession_Reserved1(); williamr@2: IMPORT_C virtual void RApaLsSession_Reserved2(); williamr@4: williamr@2: public: williamr@2: /** williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: IMPORT_C void ForceCommitNonNativeApplicationsUpdatesL(); williamr@4: williamr@2: private: williamr@2: void DoGetAppOwnedFilesL(CDesCArray& aArrayToFill, TUid aAppUid) const; williamr@2: void DoGetAppViewsL(CApaAppViewArray& aArrayToFill, TUid aAppUid) const; williamr@2: void DoGetAppIconSizesL(TUid aAppUid, CArrayFixFlat& aArrayToFill) const; williamr@2: TInt DoAppCount(TInt& aCount,TInt aCommand) const; williamr@2: void FetchArrayL(MArrayFiller& aArrayFiller,TUid aAppUid, TInt aOpcode, TInt aInitialBufSize) const; williamr@4: CBufBase* GetServiceBufferLC(TInt aOpcode, TUid aUid1, TUid aUid2 = KNullUid) const; williamr@2: CBufBase* GetServiceBufferLC(TInt aOpcode, TUid aUid1, const TDataType& aDataType) const; williamr@2: TInt SendReceiveWithReconnect(TInt aFunction,const TIpcArgs& aIpcArgs) const; williamr@2: TInt TransferAndInternalizeDataL(const TDesC& aPath, const TInt aRequiredBufferSize, CDataRecognitionResultArray& aResult) const; williamr@4: TInt GetExecutableNameAndNewOpaqueData(TDes& aNativeExecutableName, TDes& aLogicalExecutableName, HBufC8*& aOpaqueData, TIpcArgs& aIpcArgs, TInt aOpcode) const; williamr@4: TInt GetNewOpaqueData(HBufC8*& aOpaqueData, TInt aLengthOfOpaqueData) const; williamr@2: TInt StartApplicationPassingFileHandle(const TDesC& aNativeExecutableName, const TDesC& aLogicalExecutableName, const TDesC8* aOpaqueData, const RFile& aFile, TThreadId& aThreadId, TRequestStatus* aRequestStatusForRendezvous); williamr@2: TInt StartApplicationPassingDocumentName(const TDesC& aNativeExecutableName, const TDesC& aLogicalExecutableName, const TDesC8* aOpaqueData, const TDesC& aDocumentName, TThreadId& aThreadId,TApaCommand aCommand, TRequestStatus* aRequestStatusForRendezvous); williamr@4: void DoStartApplicationL(const TDesC& aNativeExecutableName, const CApaCommandLine& aCommandLine, TThreadId& aThreadId, TRequestStatus* aRequestStatusForRendezvous); williamr@2: TInt DoAppForDocumentOptionallySpecifyingService(const TDesC& aFileName, TUid aServiceUid, TUid& aAppUid, TDataType& aDataType, TInt aOpcode) const; williamr@2: TInt DoAppForDocumentOptionallySpecifyingService(const RFile& aFile, TUid aServiceUid, TUid& aAppUid, TDataType& aDataType, TInt aOpcode) const; williamr@4: TInt GetNewBufferFromFile(HBufC8*& aBuffer, const TDesC& aFileName) const; williamr@4: TInt DoStartApp(const CApaCommandLine& aCommandLine, TThreadId* aThreadId, TRequestStatus* aRequestStatusForRendezvous); williamr@4: void DoStartAppL(const CApaCommandLine& aCommandLine, TThreadId* aThreadId, TRequestStatus* aRequestStatusForRendezvous); williamr@4: static void GetMainThreadIdL(TThreadId& aThreadId, const RProcess& aProcess); williamr@2: static void DeletePointerToPointerToTAny(TAny* aPointerToPointerToTAny); williamr@2: static CBufFlat* CreateRegFilesBufferL(const RPointerArray& aRegFiles); williamr@2: static void CleanupOperation(TAny* aAny); williamr@2: williamr@2: private: // data williamr@4: friend class CApaLsSessionExtension; williamr@4: CApaLsSessionExtension* iExtension; williamr@2: }; williamr@2: williamr@2: williamr@4: #endif // __APGCLI_H__ williamr@4: