Merge "Use a regular drawable as PowerSummaryActivity icon"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index e606375..f9522ea 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -788,7 +788,7 @@
 
         <activity android:name=".wallpaper.WallpaperSuggestionActivity"
                   android:label="@string/wallpaper_settings_title"
-                  android:icon="@drawable/ic_suggestion_wallpaper"
+                  android:icon="@drawable/ic_wallpaper"
                   android:theme="@android:style/Theme.NoDisplay">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
diff --git a/res/drawable/ic_suggestion_wallpaper.xml b/res/drawable/ic_suggestion_wallpaper.xml
deleted file mode 100644
index 32defce..0000000
--- a/res/drawable/ic_suggestion_wallpaper.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<!--
-  Copyright (C) 2019 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.
-  -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24"
-        android:viewportHeight="24"
-        android:tint="?android:attr/colorControlNormal">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M9,12.71l2.14,2.58l3,-3.87L18,16.57H6L9,12.71zM5,5h6V3H5C3.9,3 3,3.9 3,5v6h2V5zM19,19h-6v2h6c1.1,0 2,-0.9 2,-2v-6h-2V19zM5,19v-6H3v6c0,1.1 0.9,2 2,2h6v-2H5zM19,5v6h2V5c0,-1.1 -0.9,-2 -2,-2h-6v2H19zM16,9c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1c-0.55,0 -1,0.45 -1,1S15.45,9 16,9z"/>
-</vector>
diff --git a/res/layout-land/panel_layout.xml b/res/layout-land/panel_layout.xml
deleted file mode 100644
index 049fd0b..0000000
--- a/res/layout-land/panel_layout.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2018 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="match_parent"
-              android:orientation="vertical">
-
-    <TextView
-        android:id="@+id/panel_title"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:gravity="center"
-        android:paddingBottom="24dp"
-        android:paddingTop="18dp"
-        android:textColor="?android:attr/colorPrimary"
-        android:textSize="20sp"/>
-
-    <include layout="@layout/horizontal_divider"/>
-
-    <androidx.recyclerview.widget.RecyclerView
-        android:id="@+id/panel_parent_layout"
-        android:scrollbars="vertical"
-        android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1"/>
-
-    <include layout="@layout/panel_buttons"/>
-</LinearLayout>
\ No newline at end of file
diff --git a/res/layout-land/panel_slice_list.xml b/res/layout-land/panel_slice_list.xml
new file mode 100644
index 0000000..ea7d828
--- /dev/null
+++ b/res/layout-land/panel_slice_list.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2019 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
+  -->
+
+<androidx.recyclerview.widget.RecyclerView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/panel_parent_layout"
+    android:scrollbars="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="0dp"
+    android:layout_weight="1"/>
\ No newline at end of file
diff --git a/res/layout/panel_buttons.xml b/res/layout/panel_buttons.xml
deleted file mode 100644
index 1bb3898..0000000
--- a/res/layout/panel_buttons.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2018 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="wrap_content"
-    android:paddingTop="14dp"
-    android:paddingBottom="14dp"
-    android:orientation="horizontal">
-
-    <Button
-        android:id="@+id/see_more"
-        style="@android:style/Widget.DeviceDefault.Button.Borderless.Colored"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="20dp"
-        android:text="@string/see_more"/>
-
-    <Space
-        android:layout_weight="1"
-        android:layout_width="0dp"
-        android:layout_height="match_parent" />
-
-    <Button
-        android:id="@+id/done"
-        style="@android:style/Widget.DeviceDefault.Button.Borderless.Colored"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginEnd="20dp"
-        android:text="@string/done"/>
-</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/panel_layout.xml b/res/layout/panel_layout.xml
index c466ce8..233a01b 100644
--- a/res/layout/panel_layout.xml
+++ b/res/layout/panel_layout.xml
@@ -33,11 +33,34 @@
 
     <include layout="@layout/horizontal_divider"/>
 
-    <androidx.recyclerview.widget.RecyclerView
-        android:id="@+id/panel_parent_layout"
-        android:scrollbars="vertical"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"/>
+    <include layout="@layout/panel_slice_list"/>
 
-    <include layout="@layout/panel_buttons"/>
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:paddingTop="8dp"
+        android:paddingBottom="8dp">
+
+        <Button
+            android:id="@+id/see_more"
+            style="@android:style/Widget.DeviceDefault.Button.Borderless.Colored"
+            android:layout_width="wrap_content"
+            android:layout_height="48dp"
+            android:layout_marginStart="12dp"
+            android:text="@string/see_more"/>
+
+        <Space
+            android:layout_weight="1"
+            android:layout_width="0dp"
+            android:layout_height="match_parent" />
+
+        <Button
+            android:id="@+id/done"
+            style="@android:style/Widget.DeviceDefault.Button.Borderless.Colored"
+            android:layout_width="wrap_content"
+            android:layout_height="48dp"
+            android:layout_marginEnd="12dp"
+            android:text="@string/done"/>
+    </LinearLayout>
 </LinearLayout>
\ No newline at end of file
diff --git a/res/layout/panel_slice_list.xml b/res/layout/panel_slice_list.xml
new file mode 100644
index 0000000..842441c
--- /dev/null
+++ b/res/layout/panel_slice_list.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2019 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
+  -->
+
+<androidx.recyclerview.widget.RecyclerView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/panel_parent_layout"
+    android:scrollbars="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:overScrollMode="never"/>
\ No newline at end of file
diff --git a/res/layout/panel_slice_row.xml b/res/layout/panel_slice_row.xml
index 4ce3494..3288c40 100644
--- a/res/layout/panel_slice_row.xml
+++ b/res/layout/panel_slice_row.xml
@@ -25,7 +25,7 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:paddingStart="20dp"
-        android:paddingEnd="20dp" />
+        android:paddingEnd="20dp"/>
 
     <include layout="@layout/horizontal_divider"/>
 </LinearLayout>
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1058c28..0789a95 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4745,7 +4745,7 @@
     <!-- Title for accessibility preference to accessibility timeout. [CHAR LIMIT=35] -->
     <string name="accessibility_control_timeout_preference_title">Time to take action</string>
     <!-- Descriptive text for accessibility preference to accessibility content timeout. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_content_timeout_preference_summary">Choose how much time you want to read and take action on messages that automatically go away.\n\nSupport for this setting is up to each app.</string>
