connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifSrc/connectionerrordiscreetpopup.cpp
branchRCL_3
changeset 58 83ca720e2b9a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifSrc/connectionerrordiscreetpopup.cpp	Wed Sep 01 12:23:51 2010 +0100
@@ -0,0 +1,432 @@
+/*
+ * Copyright (c) 2009 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:  Implementation of CConnectionErrorDiscreetPopup.
+ *
+ */
+
+// INCLUDE FILES
+#include "connectionerrordiscreetpopup.h"
+#include <akndiscreetpopup.h>
+#include <aknsconstants.hrh>
+#include <StringLoader.h>
+#include <cmmanagerext.h>
+#include <cmconnectionmethod.h>
+#include <cmconnectionmethodext.h>
+#include <cmpluginwlandef.h>
+#include <avkon.hrh>
+#include <connectionuiutilities.mbg>
+#include <ConnUiUtilsNotif.rsg>
+
+#ifdef _DEBUG
+#include <e32debug.h>
+#endif
+
+// Error code definitions are from these headers
+#include <wlanerrorcodes.h> // WLAN-specific error code definitions
+#include <in_iface.h>
+#include <etelpckt.h>       // GPRS-specific causes for Session Management
+#include <nd_err.h>         // NetDial errors
+#include <inet6err.h>       // IPv6 error constants
+#include <rmmcustomapi.h>
+
+// Errors in UI spec not found elsewhere
+const TInt KErrPDPMaxContextsReached = -6000;
+const TInt KErrDndNameNotFound = -5120;
+const TInt KErrGeneralConnection = -50000;
+const TInt KErrGenConnNoGPRSNetwork = -3609;
+
+// No discreet popup => Uid 0
+const TUid KDiscreetPopupUidNone =
+    {
+    0x0
+    };
+// Path of the app's iconfile
+_LIT( KIconFileName, "\\resource\\apps\\connectionuiutilities.mif" );
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CConnectionErrorDiscreetPopup::CConnectionErrorDiscreetPopup
+// ---------------------------------------------------------
+//
+CConnectionErrorDiscreetPopup::CConnectionErrorDiscreetPopup(
+        CConnectionErrorDiscreetPopupNotif* aNotif) :
+    CActive(EPriorityUserInput), // Standard priority
+            iNotif(aNotif), iErrorCode(KErrNone)
+    {
+    }
+
+// ---------------------------------------------------------
+// CConnectionErrorDiscreetPopup::NewLC
+// ---------------------------------------------------------
+//
+CConnectionErrorDiscreetPopup* CConnectionErrorDiscreetPopup::NewLC(
+        CConnectionErrorDiscreetPopupNotif* aNotif)
+    {
+    CConnectionErrorDiscreetPopup* self =
+            new (ELeave) CConnectionErrorDiscreetPopup(aNotif);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CConnectionErrorDiscreetPopup::NewL
+// ---------------------------------------------------------
+//
+CConnectionErrorDiscreetPopup* CConnectionErrorDiscreetPopup::NewL(
+        CConnectionErrorDiscreetPopupNotif* aNotif)
+    {
+    CConnectionErrorDiscreetPopup* self =
+            CConnectionErrorDiscreetPopup::NewLC(aNotif);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CConnectionErrorDiscreetPopup::ConstructL
+// ---------------------------------------------------------
+//
+void CConnectionErrorDiscreetPopup::ConstructL()
+    {
+    CActiveScheduler::Add(this); // Add to scheduler
+    icmManager.OpenL();
+    }
+
+// ---------------------------------------------------------
+// CConnectionErrorDiscreetPopup::~CConnectionErrorDiscreetPopup
+// ---------------------------------------------------------
+//
+CConnectionErrorDiscreetPopup::~CConnectionErrorDiscreetPopup()
+    {
+    Cancel(); // Cancel any request, if outstanding
+    icmManager.Close();
+    // Delete instance variables if any
+    }
+
+// ---------------------------------------------------------
+// CConnectionErrorDiscreetPopup::DoCancel
+// ---------------------------------------------------------
+//
+void CConnectionErrorDiscreetPopup::DoCancel()
+    {
+    }
+
+// ---------------------------------------------------------
+// CConnectionErrorDiscreetPopup::StartL
+// ---------------------------------------------------------
+//
+void CConnectionErrorDiscreetPopup::StartL(TUint32 aErrCode)
+    {
+    Cancel(); // Cancel any request, just to be sure
+
+    iErrorCode = aErrCode;
+
+    SetActive(); // Tell scheduler a request is active
+    iClientStatus = &iStatus;
+    User::RequestComplete(iClientStatus, KErrNone);
+
+    // Complete the note so client can continue its tasks
+    // immediately
+    iNotif->SetCancelledFlag(ETrue);
+    iNotif->CompleteL(KErrNone);
+    }
+
+// ---------------------------------------------------------
+// CConnectionErrorDiscreetPopup::RunL
+// ---------------------------------------------------------
+//
+void CConnectionErrorDiscreetPopup::RunL()
+    {
+    if (iStatus == KErrNone)
+        {
+        TInt text1 = 0;
+        TInt text2 = 0;
+        TInt bitmapId = 0;
+        TInt maskId = 0;
+        // Show only if error code can be resolved
+        if (ResolveErrorCode(text1, text2, bitmapId, maskId))
+            {
+            // Load strings from resources
+            HBufC* stringText1 = StringLoader::LoadLC(text1);
+            HBufC* stringText2 = StringLoader::LoadLC(text2);
+            CAknDiscreetPopup::ShowGlobalPopupL(*stringText1, // 1st text row
+                    *stringText2, // second text row
+                    KAknsIIDDefault, // icon skin id
+                    KIconFileName, // bitmap file path
+                    bitmapId, // bitmap id
+                    maskId, // mask id
+                    KAknDiscreetPopupDurationLong, // flags
+                    0, // command id
+                    NULL, // command observer
+                    KDiscreetPopupUidNone, // application to be launched
+                    KDiscreetPopupUidNone); // view to be activated
+
+            CleanupStack::PopAndDestroy(2, stringText1);
+            }
+        }
+
+    // Cleanup
+    iNotif->Cancel();
+    }
+
+// ---------------------------------------------------------
+// CConnectionErrorDiscreetPopup::RunError
+// ---------------------------------------------------------
+//
+TInt CConnectionErrorDiscreetPopup::RunError(TInt aError)
+    {
+    return aError;
+    }
+
+// ---------------------------------------------------------
+// CConnectionErrorDiscreetPopup::ResolveErrorCode
+// ---------------------------------------------------------
+//
+TInt CConnectionErrorDiscreetPopup::ResolveErrorCode(TInt& aText1,
+        TInt& aText2, TInt& aBitmap, TInt& aMask)
+    {
+    
+#ifdef _DEBUG
+    RDebug::Print( _L("CConnectionErrorDiscreetPopup::ResolveErrorCode - code %d"),
+            iErrorCode );
+#endif
+    
+    // Icons, which are resolved at the end
+    enum TIconType
+        {
+        EIconWlan, EIconCellular, EIconNone
+        };
+
+    // For most cases, icon is WLAN
+    TIconType icon = EIconWlan;
+
+    // For most cases, aText1 = "Connection failed"
+    aText1 = R_QTN_OCC_CONNECTION_FAILED_DISCREET_POPUP_TEXT1;
+
+    // Resolve aText1, aText2 and icon of error code.
+    // Groups are from OCC GUI spec 1.0
+    switch (iErrorCode)
+        {
+        
+        // Group 1
+        case KErrIfChangingPassword:
+            icon = EIconCellular;
+            // These were GPRS; fall through
+        case KErrWlanInternalError:
+            aText2 = R_QTN_OCC_INTERNAL_ERROR_DISCREET_POPUP_TEXT2;
+            break;
+
+        // Group 2
+        case KErrWlanNetworkNotFound:
+            aText2 = R_QTN_OCC_WLAN_NOT_FOUND_DISCREET_POPUP_TEXT2;
+            break;
+
+        // Group 3
+        case KErrGprsUserAuthenticationFailure:
+            icon = EIconCellular;
+        // These were GPRS; fall through
+        case KErrWlanOpenAuthFailed:
+        case KErrWlanSharedKeyAuthRequired:
+        case KErrWlanWpaAuthRequired:
+        case KErrWlanWpaAuthFailed:
+        case KErrWlan802dot1xAuthFailed:
+        case KErrWlanWpaCounterMeasuresActive:
+        case KErrWlanPskModeRequired:
+        case KErrWlanEapModeRequired:
+        case KErrWlanEapSimFailed:
+        case KErrWlanEapTlsFailed:
+        case KErrWlanEapPeapFailed:
+        case KErrWlanEapMsChapv2: // Is the same as KErrWlanEapMsChaPFailed
+        case KErrWlanEapAkaFailed:
+        case KErrWlanEapTtlsFailed:
+        case KErrWlanLeapFailed:
+        case KErrWlanEapGtcFailed:
+        case KErrWlanWpa2OnlyModeNotSupported:
+        case KErrWlanEapFastTunnelCompromiseError:
+        case KErrWlanEapFastUnexpextedTlvExhanged:
+        case KErrWlanEapFastNoPacNorCertsToAuthenticateWithProvDisabled:
+        case KErrWlanEapFastNoMatchingPacForAid:
+        case KErrWlanEapFastAuthFailed:
+        case KErrWlanEapFastPacStoreCorrupted:
+            aText2 = R_QTN_OCC_AUTH_ERROR_DISCREET_POPUP_TEXT2;
+            break;
+
+        // Group 4
+        case KErrWlanSharedKeyAuthFailed:
+        case KErrWlanIllegalWpaPskKey:
+        case KErrWlanIllegalEncryptionKeys:
+            aText2 = R_QTN_OCC_CHECK_KEY_DISCREET_POPUP_TEXT2;
+            break;
+
+        // Group 5
+        case KErrExitModemError:
+        case KErrExitLoginFail:
+        case KErrExitScriptTimeOut:
+        case KErrExitScriptError:
+        case KErrIfAuthenticationFailure:
+        case KErrIfAuthNotSecure:
+        case KErrIfAccountDisabled:
+        case KErrIfRestrictedLogonHours:
+        case KErrIfPasswdExpired:
+        case KErrIfNoDialInPermission:
+        case KErrGprsMissingorUnknownAPN:
+            icon = EIconCellular;
+            aText2 = R_QTN_OCC_CHECK_SETTINGS_DISCREET_POPUP_TEXT2;
+            break;
+
+        // Group 6
+        case KErrWlanSimNotInstalled:
+            aText2 = R_QTN_OCC_SIM_ERROR_DISCREET_POPUP_TEXT2;
+            break;
+
+        // Group 7
+        case KErrWlanNotSubscribed:
+        case KErrWlanAccessBarred:
+            aText2 = R_QTN_OCC_SERVICE_ERROR_DISCREET_POPUP_TEXT2;
+            break;
+
+        // Group 8
+        case KErrPermissionDenied:
+            icon = EIconNone;  // Permission denied may come with any bearer.
+        // Fall through
+        case KErrWlanPasswordExpired:
+        case KErrWlanNoDialinPermissions:
+        case KErrWlanAccountDisabled:
+        case KErrWlanRestrictedLogonHours:
+        case KErrWlanServerCertificateExpired:
+        case KErrWlanCerficateVerifyFailed:
+        case KErrWlanNoUserCertificate:
+        case KErrWlanNoCipherSuite:
+        case KErrWlanUserRejected:
+        case KErrWlanUserCertificateExpired:
+            aText2 = R_QTN_OCC_ACCESS_ERROR_DISCREET_POPUP_TEXT2;
+            break;
+
+        // Group 9
+        case KErrPDPMaxContextsReached:
+            icon = EIconCellular;
+            // These were GPRS; fall through
+        case KErrWlanConnAlreadyActive:
+            aText2 = R_QTN_OCC_ALREADY_ACT_DISCREET_POPUP_TEXT2;
+            break;
+
+        // Group 10
+        case KErrWlanSignalTooWeak:
+            aText2 = R_QTN_OCC_WLAN_WEAK_DISCREET_POPUP_TEXT2;
+            break;
+
+        // Group 11
+        case KErrIfCallbackNotAcceptable:
+        case KErrIfDNSNotFound:
+        case KErrIfLRDBadLine:
+        case KErrNetUnreach:
+        case KErrHostUnreach:
+        case KErrNoProtocolOpt:
+        case KErrUrgentData:
+        case KErrInet6NoRoute:
+        case KErrDndNameNotFound:
+        case KErrGeneralConnection:
+        case KErrGprsMSCTemporarilyNotReachable:
+        case KErrGprsLlcOrSndcpFailure:
+        case KErrGprsInsufficientResources:
+        case KErrGprsActivationRejectedByGGSN:
+        case KErrPacketDataTsyInvalidAPN:
+            icon = EIconCellular;
+            // These were GPRS; fall through
+        case KErrWlanRoamingFailed:
+            aText2 = R_QTN_OCC_TRY_AGAIN_DISCREET_POPUP_TEXT2;
+            break;
+
+        // Group 12
+        case KErrGenConnNoGPRSNetwork:
+        case KErrGprsServicesNotAllowed:
+        case KErrGprsAndNonGprsServicesNotAllowed:
+        case KErrGprsMSIdentityCannotBeDerivedByTheNetwork:
+        case KErrGprsMSImplicitlyDetached:
+        case KErrGsmMMNetworkFailure:
+        case KErrGprsUnknownPDPAddress:
+        case KErrGprsActivationRejected:
+        case KErrGsmMMServiceOptionNotSubscribed:
+        case KErrGsmMMServiceOptionTemporaryOutOfOrder:
+        case KErrGprsNSAPIAlreadyUsed:
+        case KErrGprsQoSNotAccepted:
+        case KErrGprsReactivationRequested:
+            icon = EIconCellular;
+            aText2 = R_QTN_OCC_CONN_UNAVAILABLE_DISCREET_POPUP_TEXT2;
+            break;
+
+        // Group 13
+        case KErrWlanProtectedSetupDevicePasswordAuthFailure:
+        case KErrWlanProtectedSetupPINMethodNotSupported:
+        case KErrWlanProtectedSetupPBMethodNotSupported:
+            aText1 = R_QTN_OCC_CONFIG_FAILED_DISCREET_POPUP_TEXT1;
+            aText2 = R_QTN_OCC_AUTH_ERROR_DISCREET_POPUP_TEXT2;
+            break;
+
+        // Group 14
+        case KErrWlanProtectedSetupOOBInterfaceReadError:
+        case KErrWlanProtectedSetupDecryptionCRCFailure:
+        case KErrWlanProtectedSetup2_4ChannelNotSupported:
+        case KErrWlanProtectedSetup5_0ChannelNotSupported:
+        case KErrWlanProtectedSetupNetworkAuthFailure:
+        case KErrWlanProtectedSetupNoDHCPResponse:
+        case KErrWlanProtectedSetupFailedDHCPConfig:
+        case KErrWlanProtectedSetupIPAddressConflict:
+        case KErrWlanProtectedSetupCouldNotConnectToRegistrar:
+        case KErrWlanProtectedSetupMultiplePBCSessionsDetected:
+        case KErrWlanProtectedSetupRogueActivitySuspected:
+        case KErrWlanProtectedSetupDeviceBusy:
+        case KErrWlanProtectedSetupSetupLocked:
+        case KErrWlanProtectedSetupMessageTimeout:
+        case KErrWlanProtectedSetupRegistrationSessionTimeout:
+            aText1 = R_QTN_OCC_CONFIG_FAILED_DISCREET_POPUP_TEXT1;
+            aText2 = R_QTN_OCC_TRY_AGAIN_DISCREET_POPUP_TEXT2;
+            break;
+
+        // Skipped errors, for which popup is not shown.
+        case KErrNone:
+        case KErrConnectionTerminated:
+        case KErrDisconnected:
+        case KErrCancel:
+            return EFalse;
+
+        // For error values not specifically mapped to any error message
+        // the discreet pop-up #12 is used.
+        default:
+            aText2 = R_QTN_OCC_CONN_UNAVAILABLE_DISCREET_POPUP_TEXT2;
+            icon = EIconNone;
+            break;
+        }
+
+    // Resolve icon to aBitmap & aMask
+    switch (icon)
+        {
+        case EIconWlan:
+            aBitmap = EMbmConnectionuiutilitiesQgn_prop_wlan_bearer;
+            aMask = EMbmConnectionuiutilitiesQgn_prop_wlan_bearer_mask;
+            break;
+        case EIconCellular:
+            aBitmap = EMbmConnectionuiutilitiesQgn_prop_wml_gprs;
+            aMask = EMbmConnectionuiutilitiesQgn_prop_wml_gprs_mask;
+            break;
+        default:
+            ASSERT(icon == EIconNone);
+            aBitmap = -1;
+            aMask = -1;
+            break;
+        }
+
+    return ETrue;
+    }