Use listeners to drive fragment lifecycles.

Test: tap
PiperOrigin-RevId: 196278370
Change-Id: Ied6072caf4a6e87da5ba6395db8c0b0fa55b3f97
diff --git a/java/com/android/incallui/AnswerScreenPresenter.java b/java/com/android/incallui/AnswerScreenPresenter.java
index e41bac6..8b789f3 100644
--- a/java/com/android/incallui/AnswerScreenPresenter.java
+++ b/java/com/android/incallui/AnswerScreenPresenter.java
@@ -176,9 +176,6 @@
       return;
     }
     incomingCall.setIsSpeakEasyCall(true);
-    InCallActivity inCallActivity =
-        (InCallActivity) answerScreen.getAnswerScreenFragment().getActivity();
-    inCallActivity.onPrimaryCallStateChanged();
   }
 
   @Override
diff --git a/java/com/android/incallui/InCallPresenter.java b/java/com/android/incallui/InCallPresenter.java
index ccc5648..da5d20f 100644
--- a/java/com/android/incallui/InCallPresenter.java
+++ b/java/com/android/incallui/InCallPresenter.java
@@ -990,6 +990,13 @@
   }
 
   @Override
+  public void onSpeakEasyStateChange() {
+    if (inCallActivity != null) {
+      inCallActivity.onPrimaryCallStateChanged();
+    }
+  }
+
+  @Override
   public void onSessionModificationStateChange(DialerCall call) {
     int newState = call.getVideoTech().getSessionModificationState();
     LogUtil.i("InCallPresenter.onSessionModificationStateChange", "state: %d", newState);
diff --git a/java/com/android/incallui/call/CallList.java b/java/com/android/incallui/call/CallList.java
index 4d737e5..13be252 100644
--- a/java/com/android/incallui/call/CallList.java
+++ b/java/com/android/incallui/call/CallList.java
@@ -820,6 +820,9 @@
      */
     default void onUpgradeToRtt(DialerCall call, int rttRequestId) {}
 
+    /** Called when the SpeakEasy state of a Dialer call is mutated. */
+    default void onSpeakEasyStateChange() {}
+
     /** Called when the session modification state of a call changes. */
     void onSessionModificationStateChange(DialerCall call);
 
@@ -898,6 +901,13 @@
     }
 
     @Override
+    public void onDialerCallSpeakEasyStateChange() {
+      for (Listener listener : listeners) {
+        listener.onSpeakEasyStateChange();
+      }
+    }
+
+    @Override
     public void onDialerCallUpgradeToVideo() {
       for (Listener listener : listeners) {
         listener.onUpgradeToVideo(call);
diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java
index 4db5547..431634a 100644
--- a/java/com/android/incallui/call/DialerCall.java
+++ b/java/com/android/incallui/call/DialerCall.java
@@ -1726,6 +1726,11 @@
   /** Sets the user preference for SpeakEasy */
   public void setIsSpeakEasyCall(boolean isSpeakEasyCall) {
     this.isSpeakEasyCall = isSpeakEasyCall;
+    if (listeners != null) {
+      for (DialerCallListener listener : listeners) {
+        listener.onDialerCallSpeakEasyStateChange();
+      }
+    }
   }
 
   /**
diff --git a/java/com/android/incallui/call/DialerCallListener.java b/java/com/android/incallui/call/DialerCallListener.java
index 37c30d3..a42ccbd 100644
--- a/java/com/android/incallui/call/DialerCallListener.java
+++ b/java/com/android/incallui/call/DialerCallListener.java
@@ -31,6 +31,8 @@
 
   default void onDialerCallUpgradeToRtt(int rttRequestId) {}
 
+  default void onDialerCallSpeakEasyStateChange() {}
+
   void onDialerCallSessionModificationStateChange();
 
   void onWiFiToLteHandover();