Set audio selector window type TYPE_APPLICATION_OVERLAY

Bug: 74238896
Test: manual
PiperOrigin-RevId: 194983140
Change-Id: I7dda119fd97445906bb6df93726d475ba634f4e4
diff --git a/java/com/android/incallui/AndroidManifest.xml b/java/com/android/incallui/AndroidManifest.xml
index 7286b0d..b3d60d4 100644
--- a/java/com/android/incallui/AndroidManifest.xml
+++ b/java/com/android/incallui/AndroidManifest.xml
@@ -43,6 +43,9 @@
   <!-- Set Bluetooth device -->
   <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
 
+  <!-- Set audio selector window type TYPE_APPLICATION_OVERLAY -->
+  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
+
   <!-- Set android:taskAffinity="com.android.incallui" for all activities to ensure proper
   navigation. Otherwise system could bring up DialtactsActivity instead, e.g. when user unmerge a
   call.
diff --git a/java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java b/java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java
index cd17c25..8d0c952 100644
--- a/java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java
+++ b/java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java
@@ -24,8 +24,10 @@
 import android.content.res.ColorStateList;
 import android.graphics.PorterDuff.Mode;
 import android.os.Bundle;
+import android.provider.Settings;
 import android.support.annotation.Nullable;
 import android.support.design.widget.BottomSheetDialogFragment;
+import android.support.v4.os.BuildCompat;
 import android.telecom.CallAudioState;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -76,6 +78,14 @@
     LogUtil.i("AudioRouteSelectorDialogFragment.onCreateDialog", null);
     Dialog dialog = super.onCreateDialog(savedInstanceState);
     dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
+    if (Settings.canDrawOverlays(getContext())) {
+      dialog
+          .getWindow()
+          .setType(
+              BuildCompat.isAtLeastO()
+                  ? WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
+                  : WindowManager.LayoutParams.TYPE_PHONE);
+    }
     return dialog;
   }