+    <string name="accessibility_content_timeout_preference_summary">Choose how long to show messages that you need to read, but are visible only temporarily.\n\nNot all apps support this setting.</string>
     <!-- Descriptive text for accessibility preference to accessibility control timeout. [CHAR LIMIT=NONE] -->
     <string name="accessibility_control_timeout_preference_summary">Choose how long to show messages that ask you to take action, but are visible only temporarily.\n\nNot all apps support this setting.</string>
 
@@ -10710,4 +10710,7 @@
     <string name="media_output_panel_title">Switch output</string>
     <!-- Summary for represent which device is playing media [CHAR LIMIT=NONE] -->
     <string name="media_output_panel_summary_of_playing_device">Currently playing on <xliff:g id="device_name" example="Bose headphone">%1$s</xliff:g></string>
+
+    <!-- Message for forget passpoint dialog [CHAR LIMIT=none] -->
+    <string name="forget_passpoint_dialog_message">Your subscription with this provider may be cancelled. Recurring subscriptions will not be cancelled. For more information, check with your provider.</string>
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index a907c62..a778f76 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -238,7 +238,10 @@
 
     <style name="TextAppearance.CategoryTitle"
            parent="@*android:style/TextAppearance.DeviceDefault.Body2">
-        <item name="android:textColor">?android:attr/textColorSecondary</item>
+        <item name="android:textAllCaps">true</item>
+        <item name="android:textSize">11sp</item>
+        <!-- 0.8 Spacing, 0.8/11 = 0.072727273 -->
+        <item name="android:letterSpacing">0.072727273</item>
     </style>
 
     <style name="TextAppearance.TileTitle" parent="@*android:style/TextAppearance.DeviceDefault.Subhead"/>
diff --git a/res/values/styles_preference.xml b/res/values/styles_preference.xml
index e7e0c97..5cd7a6c 100644
--- a/res/values/styles_preference.xml
+++ b/res/values/styles_preference.xml
@@ -25,6 +25,8 @@
         <item name="slicePreferenceStyle">@style/SlicePreference</item>
         <item name="seekBarPreferenceStyle">@style/SettingsSeekBarPreference</item>
         <item name="twoStateButtonPreferenceStyle">@style/TwoStateButtonPreference</item>
+        <item name="preferenceCategoryTitleTextAppearance">@style/TextAppearance.CategoryTitle
+        </item>
     </style>
 
     <style name="PreferenceTheme.SetupWizard">
diff --git a/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBase.java b/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBase.java
index 20169d8..b056b20 100644
--- a/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBase.java
+++ b/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBase.java
@@ -18,7 +18,6 @@
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.Intent;
-import android.os.Bundle;
 import android.os.UserManager;
 import android.permission.PermissionControllerManager;
 import android.text.TextUtils;
@@ -28,10 +27,7 @@
 
 import com.android.internal.util.CollectionUtils;
 import com.android.settings.R;
-import com.android.settings.SettingsActivity;
-import com.android.settings.applications.DefaultAppSettings;
 import com.android.settings.core.BasePreferenceController;
-import com.android.settings.core.SubSettingLauncher;
 
 /*
  * Abstract base controller for the default app shortcut preferences that launches the default app
@@ -58,22 +54,13 @@
 
         mRoleManager = context.getSystemService(RoleManager.class);
 
-        // TODO: STOPSHIP(b/110557011): Remove this check once we have all default apps migrated.
-        if (mRoleName != null) {
-            final PermissionControllerManager permissionControllerManager =
-                    mContext.getSystemService(PermissionControllerManager.class);
-            permissionControllerManager.isApplicationQualifiedForRole(mRoleName, mPackageName,
-                    mContext.getMainExecutor(), qualified -> {
-                        mAppQualified = qualified;
-                        refreshAvailability();
-                    });
-        }
-    }
-
-    // TODO: STOPSHIP(b/110557011): Remove this once we have all default apps migrated.
-    public DefaultAppShortcutPreferenceControllerBase(Context context, String preferenceKey,
-            String packageName) {
-        this(context, preferenceKey, null /* roleName */, packageName);
+        final PermissionControllerManager permissionControllerManager =
+                mContext.getSystemService(PermissionControllerManager.class);
+        permissionControllerManager.isApplicationQualifiedForRole(mRoleName, mPackageName,
+                mContext.getMainExecutor(), qualified -> {
+                    mAppQualified = qualified;
+                    refreshAvailability();
+                });
     }
 
     @Override
@@ -98,7 +85,7 @@
         if (mContext.getSystemService(UserManager.class).isManagedProfile()) {
             return DISABLED_FOR_USER;
         }
-        return hasAppCapability() ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
+        return mAppQualified ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
     }
 
     @Override
@@ -112,49 +99,20 @@
         if (!TextUtils.equals(mPreferenceKey, preference.getKey())) {
             return false;
         }
-        // TODO: STOPSHIP(b/110557011): Remove this check once we have all default apps migrated.
-        if (mRoleName != null) {
-            final Intent intent = new Intent(Intent.ACTION_MANAGE_DEFAULT_APP)
-                    .putExtra(Intent.EXTRA_ROLE_NAME, mRoleName);
-            mContext.startActivity(intent);
-        } else {
-            final Bundle bundle = new Bundle();
-            bundle.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, mPreferenceKey);
-            new SubSettingLauncher(mContext)
-                    .setDestination(DefaultAppSettings.class.getName())
-                    .setArguments(bundle)
-                    .setTitleRes(R.string.configure_apps)
-                    .setSourceMetricsCategory(SettingsEnums.PAGE_UNKNOWN)
-                    .launch();
-        }
+        final Intent intent = new Intent(Intent.ACTION_MANAGE_DEFAULT_APP)
+                .putExtra(Intent.EXTRA_ROLE_NAME, mRoleName);
+        mContext.startActivity(intent);
         return true;
     }
 
     /**
-     * Check whether the app has the default app capability
-     *
-     * @return true if the app has the default app capability
-     */
-    protected boolean hasAppCapability() {
-        // TODO: STOPSHIP(b/110557011): Remove this check once we have all default apps migrated.
-        if (mRoleName != null) {
-            return mAppQualified;
-        }
-        return false;
-    }
-
-    /**
      * Check whether the app is the default app
      *
      * @return true if the app is the default app
      */
