⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chxavnetconnectui.cpp

📁 symbian 下的helix player源代码
💻 CPP
字号:
/************************************************************************
 * chxavnetconnectui.cpp
 * ----------------------
 *
 * Synopsis:
 * Access point selection and connect note UI logic implementation.
 *
 *
 * Target:
 * Symbian OS
 *
 *
 * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
 *
 ************************************************************************/

#include "hxcom.h"
#include "ihxpckts.h" //IHXValues
#include "hxprefs.h" //IHXPreferences

#include "hxsym_debug.h"
#include "hxsym_leaveutil.h"
#include "hxdebug_hxapi.h"
#include "hxapihelp_player.h"
#include "hxapihelp.h"
#include "chxavmessagedialog.h"
#include "chxavcleanstring.h"
#include "chxavcleanupstack.h"
#include "comptr.h"
#include "comptr_traits.h"
#include "chxavaccesspointdb.h"
#include "chxavutil.h"
#include "chxavmisc.h"
#include "chxavconfignames.h"
#include "chxavnetconnectui.h"


namespace
{

inline
bool SupportsInternetAccessL(CHXAvAccessPointDB* pDb,TUint32 ulAccessPointId) 
{
    TUint32 wapId = pDb->GetWapIdFromAPIdL(ulAccessPointId);
    return pDb->SupportsInternetAccessL(wapId);
}

UINT32 GetActiveID(IHXAccessPointManager* pManager)
{
    HX_ASSERT(pManager);

    comptr<IHXValues> info;
    UINT32 id = 0;
    if (HXR_OK == pManager->GetActiveAccessPointInfo(info.AsRef()))
    {
        info->GetPropertyULONG32("ID", id);
    }
    
    return id;
}

}

/*
 * CHXAvNetConnectUI
 * ------------------
 * Ctor
 *
 */
CHXAvNetConnectUI::CHXAvNetConnectUI()
: m_bDoingSelect(false)
{
}

void CHXAvNetConnectUI::ConstructL(IUnknown* pUnk,
                                   const CHXAvCommand& cmdCancelConnect)
{
    m_prefs.From(pUnk);
    m_factory.From(pUnk);

#if defined(SYMBAINPLAYER_INCLUDE_CONNECT_NOTE_UI)
    m_spConnectNote = new (ELeave) CHXAvWaitNote();
    m_spConnectNote->SetTextL(CHXAvCleanString(R_AVP_ST_CONNECTING)());
    m_spConnectNote->SetCancelCommandL(cmdCancelConnect);
#endif

}

void CHXAvNetConnectUI::ShowConnectNote()
{
#if defined(SYMBAINPLAYER_INCLUDE_CONNECT_NOTE_UI)
    if(!m_bDoingSelect && !m_spConnectNote->IsShowing())
    {
        TRAPD(err, m_spConnectNote->StartL(true /*delay*/));
    } 
#endif
}

void CHXAvNetConnectUI::HideConnectNote()
{
#if defined(SYMBAINPLAYER_INCLUDE_CONNECT_NOTE_UI)
    TRAPD(err, m_spConnectNote->EndL()); 
#endif
}

/* 
 * ~CHXAvNetConnectUI
 * -------------------
 *
 */
CHXAvNetConnectUI::~CHXAvNetConnectUI()
{
}

HX_RESULT
CHXAvNetConnectUI::DoSelectAccessPointL(IHXAccessPointManager* pManager,
			       IHXAccessPointSelectorResponse* pResponse)
{
    DPRINTF(SYMP_INFO, ("CHXAvNetConnectUI::SelectAccessPoint()\n"));

    HX_RESULT res = HXR_FAIL;
       
    m_bDoingSelect = true;

    if(pResponse)
    {
	// Get the default configured internet access point from prefs
	CHXAvAccessPointDB* pDb = new (ELeave) CHXAvAccessPointDB;
	AUTO_PUSH_POP_DEL(pDb);
	pDb->ConstructL();

	TUint32 defaultAccessPointId = GetAndValidateDefaultAccessPointL(pDb);
	if (defaultAccessPointId == 0) 
	{	
	    // Alert and prompt user to select a default access point
	    defaultAccessPointId = PromptForDefaultAccessPointL(pDb);
           
	}

	TUint32 preferredAccessPointId = defaultAccessPointId;
	
	// Find out if there is an active (connected) access point 
	TUint32 activeAccessPointId = GetActiveID(pManager);
	if (0 != activeAccessPointId)
	{
	    // An access point is active (connected)
	    if(SupportsInternetAccessL(pDb, activeAccessPointId) && 
	       defaultAccessPointId != activeAccessPointId && 
	       defaultAccessPointId != 0)
	    {
		// Connected access point is different from our default, 
		// but we can still use it. Since we can use the active access
		// point (it suports internet access), give user an option to
		// disconnect (or not) from the active one

		if (!PromptForDisconnectL(pDb, activeAccessPointId))
		{
		    // User opts to use active AP even though it is not the 
		    // configured default
		    preferredAccessPointId = activeAccessPointId;
		    
		    // XXXLCM should we prompt to save this
		    // (or automatically do so) if no default is configured?
		}
	    }
	}

	if(preferredAccessPointId)
	{
	    // Sanity check
	    HX_ASSERT(pDb->IsValidL(preferredAccessPointId));
	    HX_ASSERT(SupportsInternetAccessL(pDb, preferredAccessPointId));

	    comptr<IHXValues> apInfo;
	    
	    if ((HXR_OK == m_factory->CreateInstance(CLSID_IHXValues,apInfo.AsPtrPtr())) &&
		(HXR_OK == apInfo->SetPropertyULONG32("ID", preferredAccessPointId)))
	    {
		pResponse->SelectAccessPointDone(HXR_OK, apInfo);
		res = HXR_OK; 
	    }

	}
	else
	{
	    CHXAvMessageDialog::DoAlertInfoL(CHXAvCleanString(R_AVP_UNABLE_TO_PROCEED_NO_ACCESS_POINT)(), true);
	}
    }

    m_bDoingSelect = false;
    if(SUCCEEDED(res))
    {
        // ensure connect note is showing
        ShowConnectNote();
    }
 
    return res;
}


