Fix crash when saving transcript is called multiple times.

This is caused by transcript set to non-null again in some cases.

Test: manual
PiperOrigin-RevId: 194303928
Change-Id: Ife5e6bad3874751efab1d94a4262d83017b79808
diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java
index 9dfe7ab..da05b9d 100644
--- a/java/com/android/incallui/call/DialerCall.java
+++ b/java/com/android/incallui/call/DialerCall.java
@@ -192,6 +192,7 @@
   private volatile boolean feedbackRequested = false;
 
   @Nullable private PreferredAccountRecorder preferredAccountRecorder;
+  private boolean isCallRemoved;
 
   public static String getNumberFromHandle(Uri handle) {
     return handle == null ? "" : handle.getSchemeSpecificPart();
@@ -1608,15 +1609,17 @@
   void onRemovedFromCallList() {
     LogUtil.enterBlock("DialerCall.onRemovedFromCallList");
     // Ensure we clean up when this call is removed.
-    videoTechManager.dispatchRemovedFromCallList();
-    if (rttTranscript != null) {
+    if (videoTechManager != null) {
+      videoTechManager.dispatchRemovedFromCallList();
+    }
+    // TODO(a bug): Add tests for it to make sure no crash on subsequent call to this method.
+    if (rttTranscript != null && !isCallRemoved) {
       Futures.addCallback(
           RttTranscriptUtil.saveRttTranscript(context, rttTranscript),
           new DefaultFutureCallback<>(),
           MoreExecutors.directExecutor());
-      // Sets to null so it won't be saved again when called multiple times.
-      rttTranscript = null;
     }
+    isCallRemoved = true;
   }
 
   public com.android.dialer.logging.VideoTech.Type getSelectedAvailableVideoTechType() {