diff --git a/res/layout/locale_drag_cell.xml b/res/layout/locale_drag_cell.xml
index 47bf70a..7b932f3 100644
--- a/res/layout/locale_drag_cell.xml
+++ b/res/layout/locale_drag_cell.xml
@@ -56,17 +56,6 @@
         android:layout_toStartOf="@+id/dragHandle"
         android:layout_below="@id/label"/>
 
-    <TextView
-        android:id="@+id/default_locale"
-        style="@style/LanguageCheckboxAndLabel"
-        android:layout_marginTop="-28dp"
-        android:paddingStart="56dp"
-        android:textAppearance="?android:attr/textAppearanceListItemSecondary"
-        android:textColor="?android:textColorSecondary"
-        android:text="@string/desc_current_default_language"
-        android:layout_toStartOf="@+id/dragHandle"
-        android:layout_below="@id/label"/>
-
     <ImageView
         android:id="@+id/dragHandle"
         android:layout_width="wrap_content"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7823598..9f8df7b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -484,12 +484,6 @@
     <!-- Title for the locale picker activity. [CHAR LIMIT=30]-->
     <string name="language_picker_title">Languages</string>
 
-    <!-- Title for category of the locale picker . [CHAR LIMIT=50]-->
-    <string name="language_picker_category_title">Preferred language order</string>
-
-    <!-- Description for indication of current system default language. [CHAR LIMIT=50]-->
-    <string name="desc_current_default_language">System language</string>
-
     <!-- Menu item in the locale menu. Will remove the selected locales. [CHAR LIMIT=30] -->
     <string name="locale_remove_menu">Remove</string>
 
@@ -503,13 +497,13 @@
     <string name="locale_picker_category_title">Preferred Language</string>
 
     <!-- Title for the Apps' locale menu entry [CHAR LIMIT=50]-->
-    <string name="app_locales_picker_menu_title">App languages</string>
+    <string name="app_locales_picker_menu_title">App Languages</string>
 
     <!-- Summary for the app's locale picker activity. [CHAR LIMIT=50]-->
     <string name="app_locale_picker_summary">Set the language for each app</string>
 
     <!-- Title for the App's locale picker activity. [CHAR LIMIT=50]-->
-    <string name="app_locale_picker_title">App language</string>
+    <string name="app_locale_picker_title">App Language</string>
 
     <!-- Category for the suggested app's locales. [CHAR LIMIT=50]-->
     <string name="suggested_app_locales_title">Suggested languages</string>
@@ -532,18 +526,6 @@
     <!-- Description for introduction of the locale selection supported of app list [CHAR LIMIT=NONE]-->
     <string name="desc_app_locale_selection_supported">Only apps that support language selection are shown here.</string>
 
-    <!-- Description for the introduction to language picker activity. [CHAR LIMIT=NONE]-->
-    <string name="desc_introduction_of_language_picker">Your system, apps, and websites use the first supported language from your preferred languages.</string>
-
-    <!-- Description for the notice of language picker. [CHAR LIMIT=NONE]-->
-    <string name="desc_notice_of_language_picker">To select a language for each app, go to app language settings.</string>
-
-    <!-- Title for locale helper page [CHAR LIMIT=NONE] -->
-    <string name="desc_locale_helper_footer_general">Learn more about languages</string>
-
-    <!-- Link for Locale helper page. [CHAR LIMIT=NONE]-->
-    <string name="link_locale_picker_footer_learn_more" translatable="false">https://support.google.com/android?p=per_language_app_settings</string>
-
     <!-- The title of the confirmation dialog shown when the user selects one / several languages and tries to remove them [CHAR LIMIT=60] -->
     <plurals name="dlg_remove_locales_title">
         <item quantity="one">Remove selected language?</item>
@@ -559,7 +541,7 @@
     <string name="dlg_remove_locales_error_message">Keep at least one preferred language</string>
 
     <!-- This text shows in the language picker when the system is not translated into that languages [CHAR LIMIT=80] -->
-    <string name="locale_not_translated">Not available as system language</string>
+    <string name="locale_not_translated">May not be available in some apps</string>
 
     <!-- Label for an accessibility action that moves a language up in the ordered language list [CHAR LIMIT=20] -->
     <string name="action_drag_label_move_up">Move up</string>
diff --git a/res/xml/languages.xml b/res/xml/languages.xml
deleted file mode 100644
index 0f45540..0000000
--- a/res/xml/languages.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright (C) 2022 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.
-  -->
-
-<PreferenceScreen
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:settings="http://schemas.android.com/apk/res-auto"
-    android:title="@string/language_settings">
-
-    <com.android.settingslib.widget.TopIntroPreference
-        android:title="@string/desc_introduction_of_language_picker"
-        android:persistent="false"
-        android:selectable="false"/>
-
-    <PreferenceCategory
-        android:title="@string/language_picker_category_title">
-        <com.android.settingslib.widget.LayoutPreference
-            android:key="languages_picker"
-            android:layout="@layout/locale_order_list" />
-    </PreferenceCategory>
-
-    <com.android.settingslib.widget.FooterPreference
-        android:key="footer_languages_picker"
-        android:title="@string/desc_notice_of_language_picker"
-        android:persistent="false"
-        android:selectable="false"
-        settings:controller="com.android.settings.localepicker.LocaleHelperPreferenceController"/>
-
-</PreferenceScreen>
diff --git a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
index b3c2e30..ab9110d 100644
--- a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
+++ b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
@@ -43,6 +43,7 @@
 import java.util.List;
 import java.util.Locale;
 
