* #30591: dtmf working in dial screen
diff --git a/src/com/savoirfairelinux/sflphone/client/CallActivity.java b/src/com/savoirfairelinux/sflphone/client/CallActivity.java
index d085ced..79717b0 100644
--- a/src/com/savoirfairelinux/sflphone/client/CallActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/CallActivity.java
@@ -185,6 +185,10 @@
         
     @Override
     public boolean onKeyUp(int keyCode, KeyEvent event) {
+        
+        if (keyCode == KeyEvent.KEYCODE_BACK){
+            return super.onKeyUp(keyCode, event);
+        }
         mCurrentCallFragment.onKeyUp(keyCode, event);
         return true;
     }
diff --git a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java
index ea54c74..74b063d 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java
@@ -56,7 +56,6 @@
 import android.support.v4.widget.DrawerLayout;
 import android.util.Log;
 import android.util.TypedValue;
-import android.view.KeyEvent;
 import android.view.MenuItem;
 import android.view.View;
 import android.widget.RelativeLayout;
diff --git a/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java b/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java
index f0091c3..b8d031b 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java
@@ -32,6 +32,7 @@
 package com.savoirfairelinux.sflphone.fragments;
 
 import java.util.ArrayList;
+import java.util.Locale;
 
 import android.app.Activity;
 import android.app.Fragment;
@@ -47,8 +48,6 @@
 import android.hardware.SensorManager;
 import android.os.Bundle;
 import android.os.RemoteException;
-import android.text.Editable;
-import android.text.method.KeyListener;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
@@ -56,7 +55,6 @@
 import android.view.SurfaceHolder.Callback;
 import android.view.View;
 import android.view.View.OnClickListener;
-import android.view.View.OnKeyListener;
 import android.view.ViewGroup;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.ImageButton;
@@ -536,8 +534,9 @@
 
     public void onKeyUp(int keyCode, KeyEvent event) {
         try {
-            Log.d(TAG, "Sending "+event.getDisplayLabel());
             String toSend = "" + event.getDisplayLabel();
+            Log.d(TAG,"toSend "+toSend);
+            toSend.toUpperCase(Locale.getDefault());
             mCallbacks.getService().playDtmf(toSend);
         } catch (RemoteException e) {
             e.printStackTrace();
diff --git a/src/com/savoirfairelinux/sflphone/fragments/DialingFragment.java b/src/com/savoirfairelinux/sflphone/fragments/DialingFragment.java
index 94d9270..2db5258 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/DialingFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/DialingFragment.java
@@ -31,11 +31,15 @@
 
 package com.savoirfairelinux.sflphone.fragments;
 
+import java.util.Locale;
+
 import android.app.Activity;
 import android.app.Fragment;
 import android.content.Context;
 import android.os.Bundle;
 import android.os.RemoteException;
+import android.text.Editable;
+import android.text.TextWatcher;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
@@ -155,27 +159,38 @@
     @Override
     public void onResume() {
         super.onResume();
-        textField.setOnKeyListener(dtmfKeyListener);
+        textField.setTextWatcher(dtmfKeyListener);
     }
 
     @Override
     public void onPause() {
         super.onPause();
-        textField.setOnKeyListener(null);
+        textField.unsetTextWatcher();
     }
 
-    OnKeyListener dtmfKeyListener = new OnKeyListener() {
+    TextWatcher dtmfKeyListener = new TextWatcher() {
 
         @Override
-        public boolean onKey(View v, int keyCode, KeyEvent event) {
-            if (event.getAction() == KeyEvent.ACTION_UP) {
-                try {
-                    mCallbacks.getService().playDtmf(KeyEvent.keyCodeToString(keyCode));
-                } catch (RemoteException e) {
-                    e.printStackTrace();
-                }
+        public void afterTextChanged(Editable s) {
+        }
+
+        @Override
+        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+        }
+
+        @Override
+        public void onTextChanged(CharSequence s, int start, int before, int count) {
+            if (count - before > 1 || count == 0)
+                return; // pasted a number (not implemented yet)
+
+            try {
+                String toSend = Character.toString(s.charAt(start));
+                Log.d(TAG, "onTextChanged toSend" + toSend);
+                toSend.toUpperCase(Locale.getDefault());
+                mCallbacks.getService().playDtmf(toSend);
+            } catch (RemoteException e) {
+                e.printStackTrace();
             }
-            return false;
         }
     };
 
diff --git a/src/com/savoirfairelinux/sflphone/views/ClearableEditText.java b/src/com/savoirfairelinux/sflphone/views/ClearableEditText.java
index 6d4f84a..bf10a05 100644
--- a/src/com/savoirfairelinux/sflphone/views/ClearableEditText.java
+++ b/src/com/savoirfairelinux/sflphone/views/ClearableEditText.java
@@ -17,6 +17,7 @@
     LayoutInflater inflater = null;
     EditText edit_text;
     Button btn_clear;
+    private TextWatcher watch = null;
 
     public ClearableEditText(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
@@ -103,8 +104,12 @@
         edit_text.requestFocus();
     }
     
-    @Override
-    public void setOnKeyListener(OnKeyListener l){
-        edit_text.setOnKeyListener(l);
+    public void setTextWatcher(TextWatcher l){
+        watch = l;
+        edit_text.addTextChangedListener(watch);
+    }
+    
+    public void unsetTextWatcher(){
+        edit_text.removeTextChangedListener(watch);
     }
 }