diff options
-rw-r--r-- | java/com/android/dialer/precall/impl/PreCallActivity.java | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/java/com/android/dialer/precall/impl/PreCallActivity.java b/java/com/android/dialer/precall/impl/PreCallActivity.java index ee417b968..7b27945e5 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 @@ public class PreCallActivity extends Activity { 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); } } |