Add support of dialpad in RTT call.

This change also dismiss overflow menu when any button is clicked inside it.

Bug: 67596257
Test: manual
PiperOrigin-RevId: 188424236
Change-Id: I90b803d592f12525cdb8727aaeebc45c3da5dcdd
diff --git a/java/com/android/dialer/dialpadview/res/layout/dialpad.xml b/java/com/android/dialer/dialpadview/res/layout/dialpad.xml
index 0061d54..fe4e286 100644
--- a/java/com/android/dialer/dialpadview/res/layout/dialpad.xml
+++ b/java/com/android/dialer/dialpadview/res/layout/dialpad.xml
@@ -96,6 +96,7 @@
     <Space style="@style/DialpadSpaceStyle"/>
   </LinearLayout>
   <Space
+      android:id="@+id/end_call_space"
       android:layout_width="match_parent"
       android:layout_height="?attr/dialpad_end_key_spacing"/>
 </LinearLayout>
diff --git a/java/com/android/incallui/DialpadFragment.java b/java/com/android/incallui/DialpadFragment.java
index 44eaf21..343cb34 100644
--- a/java/com/android/incallui/DialpadFragment.java
+++ b/java/com/android/incallui/DialpadFragment.java
@@ -84,6 +84,8 @@
   private DtmfKeyListener dtmfKeyListener;
   private DialpadView dialpadView;
   private int currentTextColor;
+  private View endCallSpace;
+  private boolean shouldShowEndCallSpace = true;
 
   @Override
   public void onClick(View v) {
@@ -152,6 +154,7 @@
     View backButton = dialpadView.findViewById(R.id.dialpad_back);
     backButton.setVisibility(View.VISIBLE);
     backButton.setOnClickListener(this);
+    endCallSpace = dialpadView.findViewById(R.id.end_call_space);
 
     return parent;
   }
@@ -160,6 +163,7 @@
   public void onResume() {
     super.onResume();
     updateColors();
+    endCallSpace.setVisibility(shouldShowEndCallSpace ? View.VISIBLE : View.GONE);
   }
 
   public void updateColors() {
@@ -268,6 +272,10 @@
     }
   }
 
