diff --git a/res/xml/installed_app_launch_settings.xml b/res/xml/installed_app_launch_settings.xml
index 3394d86..2268d5c 100644
--- a/res/xml/installed_app_launch_settings.xml
+++ b/res/xml/installed_app_launch_settings.xml
@@ -31,7 +31,7 @@
         <PreferenceCategory
             android:title="@string/app_launch_links_category">
 
-            <com.android.settings.applications.intentpicker.VerifiedLinksPreference
+            <Preference
                 android:key="open_by_default_verified_links"
                 android:title="@string/summary_placeholder"
                 android:order="-100"
@@ -40,8 +40,7 @@
             <PreferenceCategory
                 android:layout="@layout/preference_category_no_label"
                 android:key="open_by_default_selected_links_category"
-                android:order="100"
-                settings:searchable="false"/>
+                android:order="100"/>
 
             <Preference
                 android:key="open_by_default_add_link"
diff --git a/src/com/android/settings/applications/intentpicker/AppLaunchSettings.java b/src/com/android/settings/applications/intentpicker/AppLaunchSettings.java
index f836c8f..cd36000 100644
--- a/src/com/android/settings/applications/intentpicker/AppLaunchSettings.java
+++ b/src/com/android/settings/applications/intentpicker/AppLaunchSettings.java
@@ -246,15 +246,14 @@
 
     /** Initialize verified links preference */
     private void initVerifiedLinksPreference() {
-        final VerifiedLinksPreference verifiedLinksPreference =
-                (VerifiedLinksPreference) mMainPreferenceCategory.findPreference(
-                        VERIFIED_LINKS_PREF_KEY);
-        verifiedLinksPreference.setWidgetFrameClickListener(l -> {
+        final Preference verifiedLinksPreference = mMainPreferenceCategory.findPreference(
+                VERIFIED_LINKS_PREF_KEY);
+        verifiedLinksPreference.setOnPreferenceClickListener(preference -> {
             showVerifiedLinksDialog();
+            return true;
         });
         final int verifiedLinksNo = getLinksNumber(DOMAIN_STATE_VERIFIED);
         verifiedLinksPreference.setTitle(getVerifiedLinksTitle(verifiedLinksNo));
-        verifiedLinksPreference.setCheckBoxVisible(verifiedLinksNo > 0);
         verifiedLinksPreference.setEnabled(verifiedLinksNo > 0);
     }
 
diff --git a/src/com/android/settings/applications/intentpicker/VerifiedLinksPreference.java b/src/com/android/settings/applications/intentpicker/VerifiedLinksPreference.java
deleted file mode 100644
index fdfe215..0000000
--- a/src/com/android/settings/applications/intentpicker/VerifiedLinksPreference.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2021 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.applications.intentpicker;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.CheckBox;
-
-import androidx.preference.PreferenceViewHolder;
-
-import com.android.settings.R;
-import com.android.settingslib.widget.TwoTargetPreference;
-
-/** This customized VerifiedLinksPreference was belonged to Open by default page */
-public class VerifiedLinksPreference extends TwoTargetPreference {
-    private Context mContext;
-    private View.OnClickListener mOnWidgetClickListener;
-    private boolean mShowCheckBox;
-
-    public VerifiedLinksPreference(Context context, AttributeSet attrs,
-            int defStyleAttr, int defStyleRes) {
-        super(context, attrs, defStyleAttr, defStyleRes);
-        init(context);
-    }
-
-    public VerifiedLinksPreference(Context context, AttributeSet attrs, int defStyleAttr) {
-        this(context, attrs, defStyleAttr, /* defStyleRes= */0);
-    }
-
-    public VerifiedLinksPreference(Context context, AttributeSet attrs) {
-        this(context, attrs, /* defStyleAttr= */ 0);
-    }
-
-    public VerifiedLinksPreference(Context context) {
-        this(context, /* attrs= */ null);
-    }
-
-    private void init(Context context) {
-        mContext = context;
-        mOnWidgetClickListener = null;
-        mShowCheckBox = true;
-        setLayoutResource(R.layout.preference_checkable_two_target);
-        setWidgetLayoutResource(R.layout.verified_links_widget);
-    }
-
-    /**
-     * Register a callback to be invoked when this widget is clicked.
-     *
-     * @param listener The callback that will run.
-     */
-    public void setWidgetFrameClickListener(View.OnClickListener listener) {
-        mOnWidgetClickListener = listener;
-    }
-
-    /** Determine the visibility of the {@link CheckBox}. */
-    public void setCheckBoxVisible(boolean isVisible) {
-        mShowCheckBox = isVisible;
-    }
-
-    @Override
-    public void onBindViewHolder(PreferenceViewHolder view) {
-        super.onBindViewHolder(view);
-        final View settingsWidget = view.findViewById(android.R.id.widget_frame);
-        final View divider = view.findViewById(R.id.two_target_divider);
-        divider.setVisibility(View.VISIBLE);
-        settingsWidget.setVisibility(View.VISIBLE);
-        if (mOnWidgetClickListener != null) {
-            settingsWidget.setOnClickListener(mOnWidgetClickListener);
-        }
-        final View checkboxContainer = view.findViewById(R.id.checkbox_container);
-        final View parentView = (View) checkboxContainer.getParent();
-        parentView.setEnabled(false);
-        parentView.setClickable(false);
-        CheckBox checkBox = (CheckBox) view.findViewById(com.android.internal.R.id.checkbox);
-        if (checkBox != null) {
-            checkBox.setChecked(true);
-            checkboxContainer.setVisibility(mShowCheckBox ? View.VISIBLE : View.GONE);
-        }
-    }
-}
