--- a/bearermanagement/mpm/src/mpmiapselection.cpp Tue Aug 31 15:35:44 2010 +0300
+++ b/bearermanagement/mpm/src/mpmiapselection.cpp Wed Sep 01 12:23:51 2010 +0100
@@ -17,10 +17,13 @@
#include "mpmiapselection.h"
#include "mpmlogger.h"
+#include "mpmdialog.h"
#include "mpmserversession.h"
#include "mpmcommsdataccess.h"
#include "mpmconnmonevents.h"
#include "mpmconfirmdlgstarting.h"
+#include "mpmdefaultconnection.h"
+#include "mpmwlanquerydialog.h"
#include "extendedconnpref.h"
// ---------------------------------------------------------------------------
@@ -28,14 +31,14 @@
// ---------------------------------------------------------------------------
//
CMPMIapSelection::CMPMIapSelection( CMPMCommsDatAccess* aCommsDatAccess,
- CMPMServerSession* aSession,
- CConnectionUiUtilities* aConnUiUtils )
+ CMPMServerSession* aSession )
: iChooseIapState( ENoConnection ),
iCommsDatAccess( aCommsDatAccess ),
- iConnUiUtils( aConnUiUtils ),
iStoredIapInfo(),
iSession( aSession ),
iConfirmDlgStarting( NULL ),
+ iDialog( NULL ),
+ iWlanDialog( NULL ),
iNextBestExists( EFalse ),
iUserSelectionIapId( 0 ),
iUserSelectionSnapId( 0 ),
@@ -59,12 +62,10 @@
// ---------------------------------------------------------------------------
//
CMPMIapSelection* CMPMIapSelection::NewL( CMPMCommsDatAccess* aCommsDatAccess,
- CMPMServerSession* aSession,
- CConnectionUiUtilities* aConnUiUtils )
+ CMPMServerSession* aSession )
{
CMPMIapSelection* self = new ( ELeave ) CMPMIapSelection( aCommsDatAccess,
- aSession,
- aConnUiUtils );
+ aSession );
CleanupStack::PushL( self );
self->ConstructL();
CleanupStack::Pop( self );
@@ -83,6 +84,8 @@
StopDisplayingStartingDlg();
delete iConfirmDlgStarting;
+ delete iDialog;
+ delete iWlanDialog;
}
// -----------------------------------------------------------------------------
@@ -163,8 +166,7 @@
return;
}
}
-
-
+
if ( iChooseIapPref.ConnSelectionDialog() )
{
// Complete selection with error code if wlan only was set and bearer set as cellular
@@ -184,7 +186,7 @@
// Default connection is requested.
MPMLOGSTRING( "CMPMIapSelection::ChooseIapL:\
- Default Connection" )
+ Default Connection" )
if ( iSession->UseUserConnPref() )
{
@@ -200,17 +202,39 @@
return;
}
- // Read the default connection values
TCmDefConnType type( TCmDefConnType( 0 ) );
TUint32 id( 0 );
- iCommsDatAccess->GetDefaultConnectionL( type, id );
+ iSession->MyServer().DefaultConnection()->GetDefaultConnectionL( type, id );
MPMLOGSTRING3( "CMPMIapSelection::ChooseIapL:\
- default connection type %d id %d", type, id )
-
- // set the received snap id and open the connection
- iChooseIapPref.SetSnapId( id );
- ExplicitConnectionL();
+ default connection type %d id %d", type, id )
+
+ if( type == ECmDefConnConnectionMethod )
+ {
+ iChooseIapPref.SetIapId( id );
+ iChooseIapPref.SetSnapId( 0 );
+ ExplicitConnectionL();
+ }
+ else if( type == ECmDefConnDestination )
+ {
+ iChooseIapPref.SetSnapId( id );
+ ExplicitConnectionL();
+ }
+ else
+ {
+ if( iCommsDatAccess->IsSnapEmptyL( id ) )
+ {
+ // start implicit connection
+ ImplicitConnectionL();
+ return;
+ }
+
+ iChooseIapPref.SetSnapId( id );
+
+ // start connection as if explicitly defined
+ // by application
+ ExplicitConnectionL();
+ }
}
else if ( iChooseIapPref.ConnType() == TMpmConnPref::EConnTypeExplicit )
{
@@ -327,8 +351,13 @@
iChooseIapPref.SetIapId( validateIapId );
iChooseIapPref.SetNetId( retNetId );
- if ( !iapTypeLanOrWlan &&
- iSession->MyServer().RoamingWatcher()->RoamingStatus() == EMPMRoamingStatusUnknown )
+ // In case offline mode is enabled, only LAN or WLAN is allowed.
+ // If some other bearer has been requested, then error code
+ // KErrGprsOfflineMode should be returned instead of KErrNone.
+ //
+
+ if ( !iapTypeLanOrWlan && ( iSession->MyServer().IsPhoneOffline() ||
+ iSession->MyServer().RoamingWatcher()->RoamingStatus() == EMPMRoamingStatusUnknown ) )
{
ChooseIapComplete( KErrGprsOfflineMode, &iChooseIapPref );
}
@@ -337,13 +366,9 @@
TWlanIapType wlanType = iCommsDatAccess->CheckWlanL( validateIapId );
if( wlanType != ENotWlanIap )
{
- // Add info into the BM connections
- iSession->MyServer().AppendBMConnection( iSession->ConnectionId(),
- iChooseIapPref.SnapId(),
- validateIapId,
- EStarting,
- *iSession );
- ChooseIapComplete( KErrNone, &iChooseIapPref );
+ iChooseIapState = EExplicitConnection;
+ iWlanDialog = CMPMWlanQueryDialog::NewL( *this, validateIapId );
+ iWlanDialog->StartWlanQueryL();
return;
}
@@ -353,39 +378,36 @@
if ( iSession->IsConfirmFirstL( validateIapId ) &&
!( iSession->MyServer().CommsDatAccess()->IsVirtualIapL( validateIapId ) ))
{
- // Check that queries aren't disabled and
- // enough time has elapsed from the last query cancelled by the user.
- if ( !( iChooseIapPref.NoteBehaviour()
- & TExtendedConnPref::ENoteBehaviourConnDisableQueries ) &&
- !iSession->MyServer().IsConnPermQueryTimerOn() )
+ // Check if we are roaming and cellular data usage query has not yet been presented
+ // to the user in this country
+ if ( iSession->MyServer().RoamingWatcher()->RoamingStatus() == EMPMInternationalRoaming )
{
- TConnectionId connId = iSession->ConnectionId();
-
- // Set confirmation type based on roaming status
- CMPMConfirmDlg::TDialogType type =
- CMPMConfirmDlg::EConfirmDlgHomeNetwork;
- if ( iSession->MyServer().RoamingWatcher()->RoamingStatus()
- == EMPMInternationalRoaming ) {
- type = CMPMConfirmDlg::EConfirmDlgVisitorNetwork;
- }
-
- iConfirmDlgStarting = CMPMConfirmDlgStarting::NewL(
- *this,
- connId,
- snap,
- validateIapId,
- type,
- iChooseIapPref,
- iSession->MyServer(),
- *iSession,
- EExplicitConnection );
- return;
- }
- else
- {
- // Queries disabled, connection must fail
- ChooseIapComplete( KErrPermissionDenied, &iChooseIapPref );
- return;
+ // Check that queries aren't disabled and
+ // enough time has elapsed from the last query cancelled by the user.
+ if ( !( iChooseIapPref.NoteBehaviour() & TExtendedConnPref::ENoteBehaviourConnDisableQueries ) &&
+ !iSession->MyServer().IsConnPermQueryTimerOn() )
+ {
+ TConnectionId connId = iSession->ConnectionId();
+
+ // International roaming
+ iConfirmDlgStarting = CMPMConfirmDlgStarting::NewL(
+ *this,
+ connId,
+ snap,
+ validateIapId,
+ CMPMConfirmDlg::EConfirmDlgVisitorNetwork,
+ iChooseIapPref,
+ iSession->MyServer(),
+ *iSession,
+ EExplicitConnection );
+ return;
+ }
+ else
+ {
+ // Queries disabled, connection must fail
+ ChooseIapComplete( KErrPermissionDenied, &iChooseIapPref );
+ return;
+ }
}
}
@@ -440,6 +462,19 @@
}
// -----------------------------------------------------------------------------
+// CMPMIapSelection::UpdateConnectionDialog
+// -----------------------------------------------------------------------------
+//
+void CMPMIapSelection::UpdateConnectionDialogL()
+ {
+ if( iDialog )
+ {
+ MPMLOGSTRING( "CMPMIapSelection::UpdateConnectionDialogL data will be updated" )
+ iDialog->PublishSortSnapInfoL();
+ }
+ }
+
+// -----------------------------------------------------------------------------
// CMPMIapSelection::CompleteExplicitSnapConnectionL
// -----------------------------------------------------------------------------
//
@@ -463,17 +498,7 @@
// Check if any suitable IAP's were found, if not then complete selection with error code
if ( validateIapId == 0 )
{
- if ( !( iChooseIapPref.NoteBehaviour() & TExtendedConnPref::ENoteBehaviourConnDisableQueries ) &&
- ( iChooseIapPref.ConnType() == TMpmConnPref::EConnTypeDefault ||
- ( iChooseIapPref.ConnType() == TMpmConnPref::EConnTypeExplicit &&
- iCommsDatAccess->IsInternetSnapL( 0, snap ) ) ) )
- {
- ImplicitConnectionL();
- }
- else
- {
- ChooseIapComplete( KErrNotFound, NULL );
- }
+ ChooseIapComplete( KErrNotFound, NULL );
CleanupStack::PopAndDestroy( &availableIAPList );
return;
}
@@ -495,8 +520,8 @@
{
ChooseIapComplete( KErrGprsServicesNotAllowed, NULL );
}
- else if ( !iapTypeLanOrWlan &&
- iSession->MyServer().RoamingWatcher()->RoamingStatus() == EMPMRoamingStatusUnknown )
+ else if ( !iapTypeLanOrWlan && ( iSession->MyServer().IsPhoneOffline() ||
+ iSession->MyServer().RoamingWatcher()->RoamingStatus() == EMPMRoamingStatusUnknown ) )
{
// In case offline mode is enabled, only LAN or WLAN is allowed.
// If some other bearer has been requested, then error code
@@ -515,7 +540,7 @@
// Check that queries aren't disabled and
// enough time has elapsed from the last query cancelled by the user.
if ( !( iChooseIapPref.NoteBehaviour() & TExtendedConnPref::ENoteBehaviourConnDisableQueries ) &&
- !iSession->MyServer().IsConnPermQueryTimerOn() )
+ !iSession->MyServer().IsConnPermQueryTimerOn() )
{
if ( iSession->MyServer().RoamingWatcher()->RoamingStatus() == EMPMInternationalRoaming )
{
@@ -555,14 +580,19 @@
}
else
{
- // Add info into the BM connections
- //
- iSession->MyServer().AppendBMConnection( connId,
+ if ( !StartWlanQueryIfNeededL( validateIapId ) )
+ {
+ // Add info into the BM connections
+ //
+ iSession->MyServer().AppendBMConnection( connId,
snap,
validateIapId,
EStarting,
*iSession );
- ChooseIapComplete( KErrNone, &iChooseIapPref );
+ ChooseIapComplete( KErrNone, &iChooseIapPref );
+
+ }
+
}
}
@@ -601,18 +631,26 @@
}
// -----------------------------------------------------------------------------
-// CMPMIapSelection::IsIapWlanL
+// CMPMIapSelection::StartWlanQueryIfNeededL
// -----------------------------------------------------------------------------
//
-TBool CMPMIapSelection::IsIapWlanL( TUint32 aIapId )
+TBool CMPMIapSelection::StartWlanQueryIfNeededL( TUint32 aIapId, TBool aIsRoaming )
{
- MPMLOGSTRING2( "CMPMIapSelection::StartWlanQueryIfNeededL iap %d, ", aIapId)
+ MPMLOGSTRING3( "CMPMIapSelection::StartWlanQueryIfNeededL iap %d, isRoaming %d ",
+ aIapId,
+ aIsRoaming )
+ TBool wlanQueryNeeded( EFalse );
+ // If wlan iap check if offline note needed
TWlanIapType wlanType = iCommsDatAccess->CheckWlanL( aIapId );
- if( wlanType != EWlanIap )
+ if( wlanType != ENotWlanIap )
{
- return EFalse;
+ iIsRoaming = aIsRoaming;
+ iChooseIapState = EExplicitConnection;
+ iWlanDialog = CMPMWlanQueryDialog::NewL( *this, aIapId );
+ iWlanDialog->StartWlanQueryL();
+ wlanQueryNeeded = ETrue;
}
- return ETrue;
+ return wlanQueryNeeded;
}
// -----------------------------------------------------------------------------
@@ -621,6 +659,8 @@
//
void CMPMIapSelection::ImplicitConnectionCheckWlanScanNeededL()
{
+ __ASSERT_DEBUG( !iDialog, PanicServer( EMPMReceiveAlreadyActive ) );
+
MPMLOGSTRING( "CMPMIapSelection::ImplicitConnectionCheckWlanScanNeededL" )
iCommsDatAccess->CheckWLANIapL( *iSession );
@@ -689,6 +729,33 @@
const TMpmConnPref* aPolicyPref )
{
MPMLOGSTRING2( "CMPMIapSelection::ChooseIapComplete aError = %d", aError )
+
+ if ( ( aError == KErrNone ) &&
+ !( iChooseIapPref.NoteBehaviour() &
+ TExtendedConnPref::ENoteBehaviourConnDisableNotes ) )
+ {
+ TConnectionState state =
+ iSession->MyServer().CheckUsageOfIap( aPolicyPref->IapId(),
+ iSession->ConnectionId() );
+ TBool connectionAlreadyActive = (state == EStarted || state == EStarting || state == ERoaming);
+ if ( !connectionAlreadyActive &&
+ ( iSession->IsMMSIap( aPolicyPref->IapId() ) == EFalse ) )
+ {
+ CConnectionUiUtilities* connUiUtils( NULL );
+ TRAPD( popupError, connUiUtils = CConnectionUiUtilities::NewL() );
+ if ( popupError == KErrNone )
+ {
+ connUiUtils->ConnectingViaDiscreetPopup( aPolicyPref->IapId() );
+ delete connUiUtils;
+ }
+ }
+ }
+
+ if( iWlanDialog )
+ {
+ delete iWlanDialog;
+ iWlanDialog = NULL;
+ }
iSession->ChooseIapComplete( aError, aPolicyPref );
// Set choose iap state to none
@@ -699,6 +766,63 @@
iImplicitState = EImplicitStart;
}
+
+// -----------------------------------------------------------------------------
+// CMPMIapSelection::UserWlanSelectionDoneL
+// -----------------------------------------------------------------------------
+//
+void CMPMIapSelection::UserWlanSelectionDoneL( TInt aError, TUint32 aIapId )
+ {
+ MPMLOGSTRING( "CMPMIapSelection::UserWlanSelectionDoneL" )
+
+ if( iIsRoaming )
+ {
+ iIsRoaming = EFalse;
+ iSession->MigrateCallbackL( aError );
+ delete iWlanDialog;
+ iWlanDialog = NULL;
+ }
+ else
+ {
+ if( aError != KErrNone )
+ {
+ MPMLOGSTRING2( "CMPMIapSelection::UserWlanSelectionDoneL - Error = %d, completing", aError )
+ ChooseIapComplete( aError, NULL );
+ }
+ else
+ {
+ if( iChooseIapState == EImplicitConnection )
+ {
+ iUserSelectionIapId = aIapId;
+ ImplicitConnectionL();
+ }
+ else if( iChooseIapState == EExplicitConnection )
+ {
+ MPMLOGSTRING( "CMPMIapSelection::UserWlanSelectionDoneL completing explicit iap connection" )
+ iChooseIapPref.SetIapId( aIapId );
+ // Add info into the BM connections
+ //
+ iSession->MyServer().AppendBMConnection( iSession->ConnectionId(),
+ iChooseIapPref.SnapId(),
+ aIapId,
+ EStarting,
+ *iSession );
+ iWlanDialog->StoreEasyWlanSelectionL();
+ delete iWlanDialog;
+ iWlanDialog = NULL;
+
+ ChooseIapComplete( KErrNone, &iChooseIapPref );
+ }
+ else
+ {
+ MPMLOGSTRING( "CMPMIapSelection::UserWlanSelectionDoneL - error, no connection state" )
+ }
+
+ }
+
+ }
+ }
+
// -----------------------------------------------------------------------------
// CMPMIapSelection::HandleUserSelectionError
// -----------------------------------------------------------------------------
@@ -709,6 +833,8 @@
aError )
ChooseIapComplete( aError, NULL );
+ delete iDialog;
+ iDialog = NULL;
}
@@ -732,7 +858,7 @@
// User selected SNAP
//
TMpmConnPref userPref;
- iUserSelectionSnapId = aId;
+ iUserSelectionSnapId = iCommsDatAccess->MapNetIdtoSnapAPL( aId );
userPref.SetSnapId( iUserSelectionSnapId );
userPref.SetIapId( 0 );
@@ -757,7 +883,12 @@
}
- // Letting a function leave here would panic the whole MPM.
+ // We are done
+ //
+ delete iDialog;
+ iDialog = NULL;
+
+ // Dialog is deleted. Letting a function leave here would panic the whole MPM.
//
TRAPD( err, ImplicitConnectionL() );
if( err != KErrNone )
@@ -775,10 +906,15 @@
MPMLOGSTRING( "CMPMIapSelection::ImplicitConnectionWlanNoteL" )
TWlanIapType wlanType = iCommsDatAccess->CheckWlanL( iUserSelectionIapId );
-
+ // In case offline mode is enabled, only LAN or WLAN is allowed.
+ // If some other bearer has been requested, then error code
+ // KErrGprsOfflineMode should be returned instead of KErrNone.
+ //
if( wlanType != ENotWlanIap )
{
- ImplicitConnectionL();
+ iChooseIapState = EImplicitConnection;
+ iWlanDialog = CMPMWlanQueryDialog::NewL( *this, iUserSelectionIapId );
+ iWlanDialog->StartWlanQueryL();
return;
}
else
@@ -796,7 +932,7 @@
// Check that queries aren't disabled and
// enough time has elapsed from the last query cancelled by the user.
if ( !( iChooseIapPref.NoteBehaviour() & TExtendedConnPref::ENoteBehaviourConnDisableQueries ) &&
- !iSession->MyServer().IsConnPermQueryTimerOn() )
+ !iSession->MyServer().IsConnPermQueryTimerOn() )
{
TConnectionId connId = iSession->ConnectionId();
@@ -841,8 +977,8 @@
iapTypeLanOrWlan,
*iSession );
- if ( !iapTypeLanOrWlan &&
- iSession->MyServer().RoamingWatcher()->RoamingStatus() == EMPMRoamingStatusUnknown )
+ if ( !iapTypeLanOrWlan && ( iSession->MyServer().IsPhoneOffline() ||
+ iSession->MyServer().RoamingWatcher()->RoamingStatus() == EMPMRoamingStatusUnknown ) )
{
MPMLOGSTRING2( "CMPMIapSelection::CompleteImplicitConnectionL: Completing with code = %i",
KErrGprsOfflineMode )
@@ -864,6 +1000,14 @@
iChooseIapPref.SetIapId( iUserSelectionIapId );
iChooseIapPref.SetNetId( retNetId );
+
+ if( iWlanDialog )
+ {
+ iWlanDialog->StoreEasyWlanSelectionL();
+ delete iWlanDialog;
+ iWlanDialog = NULL;
+ }
+
ChooseIapComplete( KErrNone, &iChooseIapPref );
}
@@ -878,14 +1022,13 @@
MPMLOGSTRING( "CMPMIapSelection::ImplicitConnectionIapSelectionL" )
iSession->AvailableUnblacklistedIapsL( iStoredAvailableIaps, iSession->ConnectionId() );
- // The connection selection dialog doesn't exist any longer, thus
- // the HandleUserSelection is called with the Internet SNAP that is returned instead
- TInt err = KErrNone;
- TInt internetSnapId = 0;
- // if the reading leaves, then the internet snap did not exist for some reason
- TRAP ( err, internetSnapId =
- iCommsDatAccess->DestinationIdL( CMManager::ESnapPurposeInternet ));
- HandleUserSelectionL( false, internetSnapId, err );
+ // Create and initiate user dialog
+ //
+ iDialog = CMPMDialog::NewL( *this,
+ iStoredAvailableIaps,
+ iChooseIapPref.BearerSet(),
+ *iSession->MyServer().ConnectDialogQueue(),
+ iSession->MyServer() );
}
// -----------------------------------------------------------------------------