TUint32 CHXAvNetConnectUI::GetAndValidateDefaultAccessPointL(CHXAvAccessPointDB* pDb)
{
    TUint32 defaultAccessPointId = GetAccessPointFromPrefsL(pDb);

    if(defaultAccessPointId)
    {
        // Check validitiy of configured access point. 
	// This is a rare but possible case.
        if(pDb->IsValidL(defaultAccessPointId))
        {
            TUint32 wapId = pDb->GetWapIdFromAPIdL(defaultAccessPointId);
            if(!pDb->SupportsInternetAccessL(wapId))
            {
                // We can't use this because it doesn't support IP connections
                defaultAccessPointId = 0;
            }
        }
        else
        {
            // Not in database
            defaultAccessPointId = 0;
        }
    }

    return defaultAccessPointId;
}

TUint32 CHXAvNetConnectUI::PromptForDefaultAccessPointL(CHXAvAccessPointDB* pDb)
{
    TUint32 ret = 0;

#if defined(SYMBAINPLAYER_INCLUDE_CONNECT_NOTE_UI)
    // hide connect note if it is showing
    m_spConnectNote->EndL();
#endif

    CHXAvMessageDialog::DoAlertInfoL(CHXAvCleanString(R_AVP_CONFIGURE_ACCESS_POINT)(), true);

    TInt wapId = CHXAvMisc::RunAccessPointSettingPageL(0/*default*/);
    if( wapId != 0 )
    {
	HX_ASSERT(pDb->SupportsInternetAccessL(wapId));
	
	// User selected something. Translate wap ap id to internet ap id and save to prefs
	ret = pDb->GetAPIdFromWapIdL(wapId);
        prefs::Write(m_factory, m_prefs, CHXAV_AccessPoint, ret);
    }

    return ret;
}

bool CHXAvNetConnectUI::PromptForDisconnectL(CHXAvAccessPointDB* pDb, 
				      TUint32 activeAccessPointId)
{
#if defined(SYMBAINPLAYER_INCLUDE_CONNECT_NOTE_UI)
    // hide connect note if it is showing
    m_spConnectNote->EndL();
#endif

    // Connected access point is different from our default, but we 
    // can still use it.Since we can use the active access point 
    // (it suports internet access), give user an option to disconnect
    // (or not) from the active one
    HBufC* pName = pDb->AllocAccessPointNameL(activeAccessPointId);
    AUTO_PUSH_POP_DEL(pName);
    CHXAvCleanString disconnectString(R_CONF_DISCONNECT_ACCESS_POINT, *pName);
    
    return CHXAvMessageDialog::DoQueryL(disconnectString());
}







/*
 * GetAccessPointFromPrefs
 * -----------------------
 * Return the stored value for the default accesspoint.   First try the integer value.  
 * If that fails, get the string value.  If the string value is not there either,
 * return 0.
 *
 */
TUint32 
CHXAvNetConnectUI::GetAccessPointFromPrefsL(CHXAvAccessPointDB* pDb)
{
    TUint32 accessPoint = 0;
    accessPoint = prefs::GetUINT32(m_prefs, CHXAV_AccessPoint, 0);
    if (accessPoint == 0)
    {
	CHXString accessPointStr = prefs::GetString(m_prefs, CHXAV_AccessPointStr, "");
	if (!accessPointStr.IsEmpty())
	{
	    accessPoint = pDb->GetIapIDFromNameL(accessPointStr);
	}
    }
    return accessPoint;
}


void 
CHXAvNetConnectUI::OnNetConnect()
{
#if defined(SYMBAINPLAYER_INCLUDE_CONNECT_NOTE_UI)
#error add code here
#endif
    //XXXLCM should check m_spPlayer->HasPresStarted()
    ShowConnectNote();
}

void 
CHXAvNetConnectUI::OnStop()
{
    HideConnectNote();
}
 
void 
CHXAvNetConnectUI::OnBeginBuffering(bool /*bIsBegin*/)
{
    // in case this is first resume after connect
    HideConnectNote(); 
}

void
CHXAvNetConnectUI::OnError(HX_RESULT code)
{   
    // in case error comes while connecting
    HideConnectNote();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -