phoneuis/dialer/src/cdialer.cpp
branchRCL_3
changeset 17 38529f706030
parent 14 24062c24fe38
child 19 544e34b3255a
--- a/phoneuis/dialer/src/cdialer.cpp	Mon Mar 15 12:40:24 2010 +0200
+++ b/phoneuis/dialer/src/cdialer.cpp	Wed Mar 31 21:30:06 2010 +0300
@@ -31,6 +31,7 @@
 #include <data_caging_path_literals.hrh>    // for KDC_APP_RESOURCE_DIR
 #include <bautils.h>                        // for BaflUtils
 #include <aknedsts.h>
+#include <spsettings.h>
 #include <dialingextensioninterface.h>
 #include <easydialingcommands.hrh>
 #include <dialer.rsg>
@@ -212,6 +213,48 @@
         }
     }
 
+// ---------------------------------------------------------------------------
+// CDialer::UpdateNumberEntryConfiguration
+// ---------------------------------------------------------------------------
+//
+void CDialer::UpdateNumberEntryConfiguration()
+    {
+    TEditorType editorType = ENumericEditor;
+    if ( iQwertyMode && iController->EasyDialingAllowed() )
+        {
+        TBool voipSupported( EFalse );
+        CSPSettings* serviceProviderSettings = NULL;
+        TRAPD( err, serviceProviderSettings = CSPSettings::NewL() );
+        if ( !err )
+            {
+            voipSupported = serviceProviderSettings->IsFeatureSupported( 
+                ESupportInternetCallFeature );            
+            delete serviceProviderSettings;
+            }
+
+        if ( EasyDialingEnabled() || voipSupported )
+            {
+            editorType = EAlphanumericEditor;
+            }
+        }
+    
+    UpdateEdwinState( editorType );
+    }
+
+// ---------------------------------------------------------------------------
+// CDialer::RelayoutAndDraw
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CDialer::RelayoutAndDraw()
+	{
+	if ( iIsUsed )
+		{
+		SetSize( Size() );
+		DrawDeferred();
+		UpdateToolbar();
+		}
+	}
+
 // Methods from MNumberEntry
 
 // ---------------------------------------------------------------------------
@@ -226,6 +269,8 @@
     
     iIsUsed = ETrue;    
 
+    UpdateNumberEntryConfiguration();
+    
     DIALER_PRINT("CDialer::CreateNumberEntry>");        
     }
     
@@ -319,7 +364,7 @@
 void CDialer::OpenVkbL()
     {
     iVirtualKeyBoardOpen = ETrue;
-    UpdateVkbEditorFlagsL();
+    UpdateEdwinState( EVirtualKeyboardEditor );
     
     iNumberEntry->HandleCommandL( EDialerCmdTouchInput );
     }
@@ -331,7 +376,8 @@
 //
 TInt CDialer::GetEditorMode() const
     {
-    return iVirtualKeyBoardOpen ? EAknEditorTextInputMode : 
+    TBool vkbOpen = EdwinState()->Flags() & EAknEditorFlagTouchInputModeOpened;
+    return ( iQwertyMode || vkbOpen ) ? EAknEditorTextInputMode : 
                                   EAknEditorNumericInputMode;
     }
     
@@ -365,6 +411,24 @@
     iKeypadArea->EnableTactileFeedback( aEnable );
     }
 
+// ---------------------------------------------------------
+// CDialer::HandleQwertyModeChange
+// ---------------------------------------------------------
+//
+EXPORT_C void CDialer::HandleQwertyModeChange( TInt aMode )
+    {
+    iQwertyMode = aMode;
+    UpdateNumberEntryConfiguration();
+    }
+
+// ---------------------------------------------------------
+// CDialer::HandleKeyboardLayoutChange
+// ---------------------------------------------------------
+// 
+EXPORT_C void CDialer::HandleKeyboardLayoutChange()
+    {
+    }
+
 // ---------------------------------------------------------------------------
 // CDialer::HandleControlEventL
 // ---------------------------------------------------------------------------
@@ -547,9 +611,7 @@
         // Clear editor flags and report
         // edwin state changed.
         iVirtualKeyBoardOpen = EFalse;
-        iNumberEntry->ClearEditorFlags();
-        EdwinState()->ReportAknEdStateEventL(
-                MAknEdStateObserver::EAknEdwinStateEventStateUpdate );
+        UpdateNumberEntryConfiguration();
         }
     }
 
@@ -653,7 +715,7 @@
 //  
 // ---------------------------------------------------------------------------
 //
-CAknEdwinState* CDialer::EdwinState()
+CAknEdwinState* CDialer::EdwinState() const
     {
     MCoeFepAwareTextEditor_Extension1* extension = 
         static_cast<MCoeFepAwareTextEditor_Extension1*>
@@ -663,31 +725,71 @@
     } 
 
 // ---------------------------------------------------------------------------
-// CDialer::UpdateVkbEditorFlagsL
+// CDialer::UpdateEdwinState
 //  
 // ---------------------------------------------------------------------------
 //
-void CDialer::UpdateVkbEditorFlagsL()
+void CDialer::UpdateEdwinState( TEditorType aType )
     {
     CAknEdwinState* edwinState = EdwinState();
-    // Set flags, input mode, SCT, permitted modes,
-    // keymapping and menu for alphanumeric virtual
-    // keyboard.
-    edwinState->SetCurrentInputMode( EAknEditorTextInputMode );
-    edwinState->SetSpecialCharacterTableResourceId( 
-        R_AVKON_URL_SPECIAL_CHARACTER_TABLE_DIALOG );    
-    edwinState->SetFlags( EAknEditorFlagNoT9 |
-                          EAknEditorFlagLatinInputModesOnly | 
-                          EAknEditorFlagNoEditIndicators );            
-    edwinState->SetPermittedInputModes( 
-                          EAknEditorNumericInputMode |
-                          EAknEditorTextInputMode );    
-    edwinState->SetNumericKeymap( EAknEditorAlphanumericNumberModeKeymap );    
-    edwinState->SetMenu();
     
-    // Report state updated
-    edwinState->ReportAknEdStateEventL(
-                    MAknEdStateObserver::EAknEdwinStateEventStateUpdate );
+    switch ( aType )
+        {
+        case ENumericEditor:
+            {
+            iNumberEntry->ClearEditorFlags();
+            }
+            break;
+        
+        case EAlphanumericEditor:
+        case EVirtualKeyboardEditor:
+            // intended fall-through
+            {
+            TBool vkbOpen = edwinState->Flags() & EAknEditorFlagTouchInputModeOpened;
+            TInt flags = EAknEditorFlagNoT9 | 
+                         EAknEditorFlagLatinInputModesOnly |
+                         EAknEditorFlagSelectionVisible;
+            edwinState->SetDefaultInputMode( EAknEditorTextInputMode );
+            edwinState->SetCurrentInputMode( EAknEditorTextInputMode );
+            
+            if ( EVirtualKeyboardEditor == aType || vkbOpen )
+                {
+                // Indicators would be shown after closing VKB unless disabled
+                // here.
+                flags = ( flags |= EAknEditorFlagNoEditIndicators );
+                }
+            else
+                {
+                iVirtualKeyBoardOpen = EFalse;
+                }
+            
+            edwinState->SetFlags( flags );
+            edwinState->SetPermittedInputModes( 
+                EAknEditorNumericInputMode | EAknEditorTextInputMode );
+            edwinState->SetPermittedCases( 
+                EAknEditorUpperCase | EAknEditorLowerCase );
+            edwinState->SetDefaultCase( EAknEditorLowerCase );
+            edwinState->SetCurrentCase( EAknEditorLowerCase );
+            edwinState->SetSpecialCharacterTableResourceId( 
+                R_AVKON_URL_SPECIAL_CHARACTER_TABLE_DIALOG );
+            edwinState->SetNumericKeymap( 
+                EAknEditorAlphanumericNumberModeKeymap );
+            edwinState->SetMenu();
+            }
+            break;
+        
+        default:
+            DIALER_PRINT( "CDialer::ConfigureEditorSettings, DEFAULT" )
+            ASSERT( EFalse );
+        }
+    
+    TRAPD( result, edwinState->ReportAknEdStateEventL(
+        MAknEdStateObserver::EAknEdwinStateEventStateUpdate ) );
+    
+    if ( KErrNone != result )
+        {
+        DIALER_PRINTF( "CDialer::ConfigureEditorSettings, RESULT: %d", result )
+        }
     }
 
 // ---------------------------------------------------------------------------