chxavnetconnectui.cpp
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:8k
源码类别:

Symbian

开发平台:

Visual C++

  1. /************************************************************************
  2.  * chxavnetconnectui.cpp
  3.  * ----------------------
  4.  *
  5.  * Synopsis:
  6.  * Access point selection and connect note UI logic implementation.
  7.  *
  8.  *
  9.  * Target:
  10.  * Symbian OS
  11.  *
  12.  *
  13.  * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
  14.  *
  15.  ************************************************************************/
  16. #include "hxcom.h"
  17. #include "ihxpckts.h" //IHXValues
  18. #include "hxprefs.h" //IHXPreferences
  19. #include "hxsym_debug.h"
  20. #include "hxsym_leaveutil.h"
  21. #include "hxdebug_hxapi.h"
  22. #include "hxapihelp_player.h"
  23. #include "hxapihelp.h"
  24. #include "chxavmessagedialog.h"
  25. #include "chxavcleanstring.h"
  26. #include "chxavcleanupstack.h"
  27. #include "comptr.h"
  28. #include "comptr_traits.h"
  29. #include "chxavaccesspointdb.h"
  30. #include "chxavutil.h"
  31. #include "chxavmisc.h"
  32. #include "chxavconfignames.h"
  33. #include "chxavnetconnectui.h"
  34. namespace
  35. {
  36. inline
  37. bool SupportsInternetAccessL(CHXAvAccessPointDB* pDb,TUint32 ulAccessPointId) 
  38. {
  39.     TUint32 wapId = pDb->GetWapIdFromAPIdL(ulAccessPointId);
  40.     return pDb->SupportsInternetAccessL(wapId);
  41. }
  42. UINT32 GetActiveID(IHXAccessPointManager* pManager)
  43. {
  44.     HX_ASSERT(pManager);
  45.     comptr<IHXValues> info;
  46.     UINT32 id = 0;
  47.     if (HXR_OK == pManager->GetActiveAccessPointInfo(info.AsRef()))
  48.     {
  49.         info->GetPropertyULONG32("ID", id);
  50.     }
  51.     
  52.     return id;
  53. }
  54. }
  55. /*
  56.  * CHXAvNetConnectUI
  57.  * ------------------
  58.  * Ctor
  59.  *
  60.  */
  61. CHXAvNetConnectUI::CHXAvNetConnectUI()
  62. : m_bDoingSelect(false)
  63. {
  64. }
  65. void CHXAvNetConnectUI::ConstructL(IUnknown* pUnk,
  66.                                    const CHXAvCommand& cmdCancelConnect)
  67. {
  68.     m_prefs.From(pUnk);
  69.     m_factory.From(pUnk);
  70. #if defined(SYMBAINPLAYER_INCLUDE_CONNECT_NOTE_UI)
  71.     m_spConnectNote = new (ELeave) CHXAvWaitNote();
  72.     m_spConnectNote->SetTextL(CHXAvCleanString(R_AVP_ST_CONNECTING)());
  73.     m_spConnectNote->SetCancelCommandL(cmdCancelConnect);
  74. #endif
  75. }
  76. void CHXAvNetConnectUI::ShowConnectNote()
  77. {
  78. #if defined(SYMBAINPLAYER_INCLUDE_CONNECT_NOTE_UI)
  79.     if(!m_bDoingSelect && !m_spConnectNote->IsShowing())
  80.     {
  81.         TRAPD(err, m_spConnectNote->StartL(true /*delay*/));
  82.     } 
  83. #endif
  84. }
  85. void CHXAvNetConnectUI::HideConnectNote()
  86. {
  87. #if defined(SYMBAINPLAYER_INCLUDE_CONNECT_NOTE_UI)
  88.     TRAPD(err, m_spConnectNote->EndL()); 
  89. #endif
  90. }
  91. /* 
  92.  * ~CHXAvNetConnectUI
  93.  * -------------------
  94.  *
  95.  */
  96. CHXAvNetConnectUI::~CHXAvNetConnectUI()
  97. {
  98. }
  99. HX_RESULT
  100. CHXAvNetConnectUI::DoSelectAccessPointL(IHXAccessPointManager* pManager,
  101.        IHXAccessPointSelectorResponse* pResponse)
  102. {
  103.     DPRINTF(SYMP_INFO, ("CHXAvNetConnectUI::SelectAccessPoint()n"));
  104.     HX_RESULT res = HXR_FAIL;
  105.        
  106.     m_bDoingSelect = true;
  107.     if(pResponse)
  108.     {
  109. // Get the default configured internet access point from prefs
  110. CHXAvAccessPointDB* pDb = new (ELeave) CHXAvAccessPointDB;
  111. AUTO_PUSH_POP_DEL(pDb);
  112. pDb->ConstructL();
  113. TUint32 defaultAccessPointId = GetAndValidateDefaultAccessPointL(pDb);
  114. if (defaultAccessPointId == 0) 
  115. {
  116.     // Alert and prompt user to select a default access point
  117.     defaultAccessPointId = PromptForDefaultAccessPointL(pDb);
  118.            
  119. }
  120. TUint32 preferredAccessPointId = defaultAccessPointId;
  121. // Find out if there is an active (connected) access point 
  122. TUint32 activeAccessPointId = GetActiveID(pManager);
  123. if (0 != activeAccessPointId)
  124. {
  125.     // An access point is active (connected)
  126.     if(SupportsInternetAccessL(pDb, activeAccessPointId) && 
  127.        defaultAccessPointId != activeAccessPointId && 
  128.        defaultAccessPointId != 0)
  129.     {
  130. // Connected access point is different from our default, 
  131. // but we can still use it. Since we can use the active access
  132. // point (it suports internet access), give user an option to
  133. // disconnect (or not) from the active one
  134. if (!PromptForDisconnectL(pDb, activeAccessPointId))
  135. {
  136.     // User opts to use active AP even though it is not the 
  137.     // configured default
  138.     preferredAccessPointId = activeAccessPointId;
  139.     
  140.     // XXXLCM should we prompt to save this
  141.     // (or automatically do so) if no default is configured?
  142. }
  143.     }
  144. }
  145. if(preferredAccessPointId)
  146. {
  147.     // Sanity check
  148.     HX_ASSERT(pDb->IsValidL(preferredAccessPointId));
  149.     HX_ASSERT(SupportsInternetAccessL(pDb, preferredAccessPointId));
  150.     comptr<IHXValues> apInfo;
  151.     
  152.     if ((HXR_OK == m_factory->CreateInstance(CLSID_IHXValues,apInfo.AsPtrPtr())) &&
  153. (HXR_OK == apInfo->SetPropertyULONG32("ID", preferredAccessPointId)))
  154.     {
  155. pResponse->SelectAccessPointDone(HXR_OK, apInfo);
  156. res = HXR_OK; 
  157.     }
  158. }
  159. else
  160. {
  161.     CHXAvMessageDialog::DoAlertInfoL(CHXAvCleanString(R_AVP_UNABLE_TO_PROCEED_NO_ACCESS_POINT)(), true);
  162. }
  163.     }
  164.     m_bDoingSelect = false;
  165.     if(SUCCEEDED(res))
  166.     {
  167.         // ensure connect note is showing
  168.         ShowConnectNote();
  169.     }
  170.  
  171.     return res;
  172. }
  173. TUint32 CHXAvNetConnectUI::GetAndValidateDefaultAccessPointL(CHXAvAccessPointDB* pDb)
  174. {
  175.     TUint32 defaultAccessPointId = GetAccessPointFromPrefsL(pDb);
  176.     if(defaultAccessPointId)
  177.     {
  178.         // Check validitiy of configured access point. 
  179. // This is a rare but possible case.
  180.         if(pDb->IsValidL(defaultAccessPointId))
  181.         {
  182.             TUint32 wapId = pDb->GetWapIdFromAPIdL(defaultAccessPointId);
  183.             if(!pDb->SupportsInternetAccessL(wapId))
  184.             {
  185.                 // We can't use this because it doesn't support IP connections
  186.                 defaultAccessPointId = 0;
  187.             }
  188.         }
  189.         else
  190.         {
  191.             // Not in database
  192.             defaultAccessPointId = 0;
  193.         }
  194.     }
  195.     return defaultAccessPointId;
  196. }
  197. TUint32 CHXAvNetConnectUI::PromptForDefaultAccessPointL(CHXAvAccessPointDB* pDb)
  198. {
  199.     TUint32 ret = 0;
  200. #if defined(SYMBAINPLAYER_INCLUDE_CONNECT_NOTE_UI)
  201.     // hide connect note if it is showing
  202.     m_spConnectNote->EndL();
  203. #endif
  204.     CHXAvMessageDialog::DoAlertInfoL(CHXAvCleanString(R_AVP_CONFIGURE_ACCESS_POINT)(), true);
  205.     TInt wapId = CHXAvMisc::RunAccessPointSettingPageL(0/*default*/);
  206.     if( wapId != 0 )
  207.     {
  208. HX_ASSERT(pDb->SupportsInternetAccessL(wapId));
  209. // User selected something. Translate wap ap id to internet ap id and save to prefs
  210. ret = pDb->GetAPIdFromWapIdL(wapId);
  211.         prefs::Write(m_factory, m_prefs, CHXAV_AccessPoint, ret);
  212.     }
  213.     return ret;
  214. }
  215. bool CHXAvNetConnectUI::PromptForDisconnectL(CHXAvAccessPointDB* pDb, 
  216.       TUint32 activeAccessPointId)
  217. {
  218. #if defined(SYMBAINPLAYER_INCLUDE_CONNECT_NOTE_UI)
  219.     // hide connect note if it is showing
  220.     m_spConnectNote->EndL();
  221. #endif
  222.     // Connected access point is different from our default, but we 
  223.     // can still use it.Since we can use the active access point 
  224.     // (it suports internet access), give user an option to disconnect
  225.     // (or not) from the active one
  226.     HBufC* pName = pDb->AllocAccessPointNameL(activeAccessPointId);
  227.     AUTO_PUSH_POP_DEL(pName);
  228.     CHXAvCleanString disconnectString(R_CONF_DISCONNECT_ACCESS_POINT, *pName);
  229.     
  230.     return CHXAvMessageDialog::DoQueryL(disconnectString());
  231. }
  232. /*
  233.  * GetAccessPointFromPrefs
  234.  * -----------------------
  235.  * Return the stored value for the default accesspoint.   First try the integer value.  
  236.  * If that fails, get the string value.  If the string value is not there either,
  237.  * return 0.
  238.  *
  239.  */
  240. TUint32 
  241. CHXAvNetConnectUI::GetAccessPointFromPrefsL(CHXAvAccessPointDB* pDb)
  242. {
  243.     TUint32 accessPoint = 0;
  244.     accessPoint = prefs::GetUINT32(m_prefs, CHXAV_AccessPoint, 0);
  245.     if (accessPoint == 0)
  246.     {
  247. CHXString accessPointStr = prefs::GetString(m_prefs, CHXAV_AccessPointStr, "");
  248. if (!accessPointStr.IsEmpty())
  249. {
  250.     accessPoint = pDb->GetIapIDFromNameL(accessPointStr);
  251. }
  252.     }
  253.     return accessPoint;
  254. }
  255. void 
  256. CHXAvNetConnectUI::OnNetConnect()
  257. {
  258. #if defined(SYMBAINPLAYER_INCLUDE_CONNECT_NOTE_UI)
  259. #error add code here
  260. #endif
  261.     //XXXLCM should check m_spPlayer->HasPresStarted()
  262.     ShowConnectNote();
  263. }
  264. void 
  265. CHXAvNetConnectUI::OnStop()
  266. {
  267.     HideConnectNote();
  268. }
  269.  
  270. void 
  271. CHXAvNetConnectUI::OnBeginBuffering(bool /*bIsBegin*/)
  272. {
  273.     // in case this is first resume after connect
  274.     HideConnectNote(); 
  275. }
  276. void
  277. CHXAvNetConnectUI::OnError(HX_RESULT code)
  278. {   
  279.     // in case error comes while connecting
  280.     HideConnectNote();
  281. }