diff --git a/src/com/android/settings/development/bluetooth/AbstractBluetoothListPreferenceController.java b/src/com/android/settings/development/bluetooth/AbstractBluetoothListPreferenceController.java
index 9436e06..362a5cd 100644
--- a/src/com/android/settings/development/bluetooth/AbstractBluetoothListPreferenceController.java
+++ b/src/com/android/settings/development/bluetooth/AbstractBluetoothListPreferenceController.java
@@ -43,7 +43,6 @@
         implements Preference.OnPreferenceChangeListener {
 
     private static final String TAG = "AbstrBtListPrefCtrl";
-    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
     protected static final int DEFAULT_VALUE_INT = 1000;
 
@@ -74,9 +73,7 @@
 
     @Override
     public boolean onPreferenceChange(@Nullable Preference preference, @NonNull Object newValue) {
-        if (DEBUG) {
-            Log.d(TAG, "onPreferenceChange: newValue=" + (String) newValue);
-        }
+        Log.d(TAG, "onPreferenceChange: newValue=" + (String) newValue);
         if (mListPreference == null) {
             Log.e(TAG, "onPreferenceChange: List preference is null");
             return false;
@@ -99,9 +96,7 @@
     @Override
     protected void onDeveloperOptionsSwitchDisabled() {
         super.onDeveloperOptionsSwitchDisabled();
-        if (DEBUG) {
-            Log.d(TAG, "onDeveloperOptionsSwitchDisabled");
-        }
+        Log.d(TAG, "onDeveloperOptionsSwitchDisabled");
         if (mListPreference == null) {
             Log.e(TAG, "onDeveloperOptionsSwitchDisabled: List preference is null");
             return;
@@ -230,14 +225,12 @@
     }
 
     private void setupDefaultListPreference() {
-        if (DEBUG) {
-            Log.d(
-                    TAG,
-                    "setupDefaultListPreference: mDefaultEntry="
-                            + mDefaultEntry
-                            + ", mDefaultValue="
-                            + mDefaultValue);
-        }
+        Log.d(
+                TAG,
+                "setupDefaultListPreference: mDefaultEntry="
+                        + mDefaultEntry
+                        + ", mDefaultValue="
+                        + mDefaultValue);
         if (mListPreference == null) {
             Log.e(TAG, "setupListPreference: List preference is null");
             return;
diff --git a/src/com/android/settings/development/bluetooth/BluetoothCodecListPreferenceController.java b/src/com/android/settings/development/bluetooth/BluetoothCodecListPreferenceController.java
index 863cd27..9808807 100644
--- a/src/com/android/settings/development/bluetooth/BluetoothCodecListPreferenceController.java
+++ b/src/com/android/settings/development/bluetooth/BluetoothCodecListPreferenceController.java
@@ -43,7 +43,6 @@
 
     private static final String KEY = "bluetooth_audio_codec_settings_list";
     private static final String TAG = "BtExtCodecCtr";
-    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
     @Nullable private final Callback mCallback;
 
@@ -59,9 +58,7 @@
     @Override
     public boolean isAvailable() {
         boolean available = Flags.a2dpOffloadCodecExtensibilitySettings();
-        if (DEBUG) {
-            Log.d(TAG, "isAvailable: " + available);
-        }
+        Log.d(TAG, "isAvailable: " + available);
         return available;
     }
 
@@ -82,9 +79,7 @@
             return false;
         }
 
-        if (DEBUG) {
-            Log.d(TAG, "onPreferenceChange: newValue=" + (String) newValue);
-        }
+        Log.d(TAG, "onPreferenceChange: newValue=" + (String) newValue);
         final BluetoothA2dp bluetoothA2dp = mBluetoothA2dp;
         if (bluetoothA2dp == null) {
             Log.e(TAG, "onPreferenceChange: bluetoothA2dp is null");
@@ -110,9 +105,7 @@
             return false;
         }
 
-        if (DEBUG) {
-            Log.d(TAG, "onPreferenceChange: setCodecConfigPreference: " + codecConfig.toString());
-        }
+        Log.d(TAG, "onPreferenceChange: setCodecConfigPreference: " + codecConfig.toString());
         bluetoothA2dp.setCodecConfigPreference(activeDevice, codecConfig);
         if (mCallback != null) {
             mCallback.onBluetoothCodecChanged();
@@ -161,14 +154,12 @@
                         && currentCodecConfig.getExtendedCodecType().equals(codecType)) {
                     selectedCodecId = codecIds.get(codecIds.size() - 1);
                     selectedLabel = labels.get(labels.size() - 1);
-                    if (DEBUG) {
-                        Log.d(
-                                TAG,
-                                "updateState: Current config: "
-                                        + selectedLabel
-                                        + ", id: "
-                                        + selectedCodecId);
-                    }
+                    Log.d(
+                            TAG,
+                            "updateState: Current config: "
+                                    + selectedLabel
+                                    + ", id: "
+                                    + selectedCodecId);
                 }
             }
 
@@ -178,9 +169,7 @@
 
     @Override
     public void onHDAudioEnabled(boolean enabled) {
-        if (DEBUG) {
-            Log.d(TAG, "onHDAudioEnabled: enabled=" + enabled);
-        }
+        Log.d(TAG, "onHDAudioEnabled: enabled=" + enabled);
         if (mListPreference == null) {
             Log.e(TAG, "onHDAudioEnabled: List preference is null");
             return;
@@ -216,9 +205,7 @@
             return;
         }
 
-        if (DEBUG) {
-            Log.d(TAG, "writeConfigurationValues: Selected codec: " + selectedCodecType.toString());
-        }
+        Log.d(TAG, "writeConfigurationValues: Selected codec: " + selectedCodecType.toString());
         final BluetoothCodecStatus codecStatus = getBluetoothCodecStatus();
         if (codecStatus == null) {
             Log.e(TAG, "writeConfigurationValues: Bluetooth Codec Status is null");
