Fix showing CallingAccountSelector in lock screen
android:showWhenLocked and FLAG_SHOW_WHEN_LOCKED is added to PreCallActivity so it can be launched in lockscreen.
PreCallCoordinator now grabs new instances of PreCallActions onResume so the state can be flushed. If it is reused states like PendingAction might be used after it is discarded.
Added null check before discarding fragment because it might not be created yet due to background query.
Bug: 69570769
Test: CallingAccountSelectorTest
PiperOrigin-RevId: 176587256
Change-Id: Iaa7145e860136e9177f568e2c84461ed5efa12a1
diff --git a/java/com/android/dialer/precall/impl/AndroidManifest.xml b/java/com/android/dialer/precall/impl/AndroidManifest.xml
index d3d0f53..b960f6b 100644
--- a/java/com/android/dialer/precall/impl/AndroidManifest.xml
+++ b/java/com/android/dialer/precall/impl/AndroidManifest.xml
@@ -23,6 +23,7 @@
android:name="com.android.dialer.precall.impl.PreCallActivity"
android:excludeFromRecents="true"
android:noHistory="true"
+ android:showWhenLocked="true"
android:theme="@style/Theme.PreCall.DialogHolder">
</activity>
</application>
diff --git a/java/com/android/dialer/precall/impl/CallingAccountSelector.java b/java/com/android/dialer/precall/impl/CallingAccountSelector.java
index 144d94e..4d2e606 100644
--- a/java/com/android/dialer/precall/impl/CallingAccountSelector.java
+++ b/java/com/android/dialer/precall/impl/CallingAccountSelector.java
@@ -119,12 +119,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();
@@ -213,7 +213,9 @@
@Override
public void onDiscard() {
isDiscarding = true;
- selectPhoneAccountDialogFragment.dismiss();
+ if (selectPhoneAccountDialogFragment != null) {
+ selectPhoneAccountDialogFragment.dismiss();
+ }
}
private static class PreferredAccountWorkerResult {
@@ -353,11 +355,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..eadba2b 100644
--- a/java/com/android/dialer/precall/impl/PreCallActivity.java
+++ b/java/com/android/dialer/precall/impl/PreCallActivity.java
@@ -19,6 +19,7 @@
import android.app.Activity;
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 +31,7 @@
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();
}