+  public void setShouldShowEndCallSpace(boolean show) {
+    shouldShowEndCallSpace = show;
+  }
+
   /**
    * LinearLayout with getter and setter methods for the translationY property using floats, for
    * animation purposes.
diff --git a/java/com/android/incallui/InCallActivity.java b/java/com/android/incallui/InCallActivity.java
index dee5e7e..6f2ad8b 100644
--- a/java/com/android/incallui/InCallActivity.java
+++ b/java/com/android/incallui/InCallActivity.java
@@ -830,7 +830,7 @@
 
     // Note:  onInCallScreenDialpadVisibilityChange is called here to ensure that the dialpad FAB
     // repositions itself.
-    getInCallScreen().onInCallScreenDialpadVisibilityChange(show);
+    getInCallOrRttCallScreen().onInCallScreenDialpadVisibilityChange(show);
   }
 
   private void showDialpadFragment() {
@@ -842,11 +842,15 @@
     FragmentTransaction transaction = dialpadFragmentManager.beginTransaction();
     DialpadFragment dialpadFragment = getDialpadFragment();
     if (dialpadFragment == null) {
-      transaction.add(getDialpadContainerId(), new DialpadFragment(), Tags.DIALPAD_FRAGMENT);
+      dialpadFragment = new DialpadFragment();
+      transaction.add(getDialpadContainerId(), dialpadFragment, Tags.DIALPAD_FRAGMENT);
     } else {
       transaction.show(dialpadFragment);
       dialpadFragment.setUserVisibleHint(true);
     }
+    // RTT call screen doesn't show end call button inside dialpad, thus the space reserved for end
+    // call button should be removed.
+    dialpadFragment.setShouldShowEndCallSpace(didShowInCallScreen);
     transaction.commitAllowingStateLoss();
     dialpadFragmentManager.executePendingTransactions();
 
@@ -967,7 +971,7 @@
   }
 
   public boolean getCallCardFragmentVisible() {
-    return didShowInCallScreen || didShowVideoCallScreen;
+    return didShowInCallScreen || didShowVideoCallScreen || didShowRttCallScreen;
   }
 
   public void dismissKeyguard(boolean dismiss) {
@@ -1100,7 +1104,7 @@
 
   @Nullable
   public FragmentManager getDialpadFragmentManager() {
-    InCallScreen inCallScreen = getInCallScreen();
+    InCallScreen inCallScreen = getInCallOrRttCallScreen();
     if (inCallScreen != null) {
       return inCallScreen.getInCallScreenFragment().getChildFragmentManager();
     }
@@ -1108,7 +1112,7 @@
   }
 
   public int getDialpadContainerId() {
-    return getInCallScreen().getAnswerAndDialpadContainerResourceId();
+    return getInCallOrRttCallScreen().getAnswerAndDialpadContainerResourceId();
   }
 
   @Override
@@ -1586,6 +1590,17 @@
     return (RttCallScreen) getSupportFragmentManager().findFragmentByTag(Tags.RTT_CALL_SCREEN);
   }
 
+  private InCallScreen getInCallOrRttCallScreen() {
+    InCallScreen inCallScreen = null;
+    if (didShowInCallScreen) {
+      inCallScreen = getInCallScreen();
+    }
+    if (didShowRttCallScreen) {
+      inCallScreen = getRttCallScreen();
+    }
+    return inCallScreen;
+  }
+
   @Override
   public void onPseudoScreenStateChanged(boolean isOn) {
     LogUtil.i("InCallActivity.onPseudoScreenStateChanged", "isOn: " + isOn);
diff --git a/java/com/android/incallui/rtt/impl/RttChatFragment.java b/java/com/android/incallui/rtt/impl/RttChatFragment.java
index 5094c31..f9c91e5 100644
--- a/java/com/android/incallui/rtt/impl/RttChatFragment.java
+++ b/java/com/android/incallui/rtt/impl/RttChatFragment.java
@@ -333,11 +333,13 @@
   public void updateInCallScreenColors() {}
 
   @Override
-  public void onInCallScreenDialpadVisibilityChange(boolean isShowing) {}
+  public void onInCallScreenDialpadVisibilityChange(boolean isShowing) {
+    overflowMenu.setDialpadButtonChecked(isShowing);
+  }
 
   @Override
   public int getAnswerAndDialpadContainerResourceId() {
-    return 0;
+    return R.id.incall_dialpad_container;
   }
 
   @Override
diff --git a/java/com/android/incallui/rtt/impl/RttOverflowMenu.java b/java/com/android/incallui/rtt/impl/RttOverflowMenu.java
index 2b56364..cca3631 100644
--- a/java/com/android/incallui/rtt/impl/RttOverflowMenu.java
+++ b/java/com/android/incallui/rtt/impl/RttOverflowMenu.java
@@ -87,4 +87,8 @@
       speakerButton.setOnCheckedChangeListener(null);
     }
   }
+
+  void setDialpadButtonChecked(boolean isChecked) {
+    dialpadButton.setChecked(isChecked);
+  }
 }
diff --git a/java/com/android/incallui/rtt/impl/res/layout/frag_rtt_chat.xml b/java/com/android/incallui/rtt/impl/res/layout/frag_rtt_chat.xml
index d850751..3194b75 100644
--- a/java/com/android/incallui/rtt/impl/res/layout/frag_rtt_chat.xml
+++ b/java/com/android/incallui/rtt/impl/res/layout/frag_rtt_chat.xml
@@ -67,4 +67,11 @@
         android:tint="@color/submit_button_color"/>
   </LinearLayout>
 
+  <FrameLayout
+      android:id="@+id/incall_dialpad_container"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:layout_gravity="bottom"
+      android:clipChildren="false"
+      android:clipToPadding="false"/>
 </FrameLayout>
\ No newline at end of file
diff --git a/java/com/android/incallui/rtt/protocol/RttCallScreen.java b/java/com/android/incallui/rtt/protocol/RttCallScreen.java
index 916dfb8..531b18d 100644
--- a/java/com/android/incallui/rtt/protocol/RttCallScreen.java
+++ b/java/com/android/incallui/rtt/protocol/RttCallScreen.java
@@ -17,9 +17,10 @@
 package com.android.incallui.rtt.protocol;
 
 import android.support.v4.app.Fragment;
+import com.android.incallui.incall.protocol.InCallScreen;
 
 /** Interface for call RTT call module. */
-public interface RttCallScreen {
+public interface RttCallScreen extends InCallScreen {
 
   void onRttScreenStart();