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();