+
 class LocaleDragAndDropAdapter
         extends RecyclerView.Adapter<LocaleDragAndDropAdapter.CustomViewHolder> {
 
@@ -153,10 +154,8 @@
         final LocaleDragCell dragCell = holder.getLocaleDragCell();
         final String label = feedItem.getFullNameNative();
         final String description = feedItem.getFullNameInUiLanguage();
-
         dragCell.setLabelAndDescription(label, description);
         dragCell.setLocalized(feedItem.isTranslated());
-        dragCell.setCurrentDefault(feedItem.getLocale().equals(Locale.getDefault()));
         dragCell.setMiniLabel(mNumberFormatter.format(i + 1));
         dragCell.setShowCheckbox(mRemoveMode);
         dragCell.setShowMiniLabel(!mRemoveMode);
diff --git a/src/com/android/settings/localepicker/LocaleDragCell.java b/src/com/android/settings/localepicker/LocaleDragCell.java
index 2f4cfef..ea86189 100644
--- a/src/com/android/settings/localepicker/LocaleDragCell.java
+++ b/src/com/android/settings/localepicker/LocaleDragCell.java
@@ -33,7 +33,6 @@
     private CheckBox mCheckbox;
     private TextView mMiniLabel;
     private TextView mLocalized;
-    private TextView mCurrentDefault;
     private ImageView mDragHandle;
 
     public LocaleDragCell(Context context, AttributeSet attrs) {
@@ -45,7 +44,6 @@
         super.onFinishInflate();
         mLabel = (TextView) findViewById(R.id.label);
         mLocalized = (TextView) findViewById(R.id.l10nWarn);
-        mCurrentDefault = (TextView) findViewById(R.id.default_locale);
         mMiniLabel = (TextView) findViewById(R.id.miniLabel);
         mCheckbox = (CheckBox) findViewById(R.id.checkbox);
         mDragHandle = (ImageView) findViewById(R.id.dragHandle);
@@ -102,14 +100,6 @@
         invalidate();
     }
 
-    /**
-     * Indicate current locale is system default.
-     */
-    public void setCurrentDefault(boolean isCurrentDefault) {
-        mCurrentDefault.setVisibility(isCurrentDefault ? VISIBLE : GONE);
-        invalidate();
-    }
-
     public ImageView getDragHandle() {
         return mDragHandle;
     }
diff --git a/src/com/android/settings/localepicker/LocaleHelperPreferenceController.java b/src/com/android/settings/localepicker/LocaleHelperPreferenceController.java
deleted file mode 100644
index 05c7401..0000000
--- a/src/com/android/settings/localepicker/LocaleHelperPreferenceController.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2022 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.
- */
-
-package com.android.settings.localepicker;
-
-import android.content.Context;
-
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.PreferenceScreen;
-
-import com.android.settings.R;
-import com.android.settingslib.HelpUtils;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.widget.FooterPreference;
-
-/**
- * A controller to update current locale information of application.
- */
-public class LocaleHelperPreferenceController extends AbstractPreferenceController {
-    private static final String TAG = LocaleHelperPreferenceController.class.getSimpleName();
-
-    private static final String KEY_FOOTER_LANGUAGE_PICKER = "footer_languages_picker";
-
-    public LocaleHelperPreferenceController(Context context) {
-        super(context);
-    }
-
-    @Override
-    public boolean isAvailable() {
-        return true;
-    }
-
-    @Override
-    public String getPreferenceKey() {
-        return KEY_FOOTER_LANGUAGE_PICKER;
-    }
-
-    @Override
-    public void displayPreference(PreferenceScreen screen) {
-        super.displayPreference(screen);
-        FooterPreference footerPreference = screen.findPreference(getPreferenceKey());
-        updateFooterPreference(footerPreference);
-    }
-
-    @VisibleForTesting
-    void updateFooterPreference(FooterPreference footerPreference) {
-        if (footerPreference != null) {
-            footerPreference.setLearnMoreAction(v -> openLocaleLearnMoreLink());
-            footerPreference.setLearnMoreText(mContext.getString(
-                    R.string.desc_locale_helper_footer_general));
-        }
-    }
-
-    private void openLocaleLearnMoreLink() {
-        mContext.startActivity(
-                HelpUtils.getHelpIntent(
-                        mContext,
-                        mContext.getString(R.string.link_locale_picker_footer_learn_more),
-                        /*backupContext=*/""));
-    }
-}
diff --git a/src/com/android/settings/localepicker/LocaleListEditor.java b/src/com/android/settings/localepicker/LocaleListEditor.java
index 9db3468..eac2dd1 100644
--- a/src/com/android/settings/localepicker/LocaleListEditor.java
+++ b/src/com/android/settings/localepicker/LocaleListEditor.java
@@ -36,7 +36,6 @@
 
 import androidx.annotation.VisibleForTesting;
 import androidx.appcompat.app.AlertDialog;
-import androidx.preference.PreferenceScreen;
 import androidx.recyclerview.widget.RecyclerView;
 
 import com.android.internal.app.LocalePicker;
@@ -47,7 +46,6 @@
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.search.SearchIndexable;
 import com.android.settingslib.search.SearchIndexableRaw;
-import com.android.settingslib.widget.LayoutPreference;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -66,7 +64,6 @@
     private static final int REQUEST_LOCALE_PICKER = 0;
 
     private static final String INDEX_KEY_ADD_LANGUAGE = "add_language";
-    private static final String KEY_LANGUAGES_PICKER = "languages_picker";
 
     private LocaleDragAndDropAdapter mAdapter;
     private Menu mMenu;
@@ -75,9 +72,6 @@
     private boolean mShowingRemoveDialog;
     private boolean mIsUiRestricted;
 
-    private LayoutPreference mLocalePickerPreference;
-    private LocaleHelperPreferenceController mLocaleHelperPreferenceController;
-
     public LocaleListEditor() {
         super(DISALLOW_CONFIG_LOCALE);
     }
@@ -92,14 +86,6 @@
         super.onCreate(savedInstanceState);
         setHasOptionsMenu(true);
 
-        addPreferencesFromResource(R.xml.languages);
-        final Activity activity = getActivity();
-        activity.setTitle(R.string.language_picker_title);
-        mLocaleHelperPreferenceController = new LocaleHelperPreferenceController(activity);
-        final PreferenceScreen screen = getPreferenceScreen();
-        mLocalePickerPreference = screen.findPreference(KEY_LANGUAGES_PICKER);
-        mLocaleHelperPreferenceController.displayPreference(screen);
-
         LocaleStore.fillCache(this.getContext());
         final List<LocaleStore.LocaleInfo> feedsList = getUserLocaleList();
         mAdapter = new LocaleDragAndDropAdapter(this.getContext(), feedsList);
@@ -107,8 +93,11 @@
 
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstState) {
-        configureDragAndDrop(mLocalePickerPreference);
-        return super.onCreateView(inflater, container, savedInstState);
+        final View result = super.onCreateView(inflater, container, savedInstState);
+        final View myLayout = inflater.inflate(R.layout.locale_order_list, (ViewGroup) result);
+
+        configureDragAndDrop(myLayout);
+        return result;
     }
 
     @Override
