Fix crash on hanging up simulator video call.

The problem is that InCallActivityCommon#onStop will try to commit any fragment which will crash.

This change also fix a bug that simulatorRemoteVideo is not stopped after hanging up.

Bug: 67045513
Test: manual
PiperOrigin-RevId: 170380589
Change-Id: I25e0f43141eaa573189f4d9c0109fd2689c10374
diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java
index 4f31dad..82a29ee 100644
--- a/java/com/android/incallui/call/DialerCall.java
+++ b/java/com/android/incallui/call/DialerCall.java
@@ -153,9 +153,10 @@
   // Times when a second call is received but AnswerAndRelease button is not shown
   // since it's not supported.
   private int secondCallWithoutAnswerAndReleasedButtonTimes = 0;
-  private VideoTech videoTech;
+  private VideoTech videoTech = new EmptyVideoTech();
 
-  private boolean isImsReachable;
+  private com.android.dialer.logging.VideoTech.Type selectedAvailableVideoTechType =
+      com.android.dialer.logging.VideoTech.Type.NONE;
 
   public static String getNumberFromHandle(Uri handle) {
     return handle == null ? "" : handle.getSchemeSpecificPart();
@@ -451,10 +452,15 @@
   private void update() {
     Trace.beginSection("DialerCall.update");
     int oldState = getState();
-    // Clear any cache here that could potentially change on update.
-    videoTech = null;
     // We want to potentially register a video call callback here.
     updateFromTelecomCall();
+    // Only store the first video tech type found to be available during the life of the call.
+    if (selectedAvailableVideoTechType == com.android.dialer.logging.VideoTech.Type.NONE) {
+      // Update the video tech.
+      videoTech = mVideoTechManager.findBestAvailableVideoTech();
+      videoTech.becomePrimary();
+      selectedAvailableVideoTechType = videoTech.getVideoTechType();
+    }
     if (oldState != getState() && getState() == DialerCall.State.DISCONNECTED) {
       for (DialerCallListener listener : mListeners) {
         listener.onDialerCallDisconnect();
@@ -1156,9 +1162,6 @@
   }
 
   public VideoTech getVideoTech() {
-    if (videoTech == null) {
-      videoTech = mVideoTechManager.getVideoTech();
-    }
     return videoTech;
   }
 
@@ -1333,12 +1336,8 @@
     mVideoTechManager.dispatchRemovedFromCallList();
   }
 
-  public boolean isImsReachable() {
-    return isImsReachable;
-  }
-
-  private void setImsReachable(boolean imsReachable) {
-    isImsReachable = imsReachable;
+  public com.android.dialer.logging.VideoTech.Type getSelectedAvailableVideoTechType() {
+    return selectedAvailableVideoTechType;
   }
 
   /**
@@ -1535,7 +1534,6 @@
     private final Context context;
     private final EmptyVideoTech emptyVideoTech = new EmptyVideoTech();
     private final List<VideoTech> videoTechs;
-    private VideoTech savedTech;
 
     VideoTechManager(DialerCall call) {
       this.context = call.mContext;
@@ -1547,10 +1545,7 @@
       // Insert order here determines the priority of that video tech option
       videoTechs = new ArrayList<>();
 
-      ImsVideoTech imsVideoTech =
-          new ImsVideoTech(Logger.get(call.mContext), call, call.mTelecomCall);
-      call.setImsReachable(imsVideoTech.isAvailable(context));
-      videoTechs.add(imsVideoTech);
+      videoTechs.add(new ImsVideoTech(Logger.get(call.mContext), call, call.mTelecomCall));
 
       VideoTech rcsVideoTech =
           EnrichedCallComponent.get(call.mContext)
@@ -1571,17 +1566,10 @@
               phoneNumber));
     }
 
-    VideoTech getVideoTech() {
-      if (savedTech != null) {
-        return savedTech;
-      }
-
+    VideoTech findBestAvailableVideoTech() {
       for (VideoTech tech : videoTechs) {
         if (tech.isAvailable(context)) {
-          // Remember the first VideoTech that becomes available and always use it
-          savedTech = tech;
-          savedTech.becomePrimary();
-          return savedTech;
+          return tech;
         }
       }