Use new instances of PreCallAction on activity resume

Previously the same action instance is used every time the PreCallActivity is resumed. This causes some state to be retain, for example the isDiscarding state on CallingAccountSelector prevents canceling the next dialog to abort the call.

Actions should not retain state between activity life cycles.

TEST=TAP
Bug: 79692264
Test: TAP
PiperOrigin-RevId: 196696224
Change-Id: Ifa604f431563dd1fb123a42e2a64b34c001e897d
diff --git a/java/com/android/dialer/precall/PreCall.java b/java/com/android/dialer/precall/PreCall.java
index 4f021f1..bd0aee5 100644
--- a/java/com/android/dialer/precall/PreCall.java
+++ b/java/com/android/dialer/precall/PreCall.java
@@ -22,19 +22,11 @@
 import android.support.annotation.NonNull;
 import com.android.dialer.callintent.CallIntentBuilder;
 import com.android.dialer.util.DialerUtils;
-import com.google.common.collect.ImmutableList;
 
 /** Interface to prepare a {@link CallIntentBuilder} before placing the call with telecom. */
 public interface PreCall {
 
   /**
-   * @return a list of {@link PreCallAction} in execution order for the {@link PreCallCoordinator}
-   *     to run.
-   */
-  @NonNull
-  ImmutableList<PreCallAction> getActions();
-
-  /**
    * @return a intent when started as activity, will perform the pre-call actions and then place a
    *     call. TODO(twyen): if all actions do not require an UI, return a intent that will place the
    *     call directly instead.
diff --git a/java/com/android/dialer/precall/PreCallAction.java b/java/com/android/dialer/precall/PreCallAction.java
index 9ddc6f2..298af08 100644
--- a/java/com/android/dialer/precall/PreCallAction.java
+++ b/java/com/android/dialer/precall/PreCallAction.java
@@ -25,6 +25,9 @@
  * CallIntentBuilder} to generate full information for the call. For example, showing a dialog to
  * select the phone account on a multi-SIM device, ask if RTT should be enabled, or rewrite the
  * number for roaming calls.
+ *
+ * <p>UI actions are discarded when the hosting activity is paused. A new instance of the action
+ * will be created once the activity is resumed again.
  */
 public interface PreCallAction {
 
diff --git a/java/com/android/dialer/precall/PreCallComponent.java b/java/com/android/dialer/precall/PreCallComponent.java
index 00adde5..859eb01 100644
--- a/java/com/android/dialer/precall/PreCallComponent.java
+++ b/java/com/android/dialer/precall/PreCallComponent.java
@@ -17,7 +17,9 @@
 package com.android.dialer.precall;
 
 import android.content.Context;
+import android.support.annotation.NonNull;
 import com.android.dialer.inject.HasRootComponent;
+import com.google.common.collect.ImmutableList;
 import dagger.Subcomponent;
 
 /** Daggaer component for {@link PreCall} */
@@ -25,6 +27,13 @@
 public abstract class PreCallComponent {
   public abstract PreCall getPreCall();
 
+  /**
+   * @return a list of {@link PreCallAction} in execution order for the {@link PreCallCoordinator}
+   *     to run.
+   */
+  @NonNull
+  public abstract ImmutableList<PreCallAction> createActions();
+
   public static PreCallComponent get(Context context) {
     return ((HasComponent) ((HasRootComponent) context.getApplicationContext()).component())
         .preCallActionsComponent();
diff --git a/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java b/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java
index 240549c..314a0a0 100644
--- a/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java
+++ b/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java
@@ -82,7 +82,7 @@
   }
 
   void onResume() {
-    actions = PreCallComponent.get(activity).getPreCall().getActions();
+    actions = PreCallComponent.get(activity).createActions();
     runNextAction();
   }
 
diff --git a/java/com/android/dialer/precall/impl/PreCallImpl.java b/java/com/android/dialer/precall/impl/PreCallImpl.java
index 2f9b278..f52fa61 100644
--- a/java/com/android/dialer/precall/impl/PreCallImpl.java
+++ b/java/com/android/dialer/precall/impl/PreCallImpl.java
@@ -39,11 +39,6 @@
     this.actions = actions;
   }
 
-  @Override
-  public ImmutableList<PreCallAction> getActions() {
-    return actions;
-  }
-
   @NonNull
   @Override
   public Intent buildIntent(Context context, CallIntentBuilder builder) {
diff --git a/java/com/android/dialer/precall/impl/PreCallModule.java b/java/com/android/dialer/precall/impl/PreCallModule.java
index fa78cba..cbdabe3 100644
--- a/java/com/android/dialer/precall/impl/PreCallModule.java
+++ b/java/com/android/dialer/precall/impl/PreCallModule.java
@@ -38,7 +38,6 @@
   public abstract PreCall to(PreCallImpl impl);
 
   @Provides
-  @Singleton
   public static ImmutableList<PreCallAction> provideActions(
       DuoAction duoAction, CallingAccountSelector callingAccountSelector) {
     return ImmutableList.of(