Allow CallingAccountSelector to be shown when the device is locked.

Bug: 80408180
Test: PreCallActivityTest + Manual testing on a Moto device
PiperOrigin-RevId: 199387969
Change-Id: I81d19e22f5a26676eb725b32148c43afd43d3119
diff --git a/java/com/android/dialer/precall/impl/PreCallActivity.java b/java/com/android/dialer/precall/impl/PreCallActivity.java
index ee417b9..7b27945 100644
--- a/java/com/android/dialer/precall/impl/PreCallActivity.java
+++ b/java/com/android/dialer/precall/impl/PreCallActivity.java
@@ -16,11 +16,8 @@
 
 package com.android.dialer.precall.impl;
 
-import android.annotation.TargetApi;
 import android.app.Activity;
 import android.app.KeyguardManager;
-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;
@@ -36,8 +33,32 @@
     preCallCoordinator = new PreCallCoordinatorImpl(this);
     preCallCoordinator.onCreate(getIntent(), savedInstanceState);
     if (getSystemService(KeyguardManager.class).isKeyguardLocked()) {
-        getWindow().addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
-
+      // Note:
+      //
+      // Flag LayoutParams.FLAG_TURN_SCREEN_ON was deprecated in O_MR1, but calling the new API
+      // setTurnScreenOn(true) doesn't give us the expected behavior.
+      //
+      // Calling setTurnScreenOn(true) alone doesn't turn on the screen when the device is locked.
+      // We must also call KeyguardManager#requestDismissKeyguard, which will bring up the lock
+      // screen for the user to enter their credentials.
+      //
+      // If the Keyguard is not secure or the device is currently in a trusted state, calling
+      // requestDismissKeyguard will immediately dismiss the Keyguard without any user interaction.
+      // However, the lock screen will still pop up before it quickly disappears.
+      //
+      // If the Keyguard is secure and the device is not in a trusted state, the device will show
+      // the lock screen and wait for the user's credentials.
+      //
+      // Therefore, to avoid showing the lock screen, we will continue using the deprecated flag in
+      // O_MR1 and later Android versions.
+      //
+      // Flag LayoutParams.FLAG_SHOW_WHEN_LOCKED was also deprecated in O_MR1, and the new API
+      // setShowWhenLocked(boolean) works. However, as the purpose of the two new APIs is to prevent
+      // an unintentional double life-cycle event, only using one is ineffective.
+      //
+      // Therefore, to simplify code and make testing easier, we will also keep using
+      // LayoutParams.FLAG_SHOW_WHEN_LOCKED.
+      getWindow().addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED | LayoutParams.FLAG_TURN_SCREEN_ON);
     }
   }