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