devmngt_plat/default_app_client_api/inc/das_client.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:46:07 +0200
changeset 0 254040eb3b7d
child 10 79d3436dc2de
permissions -rw-r--r--
Revision: 200947 Kit: 200951

/*
* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0""
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  Client interface to ask for setting the default application
*
*/



#ifndef C_DEFAULTAPPCLIENT_H
#define C_DEFAULTAPPCLIENT_H

#include <e32def.h>
#include <e32base.h>
#include <aknserverapp.h>

class RDefaultAppService; 
 
 
/**
 *  Client API for setting the default application.
 *
 *  This class defines the API that applications should use to trigger the launch of the
 *  Default Application Server, that asks the user to select default applications for those
 *  Service & MIME pairs for which the client application is a candidate.
 *
 *  A client application should first instantiate the service, using eithe NewL() or NewLC()
 *  The client application can check first if the sercive is available in the system (by using 
 *  the ServiceAvailable() function. The client application may also check if there is 
 *  anything to display (if there is any Service & MIME that the client application supports for 
 *  which there is at least another application supporting the pair). If there is no such pair,
 *  then launching the server would display an empty list). This checking is performed using the 
 *  PairsToDisplayL() function. 
 *
 *  After the above checkings are done, the client application can ask the server to change
 *  defaults by calling the ChangeDefaultsL() function. 
 *    
 *
 *  @lib defaultappclient.dll
 *  @since S60 v5.0
 */
class CDefaultAppClient : public CBase 
    {

public:

    /**  flags used to modify the service behaviour */
    enum TFlags
        {
        EFlagNoObserver=1,
        EFlagReserved1=2,
        EFlagReserved2=4
        };

    /**
     * Symbian OS two-phased constructor
     * @return
     */
    IMPORT_C static CDefaultAppClient* NewL(MAknServerAppExitObserver* aObserver);

    /**
     * Symbian OS two-phased constructor
     * @return
     */
    IMPORT_C static CDefaultAppClient* NewLC(MAknServerAppExitObserver* aObserver);

    /**
     * Destructor.
     */
    IMPORT_C virtual ~CDefaultAppClient();

    /**
     * Function to check if a server is present in the system. If the
     * server is present, the subsequent functions should not fail due
     * to server unavailability.
     *
     * @since S60 v5.0
     * @return ETrue or EFalse, depending service/server availability
     */
    IMPORT_C static TBool ServiceAvailable( TInt& aErrorCode );
    
    /**
     * Function to check the number of Service & MIME pairs the server would display if the 
     * ChangeDefaultsL() would be called. The purpose of this function
     * is to allow the client application not to display an entry for starting the server, in the 
     * Options menu, in case the Server's list of Service & MIME pairs is empty.
     * 
     * Please note that the function may return a higher number than the actual number
     * of pairs, because it does not check for MIMEs with System priority (that would not be 
     * displayed).
     *
     * @since S60 v5.0
     * @return the number of Service & MIME pairs the server would display
     */
    IMPORT_C TInt PairsToDisplayL();
    
    /**
     * This function launches the server, as a chained application. The client application will not be
     * available to the user until the server does not exit.
     * When the server exits, the client application gains control again. The observer (if specified 
     * during instantiation (NewL) is notified that the server has exited.
     *
     * @since S60 v5.0
     * @param aFlags service flags 
     */
    IMPORT_C void ChangeDefaultsL( TInt aFlags = 0 );
    

private:

    /**
     * C++ default constructor.
     */
    CDefaultAppClient();

    /**
     * Symbian constructor.
     */
    void ConstructL( MAknServerAppExitObserver* aObserver );
    
    /**
     * This function finds out the uid of the Default Application Server 
     * (the application registered to handle the DefaultApp service)
     *
     * @since S60 v5.0
     * @param aServerAppUid If parameter is non-NULL, it returns the Uid of the server there
     */
    static void GetServiceParamsL( TUid* aServerAppUid); 

private: // data

    /**
     * The UID of the server application (we discover the server)
     */
    TUid iServerAppUid;

    /**
     * Pointer to the service class.
     * Own.
     */
    RDefaultAppService *iService; 
    
    /**
     * Pointer to the Observer to call after the operation initiated by
     * ChangeDefaultsAsyncL() has finished.
     * Not Owned.
     */
    MAknServerAppExitObserver* iObserver;
    
    /**
     * Monitor object that calls the iObserver when the server has exited.
     * Owned.
     */
    CApaServerAppExitMonitor* iMonitor;
    
    };

#endif // C_DEFAULTAPPCLIENT_H