From 1fb1c697a2b71ed629df76c4be129729f3cb6aea Mon Sep 17 00:00:00 2001 From: twyen Date: Tue, 21 Nov 2017 17:54:34 -0800 Subject: 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 --- .../dialer/precall/impl/AndroidManifest.xml | 1 + .../precall/impl/CallingAccountSelector.java | 24 +++++++++++++--------- .../dialer/precall/impl/PreCallActivity.java | 2 ++ .../precall/impl/PreCallCoordinatorImpl.java | 2 +- 4 files changed, 18 insertions(+), 11 deletions(-) (limited to 'java/com/android/dialer/precall') diff --git a/java/com/android/dialer/precall/impl/AndroidManifest.xml b/java/com/android/dialer/precall/impl/AndroidManifest.xml index d3d0f538d..b960f6bad 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"> diff --git a/java/com/android/dialer/precall/impl/CallingAccountSelector.java b/java/com/android/dialer/precall/impl/CallingAccountSelector.java index 144d94e20..4d2e6063a 100644 --- a/java/com/android/dialer/precall/impl/CallingAccountSelector.java +++ b/java/com/android/dialer/precall/impl/CallingAccountSelector.java @@ -119,12 +119,12 @@ public class CallingAccountSelector implements PreCallAction { 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 @@ public class CallingAccountSelector implements PreCallAction { @Override public void onDiscard() { isDiscarding = true; - selectPhoneAccountDialogFragment.dismiss(); + if (selectPhoneAccountDialogFragment != null) { + selectPhoneAccountDialogFragment.dismiss(); + } } private static class PreferredAccountWorkerResult { @@ -353,11 +355,13 @@ public class CallingAccountSelector implements PreCallAction { 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 938d31d5f..eadba2b11 100644 --- a/java/com/android/dialer/precall/impl/PreCallActivity.java +++ b/java/com/android/dialer/precall/impl/PreCallActivity.java @@ -19,6 +19,7 @@ package com.android.dialer.precall.impl; 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 @@ public class PreCallActivity extends Activity { 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 de32cc2ae..94ba90d75 100644 --- a/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java +++ b/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java @@ -59,7 +59,6 @@ public class PreCallCoordinatorImpl implements PreCallCoordinator { } else { builder = Assert.isNotNull(intent.getParcelableExtra(EXTRA_CALL_INTENT_BUILDER)); } - actions = PreCallComponent.get(activity).getPreCall().getActions(); } void onRestoreInstanceState(Bundle savedInstanceState) { @@ -68,6 +67,7 @@ public class PreCallCoordinatorImpl implements PreCallCoordinator { } void onResume() { + actions = PreCallComponent.get(activity).getPreCall().getActions(); runNextAction(); } -- cgit v1.2.3