diff --git a/java/com/android/dialer/main/MainActivityPeer.java b/java/com/android/dialer/main/MainActivityPeer.java
index 6457b60..c1a328a 100644
--- a/java/com/android/dialer/main/MainActivityPeer.java
+++ b/java/com/android/dialer/main/MainActivityPeer.java
@@ -28,6 +28,8 @@
 
   void onActivityStop();
 
+  void onActivityDestroyed();
+
   void onNewIntent(Intent intent);
 
   void onActivityResult(int requestCode, int resultCode, Intent data);
diff --git a/java/com/android/dialer/main/impl/MainSearchController.java b/java/com/android/dialer/main/impl/MainSearchController.java
index 7098f88..d0e593c 100644
--- a/java/com/android/dialer/main/impl/MainSearchController.java
+++ b/java/com/android/dialer/main/impl/MainSearchController.java
@@ -261,7 +261,7 @@
    * <p>Unless this method is being called for the first time in {@link #openSearch(Optional)} or
    * {@link #showDialpad(boolean)}, it should never return null.
    */
-  private DialpadFragment getDialpadFragment() {
+  protected DialpadFragment getDialpadFragment() {
     return (DialpadFragment)
         mainActivity.getFragmentManager().findFragmentByTag(DIALPAD_FRAGMENT_TAG);
   }
diff --git a/java/com/android/dialer/main/impl/NewMainActivityPeer.java b/java/com/android/dialer/main/impl/NewMainActivityPeer.java
index 0a85667..ed67df9 100644
--- a/java/com/android/dialer/main/impl/NewMainActivityPeer.java
+++ b/java/com/android/dialer/main/impl/NewMainActivityPeer.java
@@ -60,6 +60,9 @@
   public void onActivityStop() {}
 
   @Override
+  public void onActivityDestroyed() {}
+
+  @Override
   public void onNewIntent(Intent intent) {}
 
   @Override
diff --git a/java/com/android/dialer/main/impl/OldMainActivityPeer.java b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
index c46e61b..b639701 100644
--- a/java/com/android/dialer/main/impl/OldMainActivityPeer.java
+++ b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
@@ -191,7 +191,7 @@
     searchController = getNewMainSearchController(bottomNav, fab, toolbar);
     toolbar.setSearchBarListener(searchController);
 
-    onDialpadQueryChangedListener = new MainOnDialpadQueryChangedListener(searchController);
+    onDialpadQueryChangedListener = getNewOnDialpadQueryChangedListener(searchController);
     dialpadListener =
         new MainDialpadListener(mainActivity, searchController, getLastOutgoingCallListener);
     searchFragmentListener = new MainSearchFragmentListener(searchController);
@@ -285,6 +285,9 @@
         mainActivity.getSystemService(KeyguardManager.class).isKeyguardLocked());
   }
 
+  @Override
+  public void onActivityDestroyed() {}
+
   private void showPostCallPrompt() {
     if (TelecomUtil.isInManagedCall(mainActivity)) {
       // No prompt to show if the user is in a call
@@ -360,6 +363,11 @@
     return new MainSearchController(mainActivity, bottomNavBar, fab, mainToolbar);
   }
 
+  public MainOnDialpadQueryChangedListener getNewOnDialpadQueryChangedListener(
+      MainSearchController mainSearchController) {
+    return new MainOnDialpadQueryChangedListener(mainSearchController);
+  }
+
   /** @see OnContactSelectedListener */
   private static final class MainOnContactSelectedListener implements OnContactSelectedListener {
 
@@ -378,12 +386,12 @@
   }
 
   /** @see OnDialpadQueryChangedListener */
-  private static final class MainOnDialpadQueryChangedListener
+  protected static class MainOnDialpadQueryChangedListener
       implements OnDialpadQueryChangedListener {
 
     private final MainSearchController searchController;
 
-    MainOnDialpadQueryChangedListener(MainSearchController searchController) {
+    protected MainOnDialpadQueryChangedListener(MainSearchController searchController) {
       this.searchController = searchController;
     }
 
