Use TelecomManager#isInManagedCall starting from O.

The TelecomManager#isInCall method returns true anytime the user is in a call.
Starting in O, the APIs include support for self-managed ConnectionServices so that other apps like Duo can tell Telecom about its calls.  So, if the user is in a Duo call, isInCall would return true.
Dialer uses this to determine whether to show the "return to call in progress" when Dialer is launched.
Instead, Dialer should use TelecomManager#isInManagedCall, which only returns true if the device is in a managed call which Dialer would know about.

Bug: 36991070
Test: none
PiperOrigin-RevId: 167200903
Change-Id: I12ac7b893dcbfa2fc842ca5ab356fbbc490a098b
diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java
index 3e6b50c..a4c075c 100644
--- a/java/com/android/dialer/app/DialtactsActivity.java
+++ b/java/com/android/dialer/app/DialtactsActivity.java
@@ -1410,7 +1410,7 @@
   }
 
   private boolean phoneIsInUse() {
-    return TelecomUtil.isInCall(this);
+    return TelecomUtil.isInManagedCall(this);
   }
 
   private boolean canIntentBeHandled(Intent intent) {
diff --git a/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java b/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
index de4e1cc..685357a 100644
--- a/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
+++ b/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
@@ -516,7 +516,7 @@
     mView.disableUiElements();
     mIsPrepared = false;
 
-    if (mContext != null && TelecomUtil.isInCall(mContext)) {
+    if (mContext != null && TelecomUtil.isInManagedCall(mContext)) {
       handleError(new IllegalStateException("Cannot play voicemail when call is in progress"));
       return;
     }
diff --git a/java/com/android/dialer/callcomposer/CallComposerActivity.java b/java/com/android/dialer/callcomposer/CallComposerActivity.java
index fa380cc..4a6cdbb 100644
--- a/java/com/android/dialer/callcomposer/CallComposerActivity.java
+++ b/java/com/android/dialer/callcomposer/CallComposerActivity.java
@@ -438,7 +438,7 @@
     maybeShowPrivacyToast(data);
     if (data.hasImageData()
         && ConfigProviderBindings.get(this).getBoolean("enable_delayed_ec_images", true)
-        && !TelecomUtil.isInCall(this)) {
+        && !TelecomUtil.isInManagedCall(this)) {
       timeoutHandler.postDelayed(placeTelecomCallRunnable, getRCSTimeoutMillis());
       startActivity(
           CallPendingActivity.getIntent(
diff --git a/java/com/android/dialer/dialpadview/DialpadFragment.java b/java/com/android/dialer/dialpadview/DialpadFragment.java
index e22250c..86a8379 100644
--- a/java/com/android/dialer/dialpadview/DialpadFragment.java
+++ b/java/com/android/dialer/dialpadview/DialpadFragment.java
@@ -1278,7 +1278,7 @@
    *     or ringing or dialing, or on hold).
    */
   private boolean isPhoneInUse() {
-    return getContext() != null && TelecomUtil.isInCall(getContext());
+    return getContext() != null && TelecomUtil.isInManagedCall(getContext());
   }
 
   /** @return true if the phone is a CDMA phone type */
diff --git a/java/com/android/dialer/telecom/TelecomUtil.java b/java/com/android/dialer/telecom/TelecomUtil.java
index 573bfe2..8ff4b39 100644
--- a/java/com/android/dialer/telecom/TelecomUtil.java
+++ b/java/com/android/dialer/telecom/TelecomUtil.java
@@ -21,6 +21,8 @@
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.net.Uri;
+import android.os.Build.VERSION;
+import android.os.Build.VERSION_CODES;
 import android.provider.CallLog.Calls;
 import android.support.annotation.Nullable;
 import android.support.annotation.VisibleForTesting;
@@ -140,7 +142,11 @@
     return new ArrayList<>();
   }
 
-  public static boolean isInCall(Context context) {
+  /**
+   * Returns true if there is a dialer managed call in progress. Self managed calls starting from O
+   * are not included.
+   */
+  public static boolean isInManagedCall(Context context) {
     return instance.isInCall(context);
   }
 
@@ -234,7 +240,19 @@
 
     public boolean isInCall(Context context) {
       if (hasReadPhoneStatePermission(context)) {
-        return getTelecomManager(context).isInCall();
+        // The TelecomManager#isInCall method returns true anytime the user is in a call.
+        // Starting in O, the APIs include support for self-managed ConnectionServices so that other
+        // apps like Duo can tell Telecom about its calls.  So, if the user is in a Duo call,
+        // isInCall would return true.
+        // Dialer uses this to determine whether to show the "return to call in progress" when
+        // Dialer is launched.
+        // Instead, Dialer should use TelecomManager#isInManagedCall, which only returns true if the
+        // device is in a managed call which Dialer would know about.
+        if (VERSION.SDK_INT >= VERSION_CODES.O) {
+          return getTelecomManager(context).isInManagedCall();
+        } else {
+          return getTelecomManager(context).isInCall();
+        }
       }
       return false;
     }
diff --git a/java/com/android/incallui/ReturnToCallController.java b/java/com/android/incallui/ReturnToCallController.java
index e5c7618..e54102c 100644
--- a/java/com/android/incallui/ReturnToCallController.java
+++ b/java/com/android/incallui/ReturnToCallController.java
@@ -94,7 +94,7 @@
     if (showing) {
       hide();
     } else {
-      if (TelecomUtil.isInCall(context)) {
+      if (TelecomUtil.isInManagedCall(context)) {
         show();
       }
     }
@@ -175,7 +175,7 @@
     }
     if (bubble != null
         && bubble.isVisible()
-        && (!TelecomUtil.isInCall(context)
+        && (!TelecomUtil.isInManagedCall(context)
             || CallList.getInstance().getActiveOrBackgroundCall() != null)) {
       bubble.showText(context.getText(R.string.incall_call_ended));
     }