-    protected boolean isDefaultApp() {
-        // TODO: STOPSHIP(b/110557011): Remove this check once we have all default apps migrated.
-        if (mRoleName != null) {
-            final String packageName = CollectionUtils.firstOrNull(mRoleManager.getRoleHolders(
-                    mRoleName));
-            return TextUtils.equals(mPackageName, packageName);
-        }
-        return false;
+    private boolean isDefaultApp() {
+        final String packageName = CollectionUtils.firstOrNull(mRoleManager.getRoleHolders(
+                mRoleName));
+        return TextUtils.equals(mPackageName, packageName);
     }
 }
diff --git a/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceController.java b/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceController.java
index 4c7dd81..d554620 100644
--- a/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceController.java
@@ -14,10 +14,8 @@
 
 package com.android.settings.applications.appinfo;
 
+import android.app.role.RoleManager;
 import android.content.Context;
-import android.os.UserHandle;
-
-import com.android.settings.applications.defaultapps.DefaultBrowserPreferenceController;
 
 public class DefaultBrowserShortcutPreferenceController
         extends DefaultAppShortcutPreferenceControllerBase {
@@ -25,19 +23,6 @@
     private static final String KEY = "default_browser";
 
     public DefaultBrowserShortcutPreferenceController(Context context, String packageName) {
-        super(context, KEY, packageName);
+        super(context, KEY, RoleManager.ROLE_BROWSER, packageName);
     }
-
-    @Override
-    protected boolean hasAppCapability() {
-        return DefaultBrowserPreferenceController
-                .hasBrowserPreference(mPackageName, mContext, UserHandle.myUserId());
-    }
-
-    @Override
-    protected boolean isDefaultApp() {
-        return new DefaultBrowserPreferenceController(mContext)
-                .isBrowserDefault(mPackageName, UserHandle.myUserId());
-    }
-
 }
diff --git a/src/com/android/settings/applications/appinfo/DefaultEmergencyShortcutPreferenceController.java b/src/com/android/settings/applications/appinfo/DefaultEmergencyShortcutPreferenceController.java
index f0c1b8a..bd467ac 100644
--- a/src/com/android/settings/applications/appinfo/DefaultEmergencyShortcutPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/DefaultEmergencyShortcutPreferenceController.java
@@ -14,27 +14,15 @@
 
 package com.android.settings.applications.appinfo;
 
+import android.app.role.RoleManager;
 import android.content.Context;
 
-import com.android.settings.applications.defaultapps.DefaultEmergencyPreferenceController;
-
 public class DefaultEmergencyShortcutPreferenceController
         extends DefaultAppShortcutPreferenceControllerBase {
 
     private static final String KEY = "default_emergency_app";
 
     public DefaultEmergencyShortcutPreferenceController(Context context, String packageName) {
-        super(context, KEY, packageName);
+        super(context, KEY, RoleManager.ROLE_EMERGENCY, packageName);
     }
-
-    @Override
-    protected boolean hasAppCapability() {
-        return DefaultEmergencyPreferenceController.hasEmergencyPreference(mPackageName, mContext);
-    }
-
-    @Override
-    protected boolean isDefaultApp() {
-        return DefaultEmergencyPreferenceController.isEmergencyDefault(mPackageName, mContext);
-    }
-
 }
diff --git a/src/com/android/settings/applications/appinfo/DefaultHomeShortcutPreferenceController.java b/src/com/android/settings/applications/appinfo/DefaultHomeShortcutPreferenceController.java
index a58ef85..beb2d7e 100644
--- a/src/com/android/settings/applications/appinfo/DefaultHomeShortcutPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/DefaultHomeShortcutPreferenceController.java
@@ -14,28 +14,15 @@
 
 package com.android.settings.applications.appinfo;
 
+import android.app.role.RoleManager;
 import android.content.Context;
 
-import com.android.settings.applications.defaultapps.DefaultHomePreferenceController;
-
 public class DefaultHomeShortcutPreferenceController
         extends DefaultAppShortcutPreferenceControllerBase {
 
     private static final String KEY = "default_home";
 
     public DefaultHomeShortcutPreferenceController(Context context, String packageName) {
-        super(context, KEY, packageName);
+        super(context, KEY, RoleManager.ROLE_HOME, packageName);
     }
-
-    @Override
-    protected boolean hasAppCapability() {
-        return DefaultHomePreferenceController.hasHomePreference(mPackageName, mContext);
-    }
-
-    @Override
-    protected boolean isDefaultApp() {
-        return DefaultHomePreferenceController.isHomeDefault(mPackageName,
-                mContext.getPackageManager());
-    }
-
 }
diff --git a/src/com/android/settings/homepage/contextualcards/CardContentProvider.java b/src/com/android/settings/homepage/contextualcards/CardContentProvider.java
index e7ede14..a9a832d 100644
--- a/src/com/android/settings/homepage/contextualcards/CardContentProvider.java
+++ b/src/com/android/settings/homepage/contextualcards/CardContentProvider.java
@@ -39,12 +39,18 @@
 
     public static final String CARD_AUTHORITY = "com.android.settings.homepage.CardContentProvider";
 
-    public static final Uri URI = new Uri.Builder()
+    public static final Uri REFRESH_CARD_URI = new Uri.Builder()
                     .scheme(ContentResolver.SCHEME_CONTENT)
                     .authority(CardContentProvider.CARD_AUTHORITY)
                     .appendPath(CardDatabaseHelper.CARD_TABLE)
                     .build();
 
