Add Call Settings menu in dialpad fragment.

Also fix some issues around the other menus, which are
shown even when a user doesn't enter digits.

Bug: 4971637
Change-Id: I6bfc26cc19d0cc397f7a8e585e87330336ae4407
diff --git a/res/values/strings.xml b/res/values/strings.xml
index c9b2787..8e21762 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -967,6 +967,9 @@
     <!-- Title for the call disambiguation dialog -->
     <string name="call_disambig_title">Call using</string>
 
+    <!-- Menu item label for call settings [CHAR LIMIT=30] -->
+    <string name="call_settings">Call settings</string>
+
     <!-- Title for the sms disambiguation dialog -->
     <string name="sms_disambig_title">Text using</string>
 
diff --git a/src/com/android/contacts/dialpad/DialpadFragment.java b/src/com/android/contacts/dialpad/DialpadFragment.java
index 778fe42..7be16f5 100644
--- a/src/com/android/contacts/dialpad/DialpadFragment.java
+++ b/src/com/android/contacts/dialpad/DialpadFragment.java
@@ -20,7 +20,6 @@
 import com.android.contacts.R;
 import com.android.contacts.SpecialCharSequenceMgr;
 import com.android.contacts.activities.DialtactsActivity;
-import com.android.contacts.list.StrequentContactListFragment.Listener;
 import com.android.internal.telephony.ITelephony;
 import com.android.phone.CallLogAsync;
 import com.android.phone.HapticFeedback;
@@ -111,9 +110,11 @@
     //Member variables for dialpad options
     private MenuItem m2SecPauseMenuItem;
     private MenuItem mWaitMenuItem;
+    private MenuItem mCallSettingsItem;
     private static final int MENU_ADD_CONTACTS = 1;
     private static final int MENU_2S_PAUSE = 2;
     private static final int MENU_WAIT = 3;
+    private static final int MENU_CALL_SETTINGS = 4;
 
     private boolean mHasVoicemail = false;
 
@@ -529,18 +530,27 @@
                 .setIcon(R.drawable.ic_menu_2sec_pause);
         mWaitMenuItem = menu.add(0, MENU_WAIT, 0, R.string.add_wait)
                 .setIcon(R.drawable.ic_menu_wait);
+        // TODO: icon
+        mCallSettingsItem = menu.add(0, MENU_CALL_SETTINGS, 0, R.string.call_settings);
     }
 
     @Override
     public void onPrepareOptionsMenu(Menu menu) {
-        // If we have not been inflated yet, there is no menu
-        if (mDialpadChooser == null) return;
+        if (mDialpadChooser == null || mDigits == null) {
+            // The layout itself isn't ready yet. Let's ignore this call.
+            return;
+        }
 
+        // We show "Call Settings" menu every time
+        mCallSettingsItem.setVisible(true);
+        Intent settingsIntent = new Intent(Intent.ACTION_MAIN);
+        settingsIntent.setClassName("com.android.phone", "com.android.phone.CallFeaturesSetting");
+        mCallSettingsItem.setIntent(settingsIntent);
+
+        // We show "add to contacts", "2sec pause", and "add wait" menus only when the user is
+        // seeing usual dialpads and has typed at least one digit.
         // We never show a menu if the "choose dialpad" UI is up.
-        // Otherwise the menu is allowed (see onPrepareOptionsMenu() below.)
-        if (!dialpadChooserVisible()) return;
-
-        if (isDigitsEmpty()) {
+        if (dialpadChooserVisible() || isDigitsEmpty()) {
             mAddToContactMenuItem.setVisible(false);
             m2SecPauseMenuItem.setVisible(false);
             mWaitMenuItem.setVisible(false);