diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java
index 01bdfc2..3e6b50c 100644
--- a/java/com/android/dialer/app/DialtactsActivity.java
+++ b/java/com/android/dialer/app/DialtactsActivity.java
@@ -516,7 +516,7 @@
 
   @Override
   protected void onResume() {
-    LogUtil.d("DialtactsActivity.onResume", "");
+    LogUtil.enterBlock("DialtactsActivity.onResume");
     Trace.beginSection(TAG + " onResume");
     super.onResume();
 
@@ -529,11 +529,14 @@
 
     mStateSaved = false;
     if (mFirstLaunch) {
+      LogUtil.i("DialtactsActivity.onResume", "mFirstLaunch true, displaying fragment");
       displayFragment(getIntent());
     } else if (!phoneIsInUse() && mInCallDialpadUp) {
+      LogUtil.i("DialtactsActivity.onResume", "phone not in use, hiding dialpad fragment");
       hideDialpadFragment(false, true);
       mInCallDialpadUp = false;
     } else if (mShowDialpadOnResume) {
+      LogUtil.i("DialtactsActivity.onResume", "showing dialpad on resume");
       showDialpadFragment(false);
       mShowDialpadOnResume = false;
     } else {
@@ -662,10 +665,11 @@
 
   @Override
   public void onAttachFragment(final Fragment fragment) {
-    LogUtil.d("DialtactsActivity.onAttachFragment", "fragment: %s", fragment);
+    LogUtil.i("DialtactsActivity.onAttachFragment", "fragment: %s", fragment);
     if (fragment instanceof DialpadFragment) {
       mDialpadFragment = (DialpadFragment) fragment;
       if (!mIsDialpadShown && !mShowDialpadOnResume) {
+        LogUtil.i("DialtactsActivity.onAttachFragment", "hiding dialpad fragment");
         final FragmentTransaction transaction = getFragmentManager().beginTransaction();
         transaction.hide(mDialpadFragment);
         transaction.commit();
@@ -830,8 +834,13 @@
    * @see #onDialpadShown
    */
   private void showDialpadFragment(boolean animate) {
-    LogUtil.d("DialtactActivity.showDialpadFragment", "animate: %b", animate);
-    if (mIsDialpadShown || mStateSaved) {
+    LogUtil.i("DialtactActivity.showDialpadFragment", "animate: %b", animate);
+    if (mIsDialpadShown) {
+      LogUtil.i("DialtactsActivity.showDialpadFragment", "dialpad already shown");
+      return;
+    }
+    if (mStateSaved) {
+      LogUtil.i("DialtactsActivity.showDialpadFragment", "state already saved");
       return;
     }
     mIsDialpadShown = true;
@@ -875,7 +884,7 @@
   /** Callback from child DialpadFragment when the dialpad is shown. */
   @Override
   public void onDialpadShown() {
-    LogUtil.d("DialtactsActivity.onDialpadShown", "");
+    LogUtil.enterBlock("DialtactsActivity.onDialpadShown");
     Assert.isNotNull(mDialpadFragment);
     if (mDialpadFragment.getAnimate()) {
       Assert.isNotNull(mDialpadFragment.getView()).startAnimation(mSlideIn);
@@ -894,6 +903,7 @@
    */
   @Override
   public void hideDialpadFragment(boolean animate, boolean clearDialpad) {
+    LogUtil.enterBlock("DialtactsActivity.hideDialpadFragment");
     if (mDialpadFragment == null || mDialpadFragment.getView() == null) {
       return;
     }
@@ -1081,11 +1091,17 @@
       return;
     }
 
-    final boolean showDialpadChooser =
+    boolean showDialpadChooser =
         !ACTION_SHOW_TAB.equals(intent.getAction())
             && phoneIsInUse()
             && !DialpadFragment.isAddCallMode(intent);
-    if (showDialpadChooser || (intent.getData() != null && isDialIntent(intent))) {
+    boolean isDialIntent = intent.getData() != null && isDialIntent(intent);
+    if (showDialpadChooser || isDialIntent) {
+      LogUtil.i(
+          "DialtactsActivity.displayFragment",
+          "showing dialpad fragment (showDialpadChooser: %b, isDialIntent: %b)",
+          showDialpadChooser,
+          isDialIntent);
       showDialpadFragment(false);
       mDialpadFragment.setStartedFromNewIntent(true);
       if (showDialpadChooser && !mDialpadFragment.isVisible()) {
@@ -1109,6 +1125,7 @@
 
   @Override
   public void onNewIntent(Intent newIntent) {
+    LogUtil.enterBlock("DialtactsActivity.onNewIntent");
     setIntent(newIntent);
     mFirstLaunch = true;
 
@@ -1135,17 +1152,19 @@
 
   /** Shows the search fragment */
   private void enterSearchUi(boolean smartDialSearch, String query, boolean animate) {
+    LogUtil.i("DialtactsActivity.enterSearchUi", "smart dial: %b", smartDialSearch);
     if (mStateSaved || getFragmentManager().isDestroyed()) {
       // Weird race condition where fragment is doing work after the activity is destroyed
       // due to talkback being on (b/10209937). Just return since we can't do any
       // constructive here.
+      LogUtil.i(
+          "DialtactsActivity.enterSearchUi",
+          "not entering search UI (mStateSaved: %b, isDestroyed: %b)",
+          mStateSaved,
+          getFragmentManager().isDestroyed());
       return;
     }
 
-    if (DEBUG) {
-      LogUtil.v("DialtactsActivity.enterSearchUi", "smart dial " + smartDialSearch);
-    }
-
     final FragmentTransaction transaction = getFragmentManager().beginTransaction();
     if (mInDialpadSearch && mSmartDialSearchFragment != null) {
       transaction.remove(mSmartDialSearchFragment);
@@ -1232,6 +1251,8 @@
 
   /** Hides the search fragment */
   private void exitSearchUi() {
+    LogUtil.enterBlock("DialtactsActivity.exitSearchUi");
+
     // See related bug in enterSearchUI();
     if (getFragmentManager().isDestroyed() || mStateSaved) {
       return;
diff --git a/java/com/android/dialer/app/calllog/CallLogFragment.java b/java/com/android/dialer/app/calllog/CallLogFragment.java
index 6d4aea9..441cb4a 100644
--- a/java/com/android/dialer/app/calllog/CallLogFragment.java
+++ b/java/com/android/dialer/app/calllog/CallLogFragment.java
@@ -201,7 +201,7 @@
 
   @Override
   public void onCreate(Bundle state) {
-    LogUtil.d("CallLogFragment.onCreate", toString());
+    LogUtil.enterBlock("CallLogFragment.onCreate");
     super.onCreate(state);
     mRefreshDataRequired = true;
     if (state != null) {
@@ -362,6 +362,7 @@
 
   @Override
   public void onActivityCreated(Bundle savedInstanceState) {
+    LogUtil.enterBlock("CallLogFragment.onActivityCreated");
     super.onActivityCreated(savedInstanceState);
     setupData();
     updateSelectAllState(savedInstanceState);
@@ -384,7 +385,7 @@
 
   @Override
   public void onResume() {
-    LogUtil.d("CallLogFragment.onResume", toString());
+    LogUtil.enterBlock("CallLogFragment.onResume");
     super.onResume();
     final boolean hasReadCallLogPermission =
         PermissionsUtil.hasPermission(getActivity(), READ_CALL_LOG);
@@ -411,7 +412,7 @@
 
   @Override
   public void onPause() {
-    LogUtil.d("CallLogFragment.onPause", toString());
+    LogUtil.enterBlock("CallLogFragment.onPause");
     cancelDisplayUpdate();
     mAdapter.onPause();
     super.onPause();
@@ -419,6 +420,7 @@
 
   @Override
   public void onStart() {
+    LogUtil.enterBlock("CallLogFragment.onStart");
     super.onStart();
     CequintCallerIdManager cequintCallerIdManager = null;
     if (CequintCallerIdManager.isCequintCallerIdEnabled(getContext())) {
@@ -429,6 +431,7 @@
 
   @Override
   public void onStop() {
+    LogUtil.enterBlock("CallLogFragment.onStop");
     super.onStop();
     mAdapter.onStop();
     mContactInfoCache.stop();
@@ -436,7 +439,7 @@
 
   @Override
   public void onDestroy() {
-    LogUtil.d("CallLogFragment.onDestroy", toString());
+    LogUtil.enterBlock("CallLogFragment.onDestroy");
     mAdapter.changeCursor(null);
 
     getActivity().getContentResolver().unregisterContentObserver(mCallLogObserver);
@@ -552,6 +555,7 @@
           "Requesting permissions: " + Arrays.toString(deniedPermissions));
       FragmentCompat.requestPermissions(this, deniedPermissions, PHONE_PERMISSIONS_REQUEST_CODE);
     } else if (!mIsCallLogActivity) {
+      LogUtil.i("CallLogFragment.onEmptyViewActionButtonClicked", "showing dialpad");
       // Show dialpad if we are not in the call log activity.
       ((HostInterface) activity).showDialpad();
     }
diff --git a/java/com/android/dialer/dialpadview/DialpadFragment.java b/java/com/android/dialer/dialpadview/DialpadFragment.java
index c15014f..e22250c 100644
--- a/java/com/android/dialer/dialpadview/DialpadFragment.java
+++ b/java/com/android/dialer/dialpadview/DialpadFragment.java
@@ -317,6 +317,7 @@
   @Override
   public void onCreate(Bundle state) {
     Trace.beginSection(TAG + " onCreate");
+    LogUtil.enterBlock("DialpadFragment.onCreate");
     super.onCreate(state);
 
     mFirstLaunch = state == null;
@@ -352,6 +353,7 @@
   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
     Trace.beginSection(TAG + " onCreateView");
+    LogUtil.enterBlock("DialpadFragment.onCreateView");
     Trace.beginSection(TAG + " inflate view");
     View fragmentView = inflater.inflate(R.layout.dialpad_fragment, container, false);
     Trace.endSection();
@@ -393,6 +395,7 @@
             (v, event) -> {
               if (isDigitsEmpty()) {
                 if (getActivity() != null) {
+                  LogUtil.i("DialpadFragment.onCreateView", "dialpad spacer touched");
                   return ((HostInterface) getActivity()).onDialpadSpacerTouchWithEmptyQuery();
                 }
                 return true;
@@ -486,12 +489,16 @@
    * screen to enter "Add Call" mode, this method will show correct UI for the mode.
    */
   private void configureScreenFromIntent(Activity parent) {
+    LogUtil.enterBlock("DialpadFragment.configureScreenFromIntent");
+
     // If we were not invoked with a DIAL intent
     if (!Intent.ACTION_DIAL.equals(parent.getIntent().getAction())) {
       setStartedFromNewIntent(false);
       return;
     }
 
+    LogUtil.i("DialpadFragment.configureScreenFromIntent", "dial intent");
+
     // See if we were invoked with a DIAL intent. If we were, fill in the appropriate
     // digits in the dialer field.
     Intent intent = parent.getIntent();
@@ -521,6 +528,7 @@
       if (!(mStartedFromNewIntent && digitsFilled)) {
 
         final String action = intent.getAction();
+        LogUtil.i("DialpadFragment.configureScreenFromIntent", "action: %s", action);
         if (Intent.ACTION_DIAL.equals(action)
             || Intent.ACTION_VIEW.equals(action)
             || Intent.ACTION_MAIN.equals(action)) {
@@ -532,6 +540,10 @@
         }
       }
     }
+    LogUtil.i(
+        "DialpadFragment.configureScreenFromIntent",
+        "needToShowDialpadChooser? %b",
+        needToShowDialpadChooser);
     showDialpadChooser(needToShowDialpadChooser);
     setStartedFromNewIntent(false);
   }
@@ -595,7 +607,7 @@
 
   @Override
   public void onStart() {
-    LogUtil.d("DialpadFragment.onStart", "first launch: %b", mFirstLaunch);
+    LogUtil.i("DialpadFragment.onStart", "first launch: %b", mFirstLaunch);
     Trace.beginSection(TAG + " onStart");
     super.onStart();
     // if the mToneGenerator creation fails, just continue without it.  It is
@@ -622,7 +634,7 @@
 
   @Override
   public void onResume() {
-    LogUtil.d("DialpadFragment.onResume", "");
+    LogUtil.enterBlock("DialpadFragment.onResume");
     Trace.beginSection(TAG + " onResume");
     super.onResume();
 
@@ -662,6 +674,7 @@
     stopWatch.lap("fdin");
 
     if (!isPhoneInUse()) {
+      LogUtil.i("DialpadFragment.onResume", "phone not in use");
       // A sanity-check: the "dialpad chooser" UI should not be visible if the phone is idle.
       showDialpadChooser(false);
     }
@@ -711,6 +724,7 @@
 
   @Override
   public void onStop() {
+    LogUtil.enterBlock("DialpadFragment.onStop");
     super.onStop();
 
     synchronized (mToneGeneratorLock) {
@@ -991,6 +1005,7 @@
   }
 
   private void hideAndClearDialpad(boolean animate) {
+    LogUtil.enterBlock("DialpadFragment.hideAndClearDialpad");
     FragmentUtils.getParentUnsafe(this, DialpadListener.class).hideDialpadFragment(animate, true);
   }
 
@@ -1194,8 +1209,10 @@
     } else {
       LogUtil.i("DialpadFragment.showDialpadChooser", "Displaying normal Dialer UI.");
       if (mDialpadView != null) {
+        LogUtil.i("DialpadFragment.showDialpadChooser", "mDialpadView not null");
         mDialpadView.setVisibility(View.VISIBLE);
       } else {
+        LogUtil.i("DialpadFragment.showDialpadChooser", "mDialpadView null");
         mDigits.setVisibility(View.VISIBLE);
       }
 
@@ -1681,6 +1698,7 @@
         // one of the choices, which would be confusing.  (But at
         // least that's better than leaving the dialpad chooser
         // onscreen, but useless...)
+        LogUtil.i("CallStateReceiver.onReceive", "hiding dialpad chooser, state: %s", state);
         showDialpadChooser(false);
       }
     }
