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"