Merge branch 'security-aosp-qt-release' into int/10/fp2

* security-aosp-qt-release:
  No longer export CallSubjectDialog

Change-Id: I45b35d05267a09ad93d53306406f305a61e8a684
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index b50aa28..e14eab2 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -112,7 +112,7 @@
 
   <application
     android:hardwareAccelerated="true"
-    android:icon="@mipmap/ic_launcher_phone"
+    android:icon="@mipmap/ic_launcher"
     android:label="@string/applicationLabel"
     android:name="com.android.dialer.binary.aosp.AospDialerApplication"
     android:supportsRtl="true"
diff --git a/java/com/android/dialer/app/res/mipmap-anydpi/ic_launcher.xml b/java/com/android/dialer/app/res/mipmap-anydpi/ic_launcher.xml
new file mode 100644
index 0000000..d8649ba
--- /dev/null
+++ b/java/com/android/dialer/app/res/mipmap-anydpi/ic_launcher.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (c) 2018 The LineageOS Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@mipmap/ic_background"/>
+    <foreground android:drawable="@mipmap/ic_foreground"/>
+</adaptive-icon>
+
diff --git a/java/com/android/dialer/app/res/mipmap-hdpi/ic_background.png b/java/com/android/dialer/app/res/mipmap-hdpi/ic_background.png
new file mode 100644
index 0000000..d0f68ba
--- /dev/null
+++ b/java/com/android/dialer/app/res/mipmap-hdpi/ic_background.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/mipmap-hdpi/ic_foreground.png b/java/com/android/dialer/app/res/mipmap-hdpi/ic_foreground.png
new file mode 100644
index 0000000..65f15fc
--- /dev/null
+++ b/java/com/android/dialer/app/res/mipmap-hdpi/ic_foreground.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/mipmap-hdpi/ic_launcher_phone.png b/java/com/android/dialer/app/res/mipmap-hdpi/ic_launcher_phone.png
deleted file mode 100644
index 0d1769a..0000000
--- a/java/com/android/dialer/app/res/mipmap-hdpi/ic_launcher_phone.png
+++ /dev/null
Binary files differ
diff --git a/java/com/android/dialer/app/res/mipmap-mdpi/ic_background.png b/java/com/android/dialer/app/res/mipmap-mdpi/ic_background.png
new file mode 100644
index 0000000..55f05fe
--- /dev/null
+++ b/java/com/android/dialer/app/res/mipmap-mdpi/ic_background.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/mipmap-mdpi/ic_foreground.png b/java/com/android/dialer/app/res/mipmap-mdpi/ic_foreground.png
new file mode 100644
index 0000000..049a633
--- /dev/null
+++ b/java/com/android/dialer/app/res/mipmap-mdpi/ic_foreground.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/mipmap-mdpi/ic_launcher_phone.png b/java/com/android/dialer/app/res/mipmap-mdpi/ic_launcher_phone.png
deleted file mode 100644
index 667fc5d..0000000
--- a/java/com/android/dialer/app/res/mipmap-mdpi/ic_launcher_phone.png
+++ /dev/null
Binary files differ
diff --git a/java/com/android/dialer/app/res/mipmap-xhdpi/ic_background.png b/java/com/android/dialer/app/res/mipmap-xhdpi/ic_background.png
new file mode 100644
index 0000000..6076ed3
--- /dev/null
+++ b/java/com/android/dialer/app/res/mipmap-xhdpi/ic_background.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/mipmap-xhdpi/ic_foreground.png b/java/com/android/dialer/app/res/mipmap-xhdpi/ic_foreground.png
new file mode 100644
index 0000000..4dc42ff
--- /dev/null
+++ b/java/com/android/dialer/app/res/mipmap-xhdpi/ic_foreground.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/mipmap-xhdpi/ic_launcher_phone.png b/java/com/android/dialer/app/res/mipmap-xhdpi/ic_launcher_phone.png
deleted file mode 100644
index 2298d0d..0000000
--- a/java/com/android/dialer/app/res/mipmap-xhdpi/ic_launcher_phone.png
+++ /dev/null
Binary files differ
diff --git a/java/com/android/dialer/app/res/mipmap-xxhdpi/ic_background.png b/java/com/android/dialer/app/res/mipmap-xxhdpi/ic_background.png
new file mode 100644
index 0000000..83d4bb9
--- /dev/null
+++ b/java/com/android/dialer/app/res/mipmap-xxhdpi/ic_background.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/mipmap-xxhdpi/ic_foreground.png b/java/com/android/dialer/app/res/mipmap-xxhdpi/ic_foreground.png
new file mode 100644
index 0000000..0bb6676
--- /dev/null
+++ b/java/com/android/dialer/app/res/mipmap-xxhdpi/ic_foreground.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/mipmap-xxhdpi/ic_launcher_phone.png b/java/com/android/dialer/app/res/mipmap-xxhdpi/ic_launcher_phone.png
deleted file mode 100644
index b269b5a..0000000
--- a/java/com/android/dialer/app/res/mipmap-xxhdpi/ic_launcher_phone.png
+++ /dev/null
Binary files differ
diff --git a/java/com/android/dialer/app/res/mipmap-xxxhdpi/ic_background.png b/java/com/android/dialer/app/res/mipmap-xxxhdpi/ic_background.png
new file mode 100644
index 0000000..fba7110
--- /dev/null
+++ b/java/com/android/dialer/app/res/mipmap-xxxhdpi/ic_background.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/mipmap-xxxhdpi/ic_foreground.png b/java/com/android/dialer/app/res/mipmap-xxxhdpi/ic_foreground.png
new file mode 100644
index 0000000..1de54c0
--- /dev/null
+++ b/java/com/android/dialer/app/res/mipmap-xxxhdpi/ic_foreground.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/mipmap-xxxhdpi/ic_launcher_phone.png b/java/com/android/dialer/app/res/mipmap-xxxhdpi/ic_launcher_phone.png
deleted file mode 100644
index dbc76f3..0000000
--- a/java/com/android/dialer/app/res/mipmap-xxxhdpi/ic_launcher_phone.png
+++ /dev/null
Binary files differ
diff --git a/java/com/android/incallui/answer/impl/AnswerFragment.java b/java/com/android/incallui/answer/impl/AnswerFragment.java
index 8d8b087..2405b8e 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.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 @@
   }
 
   @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 @@
     }
   }
 
+  private void showCustomSmsDialog() {
+    createCustomSmsDialogFragment = CreateCustomSmsDialogFragment.newInstance();
+    createCustomSmsDialogFragment.showNow(getChildFragmentManager(), null);
+  }
+
   @Override
   public void smsDismissed() {
     LogUtil.i("AnswerFragment.smsDismissed", null);