@@ -298,8 +287,8 @@
         return result;
     }
 
-    private void configureDragAndDrop(LayoutPreference layout) {
-        final RecyclerView list = layout.findViewById(R.id.dragList);
+    private void configureDragAndDrop(View view) {
+        final RecyclerView list = view.findViewById(R.id.dragList);
         final LocaleLinearLayoutManager llm = new LocaleLinearLayoutManager(getContext(), mAdapter);
         llm.setAutoMeasureEnabled(true);
         list.setLayoutManager(llm);
@@ -308,7 +297,7 @@
         mAdapter.setRecyclerView(list);
         list.setAdapter(mAdapter);
 
-        mAddLanguage = layout.findViewById(R.id.add_language);
+        mAddLanguage = view.findViewById(R.id.add_language);
         mAddLanguage.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
diff --git a/tests/unit/src/com/android/settings/localepicker/LocaleHelperPreferenceControllerTest.java b/tests/unit/src/com/android/settings/localepicker/LocaleHelperPreferenceControllerTest.java
deleted file mode 100644
index 31b8e79..0000000
--- a/tests/unit/src/com/android/settings/localepicker/LocaleHelperPreferenceControllerTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2022 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.
- */
-
-package com.android.settings.localepicker;
-
-import static org.mockito.Mockito.anyString;
-import static org.mockito.Mockito.verify;
-
-import android.content.Context;
-import android.os.Looper;
-
-import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
-import com.android.settingslib.widget.FooterPreference;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-@RunWith(AndroidJUnit4.class)
-public class LocaleHelperPreferenceControllerTest {
-    private Context mContext;
-    private LocaleHelperPreferenceController mLocaleHelperPreferenceController;
-
-    @Mock
-    private FooterPreference mMockFooterPreference;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        if (Looper.myLooper() == null) {
-            Looper.prepare();
-        }
-        mContext = ApplicationProvider.getApplicationContext();
-        mLocaleHelperPreferenceController = new LocaleHelperPreferenceController(mContext);
-    }
-
-    @Test
-    public void updateFooterPreference_setFooterPreference_hasClickAction() {
-        mLocaleHelperPreferenceController.updateFooterPreference(mMockFooterPreference);
-        verify(mMockFooterPreference).setLearnMoreText(anyString());
-    }
-}
