diff --git a/src/com/android/car/dialer/ui/activecall/InCallActivity.java b/src/com/android/car/dialer/ui/activecall/InCallActivity.java
index e374564..7b8215c 100644
--- a/src/com/android/car/dialer/ui/activecall/InCallActivity.java
+++ b/src/com/android/car/dialer/ui/activecall/InCallActivity.java
@@ -31,6 +31,7 @@
 import com.android.car.dialer.Constants;
 import com.android.car.dialer.R;
 import com.android.car.dialer.log.L;
+import com.android.car.dialer.notification.InCallNotificationController;
 
 import java.util.List;
 
@@ -41,6 +42,7 @@
     private Fragment mIncomingCallFragment;
 
     private MutableLiveData<Boolean> mShowIncomingCall;
+    private LiveData<Call> mIncomingCallLiveData;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -56,16 +58,26 @@
 
         mShowIncomingCall = new MutableLiveData();
         InCallViewModel inCallViewModel = ViewModelProviders.of(this).get(InCallViewModel.class);
-        LiveData<Call> incomingCallLiveData = LiveDataFunctions.iff(mShowIncomingCall,
+        mIncomingCallLiveData = LiveDataFunctions.iff(mShowIncomingCall,
                 inCallViewModel.getIncomingCall());
-        incomingCallLiveData.observe(this, this::updateIncomingCallVisibility);
-        LiveDataFunctions.pair(inCallViewModel.getOngoingCallList(), incomingCallLiveData).observe(
+        mIncomingCallLiveData.observe(this, this::updateIncomingCallVisibility);
+        LiveDataFunctions.pair(inCallViewModel.getOngoingCallList(), mIncomingCallLiveData).observe(
                 this, this::maybeFinishActivity);
 
         handleIntent();
     }
 
     @Override
+    protected void onStop() {
+        super.onStop();
+        L.d(TAG, "onStop");
+        if (mShowIncomingCall.getValue()) {
+            InCallNotificationController.get()
+                    .showInCallNotification(mIncomingCallLiveData.getValue());
+        }
+    }
+
+    @Override
     protected void onNewIntent(Intent i) {
         super.onNewIntent(i);
         L.d(TAG, "onNewIntent");
diff --git a/src/com/android/car/dialer/ui/activecall/InCallViewModel.java b/src/com/android/car/dialer/ui/activecall/InCallViewModel.java
index f5f8704..bcb9753 100644
--- a/src/com/android/car/dialer/ui/activecall/InCallViewModel.java
+++ b/src/com/android/car/dialer/ui/activecall/InCallViewModel.java
@@ -78,6 +78,9 @@
         public void onServiceConnected(ComponentName name, IBinder binder) {
             L.d(TAG, "onServiceConnected: %s, service: %s", name, binder);
             mInCallService = ((InCallServiceImpl.LocalBinder) binder).getService();
+            for (Call call : mInCallService.getCalls()) {
+                call.registerCallback(mCallStateChangedCallback);
+            }
             updateCallList();
             mInCallService.addActiveCallListChangedCallback(InCallViewModel.this);
         }
@@ -235,6 +238,9 @@
     protected void onCleared() {
         mContext.unbindService(mInCallServiceConnection);
         if (mInCallService != null) {
+            for (Call call : mInCallService.getCalls()) {
+                call.unregisterCallback(mCallStateChangedCallback);
+            }
             mInCallService.removeActiveCallListChangedCallback(this);
         }
         mInCallService = null;
