Merge "Fix runtime exception when cachedDevice is null"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 62803af..956477b 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -213,7 +213,7 @@
<activity
android:name=".Settings$ConnectedDeviceDashboardActivity"
android:label="@string/connected_devices_dashboard_title"
- android:icon="@drawable/ic_homepage_connected_device"
+ android:icon="@drawable/ic_devices_other"
android:parentActivityName="Settings">
<intent-filter android:priority="1">
<action android:name="android.settings.BLUETOOTH_SETTINGS" />
@@ -2642,10 +2642,6 @@
android:grantUriPermissions="true"
android:exported="false"/>
- <activity android:name=".sim.SimPreferenceDialog"
- android:theme="@style/Theme.AlertDialog"
- android:excludeFromRecents="true" />
-
<activity
android:name=".wifi.RequestToggleWiFiActivity"
android:theme="@android:style/Theme.DeviceDefault.Light.Dialog.Alert"
diff --git a/res/layout/crypt_keeper_emergency_button.xml b/res/layout/crypt_keeper_emergency_button.xml
index 0b6f810..6efcf5a 100644
--- a/res/layout/crypt_keeper_emergency_button.xml
+++ b/res/layout/crypt_keeper_emergency_button.xml
@@ -24,8 +24,7 @@
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
- android:orientation="vertical"
- android:gravity="bottom">
+ android:orientation="vertical">
<Button
android:id="@+id/emergencyCallButton"
android:layout_width="wrap_content"
diff --git a/res/layout/multi_sim_dialog.xml b/res/layout/multi_sim_dialog.xml
deleted file mode 100644
index d0e7df8..0000000
--- a/res/layout/multi_sim_dialog.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <LinearLayout android:id="@+id/type"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/sim_dialog_margin_top"
- android:paddingStart="@dimen/sim_content_padding"
- android:text="@string/sim_editor_name" />
-
- <EditText android:id="@+id/sim_name"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:paddingStart="@dimen/sim_content_padding"
- android:paddingBottom="@dimen/sim_dialog_margin_bottom"
- android:hint="@string/sim_name_hint"
- android:inputType="textNoSuggestions"
- android:maxLength="@integer/sim_name_length"
- android:textColor="@android:color/black"
- style="?android:attr/textAppearanceMedium" />
-
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/sim_dialog_margin_top"
- android:paddingStart="@dimen/sim_content_padding"
- android:text="@string/color_title" />
-
- <Spinner
- android:id="@+id/spinner"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingStart="@dimen/sim_content_padding" />
-
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/sim_dialog_margin_top"
- android:paddingStart="@dimen/sim_content_padding"
- android:text="@string/sim_editor_carrier" />
-
- <TextView android:id="@+id/carrier"
- android:textColor="@android:color/black"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingStart="@dimen/sim_content_padding"
- android:paddingBottom="@dimen/sim_dialog_margin_bottom"
- android:singleLine="true"
- style="?android:attr/textAppearanceMedium" />
-
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/sim_dialog_margin_top"
- android:paddingStart="@dimen/sim_content_padding"
- android:text="@string/sim_editor_number" />
-
- <TextView android:id="@+id/number"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingBottom="@dimen/sim_dialog_margin_bottom"
- android:paddingStart="@dimen/sim_content_padding"
- android:singleLine="true"
- android:textColor="@android:color/black"
- style="?android:attr/textAppearanceMedium" />
-
- </LinearLayout>
-
- </LinearLayout>
-
-</ScrollView>
diff --git a/res/layout/settings_color_picker_item.xml b/res/layout/settings_color_picker_item.xml
deleted file mode 100644
index c171950..0000000
--- a/res/layout/settings_color_picker_item.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:background="?android:attr/selectableItemBackground" >
-
- <ImageView
- android:id="@+id/color_icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingRight="8dp"
- android:paddingLeft="6dp"
- android:paddingTop="8dp"
- android:paddingBottom="8dp"
- android:layout_gravity="center_vertical" />
-
- <TextView
- android:id="@+id/color_text"
- android:gravity="center_vertical"
- android:layout_height="wrap_content"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:paddingTop="8dp"
- android:paddingBottom="8dp"
- android:paddingRight="8dp"
- android:paddingLeft="8dp"
- android:textColor="@android:color/black"
- style="?android:attr/textAppearanceMedium" />
-
-</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/wifi_dialog.xml b/res/layout/wifi_dialog.xml
index 7d55e7b..c8fd6ce 100644
--- a/res/layout/wifi_dialog.xml
+++ b/res/layout/wifi_dialog.xml
@@ -368,14 +368,14 @@
android:layout_height="wrap_content"
style="@style/wifi_item"
android:paddingBottom="4dp"
- android:importantForAccessibility="yes"
- android:contentDescription="@string/wifi_advanced_toggle_description_collapsed"
+ android:importantForAccessibility="no"
android:visibility="gone">
<CheckBox android:id="@+id/wifi_advanced_togglebox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_advanced_toggle"
- android:importantForAccessibility="noHideDescendants"
+ android:importantForAccessibility="yes"
+ android:contentDescription="@string/wifi_advanced_toggle_description"
android:text="@string/wifi_show_advanced" />
</LinearLayout>
diff --git a/res/values/config.xml b/res/values/config.xml
index a329397..06a1555 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -410,7 +410,7 @@
<string name="config_nearby_devices_slice_uri" translatable="false">content://com.google.android.gms.nearby.fastpair/device_status_list_item</string>
<!-- Grayscale settings intent -->
- <string name="config_grayscale_settings_intent" translate="false"></string>
+ <string name="config_grayscale_settings_intent" translatable="false"></string>
<!-- List containing the injected tile keys which are suppressed. -->
<string-array name="config_suppress_injected_tile_keys" translatable="false"/>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ed5865a..e1f360a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -533,12 +533,6 @@
<!-- Main Settings screen settings summary text for the "Wireless controls" setting -->
<string name="radio_controls_summary">Manage Wi\u2011Fi, Bluetooth, airplane mode, mobile networks, & VPNs</string>
- <!-- check box cellular data title [CHAR LIMIT=30] -->
- <string name="cellular_data_title">Mobile data</string>
- <!-- check box Calls title [CHAR LIMIT=30] -->
- <string name="calls_title">Allow calls</string>
- <!-- check box SMS Messges title [CHAR LIMIT=30] -->
- <string name="sms_messages_title">SMS messages</string>
<!-- check box cellular data summary [CHAR LIMIT=85] -->
<string name="cellular_data_summary">Allow data usage over mobile network</string>
<!-- check box to allow data usage when roaming [CHAR LIMIT=41] -->
@@ -1955,10 +1949,12 @@
<!-- Dialog for Access Points --> <skip />
<!-- Label to show/hide advanced options [CHAR LIMIT=40] -->
<string name="wifi_show_advanced">Advanced options</string>
- <!-- Message for talkback to say when Advanced Options expanded [CHAR LIMIT=NONE] -->
- <string name="wifi_advanced_toggle_description_expanded">Drop down list Advanced Options. Double-tap to collapse.</string>
- <!-- Message for talkback to say when Advanced Options is collapsed [CHAR LIMIT=NONE] -->
- <string name="wifi_advanced_toggle_description_collapsed">Drop down list Advanced Options. Double-tap to expand.</string>
+ <!-- Message for talkback to say when focus on Advanced Options[CHAR LIMIT=NONE] -->
+ <string name="wifi_advanced_toggle_description">Drop down list Advanced Options</string>
+ <!-- Extended message for talkback to say when Advanced Options is expanded. (e.g., Double-tap to collapse) [CHAR LIMIT=NONE] -->
+ <string name="wifi_advanced_toggle_description_expanded">collapse</string>
+ <!-- Extended message for talkback to say when Advanced Options is collapsed. (e.g., Double-tap to expand) [CHAR LIMIT=NONE] -->
+ <string name="wifi_advanced_toggle_description_collapsed">expand</string>
<!-- Label for the SSID of the network -->
<string name="wifi_ssid">Network name</string>
<!-- Hint for a text field to enter the SSID of a hidden wifi network. [CHAR LIMIT=35] -->
@@ -2210,8 +2206,8 @@
<string name="wifi_advanced_titlebar">Advanced Wi\u2011Fi</string>
<!-- Wi-Fi settings screen, advanced, title of the item to show the Wi-Fi device's SSID. [CHAR LIMIT=20] -->
<string name="wifi_advanced_ssid_title">SSID</string>
- <!-- Wi-Fi settings screen, advanced, title of the item to show the factory's Wi-Fi MAC address. [CHAR LIMIT=50] -->
- <string name="wifi_advanced_factory_mac_address_title">Factory MAC address</string>
+ <!-- Wi-Fi settings screen, advanced, title of the item to show the device's Wi-Fi MAC address. [CHAR LIMIT=50] -->
+ <string name="wifi_advanced_device_mac_address_title">Device MAC address</string>
<!-- Wi-Fi settings screen, advanced, title of the item to show the randomized Wi-Fi MAC address. [CHAR LIMIT=50] -->
<string name="wifi_advanced_randomized_mac_address_title">Randomized MAC address</string>
<!-- Title of the screen to adjust IP settings -->
@@ -3039,8 +3035,8 @@
<string name="status_operator">Network</string>
<!-- About phone, status item title. The MAC address of the Wi-Fi network adapter. -->
<string name="status_wifi_mac_address">Wi\u2011Fi MAC address</string>
- <!-- About phone, status item title. The Factory MAC address of the Wi-Fi network adapter. [CHAR LIMIT=50] -->
- <string name="status_factory_wifi_mac_address">Factory Wi\u2011Fi MAC address</string>
+ <!-- About phone, status item title. The device's MAC address of the Wi-Fi network adapter. [CHAR LIMIT=50] -->
+ <string name="status_device_wifi_mac_address">Device Wi\u2011Fi MAC address</string>
<!-- About phone, status item title. The bluetooth adapter's hardware address-->
<string name="status_bt_address">Bluetooth address</string>
<!-- About phone, status item title. The hardware serial number. [CHAR LIMIT=30]-->
@@ -7043,8 +7039,6 @@
<string name="sim_select_card">Select a SIM card</string>
<!-- Label for a numbered SIM card. [CHAR LIMIT=40] -->
<string name="sim_card_number_title">SIM <xliff:g id="card_number">%1$d</xliff:g></string>
- <!-- Name label of Sim card that is empty. [CHAR LIMIT=40] -->
- <string name="sim_slot_empty">SIM empty</string>
<!-- Name label of Sim Editor. [CHAR LIMIT=40] -->
<string name="sim_editor_name">SIM name</string>
<!-- Hint for SIM name in sim name editor dialog. [CHAR LIMIT=40] -->
@@ -7090,8 +7084,6 @@
<!-- Message under title informing the user to touch to go to SIM Cards in Settings. [CHAR LIMIT=40] -->
<string name="sim_notification_summary">Tap to set up</string>
- <!-- This is a divider in the SIM cards preferences that is the header of various settings where the user chooses which SIM to use for phone calls, data, and SMS messages [CHAR LIMIT=50] -->
- <string name="sim_pref_divider">Preferred SIM for</string>
<!-- When a user chooses this "Ask first" preference for the SIM to use for phone calls, they'll be prompted to choose a SIM every time they initiate a call [CHAR LIMIT=50] -->
<string name="sim_calls_ask_first_prefs_title">Ask every time</string>
<!-- When a SIM preference hasn't been selected yet, this string is displayed as the pref summary until the user chooses a SIM subscription from the preference list [CHAR LIMIT=50] -->
diff --git a/res/xml/my_device_info.xml b/res/xml/my_device_info.xml
index ccd52ea..3f22a7b 100644
--- a/res/xml/my_device_info.xml
+++ b/res/xml/my_device_info.xml
@@ -150,7 +150,7 @@
<Preference
android:key="wifi_mac_address"
android:order="46"
- android:title="@string/status_factory_wifi_mac_address"
+ android:title="@string/status_device_wifi_mac_address"
android:summary="@string/summary_placeholder"
android:selectable="false"
settings:enableCopying="true"/>
diff --git a/res/xml/sim_settings.xml b/res/xml/sim_settings.xml
deleted file mode 100644
index 63e4ba4..0000000
--- a/res/xml/sim_settings.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- android:key="sim_cards"
- android:title="@string/sim_settings_title">
-
- <PreferenceCategory
- android:key="sim_activities"
- android:title="@string/sim_pref_divider" >
-
- <Preference android:key="sim_cellular_data"
- android:title="@string/cellular_data_title" />
-
- <Preference android:key="sim_calls"
- android:title="@string/calls_title" />
-
- <Preference android:key="sim_sms"
- android:title="@string/sms_messages_title" />
-
- </PreferenceCategory>
-
-
-</PreferenceScreen>
diff --git a/src/com/android/settings/MasterClearConfirm.java b/src/com/android/settings/MasterClearConfirm.java
index a8c4341..679f18f 100644
--- a/src/com/android/settings/MasterClearConfirm.java
+++ b/src/com/android/settings/MasterClearConfirm.java
@@ -49,6 +49,7 @@
import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton;
import com.google.android.setupcompat.template.FooterButton.ButtonType;
+import com.google.android.setupcompat.util.WizardManagerHelper;
import com.google.android.setupdesign.GlifLayout;
/**
@@ -86,7 +87,7 @@
getActivity().getSystemService(Context.OEM_LOCK_SERVICE);
if (pdbManager != null && !oemLockManager.isOemUnlockAllowed() &&
- Utils.isDeviceProvisioned(getActivity())) {
+ WizardManagerHelper.isDeviceProvisioned(getActivity())) {
// if OEM unlock is allowed, the persistent data block will be wiped during FR
// process. If disabled, it will be wiped here, unless the device is still being
// provisioned, in which case the persistent data block will be preserved.
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index add1178..24963b3 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -33,7 +33,6 @@
public static class CreateShortcutActivity extends SettingsActivity { /* empty */ }
public static class FaceSettingsActivity extends SettingsActivity { /* empty */ }
public static class FingerprintSettingsActivity extends SettingsActivity { /* empty */ }
- public static class SimSettingsActivity extends SettingsActivity { /* empty */ }
public static class TetherSettingsActivity extends SettingsActivity { /* empty */ }
public static class WifiTetherSettingsActivity extends SettingsActivity { /* empty */ }
public static class VpnSettingsActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 4d813d5..e459ab8 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -35,7 +35,6 @@
import android.os.UserHandle;
import android.os.UserManager;
import android.text.TextUtils;
-import android.util.FeatureFlagUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
@@ -53,13 +52,11 @@
import com.android.internal.util.ArrayUtils;
import com.android.settings.Settings.WifiSettingsActivity;
import com.android.settings.applications.manageapplications.ManageApplications;
-import com.android.settings.core.FeatureFlags;
import com.android.settings.core.OnActivityResultListener;
import com.android.settings.core.SettingsBaseActivity;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.core.gateway.SettingsGateway;
import com.android.settings.dashboard.DashboardFeatureProvider;
-import com.android.settings.dashboard.profileselector.ProfileFragmentBridge;
import com.android.settings.homepage.TopLevelSettings;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.wfd.WifiDisplaySettings;
@@ -276,7 +273,7 @@
launchSettingFragment(initialFragmentName, intent);
}
- final boolean deviceProvisioned = Utils.isDeviceProvisioned(this);
+ final boolean deviceProvisioned = WizardManagerHelper.isDeviceProvisioned(this);
final ActionBar actionBar = getActionBar();
if (actionBar != null) {
@@ -568,15 +565,7 @@
throw new IllegalArgumentException("Invalid fragment for this activity: "
+ fragmentName);
}
- Fragment f = null;
- if (FeatureFlagUtils.isEnabled(this, FeatureFlags.PERSONAL_WORK_PROFILE)
- && UserManager.get(this).getUserProfiles().size() > 1
- && ProfileFragmentBridge.FRAGMENT_MAP.get(fragmentName) != null) {
- f = Fragment.instantiate(this, ProfileFragmentBridge.FRAGMENT_MAP.get(fragmentName),
- args);
- } else {
- f = Fragment.instantiate(this, fragmentName, args);
- }
+ Fragment f = Utils.getTargetFragment(this, fragmentName, args);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.main_content, f);
if (titleResId > 0) {
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 75db3e1..f5f5ccd 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -21,6 +21,9 @@
import static android.text.format.DateUtils.FORMAT_ABBREV_MONTH;
import static android.text.format.DateUtils.FORMAT_SHOW_DATE;
+import static com.android.settings.applications.manageapplications.ManageApplications.EXTRA_PERSONAL_ONLY;
+import static com.android.settings.applications.manageapplications.ManageApplications.EXTRA_WORK_ONLY;
+
import android.annotation.Nullable;
import android.app.ActionBar;
import android.app.Activity;
@@ -73,7 +76,6 @@
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.Profile;
import android.provider.ContactsContract.RawContacts;
-import android.provider.Settings;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.Spannable;
@@ -82,6 +84,7 @@
import android.text.format.DateUtils;
import android.text.style.TtsSpan;
import android.util.ArraySet;
+import android.util.FeatureFlagUtils;
import android.util.IconDrawableFactory;
import android.util.Log;
import android.view.LayoutInflater;
@@ -102,6 +105,7 @@
import com.android.internal.util.ArrayUtils;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.core.FeatureFlags;
+import com.android.settings.dashboard.profileselector.ProfileFragmentBridge;
import com.android.settings.development.featureflags.FeatureFlagPersistent;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settingslib.widget.ActionBarShadowController;
@@ -729,11 +733,6 @@
}
}
- public static boolean isDeviceProvisioned(Context context) {
- return Settings.Global.getInt(context.getContentResolver(),
- Settings.Global.DEVICE_PROVISIONED, 0) != 0;
- }
-
public static boolean startQuietModeDialogIfNecessary(Context context, UserManager um,
int userId) {
if (um.isQuietModeEnabled(UserHandle.of(userId))) {
@@ -1065,4 +1064,27 @@
ActionBarShadowController.attachToView(activity, lifecycle, scrollView);
}
}
+
+ /**
+ * Return correct target fragment based on argument
+ *
+ * @param activity the activity target fragment will be launched.
+ * @param fragmentName initial target fragment name.
+ * @param args fragment launch arguments.
+ */
+ public static Fragment getTargetFragment(Activity activity, String fragmentName, Bundle args) {
+ Fragment f = null;
+ final boolean isWorkOnly = args == null ? false : args.getBoolean(EXTRA_WORK_ONLY);
+ final boolean isPersonalOnly = args == null ? false : args.getBoolean(EXTRA_PERSONAL_ONLY);
+ if (FeatureFlagUtils.isEnabled(activity, FeatureFlags.PERSONAL_WORK_PROFILE)
+ && UserManager.get(activity).getUserProfiles().size() > 1
+ && ProfileFragmentBridge.FRAGMENT_MAP.get(fragmentName) != null
+ && !isWorkOnly && !isPersonalOnly) {
+ f = Fragment.instantiate(activity, ProfileFragmentBridge.FRAGMENT_MAP.get(fragmentName),
+ args);
+ } else {
+ f = Fragment.instantiate(activity, fragmentName, args);
+ }
+ return f;
+ }
}
diff --git a/src/com/android/settings/applications/appops/AppOpsState.java b/src/com/android/settings/applications/appops/AppOpsState.java
index 3c8d647..fed77ae 100644
--- a/src/com/android/settings/applications/appops/AppOpsState.java
+++ b/src/com/android/settings/applications/appops/AppOpsState.java
@@ -28,6 +28,7 @@
import android.os.Parcelable;
import android.text.format.DateUtils;
import android.util.Log;
+import android.util.Pair;
import android.util.SparseArray;
import com.android.settings.R;
@@ -618,7 +619,7 @@
}
AppOpsManager.OpEntry opEntry = new AppOpsManager.OpEntry(
- permOps.get(k), AppOpsManager.MODE_ALLOWED);
+ permOps.get(k), AppOpsManager.MODE_ALLOWED, new Pair[0]);
dummyOps.add(opEntry);
addOp(entries, pkgOps, appEntry, opEntry, packageName == null,
packageName == null ? 0 : opToOrder[opEntry.getOp()]);
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index 90ab71a..01289f2 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -143,6 +143,7 @@
public static final String EXTRA_STORAGE_TYPE = "storageType";
public static final String EXTRA_WORK_ONLY = "workProfileOnly";
public static final String EXTRA_WORK_ID = "workId";
+ public static final String EXTRA_PERSONAL_ONLY = "personalOnly";
private static final String EXTRA_SORT_ORDER = "sortOrder";
private static final String EXTRA_SHOW_SYSTEM = "showSystem";
@@ -234,6 +235,7 @@
private int mStorageType;
private boolean mIsWorkOnly;
private int mWorkUserId;
+ private boolean mIsPersonalOnly;
private View mEmptyView;
private int mFilterType;
@@ -308,6 +310,7 @@
}
final AppFilterRegistry appFilterRegistry = AppFilterRegistry.getInstance();
mFilter = appFilterRegistry.get(appFilterRegistry.getDefaultFilterType(mListType));
+ mIsPersonalOnly = args != null ? args.getBoolean(EXTRA_PERSONAL_ONLY) : false;
mIsWorkOnly = args != null ? args.getBoolean(EXTRA_WORK_ONLY) : false;
mWorkUserId = args != null ? args.getInt(EXTRA_WORK_ID) : NO_USER_SPECIFIED;
mExpandSearch = activity.getIntent().getBooleanExtra(EXTRA_EXPAND_SEARCH_VIEW, false);
@@ -405,8 +408,22 @@
final AppFilterRegistry appFilterRegistry = AppFilterRegistry.getInstance();
mFilterAdapter.enableFilter(appFilterRegistry.getDefaultFilterType(mListType));
+
+ AppFilter compositeFilter = getCompositeFilter(mListType, mStorageType, mVolumeUuid);
+ if (mIsWorkOnly) {
+ compositeFilter = new CompoundFilter(compositeFilter, ApplicationsState.FILTER_WORK);
+ }
+ if (mIsPersonalOnly) {
+ compositeFilter = new CompoundFilter(compositeFilter,
+ ApplicationsState.FILTER_PERSONAL);
+ }
+ if (compositeFilter != null) {
+ mApplications.setCompositeFilter(compositeFilter);
+ }
+
if (mListType == LIST_TYPE_MAIN) {
- if (UserManager.get(getActivity()).getUserProfiles().size() > 1) {
+ if (UserManager.get(getActivity()).getUserProfiles().size() > 1 && !mIsWorkOnly
+ && !mIsPersonalOnly) {
mFilterAdapter.enableFilter(FILTER_APPS_PERSONAL);
mFilterAdapter.enableFilter(FILTER_APPS_WORK);
}
@@ -420,15 +437,6 @@
if (mListType == LIST_TYPE_HIGH_POWER) {
mFilterAdapter.enableFilter(FILTER_APPS_POWER_WHITELIST_ALL);
}
-
- AppFilter compositeFilter = getCompositeFilter(mListType, mStorageType, mVolumeUuid);
- if (mIsWorkOnly) {
- final AppFilter workFilter = appFilterRegistry.get(FILTER_APPS_WORK).getFilter();
- compositeFilter = new CompoundFilter(compositeFilter, workFilter);
- }
- if (compositeFilter != null) {
- mApplications.setCompositeFilter(compositeFilter);
- }
}
@VisibleForTesting
@@ -449,9 +457,11 @@
return new CompoundFilter(ApplicationsState.FILTER_MOVIES, filter);
} else if (listType == LIST_TYPE_PHOTOGRAPHY) {
return new CompoundFilter(ApplicationsState.FILTER_PHOTOS, filter);
+ } else {
+ final AppFilterRegistry appFilterRegistry = AppFilterRegistry.getInstance();
+ return appFilterRegistry.get(
+ appFilterRegistry.getDefaultFilterType(listType)).getFilter();
}
-
- return null;
}
@Override
@@ -508,7 +518,7 @@
outState.putBoolean(EXTRA_SHOW_SYSTEM, mShowSystem);
outState.putBoolean(EXTRA_HAS_ENTRIES, mApplications.mHasReceivedLoadEntries);
outState.putBoolean(EXTRA_HAS_BRIDGE, mApplications.mHasReceivedBridgeCallback);
- if(mSearchView != null) {
+ if (mSearchView != null) {
outState.putBoolean(EXTRA_EXPAND_SEARCH_VIEW, !mSearchView.isIconified());
}
if (mApplications != null) {
@@ -1166,7 +1176,7 @@
mSearchFilter = new SearchFilter();
}
// If we haven't load apps list completely, don't filter anything.
- if(mOriginalEntries == null) {
+ if (mOriginalEntries == null) {
Log.w(TAG, "Apps haven't loaded completely yet, so nothing can be filtered");
return;
}
diff --git a/src/com/android/settings/applications/manageapplications/ProfileSelectManageApplications.java b/src/com/android/settings/applications/manageapplications/ProfileSelectManageApplications.java
new file mode 100644
index 0000000..dc53e18
--- /dev/null
+++ b/src/com/android/settings/applications/manageapplications/ProfileSelectManageApplications.java
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ */
+
+package com.android.settings.applications.manageapplications;
+
+import static com.android.settings.applications.manageapplications.ManageApplications.EXTRA_PERSONAL_ONLY;
+import static com.android.settings.applications.manageapplications.ManageApplications.EXTRA_WORK_ONLY;
+
+import android.os.Bundle;
+
+import androidx.fragment.app.Fragment;
+
+import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
+
+/**
+ * Application Setting page for work profile.
+ */
+public class ProfileSelectManageApplications extends ProfileSelectFragment {
+
+ @Override
+ public Fragment[] getFragments() {
+ final Bundle workOnly = new Bundle();
+ workOnly.putBoolean(EXTRA_WORK_ONLY, true);
+ final Fragment workFragment = new ManageApplications();
+ workFragment.setArguments(workOnly);
+
+ final Bundle personalOnly = new Bundle();
+ personalOnly.putBoolean(EXTRA_PERSONAL_ONLY, true);
+ final Fragment personalFragment = new ManageApplications();
+ personalFragment.setArguments(personalOnly);
+ return new Fragment[] {
+ personalFragment, //0
+ workFragment
+ };
+ }
+}
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index aa96a02..a318037 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -127,7 +127,6 @@
import com.android.settings.security.LockscreenDashboardFragment;
import com.android.settings.security.SecuritySettings;
import com.android.settings.shortcut.CreateShortcut;
-import com.android.settings.sim.SimSettings;
import com.android.settings.support.SupportDashboardActivity;
import com.android.settings.system.ResetDashboardFragment;
import com.android.settings.system.SystemDashboardFragment;
@@ -161,7 +160,6 @@
WifiSettings2.class.getName(),
ConfigureWifiSettings.class.getName(),
SavedAccessPointsWifiSettings.class.getName(),
- SimSettings.class.getName(),
TetherSettings.class.getName(),
WifiP2pSettings.class.getName(),
WifiTetherSettings.class.getName(),
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileFragmentBridge.java b/src/com/android/settings/dashboard/profileselector/ProfileFragmentBridge.java
index 797782a..1a1a3e6 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileFragmentBridge.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileFragmentBridge.java
@@ -20,6 +20,8 @@
import com.android.settings.accounts.AccountDashboardFragment;
import com.android.settings.accounts.AccountProfileSelectFragment;
+import com.android.settings.applications.manageapplications.ManageApplications;
+import com.android.settings.applications.manageapplications.ProfileSelectManageApplications;
import java.util.Map;
@@ -38,5 +40,7 @@
FRAGMENT_MAP = new ArrayMap<>();
FRAGMENT_MAP.put(AccountDashboardFragment.class.getName(),
AccountProfileSelectFragment.class.getName());
+ FRAGMENT_MAP.put(ManageApplications.class.getName(),
+ ProfileSelectManageApplications.class.getName());
}
}
diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
index 52a5cd9..8e8a82d 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
@@ -53,6 +53,8 @@
import com.android.settingslib.development.SystemPropPoker;
import com.android.settingslib.search.SearchIndexable;
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
import java.util.ArrayList;
import java.util.List;
@@ -166,7 +168,7 @@
super.onActivityCreated(icicle);
// Apply page-level restrictions
setIfOnlyAvailableForAdmins(true);
- if (isUiRestricted() || !Utils.isDeviceProvisioned(getActivity())) {
+ if (isUiRestricted() || !WizardManagerHelper.isDeviceProvisioned(getActivity())) {
// Block access to developer options if the user is not the owner, if user policy
// restricts it, or if the device has not been provisioned
mIsAvailable = false;
diff --git a/src/com/android/settings/development/featureflags/FeatureFlagsPreferenceController.java b/src/com/android/settings/development/featureflags/FeatureFlagsPreferenceController.java
index 94636e9..f0b7961 100644
--- a/src/com/android/settings/development/featureflags/FeatureFlagsPreferenceController.java
+++ b/src/com/android/settings/development/featureflags/FeatureFlagsPreferenceController.java
@@ -24,13 +24,13 @@
import androidx.preference.PreferenceScreen;
import com.android.settings.core.BasePreferenceController;
-import com.android.settingslib.core.lifecycle.LifecycleObserver;
-import com.android.settingslib.core.lifecycle.events.OnStart;
import java.util.Map;
-public class FeatureFlagsPreferenceController extends BasePreferenceController
- implements LifecycleObserver, OnStart {
+/**
+ * A {@link BasePreferenceController} used in {@link FeatureFlagsDashboard}
+ */
+public class FeatureFlagsPreferenceController extends BasePreferenceController {
private PreferenceGroup mGroup;
@@ -47,13 +47,6 @@
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
mGroup = screen.findPreference(getPreferenceKey());
- }
-
- @Override
- public void onStart() {
- if (mGroup == null) {
- return;
- }
final Map<String, String> featureMap = FeatureFlagUtils.getAllFeatureFlags();
if (featureMap == null) {
return;
diff --git a/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java b/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
index dd522bf..40e34c0 100644
--- a/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
@@ -46,6 +46,8 @@
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.development.DevelopmentSettingsEnabler;
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
public class BuildNumberPreferenceController extends BasePreferenceController implements
LifecycleObserver, OnStart {
@@ -131,7 +133,7 @@
}
// Don't enable developer options until device has been provisioned
- if (!Utils.isDeviceProvisioned(mContext)) {
+ if (!WizardManagerHelper.isDeviceProvisioned(mContext)) {
mMetricsFeatureProvider.action(
mContext, SettingsEnums.ACTION_SETTINGS_BUILD_NUMBER_PREF);
return false;
diff --git a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
index 525a887..31898d1 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
@@ -26,6 +26,7 @@
import android.os.Bundle;
import android.os.UserHandle;
import android.os.storage.VolumeInfo;
+import android.util.FeatureFlagUtils;
import android.util.Log;
import android.util.SparseArray;
@@ -37,6 +38,7 @@
import com.android.settings.R;
import com.android.settings.Settings;
import com.android.settings.applications.manageapplications.ManageApplications;
+import com.android.settings.core.FeatureFlags;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.deviceinfo.PrivateVolumeSettings.SystemInfoFragment;
@@ -389,10 +391,18 @@
}
private Bundle getWorkAnnotatedBundle(int additionalCapacity) {
- final Bundle args = new Bundle(2 + additionalCapacity);
- args.putBoolean(ManageApplications.EXTRA_WORK_ONLY, mIsWorkProfile);
- args.putInt(ManageApplications.EXTRA_WORK_ID, mUserId);
- return args;
+ if (FeatureFlagUtils.isEnabled(mContext, FeatureFlags.PERSONAL_WORK_PROFILE)) {
+ final Bundle args = new Bundle(3 + additionalCapacity);
+ args.putBoolean(ManageApplications.EXTRA_WORK_ONLY, mIsWorkProfile);
+ args.putInt(ManageApplications.EXTRA_WORK_ID, mUserId);
+ args.putBoolean(ManageApplications.EXTRA_PERSONAL_ONLY, !mIsWorkProfile);
+ return args;
+ } else {
+ final Bundle args = new Bundle(2 + additionalCapacity);
+ args.putBoolean(ManageApplications.EXTRA_WORK_ONLY, mIsWorkProfile);
+ args.putInt(ManageApplications.EXTRA_WORK_ID, mUserId);
+ return args;
+ }
}
private Intent getFilesIntent() {
diff --git a/src/com/android/settings/panel/PanelFeatureProvider.java b/src/com/android/settings/panel/PanelFeatureProvider.java
index 85e098d..402a562 100644
--- a/src/com/android/settings/panel/PanelFeatureProvider.java
+++ b/src/com/android/settings/panel/PanelFeatureProvider.java
@@ -17,12 +17,12 @@
package com.android.settings.panel;
import android.content.Context;
+import android.os.Bundle;
public interface PanelFeatureProvider {
/**
- * Returns {@link PanelContent} as specified by the {@param panelType}, and
- * {@param mediaPackageName}.
+ * Returns {@link PanelContent} as specified by the {@param bundle}
*/
- PanelContent getPanel(Context context, String panelType, String mediaPackageName);
+ PanelContent getPanel(Context context, Bundle bundle);
}
diff --git a/src/com/android/settings/panel/PanelFeatureProviderImpl.java b/src/com/android/settings/panel/PanelFeatureProviderImpl.java
index e6b0a23..04d3095 100644
--- a/src/com/android/settings/panel/PanelFeatureProviderImpl.java
+++ b/src/com/android/settings/panel/PanelFeatureProviderImpl.java
@@ -19,16 +19,22 @@
import static com.android.settingslib.media.MediaOutputSliceConstants.ACTION_MEDIA_OUTPUT;
import android.content.Context;
+import android.os.Bundle;
import android.provider.Settings;
public class PanelFeatureProviderImpl implements PanelFeatureProvider {
@Override
- public PanelContent getPanel(Context context, String panelType, String mediaPackageName) {
+ public PanelContent getPanel(Context context, Bundle bundle) {
if (context == null) {
return null;
}
+ final String panelType =
+ bundle.getString(SettingsPanelActivity.KEY_PANEL_TYPE_ARGUMENT);
+ final String mediaPackageName =
+ bundle.getString(SettingsPanelActivity.KEY_MEDIA_PACKAGE_NAME);
+
switch (panelType) {
case Settings.Panel.ACTION_INTERNET_CONNECTIVITY:
return InternetConnectivityPanel.create(context);
diff --git a/src/com/android/settings/panel/PanelFragment.java b/src/com/android/settings/panel/PanelFragment.java
index 006ed00..0eda36f 100644
--- a/src/com/android/settings/panel/PanelFragment.java
+++ b/src/com/android/settings/panel/PanelFragment.java
@@ -161,17 +161,12 @@
mPanelSlices.setVisibility(View.GONE);
final Bundle arguments = getArguments();
- final String panelType =
- arguments.getString(SettingsPanelActivity.KEY_PANEL_TYPE_ARGUMENT);
final String callingPackageName =
arguments.getString(SettingsPanelActivity.KEY_CALLING_PACKAGE_NAME);
- final String mediaPackageName =
- arguments.getString(SettingsPanelActivity.KEY_MEDIA_PACKAGE_NAME);
- // TODO (b/124399577) transform interface to take a context and bundle.
mPanel = FeatureFactory.getFactory(activity)
.getPanelFeatureProvider()
- .getPanel(activity, panelType, mediaPackageName);
+ .getPanel(activity, arguments);
if (mPanel == null) {
activity.finish();
diff --git a/src/com/android/settings/password/ChooseLockGeneric.java b/src/com/android/settings/password/ChooseLockGeneric.java
index a2885d6..6809f35 100644
--- a/src/com/android/settings/password/ChooseLockGeneric.java
+++ b/src/com/android/settings/password/ChooseLockGeneric.java
@@ -36,12 +36,8 @@
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.UserInfo;
-import android.hardware.face.Face;
import android.hardware.face.FaceManager;
-import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.FingerprintManager;
-import android.hardware.fingerprint.FingerprintManager.RemovalCallback;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
@@ -76,7 +72,7 @@
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.RestrictedPreference;
-import java.util.List;
+import com.google.android.setupcompat.util.WizardManagerHelper;
public class ChooseLockGeneric extends SettingsActivity {
public static final String CONFIRM_CREDENTIALS = "confirm_credentials";
@@ -188,7 +184,8 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Activity activity = getActivity();
- if (!Utils.isDeviceProvisioned(activity) && !canRunBeforeDeviceProvisioned()) {
+ if (!WizardManagerHelper.isDeviceProvisioned(activity)
+ && !canRunBeforeDeviceProvisioned()) {
Log.i(TAG, "Refusing to start because device is not provisioned");
activity.finish();
return;
diff --git a/src/com/android/settings/password/SetNewPasswordActivity.java b/src/com/android/settings/password/SetNewPasswordActivity.java
index 055e5be..4bffbf5 100644
--- a/src/com/android/settings/password/SetNewPasswordActivity.java
+++ b/src/com/android/settings/password/SetNewPasswordActivity.java
@@ -32,16 +32,16 @@
import android.app.admin.PasswordMetrics;
import android.app.settings.SettingsEnums;
import android.content.ComponentName;
-import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
-import com.android.settings.Utils;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
import java.util.List;
/**
@@ -110,7 +110,7 @@
@Override
public void launchChooseLock(Bundle chooseLockFingerprintExtras) {
- final boolean isInSetupWizard = !Utils.isDeviceProvisioned(this);
+ final boolean isInSetupWizard = !WizardManagerHelper.isDeviceProvisioned(this);
Intent intent = isInSetupWizard ? new Intent(this, SetupChooseLockGeneric.class)
: new Intent(this, ChooseLockGeneric.class);
intent.setAction(mNewPasswordAction);
diff --git a/src/com/android/settings/search/SearchFeatureProvider.java b/src/com/android/settings/search/SearchFeatureProvider.java
index 896f6e5..20d4e7c 100644
--- a/src/com/android/settings/search/SearchFeatureProvider.java
+++ b/src/com/android/settings/search/SearchFeatureProvider.java
@@ -34,6 +34,8 @@
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.search.SearchIndexableResources;
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
/**
* FeatureProvider for Settings Search
*/
@@ -67,8 +69,9 @@
return;
}
- if (!Utils.isDeviceProvisioned(activity) ||
- !Utils.isPackageEnabled(activity, getSettingsIntelligencePkgName(activity))) {
+ if (!WizardManagerHelper.isDeviceProvisioned(activity)
+ || !Utils.isPackageEnabled(activity, getSettingsIntelligencePkgName(activity))
+ || WizardManagerHelper.isAnySetupWizard(activity.getIntent())) {
final ViewGroup parent = (ViewGroup) toolbar.getParent();
if (parent != null) {
parent.setVisibility(View.GONE);
diff --git a/src/com/android/settings/search/SettingsSearchIndexablesProvider.java b/src/com/android/settings/search/SettingsSearchIndexablesProvider.java
index d3692b2..fab09fc 100644
--- a/src/com/android/settings/search/SettingsSearchIndexablesProvider.java
+++ b/src/com/android/settings/search/SettingsSearchIndexablesProvider.java
@@ -58,9 +58,11 @@
import android.util.ArraySet;
import android.util.Log;
+import androidx.annotation.Nullable;
import androidx.slice.SliceViewManager;
import com.android.settings.SettingsActivity;
+import com.android.settings.dashboard.DashboardFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.slices.SettingsSliceProvider;
import com.android.settingslib.drawer.DashboardCategory;
@@ -118,6 +120,9 @@
return cursor;
}
+ /**
+ * Gets a Cursor of RawData. We use those data in search indexing time
+ */
@Override
public Cursor queryRawData(String[] projection) {
MatrixCursor cursor = new MatrixCursor(INDEXABLES_RAW_COLUMNS);
@@ -161,6 +166,38 @@
return cursor;
}
+ /**
+ * Gets a Cursor of dynamic Raw data similar to queryRawData. We use those data in search query
+ * time
+ */
+ @Nullable
+ @Override
+ public Cursor queryDynamicRawData(String[] projection) {
+ final Context context = getContext();
+ final DashboardFeatureProvider dashboardFeatureProvider =
+ FeatureFactory.getFactory(context).getDashboardFeatureProvider(context);
+
+ final MatrixCursor cursor = new MatrixCursor(INDEXABLES_RAW_COLUMNS);
+ for (DashboardCategory category : dashboardFeatureProvider.getAllCategories()) {
+ for (Tile tile : category.getTiles()) {
+ final String packageName = tile.getPackageName();
+ if (context.getPackageName().equals(packageName)) {
+ continue;
+ }
+ final Object[] ref = new Object[INDEXABLES_RAW_COLUMNS.length];
+ ref[COLUMN_INDEX_RAW_TITLE] = tile.getTitle(context);
+ ref[COLUMN_INDEX_RAW_SUMMARY_ON] = tile.getSummary(context);
+ ref[COLUMN_INDEX_RAW_SUMMARY_OFF] = tile.getSummary(context);
+ ref[COLUMN_INDEX_RAW_KEY] = dashboardFeatureProvider.getDashboardKeyForTile(
+ tile);
+ ref[COLUMN_INDEX_RAW_CLASS_NAME] = CATEGORY_KEY_TO_PARENT_MAP.get(
+ tile.getCategory());
+ cursor.addRow(ref);
+ }
+ }
+ return cursor;
+ }
+
@Override
public Cursor querySiteMapPairs() {
final MatrixCursor cursor = new MatrixCursor(SITE_MAP_COLUMNS);
diff --git a/src/com/android/settings/search/actionbar/SearchMenuController.java b/src/com/android/settings/search/actionbar/SearchMenuController.java
index 25d0d30..0243c09 100644
--- a/src/com/android/settings/search/actionbar/SearchMenuController.java
+++ b/src/com/android/settings/search/actionbar/SearchMenuController.java
@@ -17,8 +17,8 @@
package com.android.settings.search.actionbar;
import android.annotation.NonNull;
+import android.app.Activity;
import android.app.settings.SettingsEnums;
-import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
@@ -37,6 +37,8 @@
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnCreateOptionsMenu;
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
public class SearchMenuController implements LifecycleObserver, OnCreateOptionsMenu {
public static final String NEED_SEARCH_ICON_IN_ACTION_BAR = "need_search_icon_in_action_bar";
@@ -61,13 +63,14 @@
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- final Context context = mHost.getContext();
- final String SettingsIntelligencePkgName = context.getString(
+ final Activity activity = mHost.getActivity();
+ final String SettingsIntelligencePkgName = activity.getString(
R.string.config_settingsintelligence_package_name);
- if (!Utils.isDeviceProvisioned(mHost.getContext())) {
+ if (!WizardManagerHelper.isDeviceProvisioned(activity)
+ || WizardManagerHelper.isAnySetupWizard(activity.getIntent())) {
return;
}
- if (!Utils.isPackageEnabled(mHost.getContext(), SettingsIntelligencePkgName)) {
+ if (!Utils.isPackageEnabled(activity, SettingsIntelligencePkgName)) {
return;
}
if (menu == null) {
@@ -83,17 +86,17 @@
searchItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
searchItem.setOnMenuItemClickListener(target -> {
- final Intent intent = FeatureFactory.getFactory(context)
+ final Intent intent = FeatureFactory.getFactory(activity)
.getSearchFeatureProvider()
- .buildSearchIntent(context, mPageId);
+ .buildSearchIntent(activity, mPageId);
- if (context.getPackageManager().queryIntentActivities(intent,
+ if (activity.getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY).isEmpty()) {
return true;
}
- FeatureFactory.getFactory(context).getMetricsFeatureProvider()
- .action(context, SettingsEnums.ACTION_SEARCH_RESULTS);
+ FeatureFactory.getFactory(activity).getMetricsFeatureProvider()
+ .action(activity, SettingsEnums.ACTION_SEARCH_RESULTS);
mHost.startActivityForResult(intent, SearchFeatureProvider.REQUEST_CODE);
return true;
});
diff --git a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
index 6b95b92..c0f7e1f 100644
--- a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
+++ b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
@@ -38,6 +38,11 @@
import android.view.View;
import android.widget.ImageView;
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceGroup;
+
import com.android.settings.R;
import com.android.settings.Settings.TetherSettingsActivity;
import com.android.settings.core.BasePreferenceController;
@@ -49,11 +54,6 @@
import java.util.Comparator;
import java.util.List;
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceCategory;
-import androidx.preference.PreferenceGroup;
-
/**
* {@link BasePreferenceController} that populates a list of widgets that Settings app support.
*/
@@ -245,7 +245,7 @@
Drawable iconDrawable;
try {
iconDrawable = context.getPackageManager().getResourcesForApplication(app)
- .getDrawable(resource);
+ .getDrawable(resource, themedContext.getTheme());
if (iconDrawable instanceof LayerDrawable) {
iconDrawable = ((LayerDrawable) iconDrawable).getDrawable(1);
}
diff --git a/src/com/android/settings/sim/SimPreferenceDialog.java b/src/com/android/settings/sim/SimPreferenceDialog.java
deleted file mode 100644
index 0f22d2b..0000000
--- a/src/com/android/settings/sim/SimPreferenceDialog.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * Copyright (C) 2015 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.sim;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.res.Resources;
-import android.graphics.Paint;
-import android.graphics.drawable.ShapeDrawable;
-import android.graphics.drawable.shapes.OvalShape;
-import android.os.Bundle;
-import android.telephony.PhoneNumberUtils;
-import android.telephony.SubscriptionInfo;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.ArrayAdapter;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.Spinner;
-import android.widget.TextView;
-
-import androidx.appcompat.app.AlertDialog;
-
-import com.android.settings.R;
-import com.android.settings.Utils;
-
-public class SimPreferenceDialog extends Activity {
-
- private Context mContext;
- private SubscriptionInfo mSubInfoRecord;
- private int mSlotId;
- private int[] mTintArr;
- private String[] mColorStrings;
- private int mTintSelectorPos;
- private SubscriptionManager mSubscriptionManager;
- AlertDialog.Builder mBuilder;
- View mDialogLayout;
- private final String SIM_NAME = "sim_name";
- private final String TINT_POS = "tint_pos";
-
- @Override
- public void onCreate(Bundle bundle) {
- super.onCreate(bundle);
- mContext = this;
- final Bundle extras = getIntent().getExtras();
- mSlotId = extras.getInt(SimSettings.EXTRA_SLOT_ID, -1);
- mSubscriptionManager = SubscriptionManager.from(mContext);
- mSubInfoRecord = mSubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(mSlotId);
- mTintArr = mContext.getResources().getIntArray(com.android.internal.R.array.sim_colors);
- mColorStrings = mContext.getResources().getStringArray(R.array.color_picker);
- mTintSelectorPos = 0;
-
- mBuilder = new AlertDialog.Builder(mContext);
- LayoutInflater inflater = (LayoutInflater)mContext
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- mDialogLayout = inflater.inflate(R.layout.multi_sim_dialog, null);
- mBuilder.setView(mDialogLayout);
-
- createEditDialog(bundle);
- }
-
- @Override
- public void onSaveInstanceState(Bundle savedInstanceState) {
- savedInstanceState.putInt(TINT_POS, mTintSelectorPos);
-
- final EditText nameText = (EditText)mDialogLayout.findViewById(R.id.sim_name);
- savedInstanceState.putString(SIM_NAME, nameText.getText().toString());
-
- super.onSaveInstanceState(savedInstanceState);
-
- }
-
- @Override
- public void onRestoreInstanceState(Bundle savedInstanceState) {
- super.onRestoreInstanceState(savedInstanceState);
-
- int pos = savedInstanceState.getInt(TINT_POS);
- final Spinner tintSpinner = (Spinner) mDialogLayout.findViewById(R.id.spinner);
- tintSpinner.setSelection(pos);
- mTintSelectorPos = pos;
-
- EditText nameText = (EditText)mDialogLayout.findViewById(R.id.sim_name);
- nameText.setText(savedInstanceState.getString(SIM_NAME));
- Utils.setEditTextCursorPosition(nameText);
- }
-
- private void createEditDialog(Bundle bundle) {
- final Resources res = mContext.getResources();
- EditText nameText = (EditText)mDialogLayout.findViewById(R.id.sim_name);
- nameText.setText(mSubInfoRecord.getDisplayName());
- Utils.setEditTextCursorPosition(nameText);
- final Spinner tintSpinner = (Spinner) mDialogLayout.findViewById(R.id.spinner);
- SelectColorAdapter adapter = new SelectColorAdapter(mContext,
- R.layout.settings_color_picker_item, mColorStrings);
- adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- tintSpinner.setAdapter(adapter);
-
- for (int i = 0; i < mTintArr.length; i++) {
- if (mTintArr[i] == mSubInfoRecord.getIconTint()) {
- tintSpinner.setSelection(i);
- mTintSelectorPos = i;
- break;
- }
- }
-
- tintSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView<?> parent, View view,
- int pos, long id){
- tintSpinner.setSelection(pos);
- mTintSelectorPos = pos;
- }
-
- @Override
- public void onNothingSelected(AdapterView<?> parent) {
- }
- });
-
- final TelephonyManager tm = (TelephonyManager) mContext.getSystemService(
- Context.TELEPHONY_SERVICE);
- TextView numberView = (TextView)mDialogLayout.findViewById(R.id.number);
- final String rawNumber = tm.getLine1Number(mSubInfoRecord.getSubscriptionId());
- if (TextUtils.isEmpty(rawNumber)) {
- numberView.setText(res.getString(com.android.internal.R.string.unknownName));
- } else {
- numberView.setText(PhoneNumberUtils.formatNumber(rawNumber));
- }
-
- String simCarrierName = tm.getSimOperatorName(mSubInfoRecord.getSubscriptionId());
- TextView carrierView = (TextView)mDialogLayout.findViewById(R.id.carrier);
- carrierView.setText(!TextUtils.isEmpty(simCarrierName) ? simCarrierName :
- mContext.getString(com.android.internal.R.string.unknownName));
-
- mBuilder.setTitle(String.format(res.getString(R.string.sim_editor_title),
- (mSubInfoRecord.getSimSlotIndex() + 1)));
-
- mBuilder.setPositiveButton(R.string.okay, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int whichButton) {
- final EditText nameText = (EditText)mDialogLayout.findViewById(R.id.sim_name);
- Utils.setEditTextCursorPosition(nameText);
- String displayName = nameText.getText().toString();
- int subId = mSubInfoRecord.getSubscriptionId();
- mSubInfoRecord.setDisplayName(displayName);
- mSubscriptionManager.setDisplayName(displayName, subId,
- SubscriptionManager.NAME_SOURCE_USER_INPUT);
-
- final int tintSelected = tintSpinner.getSelectedItemPosition();
- int subscriptionId = mSubInfoRecord.getSubscriptionId();
- int tint = mTintArr[tintSelected];
- mSubInfoRecord.setIconTint(tint);
- mSubscriptionManager.setIconTint(tint, subscriptionId);
- dialog.dismiss();
- }
- });
-
- mBuilder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int whichButton) {
- dialog.dismiss();
- }
- });
-
- mBuilder.setOnDismissListener(new DialogInterface.OnDismissListener() {
- @Override
- public void onDismiss(DialogInterface dialogInListener) {
- finish();
- }
- });
-
- mBuilder.create().show();
- }
-
- private class SelectColorAdapter extends ArrayAdapter<CharSequence> {
- private Context mContext;
- private int mResId;
-
- public SelectColorAdapter(
- Context context, int resource, String[] arr) {
- super(context, resource, arr);
- mContext = context;
- mResId = resource;
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- LayoutInflater inflater = (LayoutInflater)
- mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-
- View rowView;
- final ViewHolder holder;
- Resources res = mContext.getResources();
- int iconSize = res.getDimensionPixelSize(R.dimen.color_swatch_size);
- int strokeWidth = res.getDimensionPixelSize(R.dimen.color_swatch_stroke_width);
-
- if (convertView == null) {
- // Cache views for faster scrolling
- rowView = inflater.inflate(mResId, null);
- holder = new ViewHolder();
- ShapeDrawable drawable = new ShapeDrawable(new OvalShape());
- drawable.setIntrinsicHeight(iconSize);
- drawable.setIntrinsicWidth(iconSize);
- drawable.getPaint().setStrokeWidth(strokeWidth);
- holder.label = (TextView) rowView.findViewById(R.id.color_text);
- holder.icon = (ImageView) rowView.findViewById(R.id.color_icon);
- holder.swatch = drawable;
- rowView.setTag(holder);
- } else {
- rowView = convertView;
- holder = (ViewHolder) rowView.getTag();
- }
-
- holder.label.setText(getItem(position));
- holder.swatch.getPaint().setColor(mTintArr[position]);
- holder.swatch.getPaint().setStyle(Paint.Style.FILL_AND_STROKE);
- holder.icon.setVisibility(View.VISIBLE);
- holder.icon.setImageDrawable(holder.swatch);
- return rowView;
- }
-
- @Override
- public View getDropDownView(int position, View convertView, ViewGroup parent) {
- View rowView = getView(position, convertView, parent);
- final ViewHolder holder = (ViewHolder) rowView.getTag();
-
- if (mTintSelectorPos == position) {
- holder.swatch.getPaint().setStyle(Paint.Style.FILL_AND_STROKE);
- } else {
- holder.swatch.getPaint().setStyle(Paint.Style.STROKE);
- }
- holder.icon.setVisibility(View.VISIBLE);
- return rowView;
- }
-
- private class ViewHolder {
- TextView label;
- ImageView icon;
- ShapeDrawable swatch;
- }
- }
-}
diff --git a/src/com/android/settings/sim/SimSettings.java b/src/com/android/settings/sim/SimSettings.java
deleted file mode 100644
index bd65508..0000000
--- a/src/com/android/settings/sim/SimSettings.java
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
- * Copyright (C) 2014 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.sim;
-
-import android.app.settings.SettingsEnums;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.graphics.drawable.BitmapDrawable;
-import android.os.Bundle;
-import android.os.SystemProperties;
-import android.provider.SearchIndexableResource;
-import android.telecom.PhoneAccountHandle;
-import android.telecom.TelecomManager;
-import android.telephony.PhoneNumberUtils;
-import android.telephony.PhoneStateListener;
-import android.telephony.SubscriptionInfo;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-import android.util.Log;
-
-import androidx.preference.Preference;
-import androidx.preference.PreferenceScreen;
-
-import com.android.internal.telephony.TelephonyProperties;
-import com.android.settings.R;
-import com.android.settings.RestrictedSettingsFragment;
-import com.android.settings.Utils;
-import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settingslib.search.Indexable;
-import com.android.settingslib.search.SearchIndexable;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@SearchIndexable
-public class SimSettings extends RestrictedSettingsFragment implements Indexable {
- private static final String TAG = "SimSettings";
- private static final boolean DBG = false;
-
- private static final String DISALLOW_CONFIG_SIM = "no_config_sim";
- private static final String SIM_CARD_CATEGORY = "sim_cards";
- private static final String KEY_CELLULAR_DATA = "sim_cellular_data";
- private static final String KEY_CALLS = "sim_calls";
- private static final String KEY_SMS = "sim_sms";
- public static final String EXTRA_SLOT_ID = "slot_id";
-
- /**
- * By UX design we use only one Subscription Information(SubInfo) record per SIM slot.
- * mAvalableSubInfos is the list of SubInfos we present to the user.
- * mSubInfoList is the list of all SubInfos.
- * mSelectableSubInfos is the list of SubInfos that a user can select for data, calls, and SMS.
- */
- private List<SubscriptionInfo> mAvailableSubInfos = null;
- private List<SubscriptionInfo> mSubInfoList = null;
- private List<SubscriptionInfo> mSelectableSubInfos = null;
- private PreferenceScreen mSimCards = null;
- private SubscriptionManager mSubscriptionManager;
- private int mNumSlots;
- private Context mContext;
-
- private int mPhoneCount = TelephonyManager.getDefault().getPhoneCount();
- private int[] mCallState = new int[mPhoneCount];
- private PhoneStateListener[] mPhoneStateListener = new PhoneStateListener[mPhoneCount];
-
- public SimSettings() {
- super(DISALLOW_CONFIG_SIM);
- }
-
- @Override
- public int getMetricsCategory() {
- return SettingsEnums.SIM;
- }
-
- @Override
- public void onCreate(final Bundle bundle) {
- super.onCreate(bundle);
- mContext = getActivity();
-
- mSubscriptionManager = SubscriptionManager.from(getActivity());
- final TelephonyManager tm =
- (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
- addPreferencesFromResource(R.xml.sim_settings);
-
- mNumSlots = tm.getSimCount();
- mSimCards = (PreferenceScreen)findPreference(SIM_CARD_CATEGORY);
- mAvailableSubInfos = new ArrayList<SubscriptionInfo>(mNumSlots);
- mSelectableSubInfos = new ArrayList<SubscriptionInfo>();
- SimSelectNotification.cancelSimSelectNotification(getActivity());
- }
-
- private final SubscriptionManager.OnSubscriptionsChangedListener mOnSubscriptionsChangeListener
- = new SubscriptionManager.OnSubscriptionsChangedListener() {
- @Override
- public void onSubscriptionsChanged() {
- if (DBG) log("onSubscriptionsChanged:");
- updateSubscriptions();
- }
- };
-
- private void updateSubscriptions() {
- mSubInfoList = mSubscriptionManager.getActiveSubscriptionInfoList(true);
- for (int i = 0; i < mNumSlots; ++i) {
- Preference pref = mSimCards.findPreference("sim" + i);
- if (pref instanceof SimPreference) {
- mSimCards.removePreference(pref);
- }
- }
- mAvailableSubInfos.clear();
- mSelectableSubInfos.clear();
-
- for (int i = 0; i < mNumSlots; ++i) {
- final SubscriptionInfo sir = mSubscriptionManager
- .getActiveSubscriptionInfoForSimSlotIndex(i);
- SimPreference simPreference = new SimPreference(getPrefContext(), sir, i);
- simPreference.setOrder(i-mNumSlots);
- mSimCards.addPreference(simPreference);
- mAvailableSubInfos.add(sir);
- if (sir != null) {
- mSelectableSubInfos.add(sir);
- }
- }
- updateAllOptions();
- }
-
- private void updateAllOptions() {
- updateSimSlotValues();
- updateActivitesCategory();
- }
-
- private void updateSimSlotValues() {
- final int prefSize = mSimCards.getPreferenceCount();
- for (int i = 0; i < prefSize; ++i) {
- Preference pref = mSimCards.getPreference(i);
- if (pref instanceof SimPreference) {
- ((SimPreference)pref).update();
- }
- }
- }
-
- private void updateActivitesCategory() {
- updateCellularDataValues();
- updateCallValues();
- updateSmsValues();
- }
-
- private void updateSmsValues() {
- final Preference simPref = findPreference(KEY_SMS);
- final SubscriptionInfo sir = mSubscriptionManager.getDefaultSmsSubscriptionInfo();
- simPref.setTitle(R.string.sms_messages_title);
- if (DBG) log("[updateSmsValues] mSubInfoList=" + mSubInfoList);
-
- if (sir != null) {
- simPref.setSummary(sir.getDisplayName());
- simPref.setEnabled(mSelectableSubInfos.size() > 1);
- } else if (sir == null) {
- simPref.setSummary(R.string.sim_selection_required_pref);
- simPref.setEnabled(mSelectableSubInfos.size() >= 1);
- }
- }
-
- private void updateCellularDataValues() {
- final Preference simPref = findPreference(KEY_CELLULAR_DATA);
- final SubscriptionInfo sir = mSubscriptionManager.getDefaultDataSubscriptionInfo();
- simPref.setTitle(R.string.cellular_data_title);
- if (DBG) log("[updateCellularDataValues] mSubInfoList=" + mSubInfoList);
-
- boolean callStateIdle = isCallStateIdle();
- final boolean ecbMode = SystemProperties.getBoolean(
- TelephonyProperties.PROPERTY_INECM_MODE, false);
- if (sir != null) {
- simPref.setSummary(sir.getDisplayName());
- // Enable data preference in msim mode and call state idle
- simPref.setEnabled((mSelectableSubInfos.size() > 1) && callStateIdle && !ecbMode);
- } else if (sir == null) {
- simPref.setSummary(R.string.sim_selection_required_pref);
- // Enable data preference in msim mode and call state idle
- simPref.setEnabled((mSelectableSubInfos.size() >= 1) && callStateIdle && !ecbMode);
- }
- }
-
- private void updateCallValues() {
- final Preference simPref = findPreference(KEY_CALLS);
- final TelecomManager telecomManager = TelecomManager.from(mContext);
- final PhoneAccountHandle phoneAccount =
- telecomManager.getUserSelectedOutgoingPhoneAccount();
- final List<PhoneAccountHandle> allPhoneAccounts =
- telecomManager.getCallCapablePhoneAccounts();
-
- simPref.setTitle(R.string.calls_title);
- simPref.setSummary(phoneAccount == null
- ? mContext.getResources().getString(R.string.sim_calls_ask_first_prefs_title)
- : (String)telecomManager.getPhoneAccount(phoneAccount).getLabel());
- simPref.setEnabled(allPhoneAccounts.size() > 1);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
- updateSubscriptions();
- final TelephonyManager tm =
- (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
- if (mSelectableSubInfos.size() > 1) {
- Log.d(TAG, "Register for call state change");
- for (int i = 0; i < mPhoneCount; i++) {
- int subId = mSelectableSubInfos.get(i).getSubscriptionId();
- tm.createForSubscriptionId(subId).listen(getPhoneStateListener(i),
- PhoneStateListener.LISTEN_CALL_STATE);
- }
- }
- }
-
- @Override
- public void onPause() {
- super.onPause();
- mSubscriptionManager.removeOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
- final TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
- for (int i = 0; i < mPhoneCount; i++) {
- if (mPhoneStateListener[i] != null) {
- tm.listen(mPhoneStateListener[i], PhoneStateListener.LISTEN_NONE);
- mPhoneStateListener[i] = null;
- }
- }
- }
-
- private PhoneStateListener getPhoneStateListener(int phoneId) {
- // Disable Sim selection for Data when voice call is going on as changing the default data
- // sim causes a modem reset currently and call gets disconnected
- // ToDo : Add subtext on disabled preference to let user know that default data sim cannot
- // be changed while call is going on
- final int i = phoneId;
- mPhoneStateListener[phoneId] = new PhoneStateListener() {
- @Override
- public void onCallStateChanged(int state, String incomingNumber) {
- if (DBG) log("PhoneStateListener.onCallStateChanged: state=" + state);
- mCallState[i] = state;
- updateCellularDataValues();
- }
- };
- return mPhoneStateListener[phoneId];
- }
-
- @Override
- public boolean onPreferenceTreeClick(final Preference preference) {
- final Context context = mContext;
- Intent intent = new Intent(context, SimDialogActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-
- if (preference instanceof SimPreference) {
- Intent newIntent = new Intent(context, SimPreferenceDialog.class);
- newIntent.putExtra(EXTRA_SLOT_ID, ((SimPreference)preference).getSlotId());
- startActivity(newIntent);
- } else if (findPreference(KEY_CELLULAR_DATA) == preference) {
- intent.putExtra(SimDialogActivity.DIALOG_TYPE_KEY, SimDialogActivity.DATA_PICK);
- context.startActivity(intent);
- } else if (findPreference(KEY_CALLS) == preference) {
- intent.putExtra(SimDialogActivity.DIALOG_TYPE_KEY, SimDialogActivity.CALLS_PICK);
- context.startActivity(intent);
- } else if (findPreference(KEY_SMS) == preference) {
- intent.putExtra(SimDialogActivity.DIALOG_TYPE_KEY, SimDialogActivity.SMS_PICK);
- context.startActivity(intent);
- }
-
- return true;
- }
-
- private class SimPreference extends Preference {
- private SubscriptionInfo mSubInfoRecord;
- private int mSlotId;
- Context mContext;
-
- public SimPreference(Context context, SubscriptionInfo subInfoRecord, int slotId) {
- super(context);
-
- mContext = context;
- mSubInfoRecord = subInfoRecord;
- mSlotId = slotId;
- setKey("sim" + mSlotId);
- update();
- }
-
- public void update() {
- final Resources res = mContext.getResources();
-
- setTitle(String.format(mContext.getResources()
- .getString(R.string.sim_editor_title), (mSlotId + 1)));
- if (mSubInfoRecord != null) {
- if (TextUtils.isEmpty(getPhoneNumber(mSubInfoRecord))) {
- setSummary(mSubInfoRecord.getDisplayName());
- } else {
- setSummary(mSubInfoRecord.getDisplayName() + " - " +
- PhoneNumberUtils.createTtsSpannable(getPhoneNumber(mSubInfoRecord)));
- setEnabled(true);
- }
- setIcon(new BitmapDrawable(res, (mSubInfoRecord.createIconBitmap(mContext))));
- } else {
- setSummary(R.string.sim_slot_empty);
- setFragment(null);
- setEnabled(false);
- }
- }
-
- private int getSlotId() {
- return mSlotId;
- }
- }
-
- // Returns the line1Number. Line1number should always be read from TelephonyManager since it can
- // be overridden for display purposes.
- private String getPhoneNumber(SubscriptionInfo info) {
- final TelephonyManager tm =
- (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
- return tm.getLine1Number(info.getSubscriptionId());
- }
-
- private void log(String s) {
- Log.d(TAG, s);
- }
-
- /**
- * For search
- */
- public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider() {
- @Override
- public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
- boolean enabled) {
- ArrayList<SearchIndexableResource> result =
- new ArrayList<SearchIndexableResource>();
-
- if (Utils.showSimCardTile(context)) {
- SearchIndexableResource sir = new SearchIndexableResource(context);
- sir.xmlResId = R.xml.sim_settings;
- result.add(sir);
- }
-
- return result;
- }
- };
-
- private boolean isCallStateIdle() {
- boolean callStateIdle = true;
- for (int i = 0; i < mCallState.length; i++) {
- if (TelephonyManager.CALL_STATE_IDLE != mCallState[i]) {
- callStateIdle = false;
- }
- }
- Log.d(TAG, "isCallStateIdle " + callStateIdle);
- return callStateIdle;
- }
-}
diff --git a/src/com/android/settings/slices/SliceBuilderUtils.java b/src/com/android/settings/slices/SliceBuilderUtils.java
index e82d13e..00d7950 100644
--- a/src/com/android/settings/slices/SliceBuilderUtils.java
+++ b/src/com/android/settings/slices/SliceBuilderUtils.java
@@ -159,7 +159,7 @@
.setClass(context, SliceBroadcastReceiver.class)
.putExtra(EXTRA_SLICE_KEY, data.getKey());
return PendingIntent.getBroadcast(context, 0 /* requestCode */, intent,
- PendingIntent.FLAG_CANCEL_CURRENT);
+ PendingIntent.FLAG_UPDATE_CURRENT);
}
/**
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 5ad68fe..7a9f026 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -74,6 +74,8 @@
import com.android.settingslib.drawable.CircleFramedDrawable;
import com.android.settingslib.search.SearchIndexable;
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
@@ -224,7 +226,7 @@
super.onCreate(icicle);
addPreferencesFromResource(R.xml.user_settings);
final Activity activity = getActivity();
- if (!Utils.isDeviceProvisioned(activity)) {
+ if (!WizardManagerHelper.isDeviceProvisioned(activity)) {
activity.finish();
return;
}
@@ -977,7 +979,8 @@
private void updateAddUser(Context context) {
if ((mUserCaps.mCanAddUser || mUserCaps.mDisallowAddUserSetByAdmin)
- && Utils.isDeviceProvisioned(context) && mUserCaps.mUserSwitcherEnabled) {
+ && WizardManagerHelper.isDeviceProvisioned(context)
+ && mUserCaps.mUserSwitcherEnabled) {
mAddUser.setVisible(true);
final boolean moreUsers = mUserManager.canAddMoreUsers();
mAddUser.setEnabled(moreUsers && !mAddingUser && mUserManager.canSwitchUsers());
diff --git a/src/com/android/settings/wifi/NetworkRequestDialogFragment.java b/src/com/android/settings/wifi/NetworkRequestDialogFragment.java
index a88b004..c7255f1 100644
--- a/src/com/android/settings/wifi/NetworkRequestDialogFragment.java
+++ b/src/com/android/settings/wifi/NetworkRequestDialogFragment.java
@@ -34,16 +34,19 @@
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
+
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
import androidx.preference.internal.PreferenceImageView;
+
import com.android.settings.R;
import com.android.settingslib.Utils;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.WifiTracker;
import com.android.settingslib.wifi.WifiTrackerFactory;
+
import java.util.ArrayList;
import java.util.List;
@@ -63,7 +66,8 @@
private boolean mShowLimitedItem = true;
private List<AccessPoint> mAccessPointList;
- private FilterWifiTracker mFilterWifiTracker;
+ @VisibleForTesting
+ FilterWifiTracker mFilterWifiTracker;
private AccessPointAdapter mDialogAdapter;
private NetworkRequestUserSelectionCallback mUserSelectionCallback;
@@ -115,7 +119,7 @@
neutralBtn.setVisibility(View.GONE);
neutralBtn.setOnClickListener(v -> {
mShowLimitedItem = false;
- renewAccessPointList(null /* List<ScanResult> */);
+ renewAccessPointList(null /* scanResults */);
notifyAdapterRefresh();
neutralBtn.setVisibility(View.GONE);
});
@@ -323,7 +327,8 @@
// Do nothing when selection is failed, let user could try again easily.
}
- private final class FilterWifiTracker {
+ @VisibleForTesting
+ final class FilterWifiTracker {
private final List<String> mAccessPointKeys;
private final WifiTracker mWifiTracker;
@@ -381,7 +386,8 @@
return result;
}
- private WifiTracker.WifiListener mWifiListener = new WifiTracker.WifiListener() {
+ @VisibleForTesting
+ WifiTracker.WifiListener mWifiListener = new WifiTracker.WifiListener() {
@Override
public void onWifiStateChanged(int state) {
@@ -395,6 +401,7 @@
@Override
public void onAccessPointsChanged() {
+ renewAccessPointList(null /* scanResults */);
notifyAdapterRefresh();
}
};
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index c31b857..ef4e6af 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -47,7 +47,10 @@
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
+import android.view.View.AccessibilityDelegate;
import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityNodeInfo;
+import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
@@ -62,6 +65,8 @@
import android.widget.Spinner;
import android.widget.TextView;
+import androidx.annotation.VisibleForTesting;
+
import com.android.settings.ProxySelector;
import com.android.settings.R;
import com.android.settings.wifi.details.WifiPrivacyPreferenceController;
@@ -76,8 +81,6 @@
import java.util.Arrays;
import java.util.Iterator;
-import androidx.annotation.VisibleForTesting;
-
/**
* The class for allowing UIs like {@link WifiDialog} and {@link WifiConfigUiBase} to
* share the logic for controlling buttons, text fields, etc.
@@ -338,6 +341,7 @@
mAccessPoint.isCarrierAp() ? View.GONE : View.VISIBLE);
advancedTogglebox.setOnCheckedChangeListener(this);
advancedTogglebox.setChecked(showAdvancedFields);
+ setAdvancedOptionAccessibilityString(showAdvancedFields);
mView.findViewById(R.id.wifi_advanced_fields)
.setVisibility(showAdvancedFields ? View.VISIBLE : View.GONE);
if (mAccessPoint.isCarrierAp()) {
@@ -1554,21 +1558,17 @@
((EditText) mPasswordView).setSelection(pos);
}
} else if (view.getId() == R.id.wifi_advanced_togglebox) {
- final View advancedToggle = mView.findViewById(R.id.wifi_advanced_toggle);
final int toggleVisibility;
final int stringID;
if (isChecked) {
toggleVisibility = View.VISIBLE;
- stringID = R.string.wifi_advanced_toggle_description_expanded;
-
// Hide the SoftKeyboard temporary to let user can see most of the expanded items.
hideSoftKeyboard(mView.getWindowToken());
} else {
toggleVisibility = View.GONE;
- stringID = R.string.wifi_advanced_toggle_description_collapsed;
}
mView.findViewById(R.id.wifi_advanced_fields).setVisibility(toggleVisibility);
- advancedToggle.setContentDescription(mContext.getString(stringID));
+ setAdvancedOptionAccessibilityString(isChecked);
}
}
@@ -1677,6 +1677,8 @@
mView.findViewById(R.id.hidden_settings_field).setVisibility(View.VISIBLE);
((CheckBox) mView.findViewById(R.id.wifi_advanced_togglebox))
.setOnCheckedChangeListener(this);
+ // Set correct accessibility strings.
+ setAdvancedOptionAccessibilityString(false /* showAdvancedFields */);
}
/**
@@ -1767,4 +1769,26 @@
InputMethodManager.class);
inputMethodManager.hideSoftInputFromWindow(windowToken, 0 /* flags */);
}
+
+ private void setAdvancedOptionAccessibilityString(boolean showAdvancedFields) {
+ final CheckBox advancedToggleBox = mView.findViewById(R.id.wifi_advanced_togglebox);
+ advancedToggleBox.setAccessibilityDelegate(new AccessibilityDelegate() {
+ @Override
+ public void onInitializeAccessibilityNodeInfo(
+ View v, AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(v, info);
+ // To let TalkBack don't pronounce checked/unchecked.
+ info.setCheckable(false /* checkable */);
+ // To let TalkBack don't pronounce CheckBox.
+ info.setClassName(null /* className */);
+ final CharSequence accessibilityDoubleTapExtend = mContext.getString(
+ showAdvancedFields ? R.string.wifi_advanced_toggle_description_expanded
+ : R.string.wifi_advanced_toggle_description_collapsed);
+ // Customize TalkBack's pronunciation which been appended to "Double-tap to".
+ final AccessibilityAction customClick = new AccessibilityAction(
+ AccessibilityNodeInfo.ACTION_CLICK, accessibilityDoubleTapExtend);
+ info.addAction(customClick);
+ }
+ });
+ }
}
diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
index 3ed561b..4496838 100644
--- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
+++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
@@ -235,14 +235,28 @@
return mNetworkCapabilities.hasCapability(cap) != nc.hasCapability(cap);
}
+ private boolean hasPrivateDnsStatusChanged(NetworkCapabilities nc) {
+ // If this is the first time that WifiDetailPreferenceController gets
+ // NetworkCapabilities, report that something has changed and assign nc to
+ // mNetworkCapabilities in onCapabilitiesChanged. Note that the NetworkCapabilities
+ // from onCapabilitiesChanged() will never be null, so calling
+ // mNetworkCapabilities.isPrivateDnsBroken() would be safe next time.
+ if (mNetworkCapabilities == null) {
+ return true;
+ }
+
+ return mNetworkCapabilities.isPrivateDnsBroken() != nc.isPrivateDnsBroken();
+ }
+
@Override
public void onCapabilitiesChanged(Network network, NetworkCapabilities nc) {
// If the network just validated or lost Internet access or detected partial internet
- // connectivity, refresh network state. Don't do this on every NetworkCapabilities
- // change because refreshNetworkState sends IPCs to the system server from the UI
- // thread, which can cause jank.
+ // connectivity or private dns was broken, refresh network state. Don't do this on
+ // every NetworkCapabilities change because refreshEntityHeader sends IPCs to the
+ // system server from the UI thread, which can cause jank.
if (network.equals(mNetwork) && !nc.equals(mNetworkCapabilities)) {
- if (hasCapabilityChanged(nc, NET_CAPABILITY_VALIDATED)
+ if (hasPrivateDnsStatusChanged(nc)
+ || hasCapabilityChanged(nc, NET_CAPABILITY_VALIDATED)
|| hasCapabilityChanged(nc, NET_CAPABILITY_CAPTIVE_PORTAL)
|| hasCapabilityChanged(nc, NET_CAPABILITY_PARTIAL_CONNECTIVITY)) {
mAccessPoint.update(mWifiConfig, mWifiInfo, mNetworkInfo);
@@ -1161,7 +1175,7 @@
(mWifiConfig.macRandomizationSetting
== WifiConfiguration.RANDOMIZATION_PERSISTENT)
? R.string.wifi_advanced_randomized_mac_address_title
- : R.string.wifi_advanced_factory_mac_address_title);
+ : R.string.wifi_advanced_device_mac_address_title);
}
}
diff --git a/src/com/android/settings/wifi/qrcode/QrCamera.java b/src/com/android/settings/wifi/qrcode/QrCamera.java
index f0afd60..3e9c0b2 100644
--- a/src/com/android/settings/wifi/qrcode/QrCamera.java
+++ b/src/com/android/settings/wifi/qrcode/QrCamera.java
@@ -288,32 +288,43 @@
for (int i = 0; i < numberOfCameras; ++i) {
Camera.getCameraInfo(i, cameraInfo);
if (cameraInfo.facing == CameraInfo.CAMERA_FACING_BACK) {
+ releaseCamera();
mCamera = Camera.open(i);
- mCamera.setPreviewTexture(surface);
mCameraOrientation = cameraInfo.orientation;
break;
}
}
- if (mCamera == null) {
- Log.e(TAG, "Cannot find available back camera.");
- mScannerCallback.handleCameraFailure();
- return false;
- }
- setCameraParameter();
- setTransformationMatrix();
- if (!startPreview()) {
- Log.e(TAG, "Error to init Camera");
- mCamera = null;
- mScannerCallback.handleCameraFailure();
- return false;
- }
- return true;
- } catch (IOException e) {
- Log.e(TAG, "Error to init Camera");
+ } catch (RuntimeException e) {
+ Log.e(TAG, "Fail to open camera: " + e);
mCamera = null;
mScannerCallback.handleCameraFailure();
return false;
}
+
+ try {
+ if (mCamera == null) {
+ throw new IOException("Cannot find available back camera");
+ }
+ mCamera.setPreviewTexture(surface);
+ setCameraParameter();
+ setTransformationMatrix();
+ if (!startPreview()) {
+ throw new IOException("Lost contex");
+ }
+ } catch (IOException ioe) {
+ Log.e(TAG, "Fail to startPreview camera: " + ioe);
+ mCamera = null;
+ mScannerCallback.handleCameraFailure();
+ return false;
+ }
+ return true;
+ }
+ }
+
+ private void releaseCamera() {
+ if (mCamera != null) {
+ mCamera.release();
+ mCamera = null;
}
}
diff --git a/tests/robotests/assets/grandfather_not_implementing_index_provider b/tests/robotests/assets/grandfather_not_implementing_index_provider
index 20c1792..d0f02d3 100644
--- a/tests/robotests/assets/grandfather_not_implementing_index_provider
+++ b/tests/robotests/assets/grandfather_not_implementing_index_provider
@@ -6,6 +6,8 @@
com.android.settings.accessibility.ToggleScreenReaderPreferenceFragmentForSetupWizard
com.android.settings.accessibility.ToggleSelectToSpeakPreferenceFragmentForSetupWizard
com.android.settings.accounts.AccountDetailDashboardFragment
+com.android.settings.accounts.AccountPersonalDashboardFragment
+com.android.settings.accounts.AccountWorkProfileDashboardFragment
com.android.settings.accounts.AccountSyncSettings
com.android.settings.accounts.ChooseAccountFragment
com.android.settings.applications.appinfo.AppInfoDashboardFragment
diff --git a/tests/robotests/src/com/android/settings/development/MockLocationAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/MockLocationAppPreferenceControllerTest.java
index 993ba72..3be4347 100644
--- a/tests/robotests/src/com/android/settings/development/MockLocationAppPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/MockLocationAppPreferenceControllerTest.java
@@ -20,6 +20,7 @@
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
+import android.util.Pair;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
@@ -145,7 +146,6 @@
}
private AppOpsManager.OpEntry createOpEntry(int opMode) {
- return new OpEntry(0, false, opMode, null /*accessTimes*/, null /*rejectTimes*/,
- null /*durations*/, null /* proxyUids */, null /* proxyPackages */);
+ return new OpEntry(0, opMode, new Pair[0]);
}
}
diff --git a/tests/robotests/src/com/android/settings/development/featureflags/FeatureFlagPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/featureflags/FeatureFlagPreferenceControllerTest.java
index cf97544..acdf071 100644
--- a/tests/robotests/src/com/android/settings/development/featureflags/FeatureFlagPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/featureflags/FeatureFlagPreferenceControllerTest.java
@@ -28,7 +28,6 @@
import android.content.Context;
import android.os.Build;
-import android.os.SystemProperties;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen;
@@ -77,9 +76,8 @@
@Test
public void onStart_shouldRefreshFeatureFlags() {
- mController.onStart();
+ mController.displayPreference(mScreen);
- verify(mCategory).removeAll();
verify(mCategory, atLeastOnce()).addPreference(any(FeatureFlagPreference.class));
}
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java
index 774fba2..1febbe4 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java
@@ -34,6 +34,7 @@
import android.content.Intent;
import android.os.UserHandle;
import android.os.UserManager;
+import android.util.Pair;
import androidx.preference.Preference;
import androidx.preference.PreferenceManager;
@@ -83,14 +84,10 @@
MockitoAnnotations.initMocks(this);
final List<AppOpsManager.OpEntry> allowOps = new ArrayList<>();
allowOps.add(new AppOpsManager.OpEntry(
- AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, false, AppOpsManager.MODE_ALLOWED,
- null /*accessTimes*/, null /*rejectTimes*/, null /*durations*/,
- null /* proxyUids */, null /* proxyPackages */));
+ AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, AppOpsManager.MODE_ALLOWED, new Pair[0]));
final List<AppOpsManager.OpEntry> restrictedOps = new ArrayList<>();
restrictedOps.add(new AppOpsManager.OpEntry(
- AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, false, AppOpsManager.MODE_IGNORED,
- null /*accessTimes*/, null /*rejectTimes*/, null /*durations*/,
- null /* proxyUids */, null /* proxyPackages */));
+ AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, AppOpsManager.MODE_IGNORED, new Pair[0]));
mAllowedPackageOps = new AppOpsManager.PackageOps(
ALLOWED_PACKAGE_NAME, ALLOWED_UID, allowOps);
mRestrictedPackageOps = new AppOpsManager.PackageOps(
diff --git a/tests/robotests/src/com/android/settings/panel/PanelFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/panel/PanelFeatureProviderImplTest.java
index ae57a77..54f1894 100644
--- a/tests/robotests/src/com/android/settings/panel/PanelFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/panel/PanelFeatureProviderImplTest.java
@@ -17,17 +17,19 @@
package com.android.settings.panel;
+import static com.android.settings.panel.SettingsPanelActivity.KEY_MEDIA_PACKAGE_NAME;
+import static com.android.settings.panel.SettingsPanelActivity.KEY_PANEL_TYPE_ARGUMENT;
import static com.android.settingslib.media.MediaOutputSliceConstants.ACTION_MEDIA_OUTPUT;
import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
+import android.os.Bundle;
import android.provider.Settings;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
@@ -38,33 +40,39 @@
private Context mContext;
private PanelFeatureProviderImpl mProvider;
+ private Bundle mBundle;
@Before
public void setUp() {
mContext = RuntimeEnvironment.application;
mProvider = new PanelFeatureProviderImpl();
+ mBundle = new Bundle();
+ mBundle.putString(KEY_MEDIA_PACKAGE_NAME, TEST_PACKAGENAME);
}
@Test
public void getPanel_internetConnectivityKey_returnsCorrectPanel() {
- final PanelContent panel = mProvider.getPanel(mContext,
- Settings.Panel.ACTION_INTERNET_CONNECTIVITY, TEST_PACKAGENAME);
+ mBundle.putString(KEY_PANEL_TYPE_ARGUMENT, Settings.Panel.ACTION_INTERNET_CONNECTIVITY);
+
+ final PanelContent panel = mProvider.getPanel(mContext, mBundle);
assertThat(panel).isInstanceOf(InternetConnectivityPanel.class);
}
@Test
public void getPanel_volume_returnsCorrectPanel() {
- final PanelContent panel = mProvider.getPanel(mContext,
- Settings.Panel.ACTION_VOLUME, TEST_PACKAGENAME);
+ mBundle.putString(KEY_PANEL_TYPE_ARGUMENT, Settings.Panel.ACTION_VOLUME);
+
+ final PanelContent panel = mProvider.getPanel(mContext, mBundle);
assertThat(panel).isInstanceOf(VolumePanel.class);
}
@Test
public void getPanel_mediaOutputKey_returnsCorrectPanel() {
- final PanelContent panel = mProvider.getPanel(mContext,
- ACTION_MEDIA_OUTPUT, TEST_PACKAGENAME);
+ mBundle.putString(KEY_PANEL_TYPE_ARGUMENT, ACTION_MEDIA_OUTPUT);
+
+ final PanelContent panel = mProvider.getPanel(mContext, mBundle);
assertThat(panel).isInstanceOf(MediaOutputPanel.class);
}
diff --git a/tests/robotests/src/com/android/settings/panel/PanelFragmentTest.java b/tests/robotests/src/com/android/settings/panel/PanelFragmentTest.java
index 44dc3bc..cbeff97 100644
--- a/tests/robotests/src/com/android/settings/panel/PanelFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/panel/PanelFragmentTest.java
@@ -38,7 +38,6 @@
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
@@ -63,7 +62,7 @@
mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
mFakeFeatureFactory.panelFeatureProvider = mPanelFeatureProvider;
mFakePanelContent = new FakePanelContent();
- doReturn(mFakePanelContent).when(mPanelFeatureProvider).getPanel(any(), any(), any());
+ doReturn(mFakePanelContent).when(mPanelFeatureProvider).getPanel(any(), any());
mActivity = spy(Robolectric.buildActivity(FakeSettingsPanelActivity.class).setup().get());
@@ -83,7 +82,7 @@
new LinearLayout(mContext), null);
PanelSlicesLoaderCountdownLatch countdownLatch =
mPanelFragment.mPanelSlicesLoaderCountdownLatch;
- for (Uri sliecUri: mFakePanelContent.getSlices()) {
+ for (Uri sliecUri : mFakePanelContent.getSlices()) {
countdownLatch.markSliceLoaded(sliecUri);
}
diff --git a/tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java b/tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java
index 89288f6..9f4fffc 100644
--- a/tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java
+++ b/tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java
@@ -40,17 +40,15 @@
import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before;
-import org.junit.runner.RunWith;
import org.junit.Test;
+import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.android.controller.ActivityController;
-import java.util.ArrayList;
import java.util.LinkedHashMap;
-import java.util.List;
import java.util.Map;
@RunWith(RobolectricTestRunner.class)
@@ -74,7 +72,7 @@
mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
mFakeFeatureFactory.panelFeatureProvider = mPanelFeatureProvider;
mFakePanelContent = new FakePanelContent();
- doReturn(mFakePanelContent).when(mPanelFeatureProvider).getPanel(any(), any(), any());
+ doReturn(mFakePanelContent).when(mPanelFeatureProvider).getPanel(any(), any());
ActivityController<FakeSettingsPanelActivity> activityController =
Robolectric.buildActivity(FakeSettingsPanelActivity.class);
diff --git a/tests/robotests/src/com/android/settings/panel/SettingsPanelActivityTest.java b/tests/robotests/src/com/android/settings/panel/SettingsPanelActivityTest.java
index a4b7aa5..44e5eefc 100644
--- a/tests/robotests/src/com/android/settings/panel/SettingsPanelActivityTest.java
+++ b/tests/robotests/src/com/android/settings/panel/SettingsPanelActivityTest.java
@@ -65,7 +65,7 @@
mPanelFeatureProvider = spy(new PanelFeatureProviderImpl());
mFakeFeatureFactory.panelFeatureProvider = mPanelFeatureProvider;
mFakePanelContent = new FakePanelContent();
- doReturn(mFakePanelContent).when(mPanelFeatureProvider).getPanel(any(), any(), any());
+ doReturn(mFakePanelContent).when(mPanelFeatureProvider).getPanel(any(), any());
}
@Test
diff --git a/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java b/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
index aeb16e6..77058c0 100644
--- a/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
+++ b/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
@@ -34,6 +34,7 @@
import com.android.settings.password.SetupChooseLockPassword.SetupChooseLockPasswordFragment;
import com.android.settings.testutils.shadow.SettingsShadowResources;
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
+import com.android.settings.testutils.shadow.ShadowDevicePolicyManager;
import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
import com.android.settings.testutils.shadow.ShadowUtils;
import com.android.settings.widget.ScrollToParentEditText;
@@ -62,6 +63,7 @@
shadows = {
SettingsShadowResources.class,
ShadowLockPatternUtils.class,
+ ShadowDevicePolicyManager.class,
ShadowUtils.class,
ShadowAlertDialogCompat.class
})
diff --git a/tests/robotests/src/com/android/settings/search/actionbar/SearchMenuControllerTest.java b/tests/robotests/src/com/android/settings/search/actionbar/SearchMenuControllerTest.java
index 3063912..e2b896a 100644
--- a/tests/robotests/src/com/android/settings/search/actionbar/SearchMenuControllerTest.java
+++ b/tests/robotests/src/com/android/settings/search/actionbar/SearchMenuControllerTest.java
@@ -17,29 +17,33 @@
package com.android.settings.search.actionbar;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
import android.app.settings.SettingsEnums;
-import android.content.Context;
+import android.content.Intent;
import android.os.Bundle;
import android.provider.Settings.Global;
import android.view.Menu;
import android.view.MenuItem;
+import androidx.fragment.app.FragmentActivity;
+
import com.android.settings.R;
import com.android.settings.core.InstrumentedFragment;
-import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.testutils.shadow.ShadowUtils;
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
@@ -48,41 +52,28 @@
@Mock
private Menu mMenu;
- private TestPreferenceFragment mPreferenceHost;
private InstrumentedFragment mHost;
- private Context mContext;
+ private FragmentActivity mActivity;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- mContext = RuntimeEnvironment.application;
- mHost = new InstrumentedFragment() {
- @Override
- public Context getContext() {
- return mContext;
- }
+ mActivity = Robolectric.buildActivity(FragmentActivity.class).get();
+ mHost = spy(new InstrumentedFragment() {
@Override
public int getMetricsCategory() {
return SettingsEnums.TESTING;
}
- };
- mPreferenceHost = new TestPreferenceFragment();
- Global.putInt(mContext.getContentResolver(), Global.DEVICE_PROVISIONED, 1);
+ });
+ Global.putInt(mActivity.getContentResolver(), Global.DEVICE_PROVISIONED, 1);
+ when(mHost.getActivity()).thenReturn(mActivity);
when(mMenu.add(Menu.NONE, Menu.NONE, 0 /* order */, R.string.search_menu))
.thenReturn(mock(MenuItem.class));
}
@Test
- public void init_prefFragment_shouldAddMenu() {
- SearchMenuController.init(mPreferenceHost);
- mPreferenceHost.getSettingsLifecycle().onCreateOptionsMenu(mMenu, null /* inflater */);
-
- verify(mMenu).add(Menu.NONE, Menu.NONE, 0 /* order */, R.string.search_menu);
- }
-
- @Test
public void init_observableFragment_shouldAddMenu() {
SearchMenuController.init(mHost);
mHost.getSettingsLifecycle().onCreateOptionsMenu(mMenu, null /* inflater */);
@@ -103,26 +94,22 @@
@Test
public void init_deviceNotProvisioned_shouldNotAddMenu() {
- Global.putInt(mContext.getContentResolver(), Global.DEVICE_PROVISIONED, 0);
+ Global.putInt(mActivity.getContentResolver(), Global.DEVICE_PROVISIONED, 0);
SearchMenuController.init(mHost);
mHost.getSettingsLifecycle().onCreateOptionsMenu(mMenu, null /* inflater */);
verifyZeroInteractions(mMenu);
}
- private static class TestPreferenceFragment extends InstrumentedPreferenceFragment {
- @Override
- public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
- }
+ @Test
+ public void init_startFromSetupWizard_shouldNotAddMenu() {
+ final Intent intent = new Intent();
+ intent.putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true);
+ mActivity.setIntent(intent);
+ SearchMenuController.init(mHost);
- @Override
- public Context getContext() {
- return RuntimeEnvironment.application;
- }
+ mHost.getSettingsLifecycle().onCreateOptionsMenu(mMenu, null /* inflater */);
- @Override
- public int getMetricsCategory() {
- return SettingsEnums.TESTING;
- }
+ verifyZeroInteractions(mMenu);
}
}
diff --git a/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java
index 4f75794..d292b73 100644
--- a/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java
@@ -17,6 +17,7 @@
package com.android.settings.wifi;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
@@ -33,14 +34,16 @@
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
+
import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.FragmentActivity;
+
import com.android.settings.R;
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.WifiTracker;
import com.android.settingslib.wifi.WifiTrackerFactory;
-import java.util.ArrayList;
-import java.util.List;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -49,6 +52,9 @@
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
+import java.util.ArrayList;
+import java.util.List;
+
@RunWith(RobolectricTestRunner.class)
@Config(shadows = ShadowAlertDialogCompat.class)
public class NetworkRequestDialogFragmentTest {
@@ -57,14 +63,14 @@
private static final String KEY_SECURITY = "key_security";
private static final String TEST_APP_NAME = "TestAppName";
- private NetworkRequestDialogActivity mActivity;
+ private FragmentActivity mActivity;
private NetworkRequestDialogFragment networkRequestDialogFragment;
private Context mContext;
private WifiTracker mWifiTracker;
@Before
public void setUp() {
- mActivity = Robolectric.buildActivity(NetworkRequestDialogActivity.class,
+ mActivity = Robolectric.buildActivity(FragmentActivity.class,
new Intent().putExtra(NetworkRequestDialogFragment.EXTRA_APP_NAME,
TEST_APP_NAME)).setup().get();
networkRequestDialogFragment = spy(NetworkRequestDialogFragment.newInstance());
@@ -108,7 +114,6 @@
@Test
public void onUserSelectionCallbackRegistration_onClick_shouldCallSelect() {
- // Assert.
final int indexClickItem = 3;
List<AccessPoint> accessPointList = createAccessPointList();
AccessPoint clickedAccessPoint = accessPointList.get(indexClickItem);
@@ -129,7 +134,6 @@
@Test
public void onMatch_shouldUpdatedList() {
- // Assert.
when(networkRequestDialogFragment.getContext()).thenReturn(mContext);
Context applicationContext = spy(RuntimeEnvironment.application.getApplicationContext());
when(mContext.getApplicationContext()).thenReturn(applicationContext);
@@ -140,15 +144,15 @@
List<AccessPoint> accessPointList = createAccessPointList();
when(mWifiTracker.getAccessPoints()).thenReturn(accessPointList);
- final String SSID_AP1 = "Test AP 1";
- final String SSID_AP2 = "Test AP 2";
+ final String ssidAp1 = "Test AP 1";
+ final String ssidAp2 = "Test AP 2";
List<ScanResult> scanResults = new ArrayList<>();
ScanResult scanResult = new ScanResult();
- scanResult.SSID = SSID_AP1;
+ scanResult.SSID = ssidAp1;
scanResult.capabilities = "WEP";
scanResults.add(scanResult);
scanResult = new ScanResult();
- scanResult.SSID = SSID_AP2;
+ scanResult.SSID = ssidAp2;
scanResult.capabilities = "WEP";
scanResults.add(scanResult);
@@ -159,8 +163,43 @@
List<AccessPoint> returnList = networkRequestDialogFragment.getAccessPointList();
assertThat(returnList).isNotEmpty();
assertThat(returnList.size()).isEqualTo(2);
- assertThat(returnList.get(0).getSsid()).isEqualTo(SSID_AP1);
- assertThat(returnList.get(1).getSsid()).isEqualTo(SSID_AP2);
+ assertThat(returnList.get(0).getSsid()).isEqualTo(ssidAp1);
+ assertThat(returnList.get(1).getSsid()).isEqualTo(ssidAp2);
+ }
+
+ @Test
+ public void onAccessPointsChanged_shouldUpdatedList() {
+ when(networkRequestDialogFragment.getContext()).thenReturn(mContext);
+ Context applicationContext = spy(RuntimeEnvironment.application.getApplicationContext());
+ when(mContext.getApplicationContext()).thenReturn(applicationContext);
+ WifiManager wifiManager = mock(WifiManager.class);
+ when(applicationContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(wifiManager);
+ networkRequestDialogFragment.onResume();
+
+ List<AccessPoint> accessPointList = new ArrayList<>();
+ when(mWifiTracker.getAccessPoints()).thenReturn(accessPointList);
+
+ final String ssidAp1 = "Test AP 1";
+ List<ScanResult> scanResults = new ArrayList<>();
+ ScanResult scanResult = new ScanResult();
+ scanResult.SSID = ssidAp1;
+ scanResult.capabilities = "WEP";
+ scanResults.add(scanResult);
+
+ // Act.
+ networkRequestDialogFragment.onMatch(scanResults);
+
+ accessPointList = createAccessPointList();
+ when(mWifiTracker.getAccessPoints()).thenReturn(accessPointList);
+
+ // Act.
+ networkRequestDialogFragment.mFilterWifiTracker.mWifiListener.onAccessPointsChanged();
+
+ // Check.
+ List<AccessPoint> returnList = networkRequestDialogFragment.getAccessPointList();
+ assertThat(returnList).isNotEmpty();
+ assertThat(returnList.size()).isEqualTo(1);
+ assertThat(returnList.get(0).getSsid()).isEqualTo(ssidAp1);
}
private List<AccessPoint> createAccessPointList() {
@@ -208,16 +247,14 @@
public void onMatchManyResult_showNeutralButton() {
networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), /* tag */ null);
final AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
-
-
List<AccessPoint> accessPointList = createAccessPointList();
when(mWifiTracker.getAccessPoints()).thenReturn(accessPointList);
- final String SSID_AP = "Test AP ";
+ final String ssidAp = "Test AP ";
final List<ScanResult> scanResults = new ArrayList<>();
for (int i = 0; i < 7 ; i ++) {
ScanResult scanResult = new ScanResult();
- scanResult.SSID = SSID_AP + i;
+ scanResult.SSID = ssidAp + i;
scanResult.capabilities = "WEP";
scanResults.add(scanResult);
}
@@ -230,15 +267,14 @@
@Test
public void clickNeutralButton_hideNeutralButton() {
- // Assert
networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), /* tag */ null);
final AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
- final String SSID_AP = "Test AP ";
+ final String ssidAp = "Test AP ";
final List<ScanResult> scanResults = new ArrayList<>();
for (int i = 0; i < 6 ; i ++) {
ScanResult scanResult = new ScanResult();
- scanResult.SSID = SSID_AP + i;
+ scanResult.SSID = ssidAp + i;
scanResult.capabilities = "WEP";
scanResults.add(scanResult);
}
@@ -254,7 +290,6 @@
@Test
public void cancelDialog_callsReject() {
- // Assert
networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), /* tag */ null);
final AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
final NetworkRequestUserSelectionCallback selectionCallback = mock(
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
index 226dfdb..ab4bea8 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
@@ -557,4 +557,12 @@
assertThat(firstChild).isEqualTo(hiddenSettingLayout);
}
+
+ @Test
+ public void getAdvancedOptionContentDescription_whenViewInitialed_shouldBeCorrect() {
+ final CheckBox advButton = mView.findViewById(R.id.wifi_advanced_togglebox);
+
+ assertThat(advButton.getContentDescription()).isEqualTo(
+ mContext.getString(R.string.wifi_advanced_toggle_description));
+ }
}
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 7f65b06..631880a 100644
--- a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
@@ -17,8 +17,8 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.nullable;
@@ -35,8 +35,8 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
-import android.content.res.Resources;
import android.content.pm.PackageManager;
+import android.content.res.Resources;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
@@ -56,7 +56,6 @@
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.provider.Settings;
-import android.util.FeatureFlagUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
@@ -69,9 +68,9 @@
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
+import com.android.settings.Utils;
import com.android.settings.core.FeatureFlags;
import com.android.settings.development.featureflags.FeatureFlagPersistent;
-import com.android.settings.Utils;
import com.android.settings.testutils.shadow.ShadowDevicePolicyManager;
import com.android.settings.testutils.shadow.ShadowEntityHeaderController;
import com.android.settings.widget.EntityHeaderController;
@@ -101,8 +100,8 @@
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
-import java.util.Arrays;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.stream.Collectors;
@RunWith(RobolectricTestRunner.class)
@@ -993,6 +992,14 @@
updateNetworkCapabilities(nc);
inOrder.verify(mockHeaderController).setSummary(summary);
+ // UI will be refreshed when private DNS is broken.
+ summary = "Private DNS server cannot be accessed";
+ when(mockAccessPoint.getSettingsSummary(true /* convertSavedAsDisconnected */))
+ .thenReturn(summary);
+ nc.setPrivateDnsBroken(true);
+ updateNetworkCapabilities(nc);
+ inOrder.verify(mockHeaderController).setSummary(summary);
+
// UI will be refreshed when device connects to a partial connectivity network.
summary = "Limited connection";
when(mockAccessPoint.getSettingsSummary(true /*convertSavedAsDisconnected*/))
@@ -1867,7 +1874,7 @@
displayAndResume();
- verify(mockMacAddressPref).setTitle(R.string.wifi_advanced_factory_mac_address_title);
+ verify(mockMacAddressPref).setTitle(R.string.wifi_advanced_device_mac_address_title);
}
private ActionButtonsPreference createMock() {