Merge "Fix showing CallingAccountSelector in lock screen"
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();
   }