Screen Add FDN: Disable Save button if fields Name or Number are empty

Disable the Save-button in the screen "Add fixed dialing number" if the
fields Name or Number fields are empty.

Bug: 70374738
Test: manual - checked that the save button is enabled and disabled
correctly.
Change-Id: Id99e8a42529e617e75298a07f16bd9666a19ad3b
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 87bb081..67c5747 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -921,7 +921,7 @@
     <!-- FDN settings: error message displayed in a popup (toast) -->
     <string name="pin2_invalid">FDN wasn\'t updated because you typed an incorrect PIN.</string>
     <!-- FDN settings: error message displayed in a popup (toast) -->
-    <string name="fdn_invalid_number">FDN wasn\'t updated because the number is empty or exceeds 20 digits.</string>
+    <string name="fdn_invalid_number">FDN wasn\'t updated because the number exceeds 20 digits.</string>
     <!-- FDN settings: error message displayed in a popup (toast), when the entered
          FDN number was inappropriate, OR, PIN2 the user entered was incorrect.
          Because of API restriction, there's no way to determine which is the exact
diff --git a/src/com/android/phone/settings/fdn/EditFdnContactScreen.java b/src/com/android/phone/settings/fdn/EditFdnContactScreen.java
index b8a761c..921e947 100644
--- a/src/com/android/phone/settings/fdn/EditFdnContactScreen.java
+++ b/src/com/android/phone/settings/fdn/EditFdnContactScreen.java
@@ -33,9 +33,11 @@
 import android.provider.Contacts.PhonesColumns;
 import android.provider.ContactsContract.CommonDataKinds;
 import android.telephony.PhoneNumberUtils;
+import android.text.Editable;
 import android.text.Selection;
 import android.text.Spannable;
 import android.text.TextUtils;
+import android.text.TextWatcher;
 import android.text.method.DialerKeyListener;
 import android.util.Log;
 import android.view.Menu;
@@ -239,6 +241,7 @@
         if (mNameField != null) {
             mNameField.setOnFocusChangeListener(mOnFocusChangeHandler);
             mNameField.setOnClickListener(mClicked);
+            mNameField.addTextChangedListener(mTextWatcher);
         }
 
         mNumberField = (EditText) findViewById(R.id.fdn_number);
@@ -247,6 +250,7 @@
             mNumberField.setKeyListener(DialerKeyListener.getInstance());
             mNumberField.setOnFocusChangeListener(mOnFocusChangeHandler);
             mNumberField.setOnClickListener(mClicked);
+            mNumberField.addTextChangedListener(mTextWatcher);
         }
 
         if (!mAddContact) {
@@ -261,6 +265,7 @@
         mButton = (Button) findViewById(R.id.button);
         if (mButton != null) {
             mButton.setOnClickListener(mClicked);
+            setButtonEnabled();
         }
 
         mPinFieldContainer = (LinearLayout) findViewById(R.id.pinc);
@@ -276,6 +281,15 @@
     }
 
     /**
+     * Enable Save button if text has been added to both name and number
+     */
+    private void setButtonEnabled() {
+        if (mButton != null && mNameField != null && mNumberField != null) {
+            mButton.setEnabled(mNameField.length() > 0 && mNumberField.length() > 0);
+        }
+    }
+
+    /**
       * @param number is voice mail number
       * @return true if number length is less than 20-digit limit
       *
@@ -446,6 +460,19 @@
         }
     };
 
+    private final TextWatcher mTextWatcher = new TextWatcher() {
+        @Override
+        public void afterTextChanged(Editable arg0) {}
+
+        @Override
+        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {}
+
+        @Override
+        public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
+            setButtonEnabled();
+        }
+    };
+
     private class QueryHandler extends AsyncQueryHandler {
         public QueryHandler(ContentResolver cr) {
             super(cr);