diff --git a/res/layout/preference_tts_engine.xml b/res/layout/preference_tts_engine.xml
deleted file mode 100644
index 19401f0..0000000
--- a/res/layout/preference_tts_engine.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source 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.
--->
-
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="?android:attr/listPreferredItemHeight"
-    android:paddingStart="@dimen/preference_no_icon_padding_start"
-    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
-    android:layout_gravity="center_vertical">
-
-    <RadioButton
-        android:id="@+id/tts_engine_radiobutton"
-        android:layout_width="0dp"
-        android:layout_height="match_parent"
-        android:clickable="true"
-        android:layout_weight="1"
-        android:maxLines="2"
-        android:textAppearance="?android:attr/textAppearanceListItem"
-        android:ellipsize="marquee"/>
-</LinearLayout>
diff --git a/src/com/android/settings/tts/TtsEnginePreference.java b/src/com/android/settings/tts/TtsEnginePreference.java
index 7dc00fe..6ea414d 100644
--- a/src/com/android/settings/tts/TtsEnginePreference.java
+++ b/src/com/android/settings/tts/TtsEnginePreference.java
@@ -18,7 +18,6 @@
 
 import android.content.Context;
 import android.content.DialogInterface;
-import android.content.Intent;
 import android.speech.tts.TextToSpeech.EngineInfo;
 import android.util.Log;
 import android.widget.Checkable;
@@ -30,7 +29,6 @@
 import androidx.preference.PreferenceViewHolder;
 
 import com.android.settings.R;
-import com.android.settings.SettingsActivity;
 
 
 public class TtsEnginePreference extends Preference {
@@ -54,21 +52,20 @@
      */
     private volatile boolean mPreventRadioButtonCallbacks;
 
-    private RadioButton mRadioButton;
-    private Intent mVoiceCheckData;
-
     private final CompoundButton.OnCheckedChangeListener mRadioChangeListener =
-        new CompoundButton.OnCheckedChangeListener() {
-            @Override
-            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
-                onRadioButtonClicked(buttonView, isChecked);
-            }
-        };
+            new CompoundButton.OnCheckedChangeListener() {
+                @Override
+                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+                    onRadioButtonClicked(buttonView, isChecked);
+                }
+            };
 
-    public TtsEnginePreference(Context context, EngineInfo info, RadioButtonGroupState state,
-            SettingsActivity prefActivity) {
+    public TtsEnginePreference(Context context, EngineInfo info, RadioButtonGroupState state) {
         super(context);
-        setLayoutResource(R.layout.preference_tts_engine);
+
+        setWidgetLayoutResource(R.layout.preference_widget_radiobutton);
+        setLayoutResource(R.layout.preference_radio);
+        setIconSpaceReserved(false);
 
         mSharedState = state;
         mEngineInfo = info;
@@ -87,9 +84,8 @@
                     "setSharedState()");
         }
 
-        final RadioButton rb = (RadioButton) view.findViewById(R.id.tts_engine_radiobutton);
+        final RadioButton rb = view.itemView.findViewById(android.R.id.checkbox);
         rb.setOnCheckedChangeListener(mRadioChangeListener);
-        rb.setText(mEngineInfo.label);
 
         boolean isChecked = getKey().equals(mSharedState.getCurrentKey());
         if (isChecked) {
@@ -99,12 +95,6 @@
         mPreventRadioButtonCallbacks = true;
         rb.setChecked(isChecked);
         mPreventRadioButtonCallbacks = false;
-
-        mRadioButton = rb;
-    }
-
-    public void setVoiceDataDetails(Intent data) {
-        mVoiceCheckData = data;
     }
 
     private boolean shouldDisplayDataAlert() {
@@ -145,7 +135,7 @@
                     public void onClick(DialogInterface dialog, int which) {
                         makeCurrentEngine(buttonView);
                     }
-                },new DialogInterface.OnClickListener() {
+                }, new DialogInterface.OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialog, int which) {
                         // Undo the click.
@@ -176,9 +166,11 @@
      */
     public interface RadioButtonGroupState {
         String getCurrentKey();
+
         Checkable getCurrentChecked();
 
         void setCurrentKey(String key);
+
         void setCurrentChecked(Checkable current);
     }
 
diff --git a/src/com/android/settings/tts/TtsEnginePreferenceFragment.java b/src/com/android/settings/tts/TtsEnginePreferenceFragment.java
index 43bb459..244e5b1 100644
--- a/src/com/android/settings/tts/TtsEnginePreferenceFragment.java
+++ b/src/com/android/settings/tts/TtsEnginePreferenceFragment.java
@@ -15,7 +15,6 @@
 import androidx.preference.PreferenceCategory;
 
 import com.android.settings.R;
-import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
@@ -87,12 +86,10 @@
 
         mEnginePreferenceCategory.removeAll();
 
-        SettingsActivity activity = (SettingsActivity) getActivity();
-
         List<EngineInfo> engines = mEnginesHelper.getEngines();
         for (EngineInfo engine : engines) {
             TtsEnginePreference enginePref =
-                    new TtsEnginePreference(getPrefContext(), engine, this, activity);
+                    new TtsEnginePreference(getPrefContext(), engine, this);
             mEnginePreferenceCategory.addPreference(enginePref);
         }
     }
@@ -161,6 +158,7 @@
     public void onUpdateEngine(int status) {
         if (status == TextToSpeech.SUCCESS) {
             Log.d(
+
                     TAG,
                     "Updating engine: Successfully bound to the engine: "
                             + mTts.getCurrentEngine());