+    public static final Uri DELETE_CARD_URI = new Uri.Builder()
+            .scheme(ContentResolver.SCHEME_CONTENT)
+            .authority(CardContentProvider.CARD_AUTHORITY)
+            .appendPath(CardDatabaseHelper.CardColumns.CARD_DISMISSED)
+            .build();
+
     private static final String TAG = "CardContentProvider";
     /** URI matcher for ContentProvider queries. */
     private static final UriMatcher URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
diff --git a/src/com/android/settings/homepage/contextualcards/CardDatabaseHelper.java b/src/com/android/settings/homepage/contextualcards/CardDatabaseHelper.java
index b9bab21..39c48c1 100644
--- a/src/com/android/settings/homepage/contextualcards/CardDatabaseHelper.java
+++ b/src/com/android/settings/homepage/contextualcards/CardDatabaseHelper.java
@@ -208,7 +208,7 @@
      * Mark a specific ContextualCard with dismissal flag in the database to indicate that the
      * card has been dismissed.
      *
-     * @param context Context
+     * @param context  Context
      * @param cardName The card name of the ContextualCard which is dismissed by user.
      * @return The number of rows updated
      */
@@ -220,7 +220,7 @@
         final String[] selectionArgs = {cardName};
         final int rowsUpdated = database.update(CARD_TABLE, values, selection, selectionArgs);
         database.close();
-        context.getContentResolver().notifyChange(CardContentProvider.URI, null);
+        context.getContentResolver().notifyChange(CardContentProvider.DELETE_CARD_URI, null);
         return rowsUpdated;
     }
 }
diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
index d6ea6ca..ea6ac43 100644
--- a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
+++ b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
@@ -59,13 +59,16 @@
     private final ContentObserver mObserver = new ContentObserver(
             new Handler(Looper.getMainLooper())) {
         @Override
-        public void onChange(boolean selfChange) {
+        public void onChange(boolean selfChange, Uri uri) {
             if (isStarted()) {
+                mNotifyUri = uri;
                 forceLoad();
             }
         }
     };
 
+    @VisibleForTesting
+    Uri mNotifyUri;
     private Context mContext;
 
     ContextualCardLoader(Context context) {
@@ -77,7 +80,10 @@
     @Override
     protected void onStartLoading() {
         super.onStartLoading();
-        mContext.getContentResolver().registerContentObserver(CardContentProvider.URI,
+        mNotifyUri = null;
+        mContext.getContentResolver().registerContentObserver(CardContentProvider.REFRESH_CARD_URI,
+                false /*notifyForDescendants*/, mObserver);
+        mContext.getContentResolver().registerContentObserver(CardContentProvider.DELETE_CARD_URI,
                 false /*notifyForDescendants*/, mObserver);
     }
 
@@ -156,10 +162,12 @@
             // Two large cards
             return visibleCards;
         } finally {
-            //TODO(b/121196921): Should not call this if user click dismiss
-            final ContextualCardFeatureProvider contextualCardFeatureProvider =
-                    FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider(mContext);
-            contextualCardFeatureProvider.logContextualCardDisplay(visibleCards, hiddenCards);
+            if (!CardContentProvider.DELETE_CARD_URI.equals(mNotifyUri)) {
+                final ContextualCardFeatureProvider contextualCardFeatureProvider =
+                        FeatureFactory.getFactory(mContext)
+                                .getContextualCardFeatureProvider(mContext);
+                contextualCardFeatureProvider.logContextualCardDisplay(visibleCards, hiddenCards);
+            }
         }
     }
 
diff --git a/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java b/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
index 2d40efe..48e9f1e 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
@@ -118,7 +118,8 @@
         sliceLiveData.observe(mLifecycleOwner, slice -> {
             if (slice == null) {
                 Log.w(TAG, "Slice is null");
-                mContext.getContentResolver().notifyChange(CardContentProvider.URI, null);
+                mContext.getContentResolver().notifyChange(CardContentProvider.REFRESH_CARD_URI,
+                        null);
                 return;
             } else {
                 //TODO(b/120629936): Take this out once blank card issue is fixed.
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index 1d78485..e7db5db 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -376,12 +376,12 @@
                     }
 
                     WifiInfo info = mAccessPoint.getInfo();
-                    if (info != null && info.getTxLinkSpeedMbps() != -1) {
+                    if (info != null && info.getTxLinkSpeedMbps() != WifiInfo.LINK_SPEED_UNKNOWN) {
                         addRow(group, R.string.tx_wifi_speed, String.format(
                                 res.getString(R.string.tx_link_speed), info.getTxLinkSpeedMbps()));
                     }
 
-                    if (info != null && info.getRxLinkSpeedMbps() != -1) {
+                    if (info != null && info.getRxLinkSpeedMbps() != WifiInfo.LINK_SPEED_UNKNOWN) {
                         addRow(group, R.string.rx_wifi_speed, String.format(
                                 res.getString(R.string.rx_link_speed), info.getRxLinkSpeedMbps()));
                     }
@@ -1509,7 +1509,7 @@
         // Populate the Wi-Fi security spinner with the various supported key management types
         spinnerAdapter.add(mContext.getString(R.string.wifi_security_none));
         mSecurityInPosition[idx++] = AccessPoint.SECURITY_NONE;
-        if (mWifiManager.isOweSupported()) {
+        if (mWifiManager.isEnhancedOpenSupported()) {
             spinnerAdapter.add(mContext.getString(R.string.wifi_security_owe));
             mSecurityInPosition[idx++] = AccessPoint.SECURITY_OWE;
         }
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 27c495e..c00fe24 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -1116,7 +1116,12 @@
                 return;
             }
         } else if (mSelectedAccessPoint.getConfig().isPasspoint()) {
-            mWifiManager.removePasspointConfiguration(mSelectedAccessPoint.getConfig().FQDN);
+            try {
+                mWifiManager.removePasspointConfiguration(mSelectedAccessPoint.getConfig().FQDN);
+            } catch (IllegalArgumentException e) {
+                Log.e(TAG, "Failed to remove Passpoint configuration with error: " + e);
+                return;
+            }
         } else {
             mWifiManager.forget(mSelectedAccessPoint.getConfig().networkId, mForgetListener);
         }
diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
index 53b1530..bc33f4f 100644
--- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
+++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
@@ -20,6 +20,7 @@
 import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
 
 import android.app.Activity;
+import android.app.AlertDialog;
 import android.app.KeyguardManager;
 import android.app.settings.SettingsEnums;
 import android.content.BroadcastReceiver;
@@ -45,7 +46,6 @@
 import android.net.wifi.WifiManager;
 import android.os.Handler;
 import android.text.TextUtils;
-import android.util.FeatureFlagUtils;
 import android.util.Log;
 import android.widget.ImageView;
 import android.widget.Toast;
@@ -61,6 +61,7 @@
 import com.android.settings.Utils;
 import com.android.settings.core.FeatureFlags;
 import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.development.featureflags.FeatureFlagPersistent;
 import com.android.settings.widget.EntityHeaderController;
 import com.android.settings.wifi.WifiDialog;
 import com.android.settings.wifi.WifiDialog.WifiDialogListener;
@@ -568,6 +569,12 @@
             mWifiManager.disableEphemeralNetwork(mWifiInfo.getSSID());
         } else if (mWifiConfig != null) {
             if (mWifiConfig.isPasspoint()) {
+                // Post a dialog to confirm if user really want to forget the passpoint network.
+                if (FeatureFlagPersistent.isEnabled(mContext, FeatureFlags.NETWORK_INTERNET_V2)) {
+                    showConfirmForgetDialog();
+                    return;
+                }
+
                 mWifiManager.removePasspointConfiguration(mWifiConfig.FQDN);
             } else {
                 mWifiManager.forget(mWifiConfig.networkId, null /* action listener */);
@@ -578,6 +585,22 @@
         mFragment.getActivity().finish();
     }
 
+    @VisibleForTesting
+    protected void showConfirmForgetDialog() {
+        final AlertDialog dialog = new AlertDialog.Builder(mContext)
+                .setPositiveButton(R.string.forget, ((dialog1, which) -> {
+                    mWifiManager.removePasspointConfiguration(mWifiConfig.FQDN);
+                    mMetricsFeatureProvider.action(
+                            mFragment.getActivity(), SettingsEnums.ACTION_WIFI_FORGET);
+                    mFragment.getActivity().finish();
+                }))
+                .setNegativeButton(R.string.cancel, null /* listener */)
+                .setTitle(R.string.wifi_forget_dialog_title)
+                .setMessage(R.string.forget_passpoint_dialog_message)
+                .create();
+        dialog.show();
+    }
+
     /**
      * Show QR code to share the network represented by this preference.
      */
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java
index 89beede..f3f4ca6 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java
@@ -34,8 +34,6 @@
 import androidx.preference.Preference;
 
 import com.android.settings.R;
-import com.android.settings.SettingsActivity;
-import com.android.settings.applications.DefaultAppSettings;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -73,7 +71,6 @@
     private ShadowUserManager mShadowUserManager;
 
     private TestRolePreferenceController mController;
-    private TestLegacyPreferenceController mLegacyController;
 
     @Before
     public void setUp() {
@@ -86,7 +83,6 @@
         mShadowUserManager = shadowOf(mActivity.getSystemService(UserManager.class));
         mController = new TestRolePreferenceController(mActivity);
         when(mPreference.getKey()).thenReturn(mController.getPreferenceKey());
-        mLegacyController = new TestLegacyPreferenceController(mActivity);
     }
 
     @Test
@@ -141,8 +137,8 @@
         when(mRoleManager.getRoleHolders(eq(TEST_ROLE_NAME))).thenReturn(Collections.singletonList(
                 TEST_PACKAGE_NAME));
         final CharSequence yesText = mActivity.getText(R.string.yes);
-
         mController.updateState(mPreference);
+
         verify(mPreference).setSummary(yesText);
     }
 
@@ -150,17 +146,17 @@
     public void updateState_notRoleHoler_shouldSetSummaryToNo() {
         when(mRoleManager.getRoleHolders(eq(TEST_ROLE_NAME))).thenReturn(Collections.emptyList());
         final CharSequence noText = mActivity.getText(R.string.no);
-
         mController.updateState(mPreference);
+
         verify(mPreference).setSummary(noText);
     }
 
     @Test
     public void handlePreferenceTreeClick_shouldStartManageDefaultAppIntent() {
         final ShadowActivity shadowActivity = shadowOf(mActivity);
-
         mController.handlePreferenceTreeClick(mPreference);
         final Intent intent = shadowActivity.getNextStartedActivity();
+
         assertThat(intent).isNotNull();
         assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MANAGE_DEFAULT_APP);
         assertThat(intent.getStringExtra(Intent.EXTRA_ROLE_NAME)).isEqualTo(TEST_ROLE_NAME);
@@ -172,76 +168,4 @@
             super(context, TEST_PREFERENCE_KEY, TEST_ROLE_NAME, TEST_PACKAGE_NAME);
         }
     }
-
-    // TODO: STOPSHIP(b/110557011): Remove following tests once we have all default apps migrated.
-
-    @Test
-    public void getAvailabilityStatus_hasAppCapability_shouldReturnAvailable() {
-        mShadowUserManager.setManagedProfile(false);
-        mLegacyController.mHasAppCapability = true;
-
-        assertThat(mLegacyController.getAvailabilityStatus()).isEqualTo(
-                DefaultAppShortcutPreferenceControllerBase.AVAILABLE);
-    }
-
-    @Test
-    public void getAvailabilityStatus_noAppCapability_shouldReturnDisabled() {
-        mShadowUserManager.setManagedProfile(false);
-        mLegacyController.mHasAppCapability = false;
-
-        assertThat(mLegacyController.getAvailabilityStatus()).isEqualTo(
-                DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE);
-    }
-
-    @Test
-    public void updateState_isDefaultApp_shouldSetSummaryToYes() {
-        mLegacyController.mIsDefaultApp = true;
-        final CharSequence yesText = mActivity.getText(R.string.yes);
-
-        mLegacyController.updateState(mPreference);
-        verify(mPreference).setSummary(yesText);
-    }
-
-    @Test
-    public void updateState_notDefaultApp_shouldSetSummaryToNo() {
-        mLegacyController.mIsDefaultApp = false;
-        final CharSequence noText = mActivity.getText(R.string.no);
-
-        mLegacyController.updateState(mPreference);
-        verify(mPreference).setSummary(noText);
-    }
-
-    @Test
-    public void handlePreferenceTreeClick_shouldStartDefaultAppSettings() {
-        final ShadowActivity shadowActivity = shadowOf(mActivity);
-
-        mLegacyController.handlePreferenceTreeClick(mPreference);
-        final Intent intent = shadowActivity.getNextStartedActivity();
-        assertThat(intent).isNotNull();
-        assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)).isEqualTo(
-                DefaultAppSettings.class.getName());
-        assertThat(intent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS).getString(
-                SettingsActivity.EXTRA_FRAGMENT_ARG_KEY)).isEqualTo(TEST_PREFERENCE_KEY);
-    }
-
-    private class TestLegacyPreferenceController
-            extends DefaultAppShortcutPreferenceControllerBase {
-
-        private boolean mIsDefaultApp;
-        private boolean mHasAppCapability;
-
-        private TestLegacyPreferenceController(Context context) {
-            super(context, TEST_PREFERENCE_KEY, TEST_PACKAGE_NAME);
-        }
-
-        @Override
-        protected boolean hasAppCapability() {
-            return mHasAppCapability;
-        }
-
-        @Override
-        protected boolean isDefaultApp() {
-            return mIsDefaultApp;
-        }
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceControllerTest.java
index 65b68aa..c2a3b4a 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceControllerTest.java
@@ -18,15 +18,8 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.argThat;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
 import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
+import android.permission.PermissionControllerManager;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -35,57 +28,27 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
-
-import java.util.ArrayList;
-import java.util.List;
+import org.robolectric.shadows.ShadowApplication;
 
 @RunWith(RobolectricTestRunner.class)
 public class DefaultBrowserShortcutPreferenceControllerTest {
 
     @Mock
-    private PackageManager mPackageManager;
+    private PermissionControllerManager mPermissionControllerManager;
 
-    private Context mContext;
     private DefaultBrowserShortcutPreferenceController mController;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        mContext = spy(RuntimeEnvironment.application);
-        when(mContext.getPackageManager()).thenReturn(mPackageManager);
-        mController = new DefaultBrowserShortcutPreferenceController(mContext, "Package1");
+        ShadowApplication.getInstance().setSystemService(Context.PERMISSION_CONTROLLER_SERVICE,
+                mPermissionControllerManager);
+        mController = new DefaultBrowserShortcutPreferenceController(RuntimeEnvironment.application,
+                "Package1");
     }
 
     @Test
     public void getPreferenceKey_shouldReturnDefaultBrowser() {
         assertThat(mController.getPreferenceKey()).isEqualTo("default_browser");
     }
-
-    @Test
-    public void hasAppCapability_hasBrowserCapability_shouldReturnTrue() {
-        List<ResolveInfo> resolveInfos = new ArrayList<>();
-        resolveInfos.add(new ResolveInfo());
-        when(mPackageManager.queryIntentActivitiesAsUser(argThat(intent-> intent != null
-                && intent.getCategories().contains(Intent.CATEGORY_BROWSABLE)), anyInt(), anyInt()))
-                .thenReturn(resolveInfos);
-
-        assertThat(mController.hasAppCapability()).isTrue();
-    }
-
-    @Test
-    public void hasAppCapability_noBrowserCapability_shouldReturnFalse() {
-        assertThat(mController.hasAppCapability()).isFalse();
-    }
-
-    @Test
-    public void isDefaultApp_isDefaultBrowser_shouldReturnTrue() {
-        when(mPackageManager.getDefaultBrowserPackageNameAsUser(anyInt())).thenReturn("Package1");
-
-        assertThat(mController.isDefaultApp()).isTrue();
-    }
-
-    @Test
-    public void isDefaultApp_notDefaultBrowser_shouldReturnFalse() {
-        assertThat(mController.isDefaultApp()).isFalse();
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultEmergencyShortcutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultEmergencyShortcutPreferenceControllerTest.java
index 9f2ee44..8466092 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultEmergencyShortcutPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultEmergencyShortcutPreferenceControllerTest.java
@@ -18,17 +18,8 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.argThat;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import android.app.role.RoleManager;
 import android.content.Context;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.provider.Settings;
-import android.telephony.TelephonyManager;
+import android.permission.PermissionControllerManager;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -37,62 +28,27 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
+import org.robolectric.shadows.ShadowApplication;
 
 @RunWith(RobolectricTestRunner.class)
 public class DefaultEmergencyShortcutPreferenceControllerTest {
 
     @Mock
-    private RoleManager mRoleManager;
-    @Mock
-    private PackageManager mPackageManager;
+    private PermissionControllerManager mPermissionControllerManager;
 
-    private Context mContext;
     private DefaultEmergencyShortcutPreferenceController mController;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        mContext = spy(RuntimeEnvironment.application);
-        when(mContext.getPackageManager()).thenReturn(mPackageManager);
-        when(mContext.getSystemService(RoleManager.class)).thenReturn(mRoleManager);
-        mController = new DefaultEmergencyShortcutPreferenceController(mContext, "Package1");
+        ShadowApplication.getInstance().setSystemService(Context.PERMISSION_CONTROLLER_SERVICE,
+                mPermissionControllerManager);
+        mController = new DefaultEmergencyShortcutPreferenceController(
+                RuntimeEnvironment.application, "Package1");
     }
 
     @Test
     public void getPreferenceKey_shouldReturnDefaultEmergency() {
         assertThat(mController.getPreferenceKey()).isEqualTo("default_emergency_app");
     }
-
-    @Test
-    public void hasAppCapability_hasEmergencyCapability_shouldReturnTrue() {
-        List<ResolveInfo> resolveInfos = new ArrayList<>();
-        resolveInfos.add(new ResolveInfo());
-        when(mPackageManager.queryIntentActivities(argThat(intent-> intent != null
-                && intent.getAction().equals(TelephonyManager.ACTION_EMERGENCY_ASSISTANCE)),
-                anyInt())).thenReturn(resolveInfos);
-
-        assertThat(mController.hasAppCapability()).isTrue();
-    }
-
-    @Test
-    public void hasAppCapability_noEmergencyCapability_shouldReturnFalse() {
-        assertThat(mController.hasAppCapability()).isFalse();
-    }
-
-    @Test
-    public void isDefaultApp_isDefaultEmergency_shouldReturnTrue() {
-        when(mRoleManager.getRoleHolders(RoleManager.ROLE_EMERGENCY))
-                .thenReturn(Collections.singletonList("Package1"));
-
-        assertThat(mController.isDefaultApp()).isTrue();
-    }
-
-    @Test
-    public void isDefaultApp_notDefaultEmergency_shouldReturnFalse() {
-        assertThat(mController.isDefaultApp()).isFalse();
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultHomeShortcutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultHomeShortcutPreferenceControllerTest.java
index ff281b2..c5cae3a 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultHomeShortcutPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultHomeShortcutPreferenceControllerTest.java
@@ -18,15 +18,8 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.ArgumentMatchers.anyList;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import android.content.ComponentName;
 import android.content.Context;
-import android.content.pm.PackageManager;
-
-import com.android.settings.applications.defaultapps.DefaultHomePreferenceController;
+import android.permission.PermissionControllerManager;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -35,62 +28,27 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-import org.robolectric.annotation.Implementation;
-import org.robolectric.annotation.Implements;
+import org.robolectric.shadows.ShadowApplication;
 
 @RunWith(RobolectricTestRunner.class)
 public class DefaultHomeShortcutPreferenceControllerTest {
 
     @Mock
-    private PackageManager mPackageManager;
+    private PermissionControllerManager mPermissionControllerManager;
 
-    private Context mContext;
     private DefaultHomeShortcutPreferenceController mController;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        mContext = spy(RuntimeEnvironment.application);
-        when(mContext.getPackageManager()).thenReturn(mPackageManager);
-        mController = new DefaultHomeShortcutPreferenceController(mContext, "Package1");
+        ShadowApplication.getInstance().setSystemService(Context.PERMISSION_CONTROLLER_SERVICE,
+                mPermissionControllerManager);
+        mController = new DefaultHomeShortcutPreferenceController(RuntimeEnvironment.application,
+                "Package1");
     }
 
     @Test
     public void getPreferenceKey_shouldReturnDefaultHome() {
         assertThat(mController.getPreferenceKey()).isEqualTo("default_home");
     }
-
-    @Test
-    @Config(shadows = ShadowDefaultHomePreferenceController.class)
-    public void hasAppCapability_hasHomeCapability_shouldReturnTrue() {
-        assertThat(mController.hasAppCapability()).isTrue();
-    }
-
-    @Test
-    public void hasAppCapability_noHomeCapability_shouldReturnFalse() {
-        assertThat(mController.hasAppCapability()).isFalse();
-    }
-
-    @Test
-    public void isDefaultApp_isDefaultHome_shouldReturnTrue() {
-        when(mPackageManager.getHomeActivities(anyList()))
-                .thenReturn(new ComponentName("Package1", "cls1"));
-        assertThat(mController.isDefaultApp()).isTrue();
-    }
-
-    @Test
-    public void isDefaultApp_notDefaultHome_shouldReturnFalse() {
-        when(mPackageManager.getHomeActivities(anyList()))
-                .thenReturn(new ComponentName("pkg2", "cls1"));
-        assertThat(mController.isDefaultApp()).isFalse();
-    }
-
-    @Implements(DefaultHomePreferenceController.class)
-    public static class ShadowDefaultHomePreferenceController {
-        @Implementation
-        protected static boolean hasHomePreference(String pkg, Context context) {
-            return true;
-        }
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
index 18aa1c4..8b04ef3 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
@@ -24,7 +24,9 @@
 
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
 
 import android.content.Context;
 import android.net.Uri;
@@ -33,6 +35,7 @@
 
 import com.android.settings.R;
 import com.android.settings.slices.CustomSliceRegistry;
+import com.android.settings.testutils.FakeFeatureFactory;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -52,6 +55,7 @@
     private Context mContext;
     private ContextualCardLoader mContextualCardLoader;
     private EligibleCardChecker mEligibleCardChecker;
+    private FakeFeatureFactory mFakeFeatureFactory;
 
     @Before
     public void setUp() {
@@ -59,6 +63,7 @@
         mContextualCardLoader = spy(new ContextualCardLoader(mContext));
         mEligibleCardChecker =
                 spy(new EligibleCardChecker(mContext, getContextualCard(TEST_SLICE_URI)));
+        mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
     }
 
     @Test
@@ -158,6 +163,26 @@
         assertThat(mContextualCardLoader.loadInBackground()).isEmpty();
     }
 
+    @Test
+    public void getDisplayableCards_refreshCardUri_shouldLogContextualCardDisplay() {
+        mContextualCardLoader.mNotifyUri = CardContentProvider.REFRESH_CARD_URI;
+
+        mContextualCardLoader.getDisplayableCards(new ArrayList<ContextualCard>());
+
+        verify(mFakeFeatureFactory.mContextualCardFeatureProvider).logContextualCardDisplay(
+                any(List.class), any(List.class));
+    }
+
+    @Test
+    public void getDisplayableCards_deleteCardUri_shouldNotLogContextualCardDisplay() {
+        mContextualCardLoader.mNotifyUri = CardContentProvider.DELETE_CARD_URI;
+
+        mContextualCardLoader.getDisplayableCards(new ArrayList<ContextualCard>());
+
+        verify(mFakeFeatureFactory.mContextualCardFeatureProvider, never())
+                .logContextualCardDisplay(any(List.class), any(List.class));
+    }
+
     private ContextualCard getContextualCard(String sliceUri) {
         return new ContextualCard.Builder()
                 .setName("test_card")
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardControllerTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardControllerTest.java
index 7e1a32c..e97e01e 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardControllerTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardControllerTest.java
@@ -75,7 +75,7 @@
 
     @Test
     public void onDismissed_cardShouldBeMarkedAsDismissed() {
-        final Uri providerUri = CardContentProvider.URI;
+        final Uri providerUri = CardContentProvider.REFRESH_CARD_URI;
         mResolver.insert(providerUri, generateOneRow());
         doNothing().when(mController).showFeedbackDialog(any(ContextualCard.class));
 
@@ -96,7 +96,7 @@
 
     @Test
     public void onDismissed_noFeedbackEmail_shouldNotShowFeedbackDialog() {
-        mResolver.insert(CardContentProvider.URI, generateOneRow());
+        mResolver.insert(CardContentProvider.REFRESH_CARD_URI, generateOneRow());
         final ContextualCardsFragment fragment =
                 FragmentController.of(new ContextualCardsFragment()).create().get();
         final ShadowActivity shadowActivity = Shadows.shadowOf(fragment.getActivity());
@@ -109,7 +109,7 @@
     @Test
     @Config(qualifiers = "mcc999")
     public void onDismissed_hasFeedbackEmail_shouldShowFeedbackDialog() {
-        mResolver.insert(CardContentProvider.URI, generateOneRow());
+        mResolver.insert(CardContentProvider.REFRESH_CARD_URI, generateOneRow());
         final ContextualCardsFragment fragment =
                 FragmentController.of(new ContextualCardsFragment()).create().get();
         final ShadowActivity shadowActivity = Shadows.shadowOf(fragment.getActivity());
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
index fd25f7d..b16d900 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
@@ -324,7 +324,7 @@
         WifiManager wifiManager = mock(WifiManager.class);
         when(wifiManager.isWpa3SaeSupported()).thenReturn(saeVisible);
         when(wifiManager.isWpa3SuiteBSupported()).thenReturn(suitebVisible);
-        when(wifiManager.isOweSupported()).thenReturn(oweVisible);
+        when(wifiManager.isEnhancedOpenSupported()).thenReturn(oweVisible);
 
         mController = new TestWifiConfigController(mConfigUiBase, mView, null /* accessPoint */,
                 WifiConfigUiBase.MODE_MODIFY, wifiManager);
diff --git a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
index 308d4b5..640c426 100644
--- a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
@@ -65,6 +65,8 @@
 
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
+import com.android.settings.core.FeatureFlags;
+import com.android.settings.development.featureflags.FeatureFlagPersistent;
 import com.android.settings.testutils.shadow.ShadowDevicePolicyManager;
 import com.android.settings.testutils.shadow.ShadowEntityHeaderController;
 import com.android.settings.widget.EntityHeaderController;
@@ -429,7 +431,7 @@
 
     @Test
     public void linkSpeedPref_shouldNotShowIfNotSet() {
-        when(mockWifiInfo.getTxLinkSpeedMbps()).thenReturn(-1);
+        when(mockWifiInfo.getTxLinkSpeedMbps()).thenReturn(WifiInfo.LINK_SPEED_UNKNOWN);
 
         displayAndResume();
 
@@ -447,7 +449,7 @@
 
     @Test
     public void rxLinkSpeedPref_shouldNotShowIfNotSet() {
-        when(mockWifiInfo.getRxLinkSpeedMbps()).thenReturn(-1);
+        when(mockWifiInfo.getRxLinkSpeedMbps()).thenReturn(WifiInfo.LINK_SPEED_UNKNOWN);
 
         displayAndResume();
 
@@ -756,6 +758,36 @@
     }
 
     @Test
+    public void forgetNetwork_Passpoint() {
+        mockWifiConfig.networkId = 5;
+        when(mockWifiConfig.isPasspoint()).thenReturn(true);
+
+        mController.displayPreference(mockScreen);
+        mForgetClickListener.getValue().onClick(null);
+
+        verify(mockWifiManager).removePasspointConfiguration(mockWifiConfig.FQDN);
+        verify(mockMetricsFeatureProvider)
+                .action(mockActivity, MetricsProto.MetricsEvent.ACTION_WIFI_FORGET);
+    }
+
+    @Test
+    public void forgetNetwork_PasspointV2_shouldShowDialog() {
+        final WifiDetailPreferenceController spyController = spy(mController);
+
+        mockWifiConfig.networkId = 5;
+        when(mockWifiConfig.isPasspoint()).thenReturn(true);
+        FeatureFlagPersistent.setEnabled(mContext, FeatureFlags.NETWORK_INTERNET_V2, true);
+
+        spyController.displayPreference(mockScreen);
+        mForgetClickListener.getValue().onClick(null);
+
+        verify(mockWifiManager, times(0)).removePasspointConfiguration(mockWifiConfig.FQDN);
+        verify(mockMetricsFeatureProvider, times(0))
+                .action(mockActivity, MetricsProto.MetricsEvent.ACTION_WIFI_FORGET);
+        verify(spyController).showConfirmForgetDialog();
+    }
+
+    @Test
     public void networkStateChangedIntent_shouldRefetchInfo() {
         displayAndResume();
 
diff --git a/tests/uitests/src/com/android/settings/ui/HomepageDisplayTests.java b/tests/uitests/src/com/android/settings/ui/HomepageDisplayTests.java
index 4c72b34..807ac6f 100644
--- a/tests/uitests/src/com/android/settings/ui/HomepageDisplayTests.java
+++ b/tests/uitests/src/com/android/settings/ui/HomepageDisplayTests.java
@@ -52,7 +52,9 @@
             "Display",
             "Sound",
             "Storage",
-            "Security & location",
+            "Security",
+            "Location",
+            "Privacy",
             "Accounts",
             "Accessibility",
             "System"