diff --git a/res/xml/tts_settings.xml b/res/xml/tts_settings.xml
index 4a24154..e76cdb7 100644
--- a/res/xml/tts_settings.xml
+++ b/res/xml/tts_settings.xml
@@ -20,21 +20,17 @@
     android:key="tts_settings_screen"
     android:title="@string/tts_settings_title">
 
-    <PreferenceCategory android:key="tts_engine_section">
+   <com.android.settings.widget.GearPreference
+       android:key="tts_engine_preference"
+       android:title="@string/tts_engine_preference_title"
+       android:fragment="com.android.settings.tts.TtsEnginePreferenceFragment"
+       settings:searchable="false"/>
 
-        <com.android.settings.widget.GearPreference
-            android:key="tts_engine_preference"
-            android:title="@string/tts_engine_preference_title"
-            android:fragment="com.android.settings.tts.TtsEnginePreferenceFragment"
-            settings:searchable="false"/>
-
-        <ListPreference
-            android:key="tts_default_lang"
-            android:title="@string/tts_default_lang_title"
-            android:summary="@string/tts_default_lang_summary"
-            android:persistent="false" />
-
-    </PreferenceCategory>
+   <ListPreference
+       android:key="tts_default_lang"
+       android:title="@string/tts_default_lang_title"
+       android:summary="@string/tts_default_lang_summary"
+       android:persistent="false" />
 
     <PreferenceCategory android:key="tts_general_section">
 
diff --git a/src/com/android/settings/tts/TextToSpeechSettings.java b/src/com/android/settings/tts/TextToSpeechSettings.java
index 0f10d28..866e5a8 100644
--- a/src/com/android/settings/tts/TextToSpeechSettings.java
+++ b/src/com/android/settings/tts/TextToSpeechSettings.java
@@ -147,12 +147,7 @@
      * screen for the first time (as opposed to when a user changes his choice
      * of engine).
      */
-    private final TextToSpeech.OnInitListener mInitListener = new TextToSpeech.OnInitListener() {
-        @Override
-        public void onInit(int status) {
-            onInitEngine(status);
-        }
-    };
+    private final TextToSpeech.OnInitListener mInitListener = this::onInitEngine;
 
     @Override
     public int getMetricsCategory() {
@@ -215,6 +210,11 @@
     @Override
     public void onResume() {
         super.onResume();
+        // We tend to change the summary contents of our widgets, which at higher text sizes causes
+        // them to resize, which results in the recyclerview smoothly animating them at inopportune
+        // times. Disable the animation so widgets snap to their positions rather than sliding
+        // around while the user is interacting with it.
+        getListView().getItemAnimator().setMoveDuration(0);
 
         if (mTts == null || mCurrentDefaultLocale == null) {
             return;
@@ -323,7 +323,6 @@
         if (mCurrentEngine != null) {
             EngineInfo info = mEnginesHelper.getEngineInfo(mCurrentEngine);
 
-
             Preference mEnginePreference = findPreference(KEY_TTS_ENGINE_PREFERENCE);
             ((GearPreference) mEnginePreference).setOnGearClickListener(this);
             mEnginePreference.setSummary(info.label);
@@ -365,14 +364,7 @@
         if (status == TextToSpeech.SUCCESS) {
             if (DBG) Log.d(TAG, "TTS engine for settings screen initialized.");
             checkDefaultLocale();
-            getActivity()
-                    .runOnUiThread(
-                            new Runnable() {
-                                @Override
-                                public void run() {
-                                    mLocalePreference.setEnabled(true);
-                                }
-                            });
+            getActivity().runOnUiThread(() -> mLocalePreference.setEnabled(true));
         } else {
             if (DBG) {
                 Log.d(TAG,
@@ -516,14 +508,7 @@
         }
 
         // Sort it
-        Collections.sort(
-                entryPairs,
-                new Comparator<Pair<String, Locale>>() {
-                    @Override
-                    public int compare(Pair<String, Locale> lhs, Pair<String, Locale> rhs) {
-                        return lhs.first.compareToIgnoreCase(rhs.first);
-                    }
-                });
+        Collections.sort(entryPairs, (lhs, rhs) -> lhs.first.compareToIgnoreCase(rhs.first));
 
         // Get two arrays out of one of pairs
         mSelectedLocaleIndex = 0; // Will point to the R.string.tts_lang_use_system value
