Merge 1c3842b50bf8bf1a492a4ded559b79b005eb7de1 on remote branch

Change-Id: I46b666e1446405fb1e642bdabc402c3590e8064f
diff --git a/Android.mk b/Android.mk
index 2cd7477..b2eba17 100644
--- a/Android.mk
+++ b/Android.mk
@@ -9,6 +9,7 @@
 #      $ protoc --plugin=protoc-gen-grpc-java=prebuilts/tools/common/m2/repository/io/grpc/protoc-gen-grpc-java/1.0.3/protoc-gen-grpc-java-1.0.3-linux-x86_64.exe \
 #               --grpc-java_out=lite:"packages/apps/Dialer/java/com/android/voicemail/impl/" \
 #               --proto_path="packages/apps/Dialer/java/com/android/voicemail/impl/transcribe/grpc/" "packages/apps/Dialer/java/com/android/voicemail/impl/transcribe/grpc/voicemail_transcription.proto"
+ifneq ($(TARGET_NO_TELEPHONY), true)
 ifeq ($(TARGET_FWK_SUPPORTS_FULL_VALUEADDS), true)
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
@@ -501,3 +502,4 @@
 
 include $(CLEAR_VARS)
 endif
+endif # TARGET_NO_TELEPHONY
\ No newline at end of file
diff --git a/java/com/android/incallui/BottomSheetHelper.java b/java/com/android/incallui/BottomSheetHelper.java
index 3f94a9d..6402b51 100755
--- a/java/com/android/incallui/BottomSheetHelper.java
+++ b/java/com/android/incallui/BottomSheetHelper.java
@@ -87,7 +87,6 @@
    private static final int BLIND_TRANSFER = 0;
    private static final int ASSURED_TRANSFER = 1;
    private static final int CONSULTATIVE_TRANSFER = 2;
-   private boolean mShowStaticImageUiConfig = false;
 
    private QtiImsExtListenerBaseImpl imsInterfaceListener =
       new QtiImsExtListenerBaseImpl() {
@@ -159,7 +158,6 @@
        mPrimaryCallTracker = null;
      }
      mIsHideMe = false;
-     mShowStaticImageUiConfig = false;
      if (mQtiImsExtConnector != null) {
        mQtiImsExtConnector.disconnect();
        mQtiImsExtConnector = null;
@@ -390,14 +388,8 @@
      }
    }
 
