/*
* Copyright (c) 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:  Class is used to find out from java is midlet foreground or not
*
*/


#ifndef CMMAFOREGROUND_H
#define CMMAFOREGROUND_H

#include <e32base.h>

#include "mmmaeventposter.h"
#include "cmmadeleterefevent.h"
#include "cmmaforegroundevent.h"

// xm-radio fix
//#include "CMIDToolkit.h"
//#include "lcdui.h"

#include <coemain.h>
#include <eikenv.h>

//  CLASS DECLARATION
/**
*
* Class is used to find out from java is midlet foreground or not
*/
NONSHARABLE_CLASS(CMMAForeground) : public CBase/*, public MMIDEnvObserver, public MCoeForegroundObserver*/
{
public:

    /**
     * Creates and returns a new instance of this class.
     * @param aEventPoster for posting event to java side
     * @param aForegroundListener java side foreground object
     * @param aJavaMethod java side method id
     * @return New instance from this class.
     */
    static CMMAForeground* NewL(MMMAEventPoster* aEventPoster,
    jobject aForegroundListener,
    jmethodID aJavaMethod/*,
    CMIDToolkit* aToolkit*/); // xm-radio fix
    /**
     * Destructor.
     */
    ~CMMAForeground();

protected:

    /**
     * C++ constructor
     */
    CMMAForeground();

    /**
     * Second phase constructor
     * @param aEventPoster for posting event to java side
     * @param aForegroundListener java side foreground object
     * @param aJavaMethod java side method id
     */
    void ConstructL(MMMAEventPoster* aEventPoster,
                    jobject aForegroundListener,
                    jmethodID aJavaMethod/*,
                    CMIDToolkit* aToolkit*/); // xm-radio fix

public: // New methods


    /**
     * Tells is midlet foreground or not
     * @return boolean
     */
    TBool IsForeground();

    /**
     * Sets member boolean iIsForeground
     */
    void SetForeground(TBool aIsForeground);

public: // from MMIDEnvObserver

  //  void HandleSwitchOnL(TBool /*aSwitchOn*/);

    /**
     * Handles the case when the MIDlet is brought to the foreground.
     */
  //  void HandleForegroundL(TBool /*aForeground*/);

    /**
     * Handles a change to resources which are shared accross the environment.
     */
   // void HandleResourceChangeL(TInt /*aType*/);

public:
    /** Handles the application coming to the foreground. */
    void HandleGainingForeground();

    /** Handles the application going into the background. */
    void HandleLosingForeground();

private: // Member data

    CActiveSchedulerWait* iActiveScheduler; // owned
    MMMAEventPoster* iEventPoster; // not owned
    CMMAForegroundEvent* iForegroundEvent; // owned

    //Event is used to destroy reference to associated java object,
    //when foreground is destroyed.
    CMMADeleteRefEvent* iDeleteRefEvent; // owned

    jobject iForegroundListener;
    jmethodID iJavaMethod;

    TBool iIsForeground;
    // xm-radio fix
    //CMIDToolkit* iToolkit;
    //MMIDEnv* iMidEnv;
};

#endif // CMMAFOREGROUND_H
