diff --git a/java/com/android/incallui/AndroidManifest.xml b/java/com/android/incallui/AndroidManifest.xml
index d854a7f..6967f88 100644
--- a/java/com/android/incallui/AndroidManifest.xml
+++ b/java/com/android/incallui/AndroidManifest.xml
@@ -15,7 +15,8 @@
   -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.android.incallui">
+    package="com.android.incallui"
+    xmlns:tools="http://schemas.android.com/tools">
 
   <uses-sdk
       android:minSdkVersion="23"
@@ -37,6 +38,13 @@
   <!-- Testing location -->
   <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
 
+  <!-- Broadcasting in-call UI changes -->
+  <uses-permission android:name="com.motorola.incallui.permission.INCOMING_CALL_VISIBILITY_CHANGED" />
+  <!-- System permission to restrict access to Intent INCOMING_CALL_VISIBILITY_CHANGED. -->
+  <permission android:name="com.motorola.incallui.permission.INCOMING_CALL_VISIBILITY_CHANGED"
+      android:protectionLevel="signatureOrSystem"
+      tools:ignore="SignatureOrSystemPermissions"/>
+
   <!-- Set android:taskAffinity="com.android.incallui" for all activities to ensure proper
   navigation. Otherwise system could bring up DialtactsActivity instead, e.g. when user unmerge a
   call.
diff --git a/java/com/android/incallui/InCallPresenter.java b/java/com/android/incallui/InCallPresenter.java
index c5310b9..79e5180 100644
--- a/java/com/android/incallui/InCallPresenter.java
+++ b/java/com/android/incallui/InCallPresenter.java
@@ -260,6 +260,8 @@
   private VideoSurfaceTexture mLocalVideoSurfaceTexture;
   private VideoSurfaceTexture mRemoteVideoSurfaceTexture;
 
+  private MotorolaInCallUiNotifier motorolaInCallUiNotifier;
+
   /** Inaccessible constructor. Must use getRunningInstance() to get this singleton. */
   @VisibleForTesting
   InCallPresenter() {}
@@ -382,6 +384,15 @@
 
     AudioModeProvider.getInstance().addListener(this);
 
+    if (motorolaInCallUiNotifier == null) {
+      // Add listener to notify Telephony process when the incoming call screen is started or
+      // finished. This is for hiding USSD dialog because the incoming call screen should have
+      // higher precedence over this dialog.
+      motorolaInCallUiNotifier = new MotorolaInCallUiNotifier(context);
+      addInCallUiListener(motorolaInCallUiNotifier);
+      addListener(motorolaInCallUiNotifier);
+    }
+
     LogUtil.d("InCallPresenter.setUp", "Finished InCallPresenter.setUp");
     Trace.endSection();
   }
@@ -1458,6 +1469,8 @@
       }
       mCallList = null;
 
+      motorolaInCallUiNotifier = null;
+
       mContext = null;
       mInCallActivity = null;
       mManageConferenceActivity = null;
diff --git a/java/com/android/incallui/MotorolaInCallUiNotifier.java b/java/com/android/incallui/MotorolaInCallUiNotifier.java
new file mode 100644
index 0000000..9eae553
--- /dev/null
+++ b/java/com/android/incallui/MotorolaInCallUiNotifier.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * This file is derived in part from code issued under the following license.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package com.android.incallui;
+
+import android.content.Context;
+import android.content.Intent;
+import android.support.annotation.VisibleForTesting;
+import com.android.dialer.common.LogUtil;
+import com.android.incallui.InCallPresenter.InCallState;
+import com.android.incallui.InCallPresenter.InCallStateListener;
+import com.android.incallui.InCallPresenter.InCallUiListener;
+import com.android.incallui.call.CallList;
+
+/**
+ * Responsible for broadcasting the Intent INCOMING_CALL_VISIBILITY_CHANGED so other processes could
+ * know when the incoming call activity is started or finished.
+ */
+public class MotorolaInCallUiNotifier implements InCallUiListener, InCallStateListener {
+
+  @VisibleForTesting static final String EXTRA_VISIBLE_KEY = "visible";
+
+  @VisibleForTesting
+  static final String ACTION_INCOMING_CALL_VISIBILITY_CHANGED =
+      "com.motorola.incallui.action.INCOMING_CALL_VISIBILITY_CHANGED";
+
+  @VisibleForTesting
+  static final String PERMISSION_INCOMING_CALL_VISIBILITY_CHANGED =
+      "com.motorola.incallui.permission.INCOMING_CALL_VISIBILITY_CHANGED";
+
+  private final Context mContext;
+
+  MotorolaInCallUiNotifier(Context context) {
+    mContext = context;
+  }
+
+  @Override
+  public void onUiShowing(boolean showing) {
+    if (showing && CallList.getInstance().getIncomingCall() != null) {
+      sendInCallUiBroadcast(mContext, true);
+    }
+  }
+
+  @Override
+  public void onStateChange(InCallState oldState, InCallState newState, CallList callList) {
+    if (oldState != null
+        && oldState.isConnectingOrConnected()
+        && newState == InCallState.NO_CALLS) {
+      sendInCallUiBroadcast(mContext, false);
+    }
+  }
+
+  private void sendInCallUiBroadcast(Context context, boolean visible) {
+    LogUtil.d(
+        "MotorolaInCallUiNotifier.sendInCallUiBroadcast",
+        "Send InCallUi Broadcast, visible: " + visible);
+    Intent intent = new Intent();
+    intent.putExtra(EXTRA_VISIBLE_KEY, visible);
+    intent.setAction(ACTION_INCOMING_CALL_VISIBILITY_CHANGED);
+    context.sendBroadcast(intent, PERMISSION_INCOMING_CALL_VISIBILITY_CHANGED);
+  }
+}
