Merge "Apply top intro preference for face settings page"
diff --git a/res/layout/wifi_dpp_qrcode_generator_fragment.xml b/res/layout/wifi_dpp_qrcode_generator_fragment.xml
index 76eecb0..1d9656c 100644
--- a/res/layout/wifi_dpp_qrcode_generator_fragment.xml
+++ b/res/layout/wifi_dpp_qrcode_generator_fragment.xml
@@ -42,6 +42,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
+ android:id="@+id/wifi_dpp_layout"
android:orientation="vertical">
<ImageView
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2989d8a..984b36e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -12431,7 +12431,14 @@
<string name="calls_preference_title">Calls</string>
<!-- Provider Model: SMS preference title -->
<string name="sms_preference_title">SMS</string>
+ <!-- Network & internet preferences title [CHAR LIMIT=NONE] -->
+ <string name="network_and_internet_preferences_title">Preferences</string>
+ <!-- Network & internet preferences summary [CHAR LIMIT=NONE] -->
+ <string name="network_and_internet_preferences_summary">Connect to public networks</string>
<!-- Summary for preference when Bedtime mode is on [CHAR LIMIT=NONE] -->
<string name="aware_summary_when_bedtime_on">Unavailable because bedtime mode is on</string>
+
+ <!-- Toast message to inform reset notification importance is completed [CHAR LIMIT=NONE] -->
+ <string name="reset_importance_completed">Reset notification importance completed.</string>
</resources>
diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml
index fcc6bcc..6781e28 100644
--- a/res/xml/accessibility_settings.xml
+++ b/res/xml/accessibility_settings.xml
@@ -90,7 +90,7 @@
android:key="toggle_force_bold_text"
android:persistent="false"
android:title="@string/force_bold_text"
- settings:controller="com.android.settings.accessibility.ForceBoldTextPreferenceController"/>
+ settings:controller="com.android.settings.accessibility.FontWeightAdjustmentPreferenceController"/>
</PreferenceCategory>
<PreferenceCategory
diff --git a/res/xml/dark_mode_settings.xml b/res/xml/dark_mode_settings.xml
index 0ebc044..e076b89 100644
--- a/res/xml/dark_mode_settings.xml
+++ b/res/xml/dark_mode_settings.xml
@@ -27,6 +27,11 @@
settings:allowDividerBelow="true"
settings:controller="com.android.settings.display.TwilightLocationPreferenceController"/>
+ <com.android.settingslib.widget.TopIntroPreference
+ android:key="dark_ui_top_intro"
+ android:title="@string/dark_ui_text"
+ settings:searchable="false"/>
+
<DropDownPreference
android:key="dark_ui_auto_mode"
android:title="@string/dark_ui_auto_mode_title"
@@ -55,11 +60,4 @@
settings:allowDividerBelow="true"
settings:controller="com.android.settings.display.darkmode.DarkModeActivationPreferenceController"/>
- <com.android.settingslib.widget.FooterPreference
- android:key="dark_ui_footer"
- android:title="@string/dark_ui_text"
- android:selectable="false"
- settings:searchable="false"
- settings:allowDividerAbove="true"/>
-
</PreferenceScreen>
diff --git a/res/xml/graphics_driver_settings.xml b/res/xml/graphics_driver_settings.xml
index a1fa78c..26c3193 100644
--- a/res/xml/graphics_driver_settings.xml
+++ b/res/xml/graphics_driver_settings.xml
@@ -20,12 +20,17 @@
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/graphics_driver_dashboard_title">
+ <com.android.settingslib.widget.TopIntroPreference
+ android:key="top_info_graphics_driver"
+ android:title="@string/graphics_driver_footer_text"
+ settings:controller="com.android.settings.development.graphicsdriver.GraphicsDriverTopIntroPreferenceController"/>
+
<ListPreference
android:key="graphics_driver_all_apps_preference"
android:title="@string/graphics_driver_all_apps_preference_title"
android:dialogTitle="@string/graphics_driver_all_apps_preference_title"
- settings:controller="com.android.settings.development.graphicsdriver.GraphicsDriverEnableForAllAppsPreferenceController">
- </ListPreference>
+ settings:controller="com.android.settings.development.graphicsdriver.GraphicsDriverEnableForAllAppsPreferenceController"
+ settings:allowDividerAbove="true"/>
<PreferenceCategory
android:key="graphics_driver_category"
@@ -33,11 +38,4 @@
settings:controller="com.android.settings.development.graphicsdriver.GraphicsDriverAppPreferenceController">
</PreferenceCategory>
- <com.android.settingslib.widget.FooterPreference
- android:key="graphics_driver_footer"
- android:title="@string/graphics_driver_footer_text"
- android:selectable="false"
- settings:controller="com.android.settings.development.graphicsdriver.GraphicsDriverFooterPreferenceController">
- </com.android.settingslib.widget.FooterPreference>
-
</PreferenceScreen>
diff --git a/res/xml/network_provider_settings.xml b/res/xml/network_provider_settings.xml
index 2af2e91..a3fecf6 100644
--- a/res/xml/network_provider_settings.xml
+++ b/res/xml/network_provider_settings.xml
@@ -33,7 +33,8 @@
<Preference
android:key="configure_wifi_settings"
- android:title="@string/wifi_configure_settings_preference_title"
+ android:title="@string/network_and_internet_preferences_title"
+ android:summary="@string/network_and_internet_preferences_summary"
settings:allowDividerAbove="true"
android:fragment="com.android.settings.wifi.ConfigureWifiSettings"/>
diff --git a/res/xml/night_display_settings.xml b/res/xml/night_display_settings.xml
index 8b7e41a..9acccf6 100644
--- a/res/xml/night_display_settings.xml
+++ b/res/xml/night_display_settings.xml
@@ -27,10 +27,16 @@
settings:controller="com.android.settings.display.TwilightLocationPreferenceController"
settings:allowDividerBelow="true"/>
+ <com.android.settingslib.widget.TopIntroPreference
+ android:key="night_display_top_intro"
+ android:title="@string/night_display_text"
+ settings:controller="com.android.settings.display.NightDisplayTopIntroPreferenceController"/>
+
<DropDownPreference
android:key="night_display_auto_mode"
android:title="@string/night_display_auto_mode_title"
android:summary="%s"
+ settings:allowDividerAbove="true"
settings:controller="com.android.settings.display.NightDisplayAutoModePreferenceController"/>
<Preference
@@ -59,11 +65,4 @@
settings:keywords="@string/keywords_display_night_display"
settings:controller="com.android.settings.display.NightDisplayActivationPreferenceController"/>
- <com.android.settingslib.widget.FooterPreference
- android:key="night_display_footer"
- android:title="@string/night_display_text"
- android:selectable="false"
- settings:allowDividerAbove="true"
- settings:controller="com.android.settings.display.NightDisplayFooterPreferenceController"/>
-
</PreferenceScreen>
diff --git a/res/xml/tether_prefs.xml b/res/xml/tether_prefs.xml
index 9367a9b..cca4e5f 100644
--- a/res/xml/tether_prefs.xml
+++ b/res/xml/tether_prefs.xml
@@ -19,12 +19,17 @@
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/tether_settings_title_all">
+ <com.android.settingslib.widget.TopIntroPreference
+ android:key="tether_prefs_top_intro"
+ settings:searchable="false"/>
+
<com.android.settings.widget.FixedLineSummaryPreference
android:key="wifi_tether"
android:title="@string/wifi_hotspot_checkbox_text"
android:summary="@string/summary_placeholder"
android:fragment="com.android.settings.wifi.tether.WifiTetherSettings"
- settings:summaryLineCount="2" />
+ settings:allowDividerAbove="true"
+ settings:summaryLineCount="2"/>
<SwitchPreference
android:key="usb_tether_settings"
@@ -49,9 +54,4 @@
android:summary="@string/tether_settings_disabled_on_data_saver"
android:selectable="false"
settings:allowDividerAbove="true" />
-
- <com.android.settingslib.widget.FooterPreference
- android:key="tether_prefs_footer"
- android:selectable="false"
- settings:searchable="false"/>
</PreferenceScreen>
diff --git a/res/xml/user_settings.xml b/res/xml/user_settings.xml
index 7726a18..5cafa1a 100644
--- a/res/xml/user_settings.xml
+++ b/res/xml/user_settings.xml
@@ -20,6 +20,11 @@
android:key="user_settings_screen"
android:title="@string/user_settings_title">
+ <com.android.settingslib.widget.TopIntroPreference
+ android:key="multiuser_top_intro"
+ android:title="@string/user_settings_footer_text"
+ settings:controller="com.android.settings.users.MultiUserTopIntroPreferenceController"/>
+
<PreferenceCategory
android:key="user_list"
android:title="@string/user_list_title"
@@ -45,11 +50,4 @@
android:order="105"
settings:allowDividerAbove="true"/>
- <com.android.settingslib.widget.FooterPreference
- android:key="multiuser_footer"
- android:title="@string/user_settings_footer_text"
- android:selectable="false"
- settings:searchable="false"
- settings:controller="com.android.settings.users.MultiUserFooterPreferenceController"/>
-
</PreferenceScreen>
diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java
index 74a0897..c33f7db 100644
--- a/src/com/android/settings/TetherSettings.java
+++ b/src/com/android/settings/TetherSettings.java
@@ -78,7 +78,7 @@
private static final String KEY_ENABLE_ETHERNET_TETHERING = "enable_ethernet_tethering";
private static final String KEY_DATA_SAVER_FOOTER = "disabled_on_data_saver";
@VisibleForTesting
- static final String KEY_TETHER_PREFS_FOOTER = "tether_prefs_footer";
+ static final String KEY_TETHER_PREFS_TOP_INTRO = "tether_prefs_top_intro";
private static final String TAG = "TetheringSettings";
@@ -155,7 +155,7 @@
}
setupTetherPreference();
- setFooterPreferenceTitle();
+ setTopIntroPreferenceTitle();
mDataSaverBackend.addListener(this);
@@ -231,14 +231,14 @@
}
@VisibleForTesting
- void setFooterPreferenceTitle() {
- final Preference footerPreference = findPreference(KEY_TETHER_PREFS_FOOTER);
+ void setTopIntroPreferenceTitle() {
+ final Preference topIntroPreference = findPreference(KEY_TETHER_PREFS_TOP_INTRO);
final WifiManager wifiManager =
(WifiManager) getContext().getSystemService(Context.WIFI_SERVICE);
if (wifiManager.isStaApConcurrencySupported()) {
- footerPreference.setTitle(R.string.tethering_footer_info_sta_ap_concurrency);
+ topIntroPreference.setTitle(R.string.tethering_footer_info_sta_ap_concurrency);
} else {
- footerPreference.setTitle(R.string.tethering_footer_info);
+ topIntroPreference.setTitle(R.string.tethering_footer_info);
}
}
diff --git a/src/com/android/settings/accessibility/ForceBoldTextPreferenceController.java b/src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceController.java
similarity index 70%
rename from src/com/android/settings/accessibility/ForceBoldTextPreferenceController.java
rename to src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceController.java
index c8a3203..97f96a4 100644
--- a/src/com/android/settings/accessibility/ForceBoldTextPreferenceController.java
+++ b/src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceController.java
@@ -17,15 +17,17 @@
package com.android.settings.accessibility;
import android.content.Context;
-import android.content.res.Configuration;
+import android.graphics.fonts.FontStyle;
import android.provider.Settings;
import com.android.settings.core.TogglePreferenceController;
/** PreferenceController for displaying all text in bold. */
-public class ForceBoldTextPreferenceController extends TogglePreferenceController {
+public class FontWeightAdjustmentPreferenceController extends TogglePreferenceController {
+ static final int BOLD_TEXT_ADJUSTMENT =
+ FontStyle.FONT_WEIGHT_BOLD - FontStyle.FONT_WEIGHT_NORMAL;
- public ForceBoldTextPreferenceController(Context context, String preferenceKey) {
+ public FontWeightAdjustmentPreferenceController(Context context, String preferenceKey) {
super(context, preferenceKey);
}
@@ -37,14 +39,12 @@
@Override
public boolean isChecked() {
return Settings.Secure.getInt(mContext.getContentResolver(),
- Settings.Secure.FORCE_BOLD_TEXT, Configuration.FORCE_BOLD_TEXT_NO)
- == Configuration.FORCE_BOLD_TEXT_YES;
+ Settings.Secure.FONT_WEIGHT_ADJUSTMENT, 0) == BOLD_TEXT_ADJUSTMENT;
}
@Override
public boolean setChecked(boolean isChecked) {
return Settings.Secure.putInt(mContext.getContentResolver(),
- Settings.Secure.FORCE_BOLD_TEXT,
- (isChecked ? Configuration.FORCE_BOLD_TEXT_YES : Configuration.FORCE_BOLD_TEXT_NO));
+ Settings.Secure.FONT_WEIGHT_ADJUSTMENT, (isChecked ? BOLD_TEXT_ADJUSTMENT : 0));
}
}
diff --git a/src/com/android/settings/development/graphicsdriver/GraphicsDriverFooterPreferenceController.java b/src/com/android/settings/development/graphicsdriver/GraphicsDriverTopIntroPreferenceController.java
similarity index 85%
rename from src/com/android/settings/development/graphicsdriver/GraphicsDriverFooterPreferenceController.java
rename to src/com/android/settings/development/graphicsdriver/GraphicsDriverTopIntroPreferenceController.java
index 5595f39..3d449d9 100644
--- a/src/com/android/settings/development/graphicsdriver/GraphicsDriverFooterPreferenceController.java
+++ b/src/com/android/settings/development/graphicsdriver/GraphicsDriverTopIntroPreferenceController.java
@@ -33,12 +33,12 @@
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
-import com.android.settingslib.widget.FooterPreference;
+import com.android.settingslib.widget.TopIntroPreference;
/**
- * Controller of footer preference for Graphics Driver Preferences dashboard.
+ * Controller of top info preference for Graphics Driver Preferences dashboard.
*/
-public class GraphicsDriverFooterPreferenceController extends BasePreferenceController
+public class GraphicsDriverTopIntroPreferenceController extends BasePreferenceController
implements GraphicsDriverContentObserver.OnGraphicsDriverContentChangedListener,
LifecycleObserver, OnStart, OnStop {
@@ -46,9 +46,9 @@
@VisibleForTesting
GraphicsDriverContentObserver mGraphicsDriverContentObserver;
- private FooterPreference mPreference;
+ private TopIntroPreference mPreference;
- public GraphicsDriverFooterPreferenceController(Context context, String key) {
+ public GraphicsDriverTopIntroPreferenceController(Context context, String key) {
super(context, key);
mContentResolver = context.getContentResolver();
mGraphicsDriverContentObserver =
@@ -83,8 +83,8 @@
@Override
public void updateState(Preference preference) {
- final FooterPreference footerPref = (FooterPreference) preference;
- footerPref.setVisible(isAvailable());
+ final TopIntroPreference topIntroPref = (TopIntroPreference) preference;
+ topIntroPref.setVisible(isAvailable());
}
@Override
diff --git a/src/com/android/settings/display/NightDisplayFooterPreferenceController.java b/src/com/android/settings/display/NightDisplayTopIntroPreferenceController.java
similarity index 78%
rename from src/com/android/settings/display/NightDisplayFooterPreferenceController.java
rename to src/com/android/settings/display/NightDisplayTopIntroPreferenceController.java
index 14fe25e..a40044b 100644
--- a/src/com/android/settings/display/NightDisplayFooterPreferenceController.java
+++ b/src/com/android/settings/display/NightDisplayTopIntroPreferenceController.java
@@ -21,9 +21,13 @@
import com.android.settings.core.BasePreferenceController;
-public class NightDisplayFooterPreferenceController extends BasePreferenceController {
+/**
+ * NightDisplayTopIntroPreferenceController can control the visibility of night display top info
+ * preference.
+ */
+public class NightDisplayTopIntroPreferenceController extends BasePreferenceController {
- public NightDisplayFooterPreferenceController(Context context, String key) {
+ public NightDisplayTopIntroPreferenceController(Context context, String key) {
super(context, key);
}
diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java
index 5a42a5a..df62190 100644
--- a/src/com/android/settings/network/NetworkProviderSettings.java
+++ b/src/com/android/settings/network/NetworkProviderSettings.java
@@ -828,10 +828,12 @@
@VisibleForTesting
void setAdditionalSettingsSummaries() {
- mConfigureWifiSettingsPreference.setSummary(getString(
- isWifiWakeupEnabled()
- ? R.string.wifi_configure_settings_preference_summary_wakeup_on
- : R.string.wifi_configure_settings_preference_summary_wakeup_off));
+ if (!FeatureFlagUtils.isEnabled(getContext(), FeatureFlagUtils.SETTINGS_PROVIDER_MODEL)) {
+ mConfigureWifiSettingsPreference.setSummary(getString(
+ isWifiWakeupEnabled()
+ ? R.string.wifi_configure_settings_preference_summary_wakeup_on
+ : R.string.wifi_configure_settings_preference_summary_wakeup_off));
+ }
final int numSavedNetworks = mWifiPickerTracker.getNumSavedNetworks();
final int numSavedSubscriptions = mWifiPickerTracker.getNumSavedSubscriptions();
diff --git a/src/com/android/settings/notification/ImportanceResetPreferenceController.java b/src/com/android/settings/notification/ImportanceResetPreferenceController.java
index b374129..3c66f1a 100644
--- a/src/com/android/settings/notification/ImportanceResetPreferenceController.java
+++ b/src/com/android/settings/notification/ImportanceResetPreferenceController.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.view.View;
import android.widget.Button;
+import android.widget.Toast;
import androidx.preference.Preference;
@@ -57,6 +58,8 @@
@Override
public void onClick(View v) {
mBackend.resetNotificationImportance();
+ Toast.makeText(mContext, R.string.reset_importance_completed, Toast.LENGTH_SHORT)
+ .show();
}
@Override
diff --git a/src/com/android/settings/users/MultiUserFooterPreferenceController.java b/src/com/android/settings/users/MultiUserTopIntroPreferenceController.java
similarity index 83%
rename from src/com/android/settings/users/MultiUserFooterPreferenceController.java
rename to src/com/android/settings/users/MultiUserTopIntroPreferenceController.java
index 03ed6ce..a8076c2 100644
--- a/src/com/android/settings/users/MultiUserFooterPreferenceController.java
+++ b/src/com/android/settings/users/MultiUserTopIntroPreferenceController.java
@@ -23,12 +23,16 @@
import com.android.settings.core.BasePreferenceController;
-public class MultiUserFooterPreferenceController extends BasePreferenceController {
+/**
+ * MultiUserTopIntroPreferenceController can control the visibility of multi user top info
+ * preference.
+ */
+public class MultiUserTopIntroPreferenceController extends BasePreferenceController {
@VisibleForTesting
final UserCapabilities mUserCaps;
- public MultiUserFooterPreferenceController(Context context, String key) {
+ public MultiUserTopIntroPreferenceController(Context context, String key) {
super(context, key);
mUserCaps = UserCapabilities.create(context);
}
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index d92418d..63ccb6b 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -110,7 +110,7 @@
private static final String KEY_ADD_GUEST = "guest_add";
private static final String KEY_ADD_USER = "user_add";
private static final String KEY_ADD_USER_WHEN_LOCKED = "user_settings_add_users_when_locked";
- private static final String KEY_MULTIUSER_FOOTER = "multiuser_footer";
+ private static final String KEY_MULTIUSER_TOP_INTRO = "multiuser_top_intro";
private static final int MENU_REMOVE_USER = Menu.FIRST;
@@ -169,7 +169,7 @@
private EditUserInfoController mEditUserInfoController =
new EditUserInfoController(Utils.FILE_PROVIDER_AUTHORITY);
private AddUserWhenLockedPreferenceController mAddUserWhenLockedPreferenceController;
- private MultiUserFooterPreferenceController mMultiUserFooterPreferenceController;
+ private MultiUserTopIntroPreferenceController mMultiUserTopIntroPreferenceController;
private UserCreatingDialog mUserCreatingDialog;
private CharSequence mPendingUserName;
@@ -240,12 +240,12 @@
mAddUserWhenLockedPreferenceController = new AddUserWhenLockedPreferenceController(
activity, KEY_ADD_USER_WHEN_LOCKED);
- mMultiUserFooterPreferenceController = new MultiUserFooterPreferenceController(activity,
- KEY_MULTIUSER_FOOTER);
+ mMultiUserTopIntroPreferenceController = new MultiUserTopIntroPreferenceController(activity,
+ KEY_MULTIUSER_TOP_INTRO);
final PreferenceScreen screen = getPreferenceScreen();
mAddUserWhenLockedPreferenceController.displayPreference(screen);
- mMultiUserFooterPreferenceController.displayPreference(screen);
+ mMultiUserTopIntroPreferenceController.displayPreference(screen);
screen.findPreference(mAddUserWhenLockedPreferenceController.getPreferenceKey())
.setOnPreferenceChangeListener(mAddUserWhenLockedPreferenceController);
@@ -936,14 +936,14 @@
// Remove everything from mUserListCategory and add new users.
mUserListCategory.removeAll();
- // If multi-user is disabled, just show footer and return.
+ // If multi-user is disabled, just show top info and return.
final Preference addUserOnLockScreen = getPreferenceScreen().findPreference(
mAddUserWhenLockedPreferenceController.getPreferenceKey());
mAddUserWhenLockedPreferenceController.updateState(addUserOnLockScreen);
- final Preference multiUserFooterPrefence = getPreferenceScreen().findPreference(
- mMultiUserFooterPreferenceController.getPreferenceKey());
- mMultiUserFooterPreferenceController.updateState(multiUserFooterPrefence);
+ final Preference multiUserTopIntroPrefence = getPreferenceScreen().findPreference(
+ mMultiUserTopIntroPreferenceController.getPreferenceKey());
+ mMultiUserTopIntroPreferenceController.updateState(multiUserTopIntroPrefence);
mUserListCategory.setVisible(mUserCaps.mUserSwitcherEnabled);
updateAddGuest(context, users.stream().anyMatch(UserInfo::isGuest));
diff --git a/src/com/android/settings/wifi/ConfigureWifiSettings.java b/src/com/android/settings/wifi/ConfigureWifiSettings.java
index 3009ae7..81ca183 100644
--- a/src/com/android/settings/wifi/ConfigureWifiSettings.java
+++ b/src/com/android/settings/wifi/ConfigureWifiSettings.java
@@ -21,6 +21,8 @@
import android.content.Context;
import android.content.Intent;
import android.net.wifi.WifiManager;
+import android.os.Bundle;
+import android.util.FeatureFlagUtils;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
@@ -43,6 +45,14 @@
private UseOpenWifiPreferenceController mUseOpenWifiPreferenceController;
@Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ if (FeatureFlagUtils.isEnabled(getContext(), FeatureFlagUtils.SETTINGS_PROVIDER_MODEL)) {
+ getActivity().setTitle(R.string.network_and_internet_preferences_title);
+ }
+ }
+
+ @Override
public int getMetricsCategory() {
return SettingsEnums.CONFIGURE_WIFI;
}
@@ -54,7 +64,10 @@
@Override
public int getInitialExpandedChildCount() {
- int tileLimit = 2;
+ int tileLimit = 1;
+ if (mWifiWakeupPreferenceController.isAvailable()) {
+ tileLimit++;
+ }
if (mUseOpenWifiPreferenceController.isAvailable()) {
tileLimit++;
}
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 5c7820c..2804393 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -106,6 +106,7 @@
@VisibleForTesting
static final int MENU_ID_FORGET = Menu.FIRST + 3;
static final int MENU_ID_MODIFY = Menu.FIRST + 4;
+ static final int MENU_ID_SHARE = Menu.FIRST + 5;
// Max age of tracked WifiEntries
private static final long MAX_SCAN_AGE_MILLIS = 15_000;
@@ -499,7 +500,8 @@
}
if (mSelectedWifiEntry.canDisconnect()) {
- menu.add(Menu.NONE, MENU_ID_DISCONNECT, 0 /* order */,
+ menu.add(Menu.NONE, MENU_ID_SHARE, 0 /* order */, R.string.share);
+ menu.add(Menu.NONE, MENU_ID_DISCONNECT, 1 /* order */,
R.string.wifi_disconnect_button_text);
}
@@ -538,6 +540,10 @@
case MENU_ID_FORGET:
forget(mSelectedWifiEntry);
return true;
+ case MENU_ID_SHARE:
+ WifiDppUtils.showLockScreen(getContext(),
+ () -> launchWifiDppConfiguratorActivity(mSelectedWifiEntry));
+ return true;
case MENU_ID_MODIFY:
showDialog(mSelectedWifiEntry, WifiConfigUiBase2.MODE_MODIFY);
return true;
@@ -1115,6 +1121,23 @@
.launch();
}
+ private void launchWifiDppConfiguratorActivity(WifiEntry wifiEntry) {
+ final Intent intent = WifiDppUtils.getConfiguratorQrCodeGeneratorIntentOrNull(getContext(),
+ mWifiManager, wifiEntry);
+
+ if (intent == null) {
+ Log.e(TAG, "Launch Wi-Fi DPP QR code generator with a wrong Wi-Fi network!");
+ } else {
+ mMetricsFeatureProvider.action(SettingsEnums.PAGE_UNKNOWN,
+ SettingsEnums.ACTION_SETTINGS_SHARE_WIFI_QR_CODE,
+ SettingsEnums.SETTINGS_WIFI_DPP_CONFIGURATOR,
+ /* key */ null,
+ /* value */ Integer.MIN_VALUE);
+
+ startActivity(intent);
+ }
+ }
+
/** Helper method to return whether a WifiEntry is disabled due to a wrong password */
private static boolean isDisabledByWrongPassword(WifiEntry wifiEntry) {
WifiConfiguration config = wifiEntry.getWifiConfiguration();
diff --git a/src/com/android/settings/wifi/WifiWakeupPreferenceController.java b/src/com/android/settings/wifi/WifiWakeupPreferenceController.java
index e9fd350..5869705 100644
--- a/src/com/android/settings/wifi/WifiWakeupPreferenceController.java
+++ b/src/com/android/settings/wifi/WifiWakeupPreferenceController.java
@@ -26,6 +26,7 @@
import android.location.LocationManager;
import android.net.wifi.WifiManager;
import android.provider.Settings;
+import android.util.FeatureFlagUtils;
import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.Fragment;
@@ -44,6 +45,7 @@
* {@link TogglePreferenceController} that controls whether the Wi-Fi Wakeup feature should be
* enabled.
*/
+// TODO(b/167474581): Should clean up this controller when Provider Model finished.
public class WifiWakeupPreferenceController extends TogglePreferenceController implements
LifecycleObserver, OnPause, OnResume {
@@ -89,6 +91,9 @@
@Override
public int getAvailabilityStatus() {
+ if (FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL)) {
+ return CONDITIONALLY_UNAVAILABLE;
+ }
return AVAILABLE;
}
diff --git a/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java b/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java
index 603ea10..aa67bde 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java
@@ -16,9 +16,17 @@
package com.android.settings.wifi.dpp;
+import android.annotation.Nullable;
import android.app.settings.SettingsEnums;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
+import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
@@ -27,9 +35,13 @@
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.app.chooser.DisplayResolveInfo;
+import com.android.internal.app.chooser.TargetInfo;
import com.android.settings.R;
import com.android.settings.wifi.qrcode.QrCodeGenerator;
@@ -45,6 +57,15 @@
private ImageView mQrCodeView;
private String mQrCode;
+ private static final String CHIP_LABEL_METADATA_KEY = "android.service.chooser.chip_label";
+ private static final String CHIP_ICON_METADATA_KEY = "android.service.chooser.chip_icon";
+ private static final String EXTRA_WIFI_CREDENTIALS_BUNDLE =
+ "android.intent.extra.WIFI_CREDENTIALS_BUNDLE";
+ private static final String EXTRA_SSID = "android.intent.extra.SSID";
+ private static final String EXTRA_PASSWORD = "android.intent.extra.PASSWORD";
+ private static final String EXTRA_SECURITY_TYPE = "android.intent.extra.SECURITY_TYPE";
+ private static final String EXTRA_HIDDEN_SSID = "android.intent.extra.HIDDEN_SSID";
+
@Override
public int getMetricsCategory() {
return SettingsEnums.SETTINGS_WIFI_DPP_CONFIGURATOR;
@@ -56,10 +77,12 @@
// setTitle for TalkBack
final WifiNetworkConfig wifiNetworkConfig = getWifiNetworkConfigFromHostActivity();
- if (wifiNetworkConfig.isHotspot()) {
- getActivity().setTitle(R.string.wifi_dpp_share_hotspot);
- } else {
- getActivity().setTitle(R.string.wifi_dpp_share_wifi);
+ if (getActivity() != null) {
+ if (wifiNetworkConfig.isHotspot()) {
+ getActivity().setTitle(R.string.wifi_dpp_share_hotspot);
+ } else {
+ getActivity().setTitle(R.string.wifi_dpp_share_wifi);
+ }
}
}
@@ -112,10 +135,127 @@
}
}
+ final Intent intent = new Intent().setComponent(getNearbySharingComponent());
+ addActionButton(view.findViewById(R.id.wifi_dpp_layout), createNearbyButton(intent, v -> {
+ intent.setAction(Intent.ACTION_SEND);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
+
+ Bundle wifiCredentialBundle = new Bundle();
+
+ String ssid = WifiDppUtils.removeFirstAndLastDoubleQuotes(wifiNetworkConfig.getSsid());
+
+ String passwordExtra = wifiNetworkConfig.getPreSharedKey();
+ String securityType = wifiNetworkConfig.getSecurity();
+ boolean hiddenSsid = wifiNetworkConfig.getHiddenSsid();
+
+ wifiCredentialBundle.putString(EXTRA_SSID, ssid);
+ wifiCredentialBundle.putString(EXTRA_PASSWORD, passwordExtra);
+ wifiCredentialBundle.putString(EXTRA_SECURITY_TYPE, securityType);
+ wifiCredentialBundle.putBoolean(EXTRA_HIDDEN_SSID, hiddenSsid);
+
+ intent.putExtra(EXTRA_WIFI_CREDENTIALS_BUNDLE, wifiCredentialBundle);
+ startActivity(intent);
+ }));
+
mQrCode = wifiNetworkConfig.getQrCode();
setQrCode();
}
+ @VisibleForTesting ComponentName getNearbySharingComponent() {
+ String nearbyComponent = Settings.Secure.getString(
+ getContext().getContentResolver(),
+ Settings.Secure.NEARBY_SHARING_COMPONENT);
+ if (TextUtils.isEmpty(nearbyComponent)) {
+ nearbyComponent = getString(
+ com.android.internal.R.string.config_defaultNearbySharingComponent);
+ }
+ if (TextUtils.isEmpty(nearbyComponent)) {
+ return null;
+ }
+ return ComponentName.unflattenFromString(nearbyComponent);
+ }
+
+ private TargetInfo getNearbySharingTarget(Intent originalIntent) {
+ final ComponentName cn = getNearbySharingComponent();
+ if (cn == null) return null;
+
+ final Intent resolveIntent = new Intent(originalIntent);
+ resolveIntent.setComponent(cn);
+ PackageManager pm = getContext().getPackageManager();
+ final ResolveInfo resolveInfo = pm.resolveActivity(
+ resolveIntent, PackageManager.GET_META_DATA);
+ if (resolveInfo == null || resolveInfo.activityInfo == null) {
+ Log.e(TAG, "Device-specified nearby sharing component (" + cn
+ + ") not available");
+ return null;
+ }
+
+ // Allow the nearby sharing component to provide a more appropriate icon and label
+ // for the chip.
+ CharSequence name = null;
+ Drawable icon = null;
+ final Bundle metaData = resolveInfo.activityInfo.metaData;
+ if (metaData != null) {
+ try {
+ final Resources pkgRes = pm.getResourcesForActivity(cn);
+ final int nameResId = metaData.getInt(CHIP_LABEL_METADATA_KEY);
+ name = pkgRes.getString(nameResId);
+ final int resId = metaData.getInt(CHIP_ICON_METADATA_KEY);
+ icon = pkgRes.getDrawable(resId);
+ } catch (Resources.NotFoundException ex) {
+ } catch (PackageManager.NameNotFoundException ex) {
+ }
+ }
+ if (TextUtils.isEmpty(name)) {
+ name = resolveInfo.loadLabel(pm);
+ }
+ if (icon == null) {
+ icon = resolveInfo.loadIcon(pm);
+ }
+
+ final DisplayResolveInfo dri = new DisplayResolveInfo(
+ originalIntent, resolveInfo, name, "", resolveIntent, null);
+ dri.setDisplayIcon(icon);
+ return dri;
+ }
+
+ private Button createActionButton(Drawable icon, CharSequence title, View.OnClickListener r) {
+ Button b = (Button) LayoutInflater.from(getContext()).inflate(
+ com.android.internal.R.layout.chooser_action_button, null);
+ if (icon != null) {
+ final int size = getResources()
+ .getDimensionPixelSize(
+ com.android.internal.R.dimen.chooser_action_button_icon_size);
+ icon.setBounds(0, 0, size, size);
+ b.setCompoundDrawablesRelative(icon, null, null, null);
+ }
+ b.setText(title);
+ b.setOnClickListener(r);
+ return b;
+ }
+
+ private void addActionButton(ViewGroup parent, Button b) {
+ if (b == null) return;
+ final ViewGroup.MarginLayoutParams lp = new ViewGroup.MarginLayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ );
+ final int gap = getResources().getDimensionPixelSize(
+ com.android.internal.R.dimen.resolver_icon_margin) / 2;
+ lp.setMarginsRelative(gap, 0, gap, 0);
+ parent.addView(b, lp);
+ }
+
+ @VisibleForTesting
+ @Nullable
+ Button createNearbyButton(Intent originalIntent, View.OnClickListener r) {
+ final TargetInfo ti = getNearbySharingTarget(originalIntent);
+ if (ti == null) return null;
+
+ return createActionButton(ti.getDisplayIcon(getContext()), ti.getDisplayLabel(), r);
+ }
+
private void setQrCode() {
try {
final int qrcodeSize = getContext().getResources().getDimensionPixelSize(
diff --git a/src/com/android/settings/wifi/dpp/WifiDppUtils.java b/src/com/android/settings/wifi/dpp/WifiDppUtils.java
index bd3eaa6..2957e1f 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppUtils.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppUtils.java
@@ -145,7 +145,7 @@
return wifiConfiguration.preSharedKey;
}
- private static String removeFirstAndLastDoubleQuotes(String str) {
+ static String removeFirstAndLastDoubleQuotes(String str) {
if (TextUtils.isEmpty(str)) {
return str;
}
diff --git a/src/com/android/settings/wifi/slice/WifiSlice.java b/src/com/android/settings/wifi/slice/WifiSlice.java
index 324d68c..2858ab4 100644
--- a/src/com/android/settings/wifi/slice/WifiSlice.java
+++ b/src/com/android/settings/wifi/slice/WifiSlice.java
@@ -224,7 +224,7 @@
private SliceAction getActivityAction(int requestCode, Intent intent, IconCompat icon,
CharSequence title) {
final PendingIntent pi = PendingIntent.getActivity(mContext, requestCode, intent,
- 0 /* flags */);
+ PendingIntent.FLAG_IMMUTABLE /* flags */);
return SliceAction.createDeeplink(pi, icon, ListBuilder.ICON_IMAGE, title);
}
@@ -289,7 +289,7 @@
private PendingIntent getPrimaryAction() {
final Intent intent = getIntent();
return PendingIntent.getActivity(mContext, 0 /* requestCode */,
- intent, 0 /* flags */);
+ intent, PendingIntent.FLAG_IMMUTABLE /* flags */);
}
private Set<String> getKeywords() {
diff --git a/tests/robotests/src/com/android/settings/TetherSettingsTest.java b/tests/robotests/src/com/android/settings/TetherSettingsTest.java
index be14eda..f217e21 100644
--- a/tests/robotests/src/com/android/settings/TetherSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/TetherSettingsTest.java
@@ -158,13 +158,13 @@
final TetherSettings spyTetherSettings = spy(new TetherSettings());
when(spyTetherSettings.getContext()).thenReturn(mContext);
final Preference mockPreference = mock(Preference.class);
- when(spyTetherSettings.findPreference(TetherSettings.KEY_TETHER_PREFS_FOOTER))
+ when(spyTetherSettings.findPreference(TetherSettings.KEY_TETHER_PREFS_TOP_INTRO))
.thenReturn(mockPreference);
final WifiManager mockWifiManager = mock(WifiManager.class);
when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mockWifiManager);
when(mockWifiManager.isStaApConcurrencySupported()).thenReturn(true);
- spyTetherSettings.setFooterPreferenceTitle();
+ spyTetherSettings.setTopIntroPreferenceTitle();
verify(mockPreference, never()).setTitle(R.string.tethering_footer_info);
verify(mockPreference).setTitle(R.string.tethering_footer_info_sta_ap_concurrency);
diff --git a/tests/robotests/src/com/android/settings/accessibility/ForceBoldTextPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceControllerTest.java
similarity index 71%
rename from tests/robotests/src/com/android/settings/accessibility/ForceBoldTextPreferenceControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceControllerTest.java
index 46e1f48..eb49edd 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ForceBoldTextPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceControllerTest.java
@@ -32,20 +32,20 @@
import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class)
-public class ForceBoldTextPreferenceControllerTest {
- private static final int ON = 2;
- private static final int OFF = 1;
- private static final int UNKNOWN = 0;
+public class FontWeightAdjustmentPreferenceControllerTest {
+ private static final int ON = FontWeightAdjustmentPreferenceController.BOLD_TEXT_ADJUSTMENT;
+ private static final int OFF = 0;
private Context mContext;
private SwitchPreference mPreference;
- private ForceBoldTextPreferenceController mController;
+ private FontWeightAdjustmentPreferenceController mController;
@Before
public void setUp() {
mContext = RuntimeEnvironment.application;
mPreference = new SwitchPreference(mContext);
- mController = new ForceBoldTextPreferenceController(mContext, "force_bold_text");
+ mController = new FontWeightAdjustmentPreferenceController(
+ mContext, "font_weight_adjustment");
}
@Test
@@ -55,9 +55,9 @@
}
@Test
- public void isChecked_enabledTextContrast_shouldReturnTrue() {
+ public void isChecked_enabledBoldText_shouldReturnTrue() {
Settings.Secure.putInt(mContext.getContentResolver(),
- Settings.Secure.FORCE_BOLD_TEXT, ON);
+ Settings.Secure.FONT_WEIGHT_ADJUSTMENT, ON);
mController.updateState(mPreference);
@@ -66,9 +66,9 @@
}
@Test
- public void isChecked_disabledTextContrast_shouldReturnFalse() {
+ public void isChecked_disabledBoldText_shouldReturnFalse() {
Settings.Secure.putInt(mContext.getContentResolver(),
- Settings.Secure.FORCE_BOLD_TEXT, OFF);
+ Settings.Secure.FONT_WEIGHT_ADJUSTMENT, OFF);
mController.updateState(mPreference);
@@ -77,19 +77,18 @@
}
@Test
- public void setChecked_setTrue_shouldEnableTextContrast() {
+ public void setChecked_setTrue_shouldEnableBoldText() {
mController.setChecked(true);
assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
- Settings.Secure.FORCE_BOLD_TEXT, UNKNOWN)).isEqualTo(ON);
-
+ Settings.Secure.FONT_WEIGHT_ADJUSTMENT, OFF)).isEqualTo(ON);
}
@Test
- public void setChecked_setFalse_shouldDisableTextContrast() {
+ public void setChecked_setFalse_shouldDisableBoldText() {
mController.setChecked(false);
assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
- Settings.Secure.FORCE_BOLD_TEXT, UNKNOWN)).isEqualTo(OFF);
+ Settings.Secure.FONT_WEIGHT_ADJUSTMENT, OFF)).isEqualTo(OFF);
}
}
diff --git a/tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverFooterPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverTopIntroPreferenceControllerTest.java
similarity index 92%
rename from tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverFooterPreferenceControllerTest.java
rename to tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverTopIntroPreferenceControllerTest.java
index 1e4c496..28e5c5a 100644
--- a/tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverFooterPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverTopIntroPreferenceControllerTest.java
@@ -34,7 +34,7 @@
import androidx.preference.PreferenceScreen;
-import com.android.settingslib.widget.FooterPreference;
+import com.android.settingslib.widget.TopIntroPreference;
import org.junit.Before;
import org.junit.Test;
@@ -45,25 +45,25 @@
import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class)
-public class GraphicsDriverFooterPreferenceControllerTest {
+public class GraphicsDriverTopIntroPreferenceControllerTest {
@Mock
private PreferenceScreen mScreen;
@Mock
- private FooterPreference mPreference;
+ private TopIntroPreference mPreference;
@Mock
private GraphicsDriverContentObserver mGraphicsDriverContentObserver;
private Context mContext;
private ContentResolver mResolver;
- private GraphicsDriverFooterPreferenceController mController;
+ private GraphicsDriverTopIntroPreferenceController mController;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
mResolver = mContext.getContentResolver();
- mController = spy(new GraphicsDriverFooterPreferenceController(mContext, "key"));
+ mController = spy(new GraphicsDriverTopIntroPreferenceController(mContext, "key"));
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
}
diff --git a/tests/robotests/src/com/android/settings/display/NightDisplayFooterPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/NightDisplayTopIntroPreferenceControllerTest.java
similarity index 74%
rename from tests/robotests/src/com/android/settings/display/NightDisplayFooterPreferenceControllerTest.java
rename to tests/robotests/src/com/android/settings/display/NightDisplayTopIntroPreferenceControllerTest.java
index efb26fa..10f7f0b 100644
--- a/tests/robotests/src/com/android/settings/display/NightDisplayFooterPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/NightDisplayTopIntroPreferenceControllerTest.java
@@ -1,15 +1,17 @@
/*
* 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
+ * 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.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*/
package com.android.settings.display;
@@ -31,14 +33,14 @@
@RunWith(RobolectricTestRunner.class)
@Config(shadows = SettingsShadowResources.class)
-public class NightDisplayFooterPreferenceControllerTest {
+public class NightDisplayTopIntroPreferenceControllerTest {
- private NightDisplayFooterPreferenceController mController;
+ private NightDisplayTopIntroPreferenceController mController;
@Before
public void setUp() {
mController =
- new NightDisplayFooterPreferenceController(RuntimeEnvironment.application, "key");
+ new NightDisplayTopIntroPreferenceController(RuntimeEnvironment.application, "key");
}
@After
diff --git a/tests/robotests/src/com/android/settings/users/MultiUserFooterPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/users/MultiUserTopIntroPreferenceControllerTest.java
similarity index 89%
rename from tests/robotests/src/com/android/settings/users/MultiUserFooterPreferenceControllerTest.java
rename to tests/robotests/src/com/android/settings/users/MultiUserTopIntroPreferenceControllerTest.java
index 69825b4..bc0b060 100644
--- a/tests/robotests/src/com/android/settings/users/MultiUserFooterPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/users/MultiUserTopIntroPreferenceControllerTest.java
@@ -32,15 +32,15 @@
@RunWith(RobolectricTestRunner.class)
@Ignore
-public class MultiUserFooterPreferenceControllerTest {
+public class MultiUserTopIntroPreferenceControllerTest {
private Context mContext;
- private MultiUserFooterPreferenceController mController;
+ private MultiUserTopIntroPreferenceController mController;
@Before
public void setUp() {
mContext = RuntimeEnvironment.application;
- mController = new MultiUserFooterPreferenceController(mContext, "footer");
+ mController = new MultiUserTopIntroPreferenceController(mContext, "top_info");
}
@Test
diff --git a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
index ec2fdc6..3494c63 100644
--- a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
@@ -128,8 +128,8 @@
mFragment = spy(new UserSettings());
ReflectionHelpers.setField(mFragment, "mAddUserWhenLockedPreferenceController",
mock(AddUserWhenLockedPreferenceController.class));
- ReflectionHelpers.setField(mFragment, "mMultiUserFooterPreferenceController",
- mock(MultiUserFooterPreferenceController.class));
+ ReflectionHelpers.setField(mFragment, "mMultiUserTopIntroPreferenceController",
+ mock(MultiUserTopIntroPreferenceController.class));
ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
ReflectionHelpers.setField(mFragment, "mUserCaps", mUserCapabilities);
ReflectionHelpers.setField(mFragment, "mDefaultIconDrawable", mDefaultIconDrawable);
diff --git a/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragmentTest.java
new file mode 100644
index 0000000..b36d7f5
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragmentTest.java
@@ -0,0 +1,161 @@
+/*
+ * 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.
+ */
+
+package com.android.settings.wifi.dpp;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+
+import androidx.fragment.app.FragmentTransaction;
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.Robolectric;
+
+@RunWith(AndroidJUnit4.class)
+public class WifiDppQrCodeGeneratorFragmentTest {
+
+ private WifiDppConfiguratorActivity mActivity;
+ private WifiDppQrCodeGeneratorFragment mFragment;
+ private Context mContext;
+
+
+ @Before
+ public void setUp() {
+ Intent intent =
+ new Intent(WifiDppConfiguratorActivity.ACTION_CONFIGURATOR_QR_CODE_GENERATOR);
+ intent.putExtra(WifiDppUtils.EXTRA_WIFI_SSID, "GoogleGuest");
+ intent.putExtra(WifiDppUtils.EXTRA_WIFI_SECURITY, "WPA");
+ intent.putExtra(WifiDppUtils.EXTRA_WIFI_PRE_SHARED_KEY, "\\012345678,");
+
+ MockitoAnnotations.initMocks(this);
+ mActivity = Robolectric.setupActivity(WifiDppConfiguratorActivity.class);
+ mActivity.setWifiNetworkConfig(WifiNetworkConfig.getValidConfigOrNull(intent));
+ mActivity.startActivity(intent);
+
+ mFragment = spy(new WifiDppQrCodeGeneratorFragment());
+ FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();
+ ft.add(mFragment, null);
+ ft.commit();
+
+ mContext = spy(InstrumentationRegistry.getTargetContext());
+ when(mFragment.getContext()).thenReturn(mContext);
+ }
+
+ @Test
+ public void rotateScreen_shouldNotCrash() {
+ mActivity.setRequestedOrientation(
+ ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+ mActivity.setRequestedOrientation(
+ ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
+ }
+
+ @Test
+ public void createNearbyButton_returnsNull() {
+ assertThat(mFragment.createNearbyButton(new Intent(), v -> {
+ })).isNull();
+ }
+
+ private static ResolveInfo createResolveInfo(int userId) {
+ final ResolveInfo resolveInfo = new ResolveInfo();
+ resolveInfo.activityInfo = createActivityInfo();
+ resolveInfo.targetUserId = userId;
+ return resolveInfo;
+ }
+
+ private static ActivityInfo createActivityInfo() {
+ ActivityInfo ai = new ActivityInfo();
+ ai.name = "activity_name";
+ ai.packageName = "foo_bar";
+ ai.enabled = true;
+ ai.exported = true;
+ ai.permission = null;
+ ai.applicationInfo = new ApplicationInfo();
+ ai.applicationInfo.packageName = "com.google.android.gms";
+
+ Bundle metadata = mock(Bundle.class);
+ when(metadata.getInt(anyString())).thenReturn(1);
+ ai.metaData = metadata;
+ return ai;
+ }
+
+ @Test
+ public void createNearbyButtonFromSetting_notNull()
+ throws PackageManager.NameNotFoundException {
+ doReturn(ComponentName.unflattenFromString(
+ "com.google.android.gms/com.google.android.gms.nearby.sharing.ShareSheetActivity"))
+ .when(mFragment).getNearbySharingComponent();
+ PackageManager packageManager = mock(PackageManager.class);
+ doReturn(createResolveInfo(0)).when(packageManager).resolveActivity(any(), anyInt());
+
+ Resources resources = mock(Resources.class);
+ when(resources.getString(anyInt())).thenReturn("Nearby");
+ Drawable drawable = mock(Drawable.class);
+ when(resources.getDrawable(anyInt())).thenReturn(drawable);
+
+ when(packageManager.getResourcesForActivity(any())).thenReturn(resources);
+
+ when(mContext.getPackageManager()).thenReturn(packageManager);
+
+
+ assertThat(mFragment.createNearbyButton(new Intent(), v -> {
+ })).isNotNull();
+ }
+
+ @Test
+ public void createNearbyButtonFromConfig_notNull() throws PackageManager.NameNotFoundException {
+ doReturn(
+ "com.google.android.gms/com.google.android.gms.nearby.sharing.ShareSheetActivity")
+ .when(mFragment).getString(anyInt());
+ PackageManager packageManager = mock(PackageManager.class);
+ doReturn(createResolveInfo(0)).when(packageManager).resolveActivity(any(), anyInt());
+
+ Resources resources = mock(Resources.class);
+ when(resources.getString(anyInt())).thenReturn("Nearby");
+ Drawable drawable = mock(Drawable.class);
+ when(resources.getDrawable(anyInt())).thenReturn(drawable);
+
+ when(packageManager.getResourcesForActivity(any())).thenReturn(resources);
+
+ when(mContext.getPackageManager()).thenReturn(packageManager);
+
+
+ assertThat(mFragment.createNearbyButton(new Intent(), v -> {
+ })).isNotNull();
+ }
+}