-   private void notifyStaticImageStateChanged(boolean staticImageState) {
-     LogUtil.v("BottomSheetHelper.notifyStaticImageStateChanged",
-         " notifying static image changed = " + staticImageState);
-     InCallPresenter.getInstance().notifyStaticImageStateChanged(staticImageState);
-   }
-
    private boolean isHideMeOptionVisible() {
-     if (!mShowStaticImageUiConfig ||
+     if (!QtiImsExtUtils.shallShowStaticImageUi(getPhoneId(), mContext) ||
          !VideoUtils.hasCameraPermissionAndShownPrivacyToast(mContext)) {
        return false;
      }
@@ -407,12 +399,6 @@
 
    private void maybeUpdateHideMeInMap() {
      LogUtil.v("BottomSheetHelper.maybeUpdateHideMeInMap", " mIsHideMe = " + mIsHideMe);
-     boolean showStaticImageUiConfig = QtiImsExtUtils.shallShowStaticImageUi(getPhoneId(),
-         mContext);
-     if(mShowStaticImageUiConfig != showStaticImageUiConfig) {
-       mShowStaticImageUiConfig = showStaticImageUiConfig;
-       notifyStaticImageStateChanged(mShowStaticImageUiConfig && mIsHideMe);
-     }
      String hideMeText = mIsHideMe ? mResources.getString(R.string.qti_ims_hideMeText_selected) :
          mResources.getString(R.string.qti_ims_hideMeText_unselected);
      moreOptionsMap.put(hideMeText, isHideMeOptionVisible());
@@ -438,17 +424,20 @@
      /* Click on hideme shall change the static image state i.e. decision
         is made in VideoCallPresenter whether to replace preview video with
         static image or whether to resume preview video streaming */
-       notifyStaticImageStateChanged(isHideMe);
+     InCallPresenter.getInstance().notifyHideMeUiModeChanged();
    }
 
    // Returns TRUE if UE is in hide me mode else returns FALSE
-   public boolean isInHideMeMode() {
-     LogUtil.v("BottomSheetHelper.isInHideMeMode", "mIsHideMe: " + mIsHideMe +
-         " mShowStaticImageUiConfig: " + mShowStaticImageUiConfig);
-     return mIsHideMe && mShowStaticImageUiConfig;
+   public boolean isInHideMeMode(DialerCall call) {
+     LogUtil.v("BottomSheetHelper.isInHideMeMode", "mIsHideMe: " + mIsHideMe);
+     return mIsHideMe &&
+         QtiImsExtUtils.shallShowStaticImageUi(getPhoneIdExtra(call), mContext);
    }
 
    private int getPhoneIdExtra(DialerCall call) {
+     if (call == null) {
+       return QtiCallConstants.INVALID_PHONE_ID;
+     }
      final Bundle extras = call.getExtras();
      return ((extras == null) ? QtiCallConstants.INVALID_PHONE_ID :
          extras.getInt(QtiImsExtUtils.QTI_IMS_PHONE_ID_EXTRA_KEY,
@@ -477,7 +466,7 @@
    }
 
     @Override
-    public void onSendStaticImageStateChanged(boolean isEnabled) {
+    public void onHideMeUiModeChanged() {
       //No-op
     }
 
diff --git a/java/com/android/incallui/CallButtonPresenter.java b/java/com/android/incallui/CallButtonPresenter.java
index 1cf2250..5fd9244 100755
--- a/java/com/android/incallui/CallButtonPresenter.java
+++ b/java/com/android/incallui/CallButtonPresenter.java
@@ -563,7 +563,7 @@
     inCallButtonUi.showButton(
         InCallButtonIds.BUTTON_SWITCH_CAMERA,
         isVideo && hasCameraPermission && call.getVideoTech().isTransmitting()
-        && !BottomSheetHelper.getInstance().isInHideMeMode()
+        && !BottomSheetHelper.getInstance().isInHideMeMode(call)
         && !ScreenShareHelper.screenShareRequested());
     inCallButtonUi.showButton(InCallButtonIds.BUTTON_PAUSE_VIDEO, showPauseVideo);
     if (isVideo) {
@@ -598,12 +598,9 @@
 
   /**
    * Handles a change to the video call hide me selection
-   *
-   * @param shallTransmitStaticImage {@code true} if the app should show static image in preview,
-   * {@code false} otherwise.
    */
   @Override
-  public void onSendStaticImageStateChanged(boolean shallTransmitStaticImage) {
+  public void onHideMeUiModeChanged() {
     if (call == null) {
        return;
      }
diff --git a/java/com/android/incallui/CallCardPresenter.java b/java/com/android/incallui/CallCardPresenter.java
index f4c47af..73193de 100755
--- a/java/com/android/incallui/CallCardPresenter.java
+++ b/java/com/android/incallui/CallCardPresenter.java
@@ -1087,7 +1087,7 @@
   }
 
   @Override
-  public void onSendStaticImageStateChanged(boolean isEnabled) {
+  public void onHideMeUiModeChanged() {
     //No-op
   }
 
diff --git a/java/com/android/incallui/InCallPresenter.java b/java/com/android/incallui/InCallPresenter.java
index e35393c..97ca973 100644
--- a/java/com/android/incallui/InCallPresenter.java
+++ b/java/com/android/incallui/InCallPresenter.java
@@ -1381,7 +1381,6 @@
   public void addInCallEventListener(InCallEventListener listener) {
     Objects.requireNonNull(listener);
     inCallEventListeners.add(listener);
-    listener.onSendStaticImageStateChanged(BottomSheetHelper.getInstance().isInHideMeMode());
   }
 
   public void removeInCallEventListener(InCallEventListener listener) {
@@ -1709,12 +1708,10 @@
 
   /**
    * Called by the {@link BottomSheetHelper} to inform of a change in hide me selection.
-   *
-   * @param isEnabled {@code True} if entering hide me mode.
    */
-  public void notifyStaticImageStateChanged(boolean isEnabled) {
+  public void notifyHideMeUiModeChanged() {
     for (InCallEventListener listener : inCallEventListeners) {
-      listener.onSendStaticImageStateChanged(isEnabled);
+      listener.onHideMeUiModeChanged();
     }
   }
 
@@ -2247,7 +2244,7 @@
   public interface InCallEventListener {
     void onSessionModificationStateChange(DialerCall call);
     void onFullscreenModeChanged(boolean isFullscreenMode);
-    void onSendStaticImageStateChanged(boolean isEnabled);
+    void onHideMeUiModeChanged();
     void onOutgoingVideoSourceChanged(int videoSource);
     void onSipDtmfChanged(int bitMask);
   }
diff --git a/java/com/android/incallui/OrientationModeHandler.java b/java/com/android/incallui/OrientationModeHandler.java
index 54b87d0..e689565 100644
--- a/java/com/android/incallui/OrientationModeHandler.java
+++ b/java/com/android/incallui/OrientationModeHandler.java
@@ -205,7 +205,8 @@
         // When VT call is put on hold, user is presented with VoLTE UI.
         // Hence, restricting held VT call to change orientation.
         if (isVideoOrUpgrade(call) && (call.getNonConferenceState() != DialerCallState.ONHOLD)
-                && (call.getNonConferenceState() != DialerCallState.DISCONNECTED)) {
+                && (call.getNonConferenceState() != DialerCallState.DISCONNECTED)
+                && !QtiCallUtils.isVideoCrs(call)) {
             return (mOrientationMode == QtiCallConstants.ORIENTATION_MODE_UNSPECIFIED) ?
                     InCallOrientationEventListener.ACTIVITY_PREFERENCE_ALLOW_ROTATION :
                     QtiCallUtils.toScreenOrientation(mOrientationMode);
@@ -259,7 +260,7 @@
     public void onFullscreenModeChanged(boolean isFullscreenMode) {}
 
     @Override
-    public void onSendStaticImageStateChanged(boolean isEnabled) {}
+    public void onHideMeUiModeChanged() {}
 
     @Override
     public void onOutgoingVideoSourceChanged(int videoSource) {}
diff --git a/java/com/android/incallui/VideoCallPresenter.java b/java/com/android/incallui/VideoCallPresenter.java
index e0b2f66..460572a 100644
--- a/java/com/android/incallui/VideoCallPresenter.java
+++ b/java/com/android/incallui/VideoCallPresenter.java
@@ -62,6 +62,7 @@
 
 import org.codeaurora.ims.ImsScreenShareListenerBase;
 import org.codeaurora.ims.ImsScreenShareManager;
+import org.codeaurora.ims.QtiCallConstants;
 import org.codeaurora.ims.QtiImsException;
 import org.codeaurora.ims.QtiImsExtConnector;
 import org.codeaurora.ims.QtiImsExtManager;
@@ -780,25 +781,23 @@
 
   /**
    * Handles a change to the video call hide me selection
-   *
-   * @param shallTransmitStaticImage {@code true} if the app should show static image in preview,
-   * {@code false} otherwise.
    */
    @Override
-   public void onSendStaticImageStateChanged(boolean shallTransmitStaticImage) {
-    LogUtil.d("VideoCallPresenter.onSendStaticImageStateChanged"," shallTransmitStaticImage: "
-        + shallTransmitStaticImage + " primaryCall: " + primaryCall);
+   public void onHideMeUiModeChanged() {
 
-    sShallTransmitStaticImage = shallTransmitStaticImage;
+    maybeUpdateTransmitStaticImageState(primaryCall);
+
+    LogUtil.d("VideoCallPresenter.onHideMeUiModeChanged"," shallTransmitStaticImage: "
+        + sShallTransmitStaticImage + " primaryCall: " + primaryCall);
 
     if (!isActiveVideoCall(primaryCall)) {
-      LogUtil.w("VideoCallPresenter.onSendStaticImageStateChanged",
+      LogUtil.w("VideoCallPresenter.onHideMeUiModeChanged",
           " received for non-active video call");
       return;
     }
 
     if (videoCall == null || videoCallScreen == null) {
-      LogUtil.w("VideoCallPresenter.onSendStaticImageStateChanged",
+      LogUtil.w("VideoCallPresenter.onHideMeUiModeChanged",
           " mVideoCall/mVideoCallScreen is null");
       return;
     }
@@ -806,7 +805,7 @@
     enableCamera(primaryCall, isCameraRequired(currentVideoState,
         SessionModificationState.NO_REQUEST));
 
-    if (shallTransmitStaticImage) {
+    if (sShallTransmitStaticImage) {
       // Handle showing static image in preview based on external storage permissions
       videoCallScreen.onRequestReadStoragePermission();
     } else {
@@ -1027,12 +1026,14 @@
   private void onPrimaryCallChanged(DialerCall newPrimaryCall) {
     final boolean shouldShowVideoUi = shouldShowVideoUiForCall(newPrimaryCall);
     final boolean isVideoMode = isVideoMode();
-
-    LogUtil.v(
+    // Get the hide me mode for the new call
+    maybeUpdateTransmitStaticImageState(newPrimaryCall);
+    LogUtil.i(
         "VideoCallPresenter.onPrimaryCallChanged",
-        "shouldShowVideoUi: %b, isVideoMode: %b",
+        "shouldShowVideoUi: %b, isVideoMode: %b, shallTransmitStaticImage: %b",
         shouldShowVideoUi,
-        isVideoMode);
+        isVideoMode,
+        sShallTransmitStaticImage);
 
     if (!shouldShowVideoUi && isVideoMode) {
       // Terminate video mode if new primary call is not a video call
@@ -1111,6 +1112,7 @@
   }
 
   private void updateVideoCall(DialerCall call) {
+    maybeUpdateTransmitStaticImageState(call);
     checkForVideoCallChange(call);
     checkForVideoStateChange(call);
     checkForCallStateChange(call);
@@ -1119,6 +1121,15 @@
         call.getState(), call.getVideoTech().getSessionModificationState());
   }
 
+  private void maybeUpdateTransmitStaticImageState(DialerCall call) {
+    // Phone id extra is not updated at the time a dialing call is created.
+    // Update the static image mode only when we are sure about the phoneid
+    if (QtiCallUtils.getPhoneId(call) != QtiCallConstants.INVALID_PHONE_ID) {
+      sShallTransmitStaticImage = BottomSheetHelper.getInstance()
+          .isInHideMeMode(call);
+    }
+  }
+
   private void checkForOrientationAllowedChange(@Nullable DialerCall call) {
     LogUtil.d("VideoCallPresenter.checkForOrientationAllowedChange","call : "+ call +
         " currentOrientationMode = " + currentOrientationMode);