diff --git a/java/com/android/incallui/incall/impl/InCallFragment.java b/java/com/android/incallui/incall/impl/InCallFragment.java
index e02369a..ed194f4 100644
--- a/java/com/android/incallui/incall/impl/InCallFragment.java
+++ b/java/com/android/incallui/incall/impl/InCallFragment.java
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
- * Copyright (C) 2023 The LineageOS Project
+ * Copyright (C) 2023-2024 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.
@@ -17,6 +17,7 @@
 
 package com.android.incallui.incall.impl;
 
+import android.Manifest;
 import android.Manifest.permission;
 import android.annotation.SuppressLint;
 import android.app.Activity;
@@ -101,6 +102,7 @@
   private int voiceNetworkType;
   private int phoneType;
   private boolean stateRestored;
+  private boolean userDeniedBluetooth;
 
   private final ActivityResultLauncher<String[]> permissionLauncher = registerForActivityResult(
           new ActivityResultContracts.RequestMultiplePermissions(),
@@ -111,6 +113,17 @@
             }
           });
 
+  private final ActivityResultLauncher<String[]> bluetoothPermissionLauncher =
+          registerForActivityResult(
+                  new ActivityResultContracts.RequestMultiplePermissions(),
+                  grantResults -> {
+                    boolean allGranted = grantResults.values().stream().allMatch(x -> x);
+                    inCallButtonUiDelegate.showAudioRouteSelector();
+                    if (!allGranted) {
+                      userDeniedBluetooth = true;
+                    }
+                  });
+
   // Add animation to educate users. If a call has enriched calling attachments then we'll
   // initially show the attachment page. After a delay seconds we'll animate to the button grid.
   private final Handler handler = new Handler(Looper.getMainLooper());
@@ -509,8 +522,22 @@
 
   @Override
   public void showAudioRouteSelector() {
-    AudioRouteSelectorDialogFragment.newInstance(inCallButtonUiDelegate.getCurrentAudioState())
-        .show(getChildFragmentManager(), null);
+    String[] permissions = new String[]{Manifest.permission.BLUETOOTH_CONNECT};
+    if (hasAllPermissions(permissions) || userDeniedBluetooth) {
+      AudioRouteSelectorDialogFragment.newInstance(inCallButtonUiDelegate.getCurrentAudioState())
+              .show(getChildFragmentManager(), null);
+    } else {
+      bluetoothPermissionLauncher.launch(permissions);
+    }
+  }
+
+  private boolean hasAllPermissions(String[] permissions) {
+    for (String p : permissions) {
+      if (requireContext().checkSelfPermission(p) != PackageManager.PERMISSION_GRANTED) {
+        return false;
+      }
+    }
+    return true;
   }
 
   @Override
