diff --git a/java/com/android/dialer/precall/impl/CallingAccountSelector.java b/java/com/android/dialer/precall/impl/CallingAccountSelector.java
index 4308df7..8d3df23 100644
--- a/java/com/android/dialer/precall/impl/CallingAccountSelector.java
+++ b/java/com/android/dialer/precall/impl/CallingAccountSelector.java
@@ -127,12 +127,12 @@
     PendingAction pendingAction = coordinator.startPendingAction();
     DialerExecutorComponent.get(coordinator.getActivity())
         .dialerExecutorFactory()
-        .createUiTaskBuilder(
-            activity.getFragmentManager(),
-            "PreferredAccountWorker",
-            new PreferredAccountWorker(phoneNumber))
+        .createNonUiTaskBuilder(new PreferredAccountWorker(phoneNumber))
         .onSuccess(
             (result -> {
+              if (isDiscarding) {
+                return;
+              }
               if (result.phoneAccountHandle.isPresent()) {
                 coordinator.getBuilder().setPhoneAccountHandle(result.phoneAccountHandle.get());
                 pendingAction.finish();
@@ -221,7 +221,9 @@
   @Override
   public void onDiscard() {
     isDiscarding = true;
-    selectPhoneAccountDialogFragment.dismiss();
+    if (selectPhoneAccountDialogFragment != null) {
+      selectPhoneAccountDialogFragment.dismiss();
+    }
   }
 
   private static class PreferredAccountWorkerResult {
@@ -364,11 +366,13 @@
                 new WritePreferredAccountWorkerInput(
                     coordinator.getActivity(), dataId, selectedAccountHandle));
       }
-      DialerExecutorComponent.get(coordinator.getActivity())
-          .dialerExecutorFactory()
-          .createNonUiTaskBuilder(new UserSelectionReporter(selectedAccountHandle, number))
-          .build()
-          .executeParallel(coordinator.getActivity());
+      if (number != null) {
+        DialerExecutorComponent.get(coordinator.getActivity())
+            .dialerExecutorFactory()
+            .createNonUiTaskBuilder(new UserSelectionReporter(selectedAccountHandle, number))
+            .build()
+            .executeParallel(coordinator.getActivity());
+      }
       listener.finish();
     }
 
diff --git a/java/com/android/dialer/precall/impl/PreCallActivity.java b/java/com/android/dialer/precall/impl/PreCallActivity.java
index 938d31d..48c2fbf 100644
--- a/java/com/android/dialer/precall/impl/PreCallActivity.java
+++ b/java/com/android/dialer/precall/impl/PreCallActivity.java
@@ -16,9 +16,13 @@
 
 package com.android.dialer.precall.impl;
 
+import android.annotation.TargetApi;
 import android.app.Activity;
+import android.os.Build.VERSION;
+import android.os.Build.VERSION_CODES;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
+import android.view.WindowManager.LayoutParams;
 
 /** A transparent activity to host dialogs for {@link PreCallCoordinatorImpl} */
 public class PreCallActivity extends Activity {
@@ -30,6 +34,8 @@
     super.onCreate(savedInstanceState);
     preCallCoordinator = new PreCallCoordinatorImpl(this);
     preCallCoordinator.onCreate(getIntent(), savedInstanceState);
+      getWindow().addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
+
   }
 
   @Override
diff --git a/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java b/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java
index de32cc2..94ba90d 100644
--- a/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java
+++ b/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java
@@ -59,7 +59,6 @@
     } else {
       builder = Assert.isNotNull(intent.getParcelableExtra(EXTRA_CALL_INTENT_BUILDER));
     }
-    actions = PreCallComponent.get(activity).getPreCall().getActions();
   }
 
   void onRestoreInstanceState(Bundle savedInstanceState) {
@@ -68,6 +67,7 @@
   }
 
   void onResume() {
+    actions = PreCallComponent.get(activity).getPreCall().getActions();
     runNextAction();
   }
 
