Merge "Fix no response after Talkback users double-tap on Learn more in Accessibility pages" into tm-dev
diff --git a/res/layout/apps_filter_spinner.xml b/res/layout/apps_filter_spinner.xml
index fcdcb5e..dfd41d4 100644
--- a/res/layout/apps_filter_spinner.xml
+++ b/res/layout/apps_filter_spinner.xml
@@ -33,8 +33,8 @@
style="?android:attr/borderlessButtonStyle"
android:layout_width="56dp"
android:layout_height="56dp"
- android:layout_marginTop="12dp"
- android:layout_toEndOf="@id/filter_spinner"
+ android:layout_centerHorizontal="true"
+ android:layout_toRightOf="@+id/filter_spinner"
android:contentDescription="@string/configure"
android:scaleType="center"
android:src="@drawable/ic_apps_filter_settings_24dp"
diff --git a/res/raw/udfps_edge_hint_lottie.json b/res/raw/udfps_left_edge_hint_lottie.json
similarity index 100%
rename from res/raw/udfps_edge_hint_lottie.json
rename to res/raw/udfps_left_edge_hint_lottie.json
diff --git a/res/raw/udfps_edge_hint_lottie.json b/res/raw/udfps_right_edge_hint_lottie.json
similarity index 100%
copy from res/raw/udfps_edge_hint_lottie.json
copy to res/raw/udfps_right_edge_hint_lottie.json
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 469f201..867fecb 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -1626,4 +1626,24 @@
<item>300000</item>
</string-array>
+ <!-- Developer settings: ingress rate limit entries. [DO NOT TRANSLATE] -->
+ <string-array name="ingress_rate_limit_entries">
+ <item>@string/ingress_rate_limit_no_limit_entry</item>
+ <item>128kbps</item>
+ <item>256kbps</item>
+ <item>1Mbps</item>
+ <item>5Mbps</item>
+ <item>15Mbps</item>
+ </string-array>
+
+ <!-- Developer settings: ingress rate limit values. [DO NOT TRANSLATE] -->
+ <string-array name="ingress_rate_limit_values">
+ <item>-1</item> <!-- -1 codes for disabled -->
+ <item>16000</item> <!-- 128kbps == 16000B/s -->
+ <item>32000</item> <!-- 256kbps == 32000B/s -->
+ <item>125000</item> <!-- 1Mbps == 125000B/s -->
+ <item>625000</item> <!-- 5Mbps == 625000/s -->
+ <item>1875000</item> <!-- 15Mbps == 1875000/s -->
+ </string-array>
+
</resources>
diff --git a/res/values/config.xml b/res/values/config.xml
index 8933305..0d67de7 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -618,4 +618,6 @@
<!-- Whether the dream setup activity should be enabled as part of setupwizard -->
<bool name="dream_setup_supported">false</bool>
+ <!-- Whether to put the apps with system UID into system component bucket or not -->
+ <bool name="config_battery_combine_system_components">false</bool>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index bd9cbbd..039997b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -329,14 +329,16 @@
<!-- UI debug setting: Disable Bluetooth A2DP hardware offload [CHAR LIMIT=none] -->
<string name="bluetooth_disable_a2dp_hw_offload">Disable Bluetooth A2DP hardware offload</string>
- <!-- UI debug setting: Disable Bluetooth A2DP hardware offload [CHAR LIMIT=none] -->
- <string name="bluetooth_disable_a2dp_hw_offload_dialog_title">Restart Device?</string>
- <!-- UI debug setting: Disable Bluetooth A2DP hardware offload [CHAR LIMIT=none] -->
- <string name="bluetooth_disable_a2dp_hw_offload_dialog_message">You need to restart your device to change this setting.</string>
- <!-- UI debug setting: Disable Bluetooth A2DP hardware offload [CHAR LIMIT=none] -->
- <string name="bluetooth_disable_a2dp_hw_offload_dialog_confirm">Restart</string>
- <!-- UI debug setting: Disable Bluetooth A2DP hardware offload [CHAR LIMIT=none] -->
- <string name="bluetooth_disable_a2dp_hw_offload_dialog_cancel">Cancel</string>
+ <!-- UI debug setting: Disable Bluetooth LE AUDIO hardware offload [CHAR LIMIT=none] -->
+ <string name="bluetooth_disable_le_audio_hw_offload">Disable Bluetooth LE AUDIO hardware offload</string>
+ <!-- UI debug setting: Disable Bluetooth hardware offload [CHAR LIMIT=none] -->
+ <string name="bluetooth_disable_hw_offload_dialog_title">Restart Device?</string>
+ <!-- UI debug setting: Disable Bluetooth hardware offload [CHAR LIMIT=none] -->
+ <string name="bluetooth_disable_hw_offload_dialog_message">You need to restart your device to change this setting.</string>
+ <!-- UI debug setting: Disable Bluetooth hardware offload [CHAR LIMIT=none] -->
+ <string name="bluetooth_disable_hw_offload_dialog_confirm">Restart</string>
+ <!-- UI debug setting: Disable Bluetooth hardware offload [CHAR LIMIT=none] -->
+ <string name="bluetooth_disable_hw_offload_dialog_cancel">Cancel</string>
<!-- Title for Bluetooth device group with media capability group [CHAR LIMIT=none]-->
<string name="connected_device_media_device_title">Media devices</string>
@@ -5403,7 +5405,7 @@
<!-- Description for the accessibility button in gesture navigation. Explain how this page works. [CHAR LIMIT=NONE] -->
<string name="accessibility_button_gesture_description"><b>To get started</b>\n1. Go to accessibility settings\n2. Select a feature and tap the shortcut\n3. Choose whether you want to use a button or gesture to access the feature</string>
<!-- Description for the accessibility button page. Explain how this page works. [CHAR LIMIT=NONE] -->
- <string name="accessibility_button_description"><b>To get started</b>\n1. Go to accessibility settings\n2. Select a feature and tap the shortcut\n3. Choose the button to use to access the feature</string>
+ <string name="accessibility_button_description"><b>To get started</b>\n1. Go to accessibility settings\n2. Select a feature and tap the shortcut\n3. Choose the button to access the feature</string>
<!-- Title for the button or gesture of the accessibility button. [CHAR LIMIT=35] -->
<string name="accessibility_button_or_gesture_title">Use button or gesture</string>
<!-- Title for the location of the accessibility button. [CHAR LIMIT=35] -->
@@ -7772,6 +7774,8 @@
<string name="nfc_payment_btn_text_set_deault">Set default</string>
<!-- Label of the Update button of the Update default payment app dialog [CHAR LIMIT=40] -->
<string name="nfc_payment_btn_text_update">Update</string>
+ <!-- Summary text of the work apps in the default payment selection list [CHAR LIMIT=20]-->
+ <string name="nfc_work_text">Work</string>
<!-- Restrictions settings --><skip/>
<!-- Restriction settings title [CHAR LIMIT=35] -->
@@ -14035,4 +14039,13 @@
<string name="bluetooth_details_head_tracking_title">Make audio more realistic</string>
<!-- The summary of the head tracking [CHAR LIMIT=none] -->
<string name="bluetooth_details_head_tracking_summary">Shift positioning of audio so it sounds more natural.</string>
+
+ <!-- Developer Settings: Title for network bandwidth ingress rate limit [CHAR LIMIT=none] -->
+ <string name="ingress_rate_limit_title">Network download rate limit</string>
+ <!-- Developer Settings: Summary for network bandwidth ingress rate limit [CHAR LIMIT=none] -->
+ <string name="ingress_rate_limit_summary">Configure the network bandwidth ingress rate limit which is applied to all networks that provide internet connectivity.</string>
+ <!-- Developer Settings: Dialog for network bandwidth ingress rate limit [CHAR LIMIT=none] -->
+ <string name="ingress_rate_limit_dialog_title">Configure network download rate limit</string>
+ <!-- Developer Settings: Dialog ListPreference option to disable network bandwidth ingress rate limit [CHAR LIMIT=none] -->
+ <string name="ingress_rate_limit_no_limit_entry">No limit</string>
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index c3ed5b2..bd0aea1 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -432,12 +432,12 @@
</style>
<style name="LockPatternContainerStyle">
- <item name="android:maxHeight">400dp</item>
- <item name="android:maxWidth">420dp</item>
+ <item name="android:maxHeight">620dp</item>
+ <item name="android:maxWidth">620dp</item>
<item name="android:minHeight">0dp</item>
<item name="android:minWidth">0dp</item>
<item name="android:paddingBottom">0dp</item>
- <item name="android:paddingHorizontal">44dp</item>
+ <item name="android:paddingHorizontal">0dp</item>
<item name="android:paddingTop">0dp</item>
</style>
diff --git a/res/xml/bluetooth_device_details_fragment.xml b/res/xml/bluetooth_device_details_fragment.xml
index b21d5c9..ef5a990 100644
--- a/res/xml/bluetooth_device_details_fragment.xml
+++ b/res/xml/bluetooth_device_details_fragment.xml
@@ -38,11 +38,6 @@
android:key="action_buttons"
settings:allowDividerBelow="true"/>
- <!-- Add SpacePreference to draw divider -->
- <com.android.settings.applications.SpacePreference
- android:layout_height="0dp"
- settings:allowDividerAbove="true" />
-
<com.android.settings.slices.SlicePreference
android:key="bt_device_slice"
settings:controller="com.android.settings.slices.BlockingSlicePrefController"
diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml
index ed1b4d2..75395c0 100644
--- a/res/xml/development_settings.xml
+++ b/res/xml/development_settings.xml
@@ -297,6 +297,14 @@
android:title="@string/tethering_hardware_offload"
android:summary="@string/tethering_hardware_offload_summary" />
+ <ListPreference
+ android:key="ingress_rate_limit"
+ android:title="@string/ingress_rate_limit_title"
+ android:summary="@string/ingress_rate_limit_summary"
+ android:dialogTitle="@string/ingress_rate_limit_dialog_title"
+ android:entries="@array/ingress_rate_limit_entries"
+ android:entryValues="@array/ingress_rate_limit_values" />
+
<com.android.settingslib.RestrictedPreference
android:key="default_usb_configuration"
android:fragment="com.android.settings.connecteddevice.usb.UsbDefaultFragment"
@@ -313,14 +321,13 @@
android:summary="@string/bluetooth_disable_absolute_volume_summary" />
<SwitchPreference
- android:key="bluetooth_gabeldorsche_enable"
- android:title="@string/bluetooth_enable_gabeldorsche"
- android:summary="@string/bluetooth_enable_gabeldorsche_summary" />
-
- <SwitchPreference
android:key="bluetooth_disable_a2dp_hw_offload"
android:title="@string/bluetooth_disable_a2dp_hw_offload" />
+ <SwitchPreference
+ android:key="bluetooth_disable_le_audio_hw_offload"
+ android:title="@string/bluetooth_disable_le_audio_hw_offload" />
+
<ListPreference
android:key="bluetooth_select_avrcp_version"
android:title="@string/bluetooth_select_avrcp_version_string"
diff --git a/src/com/android/settings/accessibility/HighTextContrastPreferenceController.java b/src/com/android/settings/accessibility/HighTextContrastPreferenceController.java
index aad69b9..8c9d234 100644
--- a/src/com/android/settings/accessibility/HighTextContrastPreferenceController.java
+++ b/src/com/android/settings/accessibility/HighTextContrastPreferenceController.java
@@ -19,6 +19,9 @@
import android.content.Context;
import android.provider.Settings;
+import androidx.preference.PreferenceScreen;
+import androidx.preference.SwitchPreference;
+
import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController;
@@ -27,6 +30,7 @@
*/
public class HighTextContrastPreferenceController extends TogglePreferenceController implements
TextReadingResetController.ResetStateListener {
+ private SwitchPreference mSwitchPreference;
public HighTextContrastPreferenceController(Context context, String preferenceKey) {
super(context, preferenceKey);
@@ -55,7 +59,14 @@
}
@Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mSwitchPreference = screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
public void resetState() {
setChecked(false);
+ updateState(mSwitchPreference);
}
}
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index ccdc78b..fd19376 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -564,13 +564,6 @@
createFooterPreference(getPreferenceScreen(), mDescription,
getString(R.string.accessibility_introduction_title, mPackageName));
}
-
- if (TextUtils.isEmpty(mHtmlDescription) && TextUtils.isEmpty(mDescription)) {
- final CharSequence defaultDescription =
- getText(R.string.accessibility_service_default_description);
- createFooterPreference(getPreferenceScreen(), defaultDescription,
- getString(R.string.accessibility_introduction_title, mPackageName));
- }
}
diff --git a/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java b/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
index 8d29301..3cb22e0 100644
--- a/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
@@ -43,7 +43,6 @@
import com.android.settings.fuelgauge.BatteryEntry;
import com.android.settings.fuelgauge.BatteryUsageStatsLoader;
import com.android.settings.fuelgauge.BatteryUtils;
-import com.android.settings.fuelgauge.ConvertUtils;
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -118,11 +117,7 @@
}
if (mBatteryDiffEntry != null) {
- Log.i(TAG, "BatteryDiffEntry not null, launch : "
- + mBatteryDiffEntry.getPackageName()
- + " | uid : "
- + mBatteryDiffEntry.mBatteryHistEntry.mUid
- + " with DiffEntry data");
+ Log.i(TAG, "handlePreferenceTreeClick():\n" + mBatteryDiffEntry);
AdvancedPowerUsageDetail.startBatteryDetailPage(
mParent.getActivity(),
mParent,
@@ -176,30 +171,11 @@
if (mPackageName == null) {
return null;
}
- final List<BatteryDiffEntry> batteryDiffEntries =
- BatteryChartPreferenceController.getBatteryLast24HrUsageData(mContext);
- if (batteryDiffEntries == null) {
- return null;
- }
- // Filter entry with consumer type to avoid system app,
- // then use user id to divide normal app and work profile app,
- // return target application from filter list by package name.
- return batteryDiffEntries.stream()
- .filter(entry -> entry.mBatteryHistEntry.mConsumerType
- == ConvertUtils.CONSUMER_TYPE_UID_BATTERY)
- .filter(entry -> entry.mBatteryHistEntry.mUserId == mUserId)
- .filter(entry -> {
- if (mPackageName.equals(entry.getPackageName())) {
- Log.i(TAG, "Return target application: "
- + entry.mBatteryHistEntry.mPackageName
- + " | uid: " + entry.mBatteryHistEntry.mUid
- + " | userId: " + entry.mBatteryHistEntry.mUserId);
- return true;
- }
- return false;
- })
- .findFirst()
- .orElse(/* other */null);
+ final BatteryDiffEntry entry =
+ BatteryChartPreferenceController.getBatteryLast24HrUsageData(
+ mContext, mPackageName, mUserId);
+ Log.d(TAG, "loadBatteryDiffEntries():\n" + entry);
+ return entry;
}
@Override
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
index d42e8f1..70140c4 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
@@ -81,9 +81,11 @@
private static final int STAGE_CENTER = 0;
private static final int STAGE_GUIDED = 1;
private static final int STAGE_FINGERTIP = 2;
- private static final int STAGE_EDGES = 3;
+ private static final int STAGE_LEFT_EDGE = 3;
+ private static final int STAGE_RIGHT_EDGE = 4;
- @IntDef({STAGE_UNKNOWN, STAGE_CENTER, STAGE_GUIDED, STAGE_FINGERTIP, STAGE_EDGES})
+ @IntDef({STAGE_UNKNOWN, STAGE_CENTER, STAGE_GUIDED, STAGE_FINGERTIP, STAGE_LEFT_EDGE,
+ STAGE_RIGHT_EDGE})
@Retention(RetentionPolicy.SOURCE)
private @interface EnrollStage {}
@@ -132,7 +134,8 @@
private boolean mIsAccessibilityEnabled;
private LottieAnimationView mIllustrationLottie;
private boolean mHaveShownUdfpsTipLottie;
- private boolean mHaveShownUdfpsSideLottie;
+ private boolean mHaveShownUdfpsLeftEdgeLottie;
+ private boolean mHaveShownUdfpsRightEdgeLottie;
private boolean mShouldShowLottie;
private OrientationEventListener mOrientationEventListener;
@@ -372,12 +375,31 @@
}
break;
- case STAGE_EDGES:
+ case STAGE_LEFT_EDGE:
setHeaderText(R.string.security_settings_udfps_enroll_edge_title);
- if (!mHaveShownUdfpsSideLottie && mIllustrationLottie != null) {
- mHaveShownUdfpsSideLottie = true;
+ if (!mHaveShownUdfpsLeftEdgeLottie && mIllustrationLottie != null) {
+ mHaveShownUdfpsLeftEdgeLottie = true;
setDescriptionText("");
- mIllustrationLottie.setAnimation(R.raw.udfps_edge_hint_lottie);
+ mIllustrationLottie.setAnimation(R.raw.udfps_left_edge_hint_lottie);
+ mIllustrationLottie.setVisibility(View.VISIBLE);
+ mIllustrationLottie.playAnimation();
+ mIllustrationLottie.setContentDescription(
+ getString(R.string.security_settings_udfps_side_fingerprint_help));
+ } else if (mIllustrationLottie == null) {
+ if (isStageHalfCompleted()) {
+ setDescriptionText(
+ R.string.security_settings_fingerprint_enroll_repeat_message);
+ } else {
+ setDescriptionText(R.string.security_settings_udfps_enroll_edge_message);
+ }
+ }
+ break;
+ case STAGE_RIGHT_EDGE:
+ setHeaderText(R.string.security_settings_udfps_enroll_edge_title);
+ if (!mHaveShownUdfpsRightEdgeLottie && mIllustrationLottie != null) {
+ mHaveShownUdfpsRightEdgeLottie = true;
+ setDescriptionText("");
+ mIllustrationLottie.setAnimation(R.raw.udfps_right_edge_hint_lottie);
mIllustrationLottie.setVisibility(View.VISIBLE);
mIllustrationLottie.playAnimation();
mIllustrationLottie.setContentDescription(
@@ -422,8 +444,10 @@
return STAGE_GUIDED;
} else if (progressSteps < getStageThresholdSteps(2)) {
return STAGE_FINGERTIP;
+ } else if (progressSteps < getStageThresholdSteps(3)) {
+ return STAGE_LEFT_EDGE;
} else {
- return STAGE_EDGES;
+ return STAGE_RIGHT_EDGE;
}
}
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java
index 405c090..66059e7 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java
@@ -312,9 +312,10 @@
default:
FingerprintManager fpm = Utils.getFingerprintManagerOrNull(this);
int enrolled = fpm.getEnrolledFingerprints().size();
- int max = getResources().getInteger(
- com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser);
- if (enrolled >= max) {
+ final List<FingerprintSensorPropertiesInternal> props =
+ fpm.getSensorPropertiesInternal();
+ final int maxEnrollments = props.get(0).maxEnrollmentsPerUser;
+ if (enrolled >= maxEnrollments) {
finish();
} else {
// We came back from enrolling but it wasn't completed, start again.
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
index 80a6f05..74e844a 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
@@ -21,6 +21,7 @@
import android.content.Intent;
import android.content.pm.PackageManager;
import android.hardware.fingerprint.FingerprintManager;
+import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
@@ -36,6 +37,7 @@
import com.google.android.setupcompat.template.FooterButton;
import com.google.android.setupcompat.util.WizardManagerHelper;
+import java.util.List;
/**
* Activity which concludes fingerprint enrollment.
*/
@@ -92,10 +94,11 @@
final FingerprintManager fpm = Utils.getFingerprintManagerOrNull(this);
boolean hideAddAnother = false;
if (fpm != null) {
+ final List<FingerprintSensorPropertiesInternal> props =
+ fpm.getSensorPropertiesInternal();
+ int maxEnrollments = props.get(0).maxEnrollmentsPerUser;
int enrolled = fpm.getEnrolledFingerprints(mUserId).size();
- int max = getResources().getInteger(
- com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser);
- hideAddAnother = enrolled >= max;
+ hideAddAnother = enrolled >= maxEnrollments;
}
if (hideAddAnother) {
// Don't show "Add" button if too many fingerprints already added
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
index abc6d53..a5832ea 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
@@ -457,8 +457,10 @@
final Preference addPreference = findPreference(KEY_FINGERPRINT_ADD);
/* Disable preference if too many fingerprints added */
- final int max = getContext().getResources().getInteger(
- com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser);
+ final List<FingerprintSensorPropertiesInternal> props =
+ mFingerprintManager.getSensorPropertiesInternal();
+ // This will need to be updated for devices with multiple fingerprint sensors
+ final int max = props.get(0).maxEnrollmentsPerUser;
boolean tooMany = mFingerprintManager.getEnrolledFingerprints(mUserId).size() >= max;
// retryFingerprint() will be called when remove finishes
// need to disable enroll or have a way to determine if enroll is in progress
diff --git a/src/com/android/settings/development/BluetoothA2dpHwOffloadPreferenceController.java b/src/com/android/settings/development/BluetoothA2dpHwOffloadPreferenceController.java
index 95e663b..2ffa11b 100644
--- a/src/com/android/settings/development/BluetoothA2dpHwOffloadPreferenceController.java
+++ b/src/com/android/settings/development/BluetoothA2dpHwOffloadPreferenceController.java
@@ -16,9 +16,12 @@
package com.android.settings.development;
+import static com.android.settings.development.BluetoothLeAudioHwOffloadPreferenceController.LE_AUDIO_OFFLOAD_DISABLED_PROPERTY;
+
import android.content.Context;
import android.os.SystemProperties;
+import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.SwitchPreference;
@@ -34,6 +37,9 @@
static final String A2DP_OFFLOAD_DISABLED_PROPERTY = "persist.bluetooth.a2dp_offload.disabled";
static final String A2DP_OFFLOAD_SUPPORTED_PROPERTY = "ro.bluetooth.a2dp_offload.supported";
+ @VisibleForTesting
+ boolean mChanged = false;
+
public BluetoothA2dpHwOffloadPreferenceController(Context context,
DevelopmentSettingsDashboardFragment fragment) {
super(context);
@@ -47,7 +53,8 @@
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
- BluetoothA2dpHwOffloadRebootDialog.show(mFragment, this);
+ BluetoothHwOffloadRebootDialog.show(mFragment);
+ mChanged = true;
return false;
}
@@ -85,10 +92,26 @@
return offloadSupported ? !offloadDisabled : true;
}
- public void onA2dpHwDialogConfirmed() {
+ /**
+ * Called when the HwOffloadDialog confirm is clicked.
+ */
+ public void onHwOffloadDialogConfirmed() {
+ if (!mChanged) {
+ return;
+ }
final boolean offloadDisabled =
SystemProperties.getBoolean(A2DP_OFFLOAD_DISABLED_PROPERTY, false);
SystemProperties.set(A2DP_OFFLOAD_DISABLED_PROPERTY, Boolean.toString(!offloadDisabled));
+ if (offloadDisabled) {
+ SystemProperties.set(LE_AUDIO_OFFLOAD_DISABLED_PROPERTY,
+ Boolean.toString(!offloadDisabled));
+ }
}
+ /**
+ * Called when the HwOffloadDialog cancel is clicked.
+ */
+ public void onHwOffloadDialogCanceled() {
+ mChanged = false;
+ }
}
diff --git a/src/com/android/settings/development/BluetoothGabeldorschePreferenceController.java b/src/com/android/settings/development/BluetoothGabeldorschePreferenceController.java
deleted file mode 100644
index f5c30f5..0000000
--- a/src/com/android/settings/development/BluetoothGabeldorschePreferenceController.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2017 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.development;
-
-import android.content.Context;
-import android.provider.DeviceConfig;
-
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.Preference;
-import androidx.preference.SwitchPreference;
-
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.development.DeveloperOptionsPreferenceController;
-
-/**
- * Preference controller for Bluetooth Gabeldorche feature
- */
-public class BluetoothGabeldorschePreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
- PreferenceControllerMixin {
-
- private static final String BLUETOOTH_GABELDORSCHE_KEY =
- "bluetooth_gabeldorsche_enable";
-
- @VisibleForTesting
- static final String CURRENT_GD_FLAG = "INIT_gd_scanning";
-
- public BluetoothGabeldorschePreferenceController(Context context) {
- super(context);
- }
-
- @Override
- public String getPreferenceKey() {
- return BLUETOOTH_GABELDORSCHE_KEY;
- }
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- final boolean isEnabled = (Boolean) newValue;
- DeviceConfig.setProperty(DeviceConfig.NAMESPACE_BLUETOOTH,
- CURRENT_GD_FLAG, isEnabled ? "true" : "false", false /* makeDefault */);
- return true;
- }
-
- @Override
- public void updateState(Preference preference) {
- final boolean isEnabled = DeviceConfig.getBoolean(
- DeviceConfig.NAMESPACE_BLUETOOTH, CURRENT_GD_FLAG, false /* default */);
- ((SwitchPreference) mPreference).setChecked(isEnabled);
- }
-
- @Override
- protected void onDeveloperOptionsSwitchDisabled() {
- super.onDeveloperOptionsSwitchDisabled();
- DeviceConfig.setProperty(DeviceConfig.NAMESPACE_BLUETOOTH,
- CURRENT_GD_FLAG, null, false /* makeDefault */);
- ((SwitchPreference) mPreference).setChecked(false);
- }
-}
diff --git a/src/com/android/settings/development/BluetoothA2dpHwOffloadRebootDialog.java b/src/com/android/settings/development/BluetoothHwOffloadRebootDialog.java
similarity index 60%
rename from src/com/android/settings/development/BluetoothA2dpHwOffloadRebootDialog.java
rename to src/com/android/settings/development/BluetoothHwOffloadRebootDialog.java
index 95ef019..389103e 100644
--- a/src/com/android/settings/development/BluetoothA2dpHwOffloadRebootDialog.java
+++ b/src/com/android/settings/development/BluetoothHwOffloadRebootDialog.java
@@ -28,17 +28,23 @@
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
-public class BluetoothA2dpHwOffloadRebootDialog extends InstrumentedDialogFragment
+/**
+ * The a2dp and LE audio offload switch should reboot the device to take effect, the dialog is
+ * to ask the user to reboot the device after a2dp or LE audio offload user preference changed
+ */
+public class BluetoothHwOffloadRebootDialog extends InstrumentedDialogFragment
implements DialogInterface.OnClickListener {
- public static final String TAG = "BluetoothA2dpHwOffloadReboot";
+ public static final String TAG = "BluetoothHwOffloadReboot";
- public static void show(DevelopmentSettingsDashboardFragment host,
- BluetoothA2dpHwOffloadPreferenceController controller) {
+ /**
+ * The function to show the HwOffloadReboot Dialog.
+ */
+ public static void show(DevelopmentSettingsDashboardFragment host) {
final FragmentManager manager = host.getActivity().getSupportFragmentManager();
if (manager.findFragmentByTag(TAG) == null) {
- final BluetoothA2dpHwOffloadRebootDialog dialog =
- new BluetoothA2dpHwOffloadRebootDialog();
+ final BluetoothHwOffloadRebootDialog dialog =
+ new BluetoothHwOffloadRebootDialog();
dialog.setTargetFragment(host, 0 /* requestCode */);
dialog.show(manager, TAG);
}
@@ -52,33 +58,44 @@
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
- .setMessage(R.string.bluetooth_disable_a2dp_hw_offload_dialog_message)
- .setTitle(R.string.bluetooth_disable_a2dp_hw_offload_dialog_title)
+ .setMessage(R.string.bluetooth_disable_hw_offload_dialog_message)
+ .setTitle(R.string.bluetooth_disable_hw_offload_dialog_title)
.setPositiveButton(
- R.string.bluetooth_disable_a2dp_hw_offload_dialog_confirm, this)
+ R.string.bluetooth_disable_hw_offload_dialog_confirm, this)
.setNegativeButton(
- R.string.bluetooth_disable_a2dp_hw_offload_dialog_cancel, this)
+ R.string.bluetooth_disable_hw_offload_dialog_cancel, this)
.create();
}
@Override
public void onClick(DialogInterface dialog, int which) {
- final OnA2dpHwDialogConfirmedListener host =
- (OnA2dpHwDialogConfirmedListener) getTargetFragment();
+ final OnHwOffloadDialogListener host =
+ (OnHwOffloadDialogListener) getTargetFragment();
if (host == null) {
return;
}
if (which == DialogInterface.BUTTON_POSITIVE) {
- host.onA2dpHwDialogConfirmed();
+ host.onHwOffloadDialogConfirmed();
PowerManager pm = getContext().getSystemService(PowerManager.class);
pm.reboot(null);
+ } else {
+ host.onHwOffloadDialogCanceled();
}
}
- public interface OnA2dpHwDialogConfirmedListener {
+ /**
+ * The interface for the HsOffloadDialogListener to provide the action as the
+ * confirmed or canceled clicked.
+ */
+ public interface OnHwOffloadDialogListener {
/**
* Called when the user presses reboot on the warning dialog.
*/
- void onA2dpHwDialogConfirmed();
+ void onHwOffloadDialogConfirmed();
+
+ /**
+ * Called when the user presses cancel on the warning dialog.
+ */
+ void onHwOffloadDialogCanceled();
}
}
diff --git a/src/com/android/settings/development/BluetoothLeAudioHwOffloadPreferenceController.java b/src/com/android/settings/development/BluetoothLeAudioHwOffloadPreferenceController.java
new file mode 100644
index 0000000..911b62d
--- /dev/null
+++ b/src/com/android/settings/development/BluetoothLeAudioHwOffloadPreferenceController.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright 2022 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.development;
+
+import static com.android.settings.development.BluetoothA2dpHwOffloadPreferenceController.A2DP_OFFLOAD_SUPPORTED_PROPERTY;
+
+import android.content.Context;
+import android.os.SystemProperties;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+import androidx.preference.SwitchPreference;
+
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+/**
+ * Preference controller to control Bluetooth LE audio offload
+ */
+public class BluetoothLeAudioHwOffloadPreferenceController
+ extends DeveloperOptionsPreferenceController
+ implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
+
+ private static final String PREFERENCE_KEY = "bluetooth_disable_le_audio_hw_offload";
+ private final DevelopmentSettingsDashboardFragment mFragment;
+
+ static final String LE_AUDIO_OFFLOAD_DISABLED_PROPERTY =
+ "persist.bluetooth.leaudio_offload.disabled";
+ static final String LE_AUDIO_OFFLOAD_SUPPORTED_PROPERTY =
+ "ro.bluetooth.leaudio_offload.supported";
+
+ @VisibleForTesting
+ boolean mChanged = false;
+
+ public BluetoothLeAudioHwOffloadPreferenceController(Context context,
+ DevelopmentSettingsDashboardFragment fragment) {
+ super(context);
+ mFragment = fragment;
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return PREFERENCE_KEY;
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ BluetoothHwOffloadRebootDialog.show(mFragment);
+ mChanged = true;
+ return false;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ final boolean offloadSupported =
+ SystemProperties.getBoolean(A2DP_OFFLOAD_SUPPORTED_PROPERTY, false)
+ && SystemProperties.getBoolean(LE_AUDIO_OFFLOAD_SUPPORTED_PROPERTY, false);
+ if (offloadSupported) {
+ final boolean offloadDisabled =
+ SystemProperties.getBoolean(LE_AUDIO_OFFLOAD_DISABLED_PROPERTY, true);
+ ((SwitchPreference) mPreference).setChecked(offloadDisabled);
+ } else {
+ mPreference.setEnabled(false);
+ ((SwitchPreference) mPreference).setChecked(true);
+ }
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ super.onDeveloperOptionsSwitchDisabled();
+ final boolean offloadSupported =
+ SystemProperties.getBoolean(A2DP_OFFLOAD_SUPPORTED_PROPERTY, false)
+ && SystemProperties.getBoolean(LE_AUDIO_OFFLOAD_SUPPORTED_PROPERTY, false);
+ if (offloadSupported) {
+ ((SwitchPreference) mPreference).setChecked(true);
+ SystemProperties.set(LE_AUDIO_OFFLOAD_DISABLED_PROPERTY, "true");
+ }
+ }
+
+ /**
+ * Check if the le audio offload setting is default value.
+ */
+ public boolean isDefaultValue() {
+ final boolean offloadSupported =
+ SystemProperties.getBoolean(A2DP_OFFLOAD_SUPPORTED_PROPERTY, false)
+ && SystemProperties.getBoolean(LE_AUDIO_OFFLOAD_SUPPORTED_PROPERTY, false);
+ final boolean offloadDisabled =
+ SystemProperties.getBoolean(LE_AUDIO_OFFLOAD_DISABLED_PROPERTY, false);
+ return offloadSupported ? offloadDisabled : true;
+ }
+
+ /**
+ * Called when the HwOffloadDialog confirm is clicked.
+ */
+ public void onHwOffloadDialogConfirmed() {
+ if (!mChanged) {
+ return;
+ }
+
+ final boolean offloadDisabled =
+ SystemProperties.getBoolean(LE_AUDIO_OFFLOAD_DISABLED_PROPERTY,
+ false);
+ SystemProperties.set(LE_AUDIO_OFFLOAD_DISABLED_PROPERTY,
+ Boolean.toString(!offloadDisabled));
+ }
+
+ /**
+ * Called when the HwOffloadDialog cancel is clicked.
+ */
+ public void onHwOffloadDialogCanceled() {
+ mChanged = false;
+ }
+}
diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
index 57114e2..636404e 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
@@ -80,7 +80,7 @@
public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFragment
implements OnMainSwitchChangeListener, OemUnlockDialogHost, AdbDialogHost,
AdbClearKeysDialogHost, LogPersistDialogHost,
- BluetoothA2dpHwOffloadRebootDialog.OnA2dpHwDialogConfirmedListener,
+ BluetoothHwOffloadRebootDialog.OnHwOffloadDialogListener,
AbstractBluetoothPreferenceController.Callback {
private static final String TAG = "DevSettingsDashboard";
@@ -293,12 +293,16 @@
if (isChecked) {
EnableDevelopmentSettingWarningDialog.show(this /* host */);
} else {
- final BluetoothA2dpHwOffloadPreferenceController controller =
+ final BluetoothA2dpHwOffloadPreferenceController a2dpController =
getDevelopmentOptionsController(
BluetoothA2dpHwOffloadPreferenceController.class);
- // If A2DP hardware offload isn't default value, we must reboot after disable
+ final BluetoothLeAudioHwOffloadPreferenceController leAudioController =
+ getDevelopmentOptionsController(
+ BluetoothLeAudioHwOffloadPreferenceController.class);
+ // If hardware offload isn't default value, we must reboot after disable
// developer options. Show a dialog for the user to confirm.
- if (controller == null || controller.isDefaultValue()) {
+ if ((a2dpController == null || a2dpController.isDefaultValue())
+ && (leAudioController == null || leAudioController.isDefaultValue())) {
disableDeveloperOptions();
} else {
DisableDevSettingsDialogFragment.show(this /* host */);
@@ -358,10 +362,27 @@
}
@Override
- public void onA2dpHwDialogConfirmed() {
- final BluetoothA2dpHwOffloadPreferenceController controller =
+ public void onHwOffloadDialogConfirmed() {
+ final BluetoothA2dpHwOffloadPreferenceController a2dpController =
getDevelopmentOptionsController(BluetoothA2dpHwOffloadPreferenceController.class);
- controller.onA2dpHwDialogConfirmed();
+ a2dpController.onHwOffloadDialogConfirmed();
+
+ final BluetoothLeAudioHwOffloadPreferenceController leAudioController =
+ getDevelopmentOptionsController(
+ BluetoothLeAudioHwOffloadPreferenceController.class);
+ leAudioController.onHwOffloadDialogConfirmed();
+ }
+
+ @Override
+ public void onHwOffloadDialogCanceled() {
+ final BluetoothA2dpHwOffloadPreferenceController a2dpController =
+ getDevelopmentOptionsController(BluetoothA2dpHwOffloadPreferenceController.class);
+ a2dpController.onHwOffloadDialogCanceled();
+
+ final BluetoothLeAudioHwOffloadPreferenceController leAudioController =
+ getDevelopmentOptionsController(
+ BluetoothLeAudioHwOffloadPreferenceController.class);
+ leAudioController.onHwOffloadDialogCanceled();
}
@Override
@@ -517,10 +538,10 @@
controllers.add(new TetheringHardwareAccelPreferenceController(context));
controllers.add(new BluetoothDeviceNoNamePreferenceController(context));
controllers.add(new BluetoothAbsoluteVolumePreferenceController(context));
- controllers.add(new BluetoothGabeldorschePreferenceController(context));
controllers.add(new BluetoothAvrcpVersionPreferenceController(context));
controllers.add(new BluetoothMapVersionPreferenceController(context));
controllers.add(new BluetoothA2dpHwOffloadPreferenceController(context, fragment));
+ controllers.add(new BluetoothLeAudioHwOffloadPreferenceController(context, fragment));
controllers.add(new BluetoothMaxConnectedAudioDevicesPreferenceController(context));
controllers.add(new NfcStackDebugLogPreferenceController(context));
controllers.add(new ShowTapsPreferenceController(context));
@@ -585,6 +606,7 @@
controllers.add(new SharedDataPreferenceController(context));
controllers.add(new OverlaySettingsPreferenceController(context));
controllers.add(new StylusHandwritingPreferenceController(context));
+ controllers.add(new IngressRateLimitPreferenceController((context)));
return controllers;
}
diff --git a/src/com/android/settings/development/DisableDevSettingsDialogFragment.java b/src/com/android/settings/development/DisableDevSettingsDialogFragment.java
index 803030e..5db2ed4 100644
--- a/src/com/android/settings/development/DisableDevSettingsDialogFragment.java
+++ b/src/com/android/settings/development/DisableDevSettingsDialogFragment.java
@@ -56,15 +56,15 @@
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
- // Reuse the same text of disable_a2dp_hw_offload_dialog.
+ // Reuse the same text of disable_hw_offload_dialog.
// The text is generic enough to be used for turning off Dev options.
return new AlertDialog.Builder(getActivity())
- .setMessage(R.string.bluetooth_disable_a2dp_hw_offload_dialog_message)
- .setTitle(R.string.bluetooth_disable_a2dp_hw_offload_dialog_title)
+ .setMessage(R.string.bluetooth_disable_hw_offload_dialog_message)
+ .setTitle(R.string.bluetooth_disable_hw_offload_dialog_title)
.setPositiveButton(
- R.string.bluetooth_disable_a2dp_hw_offload_dialog_confirm, this)
+ R.string.bluetooth_disable_hw_offload_dialog_confirm, this)
.setNegativeButton(
- R.string.bluetooth_disable_a2dp_hw_offload_dialog_cancel, this)
+ R.string.bluetooth_disable_hw_offload_dialog_cancel, this)
.create();
}
diff --git a/src/com/android/settings/development/IngressRateLimitPreferenceController.java b/src/com/android/settings/development/IngressRateLimitPreferenceController.java
new file mode 100644
index 0000000..2e84aba
--- /dev/null
+++ b/src/com/android/settings/development/IngressRateLimitPreferenceController.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2022 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.development;
+
+import android.content.Context;
+import android.net.ConnectivitySettingsManager;
+import android.util.Log;
+
+import androidx.preference.ListPreference;
+import androidx.preference.Preference;
+
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+/**
+ * Controller for ingress rate limit developer setting.
+ */
+public class IngressRateLimitPreferenceController extends DeveloperOptionsPreferenceController
+ implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
+ private static final String TAG = "IngressRateLimitPreferenceController";
+ private static final String INGRESS_RATE_LIMIT_KEY = "ingress_rate_limit";
+ private static final int RATE_LIMIT_DISABLED = -1;
+
+ public IngressRateLimitPreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return INGRESS_RATE_LIMIT_KEY;
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ final long value = Long.parseLong(newValue.toString());
+ try {
+ ConnectivitySettingsManager.setIngressRateLimitInBytesPerSecond(mContext, value);
+ return true;
+ } catch (IllegalArgumentException e) {
+ Log.e(TAG, "invalid rate limit", e);
+ return false;
+ }
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ final String ingressRateLimit = String.valueOf(
+ ConnectivitySettingsManager.getIngressRateLimitInBytesPerSecond(mContext));
+
+ // verify ingressRateLimit is valid / present in ListPreference; else do nothing.
+ final CharSequence[] entryValues = ((ListPreference) preference).getEntryValues();
+ for (int i = 0; i < entryValues.length; i++) {
+ if (ingressRateLimit.contentEquals(entryValues[i])) {
+ ((ListPreference) preference).setValue(ingressRateLimit);
+ return;
+ }
+ }
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ super.onDeveloperOptionsSwitchDisabled();
+ // disable rate limiting when developer options are disabled
+ ConnectivitySettingsManager.setIngressRateLimitInBytesPerSecond(mContext,
+ RATE_LIMIT_DISABLED);
+ ((ListPreference) mPreference).setValue(String.valueOf(RATE_LIMIT_DISABLED));
+ }
+}
diff --git a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
index 90a86f1..249ee49 100644
--- a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
@@ -617,6 +617,7 @@
return true;
}
+ /** Used for {@link AppBatteryPreferenceController}. */
public static List<BatteryDiffEntry> getBatteryLast24HrUsageData(Context context) {
final long start = System.currentTimeMillis();
final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
@@ -638,6 +639,28 @@
return batteryIndexedMap.get(BatteryChartView.SELECTED_INDEX_ALL);
}
+ /** Used for {@link AppBatteryPreferenceController}. */
+ public static BatteryDiffEntry getBatteryLast24HrUsageData(
+ Context context, String packageName, int userId) {
+ if (packageName == null) {
+ return null;
+ }
+ final List<BatteryDiffEntry> entries = getBatteryLast24HrUsageData(context);
+ if (entries == null) {
+ return null;
+ }
+ for (BatteryDiffEntry entry : entries) {
+ final BatteryHistEntry batteryHistEntry = entry.mBatteryHistEntry;
+ if (batteryHistEntry != null
+ && batteryHistEntry.mConsumerType == ConvertUtils.CONSUMER_TYPE_UID_BATTERY
+ && batteryHistEntry.mUserId == userId
+ && packageName.equals(entry.getPackageName())) {
+ return entry;
+ }
+ }
+ return null;
+ }
+
private static long[] getBatteryHistoryKeys(
final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
final List<Long> batteryHistoryKeyList =
diff --git a/src/com/android/settings/fuelgauge/BatteryDiffEntry.java b/src/com/android/settings/fuelgauge/BatteryDiffEntry.java
index e524e98..ca29cfe 100644
--- a/src/com/android/settings/fuelgauge/BatteryDiffEntry.java
+++ b/src/com/android/settings/fuelgauge/BatteryDiffEntry.java
@@ -25,6 +25,7 @@
import androidx.annotation.VisibleForTesting;
+import com.android.settings.R;
import com.android.settingslib.utils.StringUtil;
import java.util.Comparator;
@@ -52,6 +53,7 @@
public double mConsumePower;
// A BatteryHistEntry corresponding to this diff usage data.
public final BatteryHistEntry mBatteryHistEntry;
+
private double mTotalConsumePower;
private double mPercentOfTotal;
@@ -151,8 +153,13 @@
case ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY:
return true;
case ConvertUtils.CONSUMER_TYPE_UID_BATTERY:
- return isSystemUid((int) mBatteryHistEntry.mUid)
- || mBatteryHistEntry.mIsHidden;
+ if (mBatteryHistEntry.mIsHidden) {
+ return true;
+ }
+ final boolean combineSystemComponents =
+ mContext.getResources().getBoolean(
+ R.bool.config_battery_combine_system_components);
+ return combineSystemComponents && isSystemUid((int) mBatteryHistEntry.mUid);
}
return false;
}
diff --git a/src/com/android/settings/nfc/DefaultPaymentSettings.java b/src/com/android/settings/nfc/DefaultPaymentSettings.java
index 4dceefc..08b843d 100644
--- a/src/com/android/settings/nfc/DefaultPaymentSettings.java
+++ b/src/com/android/settings/nfc/DefaultPaymentSettings.java
@@ -143,7 +143,8 @@
CandidateInfo info, String defaultKey, String systemDefaultKey) {
final NfcPaymentCandidateInfo candidateInfo = (NfcPaymentCandidateInfo) info;
if (candidateInfo.isManagedProfile()) {
- pref.setSummary("Work");
+ final String textWork = getContext().getString(R.string.nfc_work_text);
+ pref.setSummary(textWork);
}
}
diff --git a/src/com/android/settings/nfc/PaymentDefaultDialog.java b/src/com/android/settings/nfc/PaymentDefaultDialog.java
index 75746ce..d333b3d 100644
--- a/src/com/android/settings/nfc/PaymentDefaultDialog.java
+++ b/src/com/android/settings/nfc/PaymentDefaultDialog.java
@@ -59,10 +59,13 @@
CardEmulation.EXTRA_SERVICE_COMPONENT);
String category = intent.getStringExtra(CardEmulation.EXTRA_CATEGORY);
UserHandle userHandle = intent.getParcelableExtra(Intent.EXTRA_USER);
+
+ int userId;
if (userHandle == null) {
- userHandle = UserHandle.CURRENT;
+ userId = UserHandle.myUserId();
+ } else {
+ userId = userHandle.getIdentifier();
}
- int userId = userHandle.getIdentifier();
setResult(RESULT_CANCELED);
if (!buildDialog(component, category, userId)) {
diff --git a/tests/robotests/src/com/android/settings/development/BluetoothA2dpHwOffloadPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BluetoothA2dpHwOffloadPreferenceControllerTest.java
index a1d479f..fcb3ea9 100644
--- a/tests/robotests/src/com/android/settings/development/BluetoothA2dpHwOffloadPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/BluetoothA2dpHwOffloadPreferenceControllerTest.java
@@ -18,6 +18,8 @@
import static com.android.settings.development.BluetoothA2dpHwOffloadPreferenceController
.A2DP_OFFLOAD_DISABLED_PROPERTY;
+import static com.android.settings.development.BluetoothLeAudioHwOffloadPreferenceController
+ .LE_AUDIO_OFFLOAD_DISABLED_PROPERTY;
import static com.google.common.truth.Truth.assertThat;
@@ -62,15 +64,37 @@
}
@Test
- public void onA2dpHwDialogConfirmed_shouldChangeProperty() {
+ public void onA2dpHwDialogConfirmedAsA2dpOffloadDisabled_shouldChangeProperty() {
SystemProperties.set(A2DP_OFFLOAD_DISABLED_PROPERTY, Boolean.toString(false));
+ mController.mChanged = true;
- mController.onA2dpHwDialogConfirmed();
+ mController.onHwOffloadDialogConfirmed();
final boolean mode = SystemProperties.getBoolean(A2DP_OFFLOAD_DISABLED_PROPERTY, false);
assertThat(mode).isTrue();
+ }
- mController.onA2dpHwDialogConfirmed();
- final boolean mode2 = SystemProperties.getBoolean(A2DP_OFFLOAD_DISABLED_PROPERTY, false);
- assertThat(mode2).isFalse();
+ @Test
+ public void onA2dpHwDialogConfirmedAsA2dpOffloadEnabled_shouldChangeProperty() {
+ SystemProperties.set(A2DP_OFFLOAD_DISABLED_PROPERTY, Boolean.toString(true));
+ SystemProperties.set(LE_AUDIO_OFFLOAD_DISABLED_PROPERTY, Boolean.toString(true));
+
+ mController.mChanged = true;
+
+ mController.onHwOffloadDialogConfirmed();
+ final boolean a2dpMode = SystemProperties.getBoolean(A2DP_OFFLOAD_DISABLED_PROPERTY, true);
+ final boolean leAudioMode = SystemProperties
+ .getBoolean(LE_AUDIO_OFFLOAD_DISABLED_PROPERTY, true);
+ assertThat(a2dpMode).isFalse();
+ assertThat(leAudioMode).isFalse();
+ }
+
+ @Test
+ public void onA2dpHwDialogCanceled_shouldNotChangeProperty() {
+ SystemProperties.set(A2DP_OFFLOAD_DISABLED_PROPERTY, Boolean.toString(false));
+ mController.mChanged = true;
+
+ mController.onHwOffloadDialogCanceled();
+ final boolean mode = SystemProperties.getBoolean(A2DP_OFFLOAD_DISABLED_PROPERTY, false);
+ assertThat(mode).isFalse();
}
}
diff --git a/tests/robotests/src/com/android/settings/development/BluetoothGabeldorschePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BluetoothGabeldorschePreferenceControllerTest.java
deleted file mode 100644
index 1916bf2..0000000
--- a/tests/robotests/src/com/android/settings/development/BluetoothGabeldorschePreferenceControllerTest.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.development;
-
-import static com.android.settings.development.BluetoothGabeldorschePreferenceController
- .CURRENT_GD_FLAG;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.provider.DeviceConfig;
-
-import androidx.preference.PreferenceScreen;
-import androidx.preference.SwitchPreference;
-
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-@RunWith(RobolectricTestRunner.class)
-public class BluetoothGabeldorschePreferenceControllerTest {
-
- @Mock
- private SwitchPreference mPreference;
- @Mock
- private PreferenceScreen mPreferenceScreen;
-
- private BluetoothGabeldorschePreferenceController mController;
-
- @Before
- public void setup() {
- MockitoAnnotations.initMocks(this);
- Context context = RuntimeEnvironment.application;
- mController = new BluetoothGabeldorschePreferenceController(context);
- when(mPreferenceScreen.findPreference(mController.getPreferenceKey()))
- .thenReturn(mPreference);
- mController.displayPreference(mPreferenceScreen);
- }
-
- @Test
- @Ignore
- public void onPreferenceChanged_settingEnabled_shouldTurnOnBluetoothGabeldorsche() {
- mController.onPreferenceChange(mPreference, true /* new value */);
-
- boolean enabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_BLUETOOTH,
- CURRENT_GD_FLAG, false /* defaultValue */);
-
- assertThat(enabled).isTrue();
- }
-
- @Test
- @Ignore
- public void onPreferenceChanged_settingDisabled_shouldTurnOffBluetoothGabeldorsche() {
- mController.onPreferenceChange(mPreference, false /* new value */);
-
- boolean enabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_BLUETOOTH,
- CURRENT_GD_FLAG, false /* defaultValue */);
-
- assertThat(enabled).isFalse();
- }
-
- @Test
- @Ignore
- public void updateState_settingEnabled_preferenceShouldBeChecked() {
- DeviceConfig.setProperty(DeviceConfig.NAMESPACE_BLUETOOTH,
- CURRENT_GD_FLAG, "true", false /* makeDefault */);
-
- mController.updateState(mPreference);
-
- verify(mPreference).setChecked(true);
- }
-
- @Test
- @Ignore
- public void updateState_settingDisabled_preferenceShouldNotBeChecked() {
- DeviceConfig.setProperty(DeviceConfig.NAMESPACE_BLUETOOTH,
- CURRENT_GD_FLAG, "false", false /* makeDefault */);
-
- mController.updateState(mPreference);
-
- verify(mPreference).setChecked(false);
- }
-
- @Test
- @Ignore
- public void onDeveloperOptionsDisabled_shouldDisablePreference() {
- mController.onDeveloperOptionsDisabled();
-
- String configStr = DeviceConfig.getProperty(DeviceConfig.NAMESPACE_BLUETOOTH,
- CURRENT_GD_FLAG);
-
- assertThat(configStr).isNull();
- verify(mPreference).setEnabled(false);
- verify(mPreference).setChecked(false);
- }
-}
diff --git a/tests/robotests/src/com/android/settings/development/BluetoothLeAudioHwOffloadPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BluetoothLeAudioHwOffloadPreferenceControllerTest.java
new file mode 100644
index 0000000..c82df40e
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/BluetoothLeAudioHwOffloadPreferenceControllerTest.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2022 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.development;
+
+import static com.android.settings.development.BluetoothLeAudioHwOffloadPreferenceController
+ .LE_AUDIO_OFFLOAD_DISABLED_PROPERTY;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.SystemProperties;
+
+import androidx.preference.PreferenceScreen;
+import androidx.preference.SwitchPreference;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(RobolectricTestRunner.class)
+public class BluetoothLeAudioHwOffloadPreferenceControllerTest {
+
+ @Mock
+ private PreferenceScreen mPreferenceScreen;
+ @Mock
+ private DevelopmentSettingsDashboardFragment mFragment;
+
+ private Context mContext;
+ private SwitchPreference mPreference;
+ private BluetoothLeAudioHwOffloadPreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mPreference = new SwitchPreference(mContext);
+ mController = spy(new BluetoothLeAudioHwOffloadPreferenceController(mContext, mFragment));
+ when(mPreferenceScreen.findPreference(mController.getPreferenceKey()))
+ .thenReturn(mPreference);
+ mController.displayPreference(mPreferenceScreen);
+ }
+
+ @Test
+ public void onLeAudioHwDialogConfirmedAsLeAudioOffloadDisabled_shouldChangeProperty() {
+ SystemProperties.set(LE_AUDIO_OFFLOAD_DISABLED_PROPERTY, Boolean.toString(false));
+ mController.mChanged = true;
+
+ mController.onHwOffloadDialogConfirmed();
+ final boolean mode = SystemProperties.getBoolean(LE_AUDIO_OFFLOAD_DISABLED_PROPERTY, false);
+ assertThat(mode).isTrue();
+ }
+
+ @Test
+ public void onLeAudioHwDialogConfirmedAsLeAudioOffloadEnabled_shouldChangeProperty() {
+ SystemProperties.set(LE_AUDIO_OFFLOAD_DISABLED_PROPERTY, Boolean.toString(true));
+ mController.mChanged = true;
+
+ mController.onHwOffloadDialogConfirmed();
+ final boolean mode2 = SystemProperties.getBoolean(
+ LE_AUDIO_OFFLOAD_DISABLED_PROPERTY, true);
+ assertThat(mode2).isFalse();
+ }
+
+ @Test
+ public void onLeAudioHwDialogCanceled_shouldNotChangeProperty() {
+ SystemProperties.set(LE_AUDIO_OFFLOAD_DISABLED_PROPERTY, Boolean.toString(false));
+ mController.mChanged = true;
+
+ mController.onHwOffloadDialogCanceled();
+ final boolean mode = SystemProperties.getBoolean(LE_AUDIO_OFFLOAD_DISABLED_PROPERTY, false);
+ assertThat(mode).isFalse();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java
index 5e4be68..7db7141 100644
--- a/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java
@@ -208,9 +208,9 @@
assertThat(dialog).isNotNull();
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
assertThat(shadowDialog.getTitle()).isEqualTo(
- mContext.getString(R.string.bluetooth_disable_a2dp_hw_offload_dialog_title));
+ mContext.getString(R.string.bluetooth_disable_hw_offload_dialog_title));
assertThat(shadowDialog.getMessage()).isEqualTo(
- mContext.getString(R.string.bluetooth_disable_a2dp_hw_offload_dialog_message));
+ mContext.getString(R.string.bluetooth_disable_hw_offload_dialog_message));
}
@Test
diff --git a/tests/robotests/src/com/android/settings/development/IngressRateLimitPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/IngressRateLimitPreferenceControllerTest.java
new file mode 100644
index 0000000..0f85a14
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/IngressRateLimitPreferenceControllerTest.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2022 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.development;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.net.ConnectivitySettingsManager;
+
+import androidx.preference.ListPreference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(RobolectricTestRunner.class)
+public class IngressRateLimitPreferenceControllerTest {
+ private Context mContext = RuntimeEnvironment.application;
+ private ListPreference mPreference;
+ private IngressRateLimitPreferenceController mController;
+
+ @Mock
+ private PreferenceScreen mPreferenceScreen;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mPreference = new ListPreference(mContext);
+ mPreference.setEntries(R.array.ingress_rate_limit_entries);
+ mPreference.setEntryValues(R.array.ingress_rate_limit_values);
+
+ mController = new IngressRateLimitPreferenceController(mContext);
+ when(mPreferenceScreen.findPreference(mController.getPreferenceKey())).thenReturn(
+ mPreference);
+ mController.displayPreference(mPreferenceScreen);
+ }
+
+ @Test
+ public void onPreferenceChanged_select5Mbits_shouldEnableIngressRateLimit() {
+ final long newRateLimit = 625000; // 5mbit == 625000 B/s
+ assertThat(mController.onPreferenceChange(mPreference, newRateLimit)).isTrue();
+
+ final long configuredRateLimit =
+ ConnectivitySettingsManager.getIngressRateLimitInBytesPerSecond(mContext);
+ assertThat(configuredRateLimit).isEqualTo(newRateLimit);
+ }
+
+ @Test
+ public void onPreferenceChanged_selectDisabled_shouldDisableIngressRateLimit() {
+ final long disabledRateLimit = -1; // -1 == disabled
+ assertThat(mController.onPreferenceChange(mPreference, disabledRateLimit)).isTrue();
+
+ final long configuredRateLimit =
+ ConnectivitySettingsManager.getIngressRateLimitInBytesPerSecond(mContext);
+ assertThat(configuredRateLimit).isEqualTo(disabledRateLimit);
+ }
+
+ @Test
+ public void onPreferenceChanged_invalidValue_returnsFalse() {
+ final long invalidRateLimit = -123;
+ assertThat(mController.onPreferenceChange(mPreference, invalidRateLimit)).isFalse();
+ }
+
+ @Test
+ public void updateState_preferenceShouldBeSelected() {
+ final long newRateLimit = 625000; // 5mbit == 625000 B/s
+ ConnectivitySettingsManager.setIngressRateLimitInBytesPerSecond(mContext, newRateLimit);
+ mController.updateState(mPreference);
+ assertThat(Long.parseLong(mPreference.getValue())).isEqualTo(newRateLimit);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() {
+ final long newRateLimit = 625000; // 5mbit == 625000 B/s
+ ConnectivitySettingsManager.setIngressRateLimitInBytesPerSecond(mContext, newRateLimit);
+ mController.updateState(mPreference);
+
+ mController.onDeveloperOptionsSwitchDisabled();
+ assertThat(Long.parseLong(mPreference.getValue())).isEqualTo(-1);
+ assertThat(ConnectivitySettingsManager.getIngressRateLimitInBytesPerSecond(
+ mContext)).isEqualTo(-1);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryDiffEntryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryDiffEntryTest.java
index b1d8f0d..13ce29e 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryDiffEntryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryDiffEntryTest.java
@@ -349,12 +349,12 @@
}
@Test
- public void testIsSystemEntry_uidBatteryWithSystemProcess_returnTrue() {
+ public void testIsSystemEntry_uidBatteryWithSystemProcess_returnFalse() {
final BatteryDiffEntry entry =
createBatteryDiffEntry(
ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
/*uid=*/ 1230, /*isHidden=*/ false);
- assertThat(entry.isSystemEntry()).isTrue();
+ assertThat(entry.isSystemEntry()).isFalse();
}
@Test
diff --git a/tests/unit/src/com/android/settings/accessibility/HighTextContrastPreferenceControllerTest.java b/tests/unit/src/com/android/settings/accessibility/HighTextContrastPreferenceControllerTest.java
index 1ada051..9c4df36 100644
--- a/tests/unit/src/com/android/settings/accessibility/HighTextContrastPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/accessibility/HighTextContrastPreferenceControllerTest.java
@@ -19,8 +19,11 @@
import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
+import android.os.Looper;
import android.provider.Settings;
+import androidx.preference.PreferenceManager;
+import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreference;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -37,6 +40,7 @@
@RunWith(AndroidJUnit4.class)
public class HighTextContrastPreferenceControllerTest {
+ private static final String PREF_KEY = "text_contrast";
private static final int ON = 1;
private static final int OFF = 0;
private static final int UNKNOWN = -1;
@@ -44,12 +48,20 @@
private Context mContext;
private SwitchPreference mPreference;
private HighTextContrastPreferenceController mController;
+ private PreferenceScreen mScreen;
@Before
public void setUp() {
mContext = ApplicationProvider.getApplicationContext();
+ if (Looper.myLooper() == null) {
+ Looper.prepare();
+ }
+ final PreferenceManager preferenceManager = new PreferenceManager(mContext);
+ mScreen = preferenceManager.createPreferenceScreen(mContext);
mPreference = new SwitchPreference(mContext);
- mController = new HighTextContrastPreferenceController(mContext, "text_contrast");
+ mPreference.setKey(PREF_KEY);
+ mScreen.addPreference(mPreference);
+ mController = new HighTextContrastPreferenceController(mContext, PREF_KEY);
}
@Test
@@ -99,10 +111,13 @@
@Test
public void resetState_shouldDisableTextContrast() {
+ mController.displayPreference(mScreen);
mController.setChecked(true);
+ mPreference.setChecked(true);
mController.resetState();
+ assertThat(mPreference.isChecked()).isFalse();
assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
Settings.Secure.ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED, UNKNOWN)).isEqualTo(OFF);
}