diff --git a/src/com/android/settings/media/MediaOutputIndicatorSlice.java b/src/com/android/settings/media/MediaOutputIndicatorSlice.java
index dec50bc..0ffa9ff 100644
--- a/src/com/android/settings/media/MediaOutputIndicatorSlice.java
+++ b/src/com/android/settings/media/MediaOutputIndicatorSlice.java
@@ -24,6 +24,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
+import android.telephony.TelephonyManager;
 import android.util.Log;
 
 import androidx.core.graphics.drawable.IconCompat;
@@ -113,9 +114,14 @@
 
     private boolean isVisible() {
         // To decide Slice's visibility.
-        // return true if device is connected or previously connected, false for other cases.
-        return !CollectionUtils.isEmpty(getConnectedA2dpDevices())
-                || !CollectionUtils.isEmpty(getConnectedHearingAidDevices());
+        // Return true if
+        // 1. phone is not in ongoing call mode
+        // 2. Bluetooth device is connected
+        final TelephonyManager telephonyManager =
+                (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
+        return telephonyManager.getCallState() == TelephonyManager.CALL_STATE_IDLE
+                && (!CollectionUtils.isEmpty(getConnectedA2dpDevices())
+                || !CollectionUtils.isEmpty(getConnectedHearingAidDevices()));
     }
 
     private List<BluetoothDevice> getConnectedA2dpDevices() {
diff --git a/src/com/android/settings/media/MediaOutputIndicatorWorker.java b/src/com/android/settings/media/MediaOutputIndicatorWorker.java
index 2d10fd3..0937d4b 100644
--- a/src/com/android/settings/media/MediaOutputIndicatorWorker.java
+++ b/src/com/android/settings/media/MediaOutputIndicatorWorker.java
@@ -78,4 +78,9 @@
             notifySliceChange();
         }
     }
+
+    @Override
+    public void onAudioModeChanged() {
+        notifySliceChange();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java b/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java
index 1ba1dc9..c5584d0 100644
--- a/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java
+++ b/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java
@@ -26,6 +26,7 @@
 import android.bluetooth.BluetoothDevice;
 import android.bluetooth.BluetoothManager;
 import android.content.Context;
+import android.telephony.TelephonyManager;
 
 import androidx.slice.Slice;
 import androidx.slice.SliceMetadata;
@@ -47,12 +48,15 @@
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowTelephonyManager;
 
 import java.util.ArrayList;
 import java.util.List;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowBluetoothUtils.class})
+@Config(shadows = {ShadowBluetoothUtils.class,
+        ShadowTelephonyManager.class})
 public class MediaOutputIndicatorSliceTest {
 
     private static final String TEST_A2DP_DEVICE_NAME = "Test_A2DP_BT_Device_NAME";
@@ -76,11 +80,14 @@
     private Context mContext;
     private List<BluetoothDevice> mDevicesList;
     private MediaOutputIndicatorSlice mMediaOutputIndicatorSlice;
+    private ShadowTelephonyManager mShadowTelephonyManager;
 
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
+        mShadowTelephonyManager = Shadow.extract(mContext.getSystemService(
+                Context.TELEPHONY_SERVICE));
         // Set-up specs for SliceMetadata.
         SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
 
@@ -151,4 +158,31 @@
         assertThat(metadata.getTitle()).isEqualTo(mContext.getText(R.string.media_output_title));
         assertThat(metadata.getSubtitle()).isEqualTo(TEST_HAP_DEVICE_NAME);
     }
+
+    @Test
+    public void getSlice_callStateIdle_available() {
+        mDevicesList.add(mA2dpDevice);
+        when(mA2dpProfile.getConnectedDevices()).thenReturn(mDevicesList);
+        mShadowTelephonyManager.setCallState(TelephonyManager.CALL_STATE_IDLE);
+
+        assertThat(mMediaOutputIndicatorSlice.getSlice()).isNotNull();
+    }
+
+    @Test
+    public void getSlice_callStateRinging_returnNull() {
+        mDevicesList.add(mA2dpDevice);
+        when(mA2dpProfile.getConnectedDevices()).thenReturn(mDevicesList);
+        mShadowTelephonyManager.setCallState(TelephonyManager.CALL_STATE_RINGING);
+
+        assertThat(mMediaOutputIndicatorSlice.getSlice()).isNull();
+    }
+
+    @Test
+    public void getSlice_callStateOffHook_returnNull() {
+        mDevicesList.add(mA2dpDevice);
+        when(mA2dpProfile.getConnectedDevices()).thenReturn(mDevicesList);
+        mShadowTelephonyManager.setCallState(TelephonyManager.CALL_STATE_OFFHOOK);
+
+        assertThat(mMediaOutputIndicatorSlice.getSlice()).isNull();
+    }
 }
