diff --git a/java/com/android/incallui/AndroidManifest.xml b/java/com/android/incallui/AndroidManifest.xml
index 6967f88..d854a7f 100644
--- a/java/com/android/incallui/AndroidManifest.xml
+++ b/java/com/android/incallui/AndroidManifest.xml
@@ -15,8 +15,7 @@
   -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.android.incallui"
-    xmlns:tools="http://schemas.android.com/tools">
+    package="com.android.incallui">
 
   <uses-sdk
       android:minSdkVersion="23"
@@ -38,13 +37,6 @@
   <!-- 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 79e5180..c5310b9 100644
--- a/java/com/android/incallui/InCallPresenter.java
+++ b/java/com/android/incallui/InCallPresenter.java
@@ -260,8 +260,6 @@
   private VideoSurfaceTexture mLocalVideoSurfaceTexture;
   private VideoSurfaceTexture mRemoteVideoSurfaceTexture;
 
-  private MotorolaInCallUiNotifier motorolaInCallUiNotifier;
-
   /** Inaccessible constructor. Must use getRunningInstance() to get this singleton. */
   @VisibleForTesting
   InCallPresenter() {}
@@ -384,15 +382,6 @@
 
     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();
   }
@@ -1469,8 +1458,6 @@
       }
       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
deleted file mode 100644
index 9eae553..0000000
--- a/java/com/android/incallui/MotorolaInCallUiNotifier.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * 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);
-  }
-}
