diff options
author | Bryan Ferris <bferris@google.com> | 2019-09-18 17:11:12 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-09-18 17:11:12 +0000 |
commit | e06eb9f8f68cbbcc43aaedf8bf3bab8ca4fb4f3c (patch) | |
tree | 622c9df27b985853678e5215268c4e8d760113f0 | |
parent | 8121c02dfca40299316eed26f5ec5647af74ceb6 (diff) | |
parent | fab2f0fddbf28cf3ed8608ab9053b2c985d241f7 (diff) |
Merge "Require unlock for custom SMS dialog"
-rw-r--r-- | java/com/android/incallui/answer/impl/AnswerFragment.java | 49 |
1 files changed, 46 insertions, 3 deletions
diff --git a/java/com/android/incallui/answer/impl/AnswerFragment.java b/java/com/android/incallui/answer/impl/AnswerFragment.java index 8d8b08791..2405b8edd 100644 --- a/java/com/android/incallui/answer/impl/AnswerFragment.java +++ b/java/com/android/incallui/answer/impl/AnswerFragment.java @@ -22,10 +22,15 @@ import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.annotation.SuppressLint; +import android.annotation.TargetApi; +import android.app.KeyguardManager; +import android.app.KeyguardManager.KeyguardDismissCallback; import android.content.Context; import android.content.pm.PackageManager; import android.location.Location; import android.net.Uri; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -1052,14 +1057,47 @@ public class AnswerFragment extends Fragment } @Override + @TargetApi(VERSION_CODES.O) public void smsSelected(@Nullable CharSequence text) { LogUtil.i("AnswerFragment.smsSelected", null); textResponsesFragment = null; if (text == null) { - createCustomSmsDialogFragment = CreateCustomSmsDialogFragment.newInstance(); - createCustomSmsDialogFragment.show(getChildFragmentManager(), null); - return; + if (VERSION.SDK_INT < VERSION_CODES.O) { + LogUtil.i("AnswerFragment.smsSelected", "below O, showing dialog directly"); + showCustomSmsDialog(); + return; + } + if (!getContext().getSystemService(KeyguardManager.class).isKeyguardLocked()) { + LogUtil.i("AnswerFragment.smsSelected", "not locked, showing dialog directly"); + showCustomSmsDialog(); + return; + } + + // Show the custom reply dialog only after device is unlocked, as it may cause impersonation + // see b/137134588 + LogUtil.i("AnswerFragment.smsSelected", "dismissing keyguard"); + getContext() + .getSystemService(KeyguardManager.class) + .requestDismissKeyguard( + getActivity(), + new KeyguardDismissCallback() { + @Override + public void onDismissCancelled() { + LogUtil.i("AnswerFragment.smsSelected", "onDismissCancelled"); + } + + @Override + public void onDismissError() { + LogUtil.i("AnswerFragment.smsSelected", "onDismissError"); + } + + @Override + public void onDismissSucceeded() { + LogUtil.i("AnswerFragment.smsSelected", "onDismissSucceeded"); + showCustomSmsDialog(); + } + });return; } if (primaryCallState != null && canRejectCallWithSms()) { @@ -1068,6 +1106,11 @@ public class AnswerFragment extends Fragment } } + private void showCustomSmsDialog() { + createCustomSmsDialogFragment = CreateCustomSmsDialogFragment.newInstance(); + createCustomSmsDialogFragment.showNow(getChildFragmentManager(), null); + } + @Override public void smsDismissed() { LogUtil.i("AnswerFragment.smsDismissed", null); |