Snap for 12580585 from 2fdca61ce4 to 25Q1-release

Change-Id: Ie71c37f1bd466ff9c65edf8e11d237c7ae894435
This commit is contained in:
Android Build Coastguard Worker
2024-10-30 23:23:53 +00:00
44 changed files with 734 additions and 206 deletions

View File

@@ -35,6 +35,17 @@
android:layout_marginEnd="20dp"
android:minHeight="48dp" />
<TextView
android:id="@+id/edit_alert_message"
style="?android:attr/textAppearanceSmall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
android:visibility="gone"
android:text="@string/audio_streams_main_page_password_dialog_format_alert"
android:textColor="?android:attr/colorError" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2024 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingTop="0dp"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
</LinearLayout>

View File

@@ -13738,8 +13738,10 @@
<string name="audio_streams_main_page_password_dialog_join_button">Listen to stream</string>
<!-- Le audio streams main page qr code scanner summary [CHAR LIMIT=NONE] -->
<string name="audio_streams_main_page_qr_code_scanner_summary">Scan an audio stream QR code to listen with <xliff:g example="LE headset" id="device_name">%1$s</xliff:g></string>
<!-- Le audio streams password dialog [CHAR LIMIT=NONE] -->
<!-- Le audio streams password dialog not editable message [CHAR LIMIT=NONE] -->
<string name="audio_streams_main_page_password_dialog_cannot_edit">Can\u0027t edit password while sharing. To change the password, first turn off audio sharing.</string>
<!-- Le audio streams password dialog password format alert [CHAR LIMIT=NONE] -->
<string name="audio_streams_main_page_password_dialog_format_alert">Your password must contain 4-16 characters and use only letters, numbers and symbols</string>
<!-- Text for audio sharing qrcode scanner [CHAR LIMIT=none]-->
<string name="audio_streams_qr_code_scanner_label">QR code scanner</string>
<!-- Learn more link for audio sharing qrcode [CHAR LIMIT=none]-->

View File

@@ -29,7 +29,7 @@
settings:lottie_rawRes="@drawable/ic_enhanced_connectivity"/>
<com.android.settingslib.widget.MainSwitchPreference
android:key="adaptive_connectivity"
android:key="adaptive_connectivity_enabled"
android:title="@string/adaptive_connectivity_main_switch_title"
settings:controller="com.android.settings.network.AdaptiveConnectivityTogglePreferenceController"/>

View File

@@ -24,22 +24,22 @@
android:title="@string/terms_of_address_intro_title"
android:persistent="false"/>
<com.android.settings.widget.TickButtonPreference
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="key_terms_of_address_not_specified"
android:title="@string/terms_of_address_not_specified"
settings:controller="com.android.settings.localepicker.TermsOfAddressNotSpecifiedController"/>
<com.android.settings.widget.TickButtonPreference
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="key_terms_of_address_feminine"
android:title="@string/terms_of_address_feminine"
settings:controller="com.android.settings.localepicker.TermsOfAddressFeminineController"/>
<com.android.settings.widget.TickButtonPreference
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="key_terms_of_address_masculine"
android:title="@string/terms_of_address_masculine"
settings:controller="com.android.settings.localepicker.TermsOfAddressMasculineController"/>
<com.android.settings.widget.TickButtonPreference
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="key_terms_of_address_neutral"
android:title="@string/terms_of_address_neutral"
settings:controller="com.android.settings.localepicker.TermsOfAddressNeutralController"/>

View File

@@ -24,6 +24,7 @@ import android.hardware.fingerprint.FingerprintManager;
import android.net.Uri;
import android.provider.Settings;
import android.util.FeatureFlagUtils;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -58,8 +59,9 @@ import java.util.List;
)
public class SettingsApplication extends Application {
private static final String TAG = "SettingsApplication";
private WeakReference<SettingsHomepageActivity> mHomeActivity = new WeakReference<>(null);
@Nullable private BiometricsEnvironment mBiometricsEnvironment;
@Nullable volatile private BiometricsEnvironment mBiometricsEnvironment;
@Override
protected void attachBaseContext(Context base) {
@@ -138,20 +140,23 @@ public class SettingsApplication extends Application {
@Nullable
public BiometricsEnvironment getBiometricEnvironment() {
if (Flags.fingerprintV2Enrollment()) {
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
final FingerprintManager fpm = getSystemService(FingerprintManager.class);
if (mBiometricsEnvironment == null) {
mBiometricsEnvironment = new BiometricsEnvironment(this, fpm);
BiometricsEnvironment localEnvironment = mBiometricsEnvironment;
if (localEnvironment == null) {
synchronized (this) {
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
return null;
}
final FingerprintManager fpm = getSystemService(FingerprintManager.class);
localEnvironment = mBiometricsEnvironment;
if (fpm != null && localEnvironment == null) {
mBiometricsEnvironment = localEnvironment = new BiometricsEnvironment(this,
fpm);
} else {
Log.e(TAG, "Error when creating environment, fingerprint manager was null");
}
return mBiometricsEnvironment;
} else {
return null;
}
}
return null;
return localEnvironment;
}
@Override

View File

@@ -26,6 +26,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceCategory;
import com.android.internal.accessibility.AccessibilityShortcutController;
@@ -118,6 +119,21 @@ public class AccessibilityHearingAidsFragment extends AccessibilityShortcutPrefe
return getText(R.string.accessibility_hearing_device_shortcut_title);
}
@VisibleForTesting
static boolean isPageSearchEnabled(Context context) {
final HearingAidHelper mHelper = new HearingAidHelper(context);
return mHelper.isHearingAidSupported();
}
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.accessibility_hearing_aids);
new BaseSearchIndexProvider(R.xml.accessibility_hearing_aids) {
@Override
protected boolean isPageSearchEnabled(Context context) {
if (Flags.fixA11ySettingsSearch()) {
return AccessibilityHearingAidsFragment.isPageSearchEnabled(context);
} else {
return super.isPageSearchEnabled(context);
}
}
};
}

View File

@@ -148,8 +148,16 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(SetupWizardUtils.getTheme(this, getIntent()));
ThemeHelper.trySetDynamicColor(this);
if (ThemeHelper.shouldApplyGlifExpressiveStyle(getApplicationContext())) {
if (!ThemeHelper.trySetSuwTheme(this)) {
setTheme(ThemeHelper.getSuwDefaultTheme(getApplicationContext()));
ThemeHelper.trySetDynamicColor(this);
}
} else {
setTheme(SetupWizardUtils.getTheme(this, getIntent()));
ThemeHelper.trySetDynamicColor(this);
}
mChallenge = getIntent().getLongExtra(EXTRA_KEY_CHALLENGE, -1L);
mSensorId = getIntent().getIntExtra(EXTRA_KEY_SENSOR_ID, -1);
// Don't need to retrieve the HAT if it already exists. In some cases, the extras do not

View File

@@ -16,6 +16,7 @@
package com.android.settings.biometrics.fingerprint2.data.repository
import android.annotation.SuppressLint
import android.hardware.biometrics.ComponentInfoInternal
import android.hardware.biometrics.SensorLocationInternal
import android.hardware.biometrics.SensorProperties
@@ -23,18 +24,24 @@ import android.hardware.fingerprint.FingerprintManager
import android.hardware.fingerprint.FingerprintSensorProperties
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal
import android.hardware.fingerprint.IFingerprintAuthenticatorsRegisteredCallback
import android.util.Log
import com.android.systemui.biometrics.shared.model.FingerprintSensor
import com.android.systemui.biometrics.shared.model.toFingerprintSensor
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.shareIn
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.transform
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
/**
@@ -56,17 +63,24 @@ class FingerprintSensorRepositoryImpl(
activityScope: CoroutineScope,
) : FingerprintSensorRepository {
private val fingerprintPropsInternal: Flow<FingerprintSensorPropertiesInternal> =
callbackFlow {
private val _fingerprintSensor = MutableSharedFlow<FingerprintSensor>(replay = 1)
override val fingerprintSensor: Flow<FingerprintSensor>
get() = _fingerprintSensor.asSharedFlow()
init {
activityScope.launch {
callbackFlow{
val callback =
object : IFingerprintAuthenticatorsRegisteredCallback.Stub() {
@SuppressLint("LongLogTag")
override fun onAllAuthenticatorsRegistered(
sensors: List<FingerprintSensorPropertiesInternal>
) {
if (sensors.isEmpty()) {
trySend(DEFAULT_PROPS)
Log.e(TAG, "empty sensors from onAllAuthenticatorsRegistered")
} else {
trySend(sensors[0])
channel.close()
}
}
}
@@ -74,27 +88,16 @@ class FingerprintSensorRepositoryImpl(
fingerprintManager.addAuthenticatorsRegisteredCallback(callback)
}
awaitClose {}
}.collect {
_fingerprintSensor.emit(it.toFingerprintSensor())
}
.stateIn(activityScope, started = SharingStarted.Eagerly, initialValue = DEFAULT_PROPS)
override val fingerprintSensor: Flow<FingerprintSensor> =
fingerprintPropsInternal.transform { emit(it.toFingerprintSensor()) }
}
}
override val hasSideFps: Flow<Boolean> =
fingerprintSensor.flatMapLatest { flow { emit(fingerprintManager.isPowerbuttonFps()) } }
companion object {
private val DEFAULT_PROPS =
FingerprintSensorPropertiesInternal(
-1 /* sensorId */,
SensorProperties.STRENGTH_CONVENIENCE,
0 /* maxEnrollmentsPerUser */,
listOf<ComponentInfoInternal>(),
FingerprintSensorProperties.TYPE_UNKNOWN,
false /* halControlsIllumination */,
true /* resetLockoutRequiresHardwareAuthToken */,
listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT),
)
private companion object {
const val TAG = "FingerprintSensorRepository"
}
}

View File

@@ -38,6 +38,7 @@ import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.flags.Flags;
import com.android.settingslib.bluetooth.A2dpProfile;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.LeAudioProfile;
@@ -134,6 +135,9 @@ public class BluetoothDetailsAudioDeviceTypeController extends BluetoothDetailsC
@Override
protected void init(PreferenceScreen screen) {
mProfilesContainer = screen.findPreference(getPreferenceKey());
if (Flags.enableBluetoothDeviceDetailsPolish()) {
mProfilesContainer.setLayoutResource(R.layout.preference_category_bluetooth_no_padding);
}
refresh();
}

View File

@@ -96,6 +96,7 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
new HashMap<String, List<CachedBluetoothDevice>>();
private boolean mIsLeAudioToggleEnabled = false;
private boolean mIsLeAudioOnlyDevice = false;
private boolean mHasExtraSpace;
@VisibleForTesting
PreferenceCategory mProfilesContainer;
@@ -106,7 +107,8 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
LocalBluetoothManager manager,
CachedBluetoothDevice device,
Lifecycle lifecycle,
@Nullable List<String> invisibleProfiles) {
@Nullable List<String> invisibleProfiles,
boolean hasExtraSpace) {
super(context, fragment, device, lifecycle);
mManager = manager;
mProfileManager = mManager.getProfileManager();
@@ -115,12 +117,17 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
if (invisibleProfiles != null) {
mInvisibleProfiles = Set.copyOf(invisibleProfiles);
}
mHasExtraSpace = hasExtraSpace;
}
@Override
protected void init(PreferenceScreen screen) {
mProfilesContainer = (PreferenceCategory)screen.findPreference(getPreferenceKey());
mProfilesContainer.setLayoutResource(R.layout.preference_bluetooth_profile_category);
if (mHasExtraSpace) {
mProfilesContainer.setLayoutResource(R.layout.preference_bluetooth_profile_category);
} else {
mProfilesContainer.setLayoutResource(R.layout.preference_category_bluetooth_no_padding);
}
// Call refresh here even though it will get called later in onResume, to avoid the
// list of switches appearing to "pop" into the page.
refresh();
@@ -609,7 +616,11 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
Preference preference = mProfilesContainer.findPreference(KEY_BOTTOM_PREFERENCE);
if (preference == null) {
preference = new Preference(mContext);
preference.setLayoutResource(R.layout.preference_bluetooth_profile_category);
if (mHasExtraSpace) {
preference.setLayoutResource(R.layout.preference_bluetooth_profile_category);
} else {
preference.setLayoutResource(R.layout.preference_category_bluetooth_no_padding);
}
preference.setEnabled(false);
preference.setKey(KEY_BOTTOM_PREFERENCE);
preference.setOrder(ORDINAL);

View File

@@ -458,7 +458,7 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
controllers.add(new BluetoothDetailsSpatialAudioController(context, this, mCachedDevice,
lifecycle));
controllers.add(new BluetoothDetailsProfilesController(context, this, mManager,
mCachedDevice, lifecycle, invisibleProfiles));
mCachedDevice, lifecycle, invisibleProfiles, invisibleProfiles == null));
controllers.add(new BluetoothDetailsMacAddressController(context, this, mCachedDevice,
lifecycle));
controllers.add(new StylusDevicesController(context, mInputDevice, mCachedDevice,

View File

@@ -143,6 +143,7 @@ class DeviceDetailsMoreSettingsFragment : DashboardFragment() {
formatter.getInvisibleBluetoothProfiles(
FragmentTypeModel.DeviceDetailsMoreSettingsFragment
),
false,
),
BluetoothDetailsAudioDeviceTypeController(
context,

View File

@@ -41,6 +41,7 @@ public class AudioSharingPasswordPreference extends ValidatedEditTextPreference
@Nullable private EditText mEditText;
@Nullable private CheckBox mCheckBox;
@Nullable private View mDialogMessage;
@Nullable private View mEditTextFormatAlert;
private boolean mEditable = true;
interface OnDialogEventListener {
@@ -77,6 +78,7 @@ public class AudioSharingPasswordPreference extends ValidatedEditTextPreference
mEditText = view.findViewById(android.R.id.edit);
mCheckBox = view.findViewById(R.id.audio_sharing_stream_password_checkbox);
mDialogMessage = view.findViewById(android.R.id.message);
mEditTextFormatAlert = view.findViewById(R.id.edit_alert_message);
if (mEditText == null || mCheckBox == null || mDialogMessage == null) {
Log.w(TAG, "onBindDialogView() : Invalid layout");
@@ -123,6 +125,14 @@ public class AudioSharingPasswordPreference extends ValidatedEditTextPreference
mDialogMessage.setVisibility(editable ? GONE : VISIBLE);
}
void showEditTextFormatAlert(boolean show) {
if (mEditTextFormatAlert == null) {
Log.w(TAG, "showEditTextFormatAlert() : Invalid layout");
return;
}
mEditTextFormatAlert.setVisibility(show ? VISIBLE : GONE);
}
void setChecked(boolean checked) {
if (mCheckBox == null) {
Log.w(TAG, "setChecked() : Invalid layout");

View File

@@ -136,7 +136,11 @@ public class AudioSharingPasswordPreferenceController extends BasePreferenceCont
@Override
public boolean isTextValid(String value) {
return mAudioSharingPasswordValidator.isTextValid(value);
boolean isValid = mAudioSharingPasswordValidator.isTextValid(value);
if (mPreference != null) {
mPreference.showEditTextFormatAlert(!isValid);
}
return isValid;
}
@Override

View File

@@ -38,7 +38,7 @@ import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
public class AudioSharingReceiver extends BroadcastReceiver {
private static final String TAG = "AudioSharingNotification";
private static final String TAG = "AudioSharingReceiver";
private static final String ACTION_LE_AUDIO_SHARING_SETTINGS =
"com.android.settings.BLUETOOTH_AUDIO_SHARING_SETTINGS";
private static final String ACTION_LE_AUDIO_SHARING_STOP =
@@ -49,10 +49,6 @@ public class AudioSharingReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (!BluetoothUtils.isAudioSharingEnabled()) {
Log.w(TAG, "Skip handling received intent, flag is off.");
return;
}
String action = intent.getAction();
if (action == null) {
Log.w(TAG, "Received unexpected intent with null action.");
@@ -66,13 +62,22 @@ public class AudioSharingReceiver extends BroadcastReceiver {
intent.getIntExtra(
LocalBluetoothLeBroadcast.EXTRA_LE_AUDIO_SHARING_STATE, -1);
if (state == LocalBluetoothLeBroadcast.BROADCAST_STATE_ON) {
if (!BluetoothUtils.isAudioSharingEnabled()) {
Log.w(TAG, "Skip showSharingNotification, feature disabled.");
return;
}
showSharingNotification(context);
metricsFeatureProvider.action(
context, SettingsEnums.ACTION_SHOW_AUDIO_SHARING_NOTIFICATION);
} else if (state == LocalBluetoothLeBroadcast.BROADCAST_STATE_OFF) {
// TODO: check BluetoothUtils#isAudioSharingEnabled() till BluetoothAdapter#
// isLeAudioBroadcastSourceSupported() and BluetoothAdapter#
// isLeAudioBroadcastAssistantSupported() always return FEATURE_SUPPORTED
// or FEATURE_NOT_SUPPORTED when BT and BLE off
cancelSharingNotification(context);
metricsFeatureProvider.action(
context, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION);
context, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
LocalBluetoothLeBroadcast.ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
} else {
Log.w(
TAG,
@@ -80,16 +85,24 @@ public class AudioSharingReceiver extends BroadcastReceiver {
}
break;
case ACTION_LE_AUDIO_SHARING_STOP:
LocalBluetoothManager manager = Utils.getLocalBtManager(context);
if (BluetoothUtils.isBroadcasting(manager)) {
AudioSharingUtils.stopBroadcasting(manager);
metricsFeatureProvider.action(
context, SettingsEnums.ACTION_STOP_AUDIO_SHARING_FROM_NOTIFICATION);
} else {
cancelSharingNotification(context);
metricsFeatureProvider.action(
context, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION);
if (BluetoothUtils.isAudioSharingEnabled()) {
LocalBluetoothManager manager = Utils.getLocalBtManager(context);
if (BluetoothUtils.isBroadcasting(manager)) {
AudioSharingUtils.stopBroadcasting(manager);
metricsFeatureProvider.action(
context, SettingsEnums.ACTION_STOP_AUDIO_SHARING_FROM_NOTIFICATION);
return;
}
}
Log.w(TAG, "cancelSharingNotification, feature disabled or not in broadcast.");
// TODO: check BluetoothUtils#isAudioSharingEnabled() till BluetoothAdapter#
// isLeAudioBroadcastSourceSupported() and BluetoothAdapter#
// isLeAudioBroadcastAssistantSupported() always return FEATURE_SUPPORTED
// or FEATURE_NOT_SUPPORTED when BT and BLE off
cancelSharingNotification(context);
metricsFeatureProvider.action(
context, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
ACTION_LE_AUDIO_SHARING_STOP);
break;
default:
Log.w(TAG, "Received unexpected intent " + intent.getAction());
@@ -129,15 +142,15 @@ public class AudioSharingReceiver extends BroadcastReceiver {
PendingIntent.FLAG_IMMUTABLE);
NotificationCompat.Action stopAction =
new NotificationCompat.Action.Builder(
0,
context.getString(R.string.audio_sharing_stop_button_label),
stopPendingIntent)
0,
context.getString(R.string.audio_sharing_stop_button_label),
stopPendingIntent)
.build();
NotificationCompat.Action settingsAction =
new NotificationCompat.Action.Builder(
0,
context.getString(R.string.audio_sharing_settings_button_label),
settingsPendingIntent)
0,
context.getString(R.string.audio_sharing_settings_button_label),
settingsPendingIntent)
.build();
final Bundle extras = new Bundle();
extras.putString(

View File

@@ -34,8 +34,6 @@ class DataSaverScreen : PreferenceScreenCreator {
override val icon: Int
get() = R.drawable.ic_settings_data_usage
override fun order(context: Context) = 10
override fun isFlagEnabled(context: Context) = Flags.catalystRestrictBackgroundParentEntry()
override fun fragmentClass() = DataSaverSummary::class.java

View File

@@ -49,6 +49,7 @@ class DisplayScreen :
override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {
+DarkModeScreen.KEY
+PeakRefreshRateSwitchPreference()
}
override fun isAvailable(context: Context) =

View File

@@ -40,6 +40,7 @@ import com.android.settingslib.core.lifecycle.events.OnStop;
import java.util.concurrent.Executor;
// LINT.IfChange
public class PeakRefreshRatePreferenceController extends TogglePreferenceController
implements LifecycleObserver, OnStart, OnStop {
@@ -196,3 +197,4 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl
return defaultPeakRefreshRate;
}
}
// LINT.ThenChange(PeakRefreshRateSwitchPreference.kt)

View File

@@ -0,0 +1,120 @@
/*
* Copyright (C) 2024 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.display
import android.content.Context
import android.hardware.display.DisplayManager
import android.provider.DeviceConfig
import android.util.Log
import com.android.internal.display.RefreshRateSettingsUtils.DEFAULT_REFRESH_RATE
import com.android.internal.display.RefreshRateSettingsUtils.findHighestRefreshRateAmongAllDisplays
import com.android.internal.display.RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay
import com.android.server.display.feature.flags.Flags
import com.android.settings.R
import com.android.settingslib.datastore.HandlerExecutor
import com.android.settingslib.datastore.SettingsSystemStore
import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.PreferenceLifecycleContext
import com.android.settingslib.metadata.PreferenceLifecycleProvider
import com.android.settingslib.metadata.PreferenceSummaryProvider
import com.android.settingslib.metadata.SwitchPreference
import com.android.settingslib.preference.SwitchPreferenceBinding
import kotlin.math.roundToInt
// LINT.IfChange
class PeakRefreshRateSwitchPreference :
SwitchPreference("peak_refresh_rate", R.string.peak_refresh_rate_title),
SwitchPreferenceBinding,
PreferenceAvailabilityProvider,
PreferenceSummaryProvider,
PreferenceLifecycleProvider {
private var propertiesChangedListener: DeviceConfig.OnPropertiesChangedListener? = null
override fun storage(context: Context) = SettingsSystemStore.get(context)
override fun isAvailable(context: Context) =
context.resources.getBoolean(R.bool.config_show_smooth_display) &&
(getPeakRefreshRate(context) > DEFAULT_REFRESH_RATE)
override fun getSummary(context: Context) =
context.getString(
R.string.peak_refresh_rate_summary,
getPeakRefreshRate(context).roundToInt(),
)
override fun onStart(context: PreferenceLifecycleContext) {
val listener =
object : DeviceConfig.OnPropertiesChangedListener {
// Got notified if any property has been changed in NAMESPACE_DISPLAY_MANAGER. The
// KEY_PEAK_REFRESH_RATE_DEFAULT value could be added, changed, removed or
// unchanged.
// Just force a UI update for any case.
override fun onPropertiesChanged(properties: DeviceConfig.Properties) =
context.notifyPreferenceChange(this@PeakRefreshRateSwitchPreference)
}
propertiesChangedListener = listener
DeviceConfig.addOnPropertiesChangedListener(
DeviceConfig.NAMESPACE_DISPLAY_MANAGER,
HandlerExecutor.main,
listener,
)
}
override fun onStop(context: PreferenceLifecycleContext) {
propertiesChangedListener?.let {
DeviceConfig.removeOnPropertiesChangedListener(it)
propertiesChangedListener = null
}
}
private fun getPeakRefreshRate(context: Context): Float =
Math.round(
when {
Flags.backUpSmoothDisplayAndForcePeakRefreshRate() ->
findHighestRefreshRateAmongAllDisplays(context)
else -> findHighestRefreshRateForDefaultDisplay(context)
}
)
.toFloat()
private fun getDefaultPeakRefreshRate(context: Context): Float {
var defaultPeakRefreshRate =
DeviceConfig.getFloat(
DeviceConfig.NAMESPACE_DISPLAY_MANAGER,
DisplayManager.DeviceConfig.KEY_PEAK_REFRESH_RATE_DEFAULT,
INVALIDATE_REFRESH_RATE,
)
if (defaultPeakRefreshRate == INVALIDATE_REFRESH_RATE) {
defaultPeakRefreshRate =
context.resources
.getInteger(com.android.internal.R.integer.config_defaultPeakRefreshRate)
.toFloat()
}
Log.d(TAG, "DeviceConfig getDefaultPeakRefreshRate : $defaultPeakRefreshRate")
return defaultPeakRefreshRate
}
companion object {
private const val TAG: String = "PeakRefreshRateSwitchPreference"
private const val INVALIDATE_REFRESH_RATE: Float = -1f
}
}
// LINT.ThenChange(PeakRefreshRatePreferenceController.java)

View File

@@ -23,8 +23,8 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.TickButtonPreference;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.widget.SelectorWithWidgetPreference;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
@@ -32,9 +32,9 @@ import java.util.concurrent.Executors;
public abstract class TermsOfAddressBaseController extends BasePreferenceController {
private static final Executor sExecutor = Executors.newSingleThreadExecutor();
private PreferenceScreen mPreferenceScreen;
private MetricsFeatureProvider mMetricsFeatureProvider;
private TickButtonPreference mPreference;
private SelectorWithWidgetPreference mPreference;
private TermsOfAddressHelper mTermsOfAddressHelper;
public TermsOfAddressBaseController(Context context, String preferenceKey) {
@@ -49,34 +49,17 @@ public abstract class TermsOfAddressBaseController extends BasePreferenceControl
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
mPreferenceScreen = screen;
mPreference = screen.findPreference(getPreferenceKey());
mPreference.setOnPreferenceClickListener(clickedPref -> {
mPreference.setChecked(
mTermsOfAddressHelper.getSystemGrammaticalGender() == getGrammaticalGenderType());
mPreference.setOnClickListener(v -> {
sExecutor.execute(
() -> {
mTermsOfAddressHelper.setSystemGrammaticalGender(
getGrammaticalGenderType());
});
setSelected(mPreference);
mMetricsFeatureProvider.action(mContext, getMetricsActionKey());
return true;
});
updatePreferences();
}
private void setSelected(TickButtonPreference preference) {
for (int i = 1; i < mPreferenceScreen.getPreferenceCount(); i++) {
TickButtonPreference pref = (TickButtonPreference) mPreferenceScreen.getPreference(i);
pref.setSelected(pref.getKey().equals(preference.getKey()));
}
}
private void updatePreferences() {
if (mPreference == null) {
return;
}
mPreference.setSelected(
mTermsOfAddressHelper.getSystemGrammaticalGender() == getGrammaticalGenderType());
}
@Override

View File

@@ -35,7 +35,9 @@ class AdaptiveConnectivityScreen : PreferenceScreenCreator {
override fun fragmentClass() = AdaptiveConnectivitySettings::class.java
override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {}
override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {
+AdaptiveConnectivityTogglePreference()
}
override fun hasCompleteHierarchy() = false

View File

@@ -0,0 +1,53 @@
/*
* Copyright (C) 2024 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.network
import android.content.Context
import android.net.wifi.WifiManager
import android.provider.Settings.Secure.ADAPTIVE_CONNECTIVITY_ENABLED
import androidx.preference.Preference
import com.android.settings.R
import com.android.settingslib.datastore.SettingsSecureStore
import com.android.settingslib.metadata.MainSwitchPreference
import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.preference.MainSwitchPreferenceBinding
// LINT.IfChange
class AdaptiveConnectivityTogglePreference :
MainSwitchPreference(
ADAPTIVE_CONNECTIVITY_ENABLED,
R.string.adaptive_connectivity_main_switch_title,
),
MainSwitchPreferenceBinding,
Preference.OnPreferenceChangeListener {
override fun storage(context: Context) = SettingsSecureStore.get(context)
override fun bind(preference: Preference, metadata: PreferenceMetadata) {
super.bind(preference, metadata)
preference.onPreferenceChangeListener = this
}
override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
val isChecked = newValue as Boolean
preference.context
.getSystemService(WifiManager::class.java)
?.setWifiScoringEnabled(isChecked)
return true
}
}
// LINT.ThenChange(AdaptiveConnectivityTogglePreferenceController.java)

View File

@@ -29,6 +29,7 @@ import com.android.settings.widget.SettingsMainSwitchPreferenceController;
* {@link SettingsMainSwitchPreferenceController}
* that controls whether Adaptive connectivity option is enabled.
*/
// LINT.IfChange
public class AdaptiveConnectivityTogglePreferenceController extends
SettingsMainSwitchPreferenceController {
@@ -69,3 +70,4 @@ public class AdaptiveConnectivityTogglePreferenceController extends
return R.string.menu_key_network;
}
}
// LINT.ThenChange(AdaptiveConnectivityTogglePreference.kt)

View File

@@ -22,6 +22,7 @@ import android.telephony.CarrierConfigManager
import android.telephony.NetworkRegistrationInfo
import android.telephony.TelephonyManager
import android.telephony.satellite.SatelliteManager
import android.util.Log
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope
@@ -92,6 +93,11 @@ class NetworkSelectRepository(context: Context, private val subId: Int) {
* Update satellite PLMNs from the satellite framework.
*/
private fun getSatellitePlmns(): List<String> {
if (satelliteManager == null) {
Log.d(TAG, "SatelliteManager is null")
return emptyList()
}
val config = carrierConfigManager.getConfigForSubId(
subId,
CarrierConfigManager.KEY_REMOVE_SATELLITE_PLMN_IN_MANUAL_NETWORK_SCAN_BOOL
@@ -104,7 +110,11 @@ class NetworkSelectRepository(context: Context, private val subId: Int) {
return if (shouldFilter) {
satelliteManager.getSatellitePlmnsForCarrier(subId)
} else {
emptyList();
emptyList()
}
}
private companion object {
private const val TAG = "NetworkSelectRepository"
}
}

View File

@@ -52,8 +52,6 @@ open class CallVolumePreference :
override fun getIcon(context: Context) = R.drawable.ic_local_phone_24_lib
override fun order(context: Context) = -170
override fun isAvailable(context: Context) =
context.resources.getBoolean(R.bool.config_show_call_volume) &&
!createAudioHelper(context).isSingleVolume()

View File

@@ -49,8 +49,8 @@ class SoundScreen : PreferenceScreenCreator, PreferenceIconProvider {
override fun getPreferenceHierarchy(context: Context) =
preferenceHierarchy(this) {
+CallVolumePreference()
+DialPadTonePreference()
+CallVolumePreference() order -170
+DialPadTonePreference() order -50
}
companion object {

View File

@@ -66,10 +66,13 @@ import com.android.internal.widget.LockscreenCredential;
import com.android.internal.widget.TextViewInputDisabler;
import com.android.settings.R;
import com.android.settings.SetupRedactionInterstitial;
import com.android.settings.SetupWizardUtils;
import com.android.settings.Utils;
import com.android.settingslib.animation.AppearAnimationUtils;
import com.android.settingslib.animation.DisappearAnimationUtils;
import com.google.android.setupdesign.util.ThemeHelper;
import java.util.ArrayList;
public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
@@ -85,6 +88,18 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
public static class InternalActivity extends ConfirmLockPassword {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (ThemeHelper.shouldApplyGlifExpressiveStyle(getApplicationContext())) {
if (!ThemeHelper.trySetSuwTheme(this)) {
setTheme(ThemeHelper.getSuwDefaultTheme(getApplicationContext()));
ThemeHelper.trySetDynamicColor(this);
}
}
}
@Override
public Intent getIntent() {
Intent modIntent = new Intent(super.getIntent());

View File

@@ -35,8 +35,8 @@ import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.TickButtonPreference;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.widget.SelectorWithWidgetPreference;
import java.util.Locale;
@@ -138,13 +138,13 @@ public class NumberingSystemItemController extends BasePreferenceController {
for (String localeTag : locales) {
Locale supportedLocale = Locale.forLanguageTag(localeTag);
if (isSameBaseLocale(targetLocale, supportedLocale)) {
TickButtonPreference pref = new TickButtonPreference(mContext);
SelectorWithWidgetPreference pref = new SelectorWithWidgetPreference(mContext);
String numberingName = getNumberingSystem(supportedLocale);
pref.setTitle(numberingName);
String key = supportedLocale.getUnicodeLocaleType(
ExtensionTypes.NUMBERING_SYSTEM);
pref.setKey(key == null ? RegionalPreferencesDataUtils.DEFAULT_VALUE : key);
pref.setSelected(isSameNumberingSystem(targetLocale, supportedLocale));
pref.setChecked(isSameNumberingSystem(targetLocale, supportedLocale));
screen.addPreference(pref);
}
}
@@ -168,11 +168,12 @@ public class NumberingSystemItemController extends BasePreferenceController {
private void handleNumberSystemSelect(Preference preference) {
for (int i = 0; i < mPreferenceScreen.getPreferenceCount(); i++) {
TickButtonPreference pref = (TickButtonPreference) mPreferenceScreen.getPreference(i);
SelectorWithWidgetPreference pref =
(SelectorWithWidgetPreference) mPreferenceScreen.getPreference(i);
Log.i(TAG, "[onPreferenceClick] key is " + pref.getKey());
if (pref.getKey().equals(preference.getKey())) {
String numberingSystem = pref.getKey();
pref.setSelected(true);
pref.setChecked(true);
Locale updatedLocale =
saveNumberingSystemToLocale(Locale.forLanguageTag(mSelectedLanguage),
numberingSystem);
@@ -188,7 +189,7 @@ public class NumberingSystemItemController extends BasePreferenceController {
mParentFragment.setArguments(bundle);
continue;
}
pref.setSelected(false);
pref.setChecked(false);
}
}

View File

@@ -24,8 +24,8 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.TickButtonPreference;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.widget.SelectorWithWidgetPreference;
/** A base controller for handling all regional preferences controllers. */
public abstract class RegionalPreferenceListBasePreferenceController extends
@@ -54,15 +54,14 @@ public abstract class RegionalPreferenceListBasePreferenceController extends
String[] unitValues = getUnitValues();
for (int i = 0; i < unitValues.length; i++) {
TickButtonPreference pref = new TickButtonPreference(mContext);
SelectorWithWidgetPreference pref = new SelectorWithWidgetPreference(mContext);
mPreferenceCategory.addPreference(pref);
final String item = unitValues[i];
final String value = RegionalPreferencesDataUtils.getDefaultUnicodeExtensionData(
mContext, getExtensionTypes());
pref.setTitle(getPreferenceTitle(item));
pref.setKey(item);
pref.setOnPreferenceClickListener(clickedPref -> {
setSelected(pref);
pref.setOnClickListener(v -> {
RegionalPreferencesDataUtils.savePreference(mContext, getExtensionTypes(),
item.equals(RegionalPreferencesDataUtils.DEFAULT_VALUE)
? null : item);
@@ -70,20 +69,8 @@ public abstract class RegionalPreferenceListBasePreferenceController extends
getMetricsActionKey() == SettingsEnums.ACTION_SET_FIRST_DAY_OF_WEEK ? ""
: getPreferenceTitle(value) + " > " + getPreferenceTitle(item);
mMetricsFeatureProvider.action(mContext, getMetricsActionKey(), metrics);
return true;
});
pref.setSelected(!value.isEmpty() && item.equals(value));
}
}
private void setSelected(TickButtonPreference preference) {
for (int i = 0; i < mPreferenceCategory.getPreferenceCount(); i++) {
TickButtonPreference pref = (TickButtonPreference) mPreferenceCategory.getPreference(i);
if (pref.getKey().equals(preference.getKey())) {
pref.setSelected(true);
continue;
}
pref.setSelected(false);
pref.setChecked(!value.isEmpty() && item.equals(value));
}
}

View File

@@ -22,33 +22,52 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.telephony.TelephonyManager;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R;
import com.android.settings.bluetooth.Utils;
import com.android.settings.testutils.XmlTestUtils;
import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
import com.android.settings.testutils.shadow.ShadowBluetoothUtils;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import org.robolectric.shadow.api.Shadow;
import java.util.List;
/** Tests for {@link AccessibilityHearingAidsFragment}. */
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowBluetoothAdapter.class, ShadowBluetoothUtils.class})
public class AccessibilityHearingAidsFragmentTest {
@Rule
public MockitoRule mMockitoRule = MockitoJUnit.rule();
@Rule
public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
@Spy
private final Context mContext = ApplicationProvider.getApplicationContext();
@Mock
private LocalBluetoothManager mLocalBluetoothManager;
private ShadowBluetoothAdapter mShadowBluetoothAdapter;
private BluetoothAdapter mBluetoothAdapter;
private TelephonyManager mTelephonyManager;
@Before
@@ -56,10 +75,18 @@ public class AccessibilityHearingAidsFragmentTest {
mTelephonyManager = spy(mContext.getSystemService(TelephonyManager.class));
when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
doReturn(true).when(mTelephonyManager).isHearingAidCompatibilitySupported();
ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBluetoothManager;
mLocalBluetoothManager = Utils.getLocalBtManager(mContext);
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
mShadowBluetoothAdapter = Shadow.extract(mBluetoothAdapter);
}
@Test
public void getNonIndexableKeys_existInXmlLayout() {
mShadowBluetoothAdapter.clearSupportedProfiles();
mShadowBluetoothAdapter.addSupportedProfiles(BluetoothProfile.HEARING_AID);
final List<String> niks = AccessibilityHearingAidsFragment.SEARCH_INDEX_DATA_PROVIDER
.getNonIndexableKeys(mContext);
final List<String> keys =
@@ -67,4 +94,22 @@ public class AccessibilityHearingAidsFragmentTest {
assertThat(keys).containsAtLeastElementsIn(niks);
}
@Test
@EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
public void deviceSupportsHearingAid_isPageSearchEnabled_returnTrue() {
mShadowBluetoothAdapter.clearSupportedProfiles();
mShadowBluetoothAdapter.addSupportedProfiles(BluetoothProfile.HEARING_AID);
assertThat(AccessibilityHearingAidsFragment.isPageSearchEnabled(mContext)).isTrue();
}
@Test
@EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
public void deviceDoesNotSupportHearingAid_isPageSearchEnabled_returnFalse() {
mShadowBluetoothAdapter.clearSupportedProfiles();
mShadowBluetoothAdapter.addSupportedProfiles(BluetoothProfile.HEADSET);
assertThat(AccessibilityHearingAidsFragment.isPageSearchEnabled(mContext)).isFalse();
}
}

View File

@@ -656,7 +656,7 @@ public class BluetoothDetailsProfilesControllerTest extends BluetoothDetailsCont
private void initController(List<String> invisibleProfiles) {
mController = new BluetoothDetailsProfilesController(mContext, mFragment, mLocalManager,
mCachedDevice, mLifecycle, invisibleProfiles);
mCachedDevice, mLifecycle, invisibleProfiles, true);
mProfiles.setKey(mController.getPreferenceKey());
mController.mProfilesContainer = mProfiles;
mScreen.removeAll();

View File

@@ -320,16 +320,37 @@ public class AudioSharingPasswordPreferenceControllerTest {
}
@Test
public void idTextValid_emptyString() {
public void isTextValid_emptyString() {
boolean valid = mController.isTextValid("");
assertThat(valid).isFalse();
}
@Test
public void idTextValid_validPassword() {
public void isTextValid_emptyString_showEditTextFormatAlert() {
mController.displayPreference(mScreen);
ShadowLooper.idleMainLooper();
boolean valid = mController.isTextValid("");
assertThat(valid).isFalse();
verify(mPreference).showEditTextFormatAlert(true);
}
@Test
public void isTextValid_validPassword() {
boolean valid = mController.isTextValid(BROADCAST_PASSWORD);
assertThat(valid).isTrue();
}
@Test
public void isTextValid_validPassword_hideEditTextFormatAlert() {
mController.displayPreference(mScreen);
ShadowLooper.idleMainLooper();
boolean valid = mController.isTextValid(BROADCAST_PASSWORD);
assertThat(valid).isTrue();
verify(mPreference).showEditTextFormatAlert(false);
}
}

View File

@@ -71,10 +71,12 @@ public class AudioSharingPasswordPreferenceTest {
var editText = view.findViewById(android.R.id.edit);
var checkBox = view.findViewById(R.id.audio_sharing_stream_password_checkbox);
var dialogMessage = view.findViewById(android.R.id.message);
var editTextAlertMessage = view.findViewById(R.id.edit_alert_message);
assertThat(editText).isNotNull();
assertThat(checkBox).isNotNull();
assertThat(dialogMessage).isNotNull();
assertThat(editTextAlertMessage).isNotNull();
}
@Test
@@ -147,6 +149,34 @@ public class AudioSharingPasswordPreferenceTest {
assertThat(checkBox.isChecked()).isFalse();
}
@Test
public void showEditTextFormatAlert_show() {
View view =
LayoutInflater.from(mContext).inflate(R.layout.audio_sharing_password_dialog, null);
mPreference.onBindDialogView(view);
var editTextAlertMessage = view.findViewById(R.id.edit_alert_message);
mPreference.showEditTextFormatAlert(true);
assertThat(editTextAlertMessage).isNotNull();
assertThat(editTextAlertMessage.getVisibility()).isEqualTo(VISIBLE);
}
@Test
public void showEditTextFormatAlert_hide() {
View view =
LayoutInflater.from(mContext).inflate(R.layout.audio_sharing_password_dialog, null);
mPreference.onBindDialogView(view);
var editTextAlertMessage = view.findViewById(R.id.edit_alert_message);
mPreference.showEditTextFormatAlert(false);
assertThat(editTextAlertMessage).isNotNull();
assertThat(editTextAlertMessage.getVisibility()).isEqualTo(GONE);
}
@Test
public void onDialogEventListener_onClick_positiveButton() {
AudioSharingPasswordPreference.OnDialogEventListener listener =

View File

@@ -130,7 +130,7 @@ public class AudioSharingReceiverTest {
}
@Test
public void broadcastReceiver_receiveAudioSharingStateChangeIntentFlagOff_doNothing() {
public void broadcastReceiver_receiveAudioSharingStateOn_flagOff_doNothing() {
mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
@@ -140,6 +140,23 @@ public class AudioSharingReceiverTest {
audioSharingReceiver.onReceive(mContext, intent);
verifyNoInteractions(mNm);
verifyNoInteractions(mFeatureFactory.metricsFeatureProvider);
}
@Test
public void broadcastReceiver_receiveAudioSharingStateOn_broadcastDisabled_doNothing() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
mShadowBluetoothAdapter.setIsLeAudioBroadcastSourceSupported(
BluetoothStatusCodes.ERROR_BLUETOOTH_NOT_ENABLED);
Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
intent.setPackage(mContext.getPackageName());
intent.putExtra(EXTRA_LE_AUDIO_SHARING_STATE, BROADCAST_STATE_ON);
AudioSharingReceiver audioSharingReceiver = getAudioSharingReceiver(intent);
audioSharingReceiver.onReceive(mContext, intent);
verifyNoInteractions(mNm);
verifyNoInteractions(mFeatureFactory.metricsFeatureProvider);
}
@Test
@@ -152,10 +169,11 @@ public class AudioSharingReceiverTest {
audioSharingReceiver.onReceive(mContext, intent);
verifyNoInteractions(mNm);
verifyNoInteractions(mFeatureFactory.metricsFeatureProvider);
}
@Test
public void broadcastReceiver_receiveAudioSharingStateChangeIntentOnState_showNotification() {
public void broadcastReceiver_receiveAudioSharingStateOn_broadcastEnabled_showNotification() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
@@ -171,7 +189,26 @@ public class AudioSharingReceiverTest {
@Test
public void
broadcastReceiver_receiveAudioSharingStateChangeIntentOffState_cancelNotification() {
broadcastReceiver_receiveAudioSharingStateOff_broadcastDisabled_cancelNotification() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
mShadowBluetoothAdapter.setIsLeAudioBroadcastSourceSupported(
BluetoothStatusCodes.ERROR_BLUETOOTH_NOT_ENABLED);
Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
intent.setPackage(mContext.getPackageName());
intent.putExtra(EXTRA_LE_AUDIO_SHARING_STATE, BROADCAST_STATE_OFF);
AudioSharingReceiver audioSharingReceiver = getAudioSharingReceiver(intent);
audioSharingReceiver.onReceive(mContext, intent);
verify(mNm).cancel(R.drawable.ic_bt_le_audio_sharing);
verify(mFeatureFactory.metricsFeatureProvider)
.action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
}
@Test
public void
broadcastReceiver_receiveAudioSharingStateOff_broadcastEnabled_cancelNotification() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
@@ -182,12 +219,15 @@ public class AudioSharingReceiverTest {
verify(mNm).cancel(R.drawable.ic_bt_le_audio_sharing);
verify(mFeatureFactory.metricsFeatureProvider)
.action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION);
.action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
}
@Test
public void broadcastReceiver_receiveAudioSharingStopIntentFlagOff_doNothing() {
mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
public void broadcastReceiver_receiveAudioSharingStop_broadcastDisabled_cancelNotification() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
mShadowBluetoothAdapter.setIsLeAudioBroadcastSourceSupported(
BluetoothStatusCodes.ERROR_BLUETOOTH_NOT_ENABLED);
Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STOP);
intent.setPackage(mContext.getPackageName());
@@ -195,11 +235,14 @@ public class AudioSharingReceiverTest {
audioSharingReceiver.onReceive(mContext, intent);
verifyNoInteractions(mBroadcast);
verify(mNm).cancel(R.drawable.ic_bt_le_audio_sharing);
verify(mFeatureFactory.metricsFeatureProvider)
.action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
ACTION_LE_AUDIO_SHARING_STOP);
}
@Test
public void
broadcastReceiver_receiveAudioSharingStopIntent_notInBroadcast_cancelNotification() {
public void broadcastReceiver_receiveAudioSharingStop_notInBroadcast_cancelNotification() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
when(mBroadcast.isEnabled(null)).thenReturn(false);
int broadcastId = 1;
@@ -213,11 +256,12 @@ public class AudioSharingReceiverTest {
verify(mBroadcast, never()).stopBroadcast(broadcastId);
verify(mNm).cancel(R.drawable.ic_bt_le_audio_sharing);
verify(mFeatureFactory.metricsFeatureProvider)
.action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION);
.action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
ACTION_LE_AUDIO_SHARING_STOP);
}
@Test
public void broadcastReceiver_receiveAudioSharingStopIntent_inBroadcast_stopBroadcast() {
public void broadcastReceiver_receiveAudioSharingStop_inBroadcast_stopBroadcast() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
when(mBroadcast.isEnabled(null)).thenReturn(true);
int broadcastId = 1;
@@ -231,6 +275,10 @@ public class AudioSharingReceiverTest {
verify(mBroadcast).stopBroadcast(broadcastId);
verify(mFeatureFactory.metricsFeatureProvider)
.action(mContext, SettingsEnums.ACTION_STOP_AUDIO_SHARING_FROM_NOTIFICATION);
verify(mNm, never()).cancel(R.drawable.ic_bt_le_audio_sharing);
verify(mFeatureFactory.metricsFeatureProvider, never())
.action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
ACTION_LE_AUDIO_SHARING_STOP);
}
private AudioSharingReceiver getAudioSharingReceiver(Intent intent) {

View File

@@ -36,10 +36,11 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
// LINT.IfChange
@RunWith(RobolectricTestRunner.class)
public class AdaptiveConnectivityTogglePreferenceControllerTest {
private static final String PREF_KEY = "adaptive_connectivity";
private static final String PREF_KEY = "adaptive_connectivity_enabled";
@Mock(answer = RETURNS_DEEP_STUBS)
private Context mContext;
@@ -87,3 +88,4 @@ public class AdaptiveConnectivityTogglePreferenceControllerTest {
verify(mWifiManager).setWifiScoringEnabled(false);
}
}
// LINT.ThenChange(AdaptiveConnectivityTogglePreferenceTest.kt)

View File

@@ -0,0 +1,87 @@
/*
* Copyright (C) 2024 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.network
import android.content.Context
import android.net.wifi.WifiManager
import android.platform.test.flag.junit.SetFlagsRule
import android.provider.Settings
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.settingslib.widget.MainSwitchPreference
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.kotlin.atLeastOnce
import org.mockito.kotlin.mock
import org.mockito.kotlin.spy
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
// LINT.IfChange
@RunWith(AndroidJUnit4::class)
class AdaptiveConnectivityTogglePreferenceTest {
@get:Rule
val setFlagsRule = SetFlagsRule()
private val appContext: Context = spy(ApplicationProvider.getApplicationContext()){}
private val mockWifiManager: WifiManager = mock()
private val adaptiveConnectivityTogglePreference = AdaptiveConnectivityTogglePreference()
@Before
fun setUp() {
whenever(appContext.getSystemService(WifiManager::class.java)).thenReturn(mockWifiManager)
}
@Test
fun setChecked_withTrue_shouldUpdateSetting() {
Settings.Secure.putInt(
appContext.contentResolver,
Settings.Secure.ADAPTIVE_CONNECTIVITY_ENABLED, 0
)
val mainSwitchPreference = getMainSwitchPreferenceCompat().apply { performClick() }
assertThat(mainSwitchPreference.isChecked).isTrue()
verify(mockWifiManager, atLeastOnce()).setWifiScoringEnabled(true)
}
@Test
fun setChecked_withFalse_shouldUpdateSetting() {
Settings.Secure.putInt(
appContext.contentResolver,
Settings.Secure.ADAPTIVE_CONNECTIVITY_ENABLED, 1
)
val mainSwitchPreference = getMainSwitchPreferenceCompat().apply { performClick() }
assertThat(mainSwitchPreference.isChecked).isFalse()
verify(mockWifiManager).setWifiScoringEnabled(false)
}
private fun getMainSwitchPreferenceCompat(): MainSwitchPreference =
adaptiveConnectivityTogglePreference.run {
val preference = createWidget(appContext)
bind(preference, this)
preference as MainSwitchPreference
}
}
// LINT.ThenChange(AdaptiveConnectivityTogglePreferenceControllerTest.java)

View File

@@ -31,7 +31,7 @@ import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settings.widget.TickButtonPreference;
import com.android.settingslib.widget.SelectorWithWidgetPreference;
import org.junit.Before;
import org.junit.Ignore;
@@ -53,10 +53,10 @@ public class TermsOfAddressFeminineControllerTest {
private PreferenceCategory mPreferenceCategory;
private PreferenceScreen mPreferenceScreen;
private TermsOfAddressFeminineController mController;
private TickButtonPreference mFemininePreference;
private TickButtonPreference mMasculinePreference;
private TickButtonPreference mNotSpecifiedPreference;
private TickButtonPreference mNeutralPreference;
private SelectorWithWidgetPreference mFemininePreference;
private SelectorWithWidgetPreference mMasculinePreference;
private SelectorWithWidgetPreference mNotSpecifiedPreference;
private SelectorWithWidgetPreference mNeutralPreference;
private GrammaticalInflectionManager mGrammaticalInflectionManager;
@Before
@@ -74,13 +74,13 @@ public class TermsOfAddressFeminineControllerTest {
mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
mPreferenceCategory = new PreferenceCategory(mContext);
mPreferenceCategory.setKey(KEY_CATEGORY_TERMS_OF_ADDRESS);
mNotSpecifiedPreference = new TickButtonPreference(mContext);
mNotSpecifiedPreference = new SelectorWithWidgetPreference(mContext);
mNotSpecifiedPreference.setKey(KEY_NOT_SPECIFIED);
mFemininePreference = new TickButtonPreference(mContext);
mFemininePreference = new SelectorWithWidgetPreference(mContext);
mFemininePreference.setKey(KEY_FEMININE);
mMasculinePreference = new TickButtonPreference(mContext);
mMasculinePreference = new SelectorWithWidgetPreference(mContext);
mMasculinePreference.setKey(KEY_MASCULINE);
mNeutralPreference = new TickButtonPreference(mContext);
mNeutralPreference = new SelectorWithWidgetPreference(mContext);
mNeutralPreference.setKey(KEY_NEUTRAL);
mPreferenceScreen.addPreference(mPreferenceCategory);
mPreferenceScreen.addPreference(mNotSpecifiedPreference);
@@ -95,8 +95,8 @@ public class TermsOfAddressFeminineControllerTest {
@Test
@Ignore("b/339543490")
public void displayPreference_setGrammaticalGenderIsFeminine_FeminineIsSelected() {
TickButtonPreference selectedPreference =
(TickButtonPreference) mPreferenceScreen.getPreference(2);
SelectorWithWidgetPreference selectedPreference =
(SelectorWithWidgetPreference) mPreferenceScreen.getPreference(2);
selectedPreference.performClick();
assertThat(selectedPreference.getKey()).isEqualTo(KEY_FEMININE);

View File

@@ -31,7 +31,7 @@ import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settings.widget.TickButtonPreference;
import com.android.settingslib.widget.SelectorWithWidgetPreference;
import org.junit.Before;
import org.junit.Ignore;
@@ -53,10 +53,10 @@ public class TermsOfAddressMasculineControllerTest {
private PreferenceCategory mPreferenceCategory;
private PreferenceScreen mPreferenceScreen;
private TermsOfAddressMasculineController mController;
private TickButtonPreference mFemininePreference;
private TickButtonPreference mMasculinePreference;
private TickButtonPreference mNotSpecifiedPreference;
private TickButtonPreference mNeutralPreference;
private SelectorWithWidgetPreference mFemininePreference;
private SelectorWithWidgetPreference mMasculinePreference;
private SelectorWithWidgetPreference mNotSpecifiedPreference;
private SelectorWithWidgetPreference mNeutralPreference;
private GrammaticalInflectionManager mGrammaticalInflectionManager;
@Before
@@ -74,13 +74,13 @@ public class TermsOfAddressMasculineControllerTest {
mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
mPreferenceCategory = new PreferenceCategory(mContext);
mPreferenceCategory.setKey(KEY_CATEGORY_TERMS_OF_ADDRESS);
mNotSpecifiedPreference = new TickButtonPreference(mContext);
mNotSpecifiedPreference = new SelectorWithWidgetPreference(mContext);
mNotSpecifiedPreference.setKey(KEY_NOT_SPECIFIED);
mFemininePreference = new TickButtonPreference(mContext);
mFemininePreference = new SelectorWithWidgetPreference(mContext);
mFemininePreference.setKey(KEY_FEMININE);
mMasculinePreference = new TickButtonPreference(mContext);
mMasculinePreference = new SelectorWithWidgetPreference(mContext);
mMasculinePreference.setKey(KEY_MASCULINE);
mNeutralPreference = new TickButtonPreference(mContext);
mNeutralPreference = new SelectorWithWidgetPreference(mContext);
mNeutralPreference.setKey(KEY_NEUTRAL);
mPreferenceScreen.addPreference(mPreferenceCategory);
mPreferenceScreen.addPreference(mNotSpecifiedPreference);
@@ -95,8 +95,8 @@ public class TermsOfAddressMasculineControllerTest {
@Test
@Ignore("b/339543490")
public void displayPreference_setGrammaticalGenderIsMasculine_MasculineIsSelected() {
TickButtonPreference selectedPreference =
(TickButtonPreference) mPreferenceScreen.getPreference(3);
SelectorWithWidgetPreference selectedPreference =
(SelectorWithWidgetPreference) mPreferenceScreen.getPreference(3);
selectedPreference.performClick();
assertThat(selectedPreference.getKey()).isEqualTo(KEY_MASCULINE);

View File

@@ -31,7 +31,7 @@ import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settings.widget.TickButtonPreference;
import com.android.settingslib.widget.SelectorWithWidgetPreference;
import org.junit.Before;
import org.junit.Ignore;
@@ -53,10 +53,10 @@ public class TermsOfAddressNeutralControllerTest {
private PreferenceCategory mPreferenceCategory;
private PreferenceScreen mPreferenceScreen;
private TermsOfAddressNeutralController mController;
private TickButtonPreference mFemininePreference;
private TickButtonPreference mMasculinePreference;
private TickButtonPreference mNotSpecifiedPreference;
private TickButtonPreference mNeutralPreference;
private SelectorWithWidgetPreference mFemininePreference;
private SelectorWithWidgetPreference mMasculinePreference;
private SelectorWithWidgetPreference mNotSpecifiedPreference;
private SelectorWithWidgetPreference mNeutralPreference;
private GrammaticalInflectionManager mGrammaticalInflectionManager;
@Before
@@ -74,13 +74,13 @@ public class TermsOfAddressNeutralControllerTest {
mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
mPreferenceCategory = new PreferenceCategory(mContext);
mPreferenceCategory.setKey(KEY_CATEGORY_TERMS_OF_ADDRESS);
mNotSpecifiedPreference = new TickButtonPreference(mContext);
mNotSpecifiedPreference = new SelectorWithWidgetPreference(mContext);
mNotSpecifiedPreference.setKey(KEY_NOT_SPECIFIED);
mFemininePreference = new TickButtonPreference(mContext);
mFemininePreference = new SelectorWithWidgetPreference(mContext);
mFemininePreference.setKey(KEY_FEMININE);
mMasculinePreference = new TickButtonPreference(mContext);
mMasculinePreference = new SelectorWithWidgetPreference(mContext);
mMasculinePreference.setKey(KEY_MASCULINE);
mNeutralPreference = new TickButtonPreference(mContext);
mNeutralPreference = new SelectorWithWidgetPreference(mContext);
mNeutralPreference.setKey(KEY_NEUTRAL);
mPreferenceScreen.addPreference(mPreferenceCategory);
mPreferenceScreen.addPreference(mNotSpecifiedPreference);
@@ -95,8 +95,8 @@ public class TermsOfAddressNeutralControllerTest {
@Test
@Ignore("b/339543490")
public void displayPreference_setGrammaticalGenderIsNotSpecified_NeutralIsSelected() {
TickButtonPreference selectedPreference =
(TickButtonPreference) mPreferenceScreen.getPreference(4);
SelectorWithWidgetPreference selectedPreference =
(SelectorWithWidgetPreference) mPreferenceScreen.getPreference(4);
selectedPreference.performClick();
assertThat(selectedPreference.getKey()).isEqualTo(KEY_NEUTRAL);

View File

@@ -31,7 +31,7 @@ import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settings.widget.TickButtonPreference;
import com.android.settingslib.widget.SelectorWithWidgetPreference;
import org.junit.Before;
import org.junit.Ignore;
@@ -53,10 +53,10 @@ public class TermsOfAddressNotSpecifiedControllerTest {
private PreferenceCategory mPreferenceCategory;
private PreferenceScreen mPreferenceScreen;
private TermsOfAddressNotSpecifiedController mController;
private TickButtonPreference mFemininePreference;
private TickButtonPreference mMasculinePreference;
private TickButtonPreference mNotSpecifiedPreference;
private TickButtonPreference mNeutralPreference;
private SelectorWithWidgetPreference mFemininePreference;
private SelectorWithWidgetPreference mMasculinePreference;
private SelectorWithWidgetPreference mNotSpecifiedPreference;
private SelectorWithWidgetPreference mNeutralPreference;
private GrammaticalInflectionManager mGrammaticalInflectionManager;
@Before
@@ -74,13 +74,13 @@ public class TermsOfAddressNotSpecifiedControllerTest {
mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
mPreferenceCategory = new PreferenceCategory(mContext);
mPreferenceCategory.setKey(KEY_CATEGORY_TERMS_OF_ADDRESS);
mNotSpecifiedPreference = new TickButtonPreference(mContext);
mNotSpecifiedPreference = new SelectorWithWidgetPreference(mContext);
mNotSpecifiedPreference.setKey(KEY_NOT_SPECIFIED);
mFemininePreference = new TickButtonPreference(mContext);
mFemininePreference = new SelectorWithWidgetPreference(mContext);
mFemininePreference.setKey(KEY_FEMININE);
mMasculinePreference = new TickButtonPreference(mContext);
mMasculinePreference = new SelectorWithWidgetPreference(mContext);
mMasculinePreference.setKey(KEY_MASCULINE);
mNeutralPreference = new TickButtonPreference(mContext);
mNeutralPreference = new SelectorWithWidgetPreference(mContext);
mNeutralPreference.setKey(KEY_NEUTRAL);
mPreferenceScreen.addPreference(mPreferenceCategory);
mPreferenceScreen.addPreference(mNotSpecifiedPreference);
@@ -95,8 +95,8 @@ public class TermsOfAddressNotSpecifiedControllerTest {
@Test
@Ignore("b/339543490")
public void displayPreference_setGrammaticalGenderIsNotSpecified_NotSpecifiedIsSelected() {
TickButtonPreference selectedPreference =
(TickButtonPreference) mPreferenceScreen.getPreference(1);
SelectorWithWidgetPreference selectedPreference =
(SelectorWithWidgetPreference) mPreferenceScreen.getPreference(1);
selectedPreference.performClick();
assertThat(selectedPreference.getKey()).isEqualTo(KEY_NOT_SPECIFIED);

View File

@@ -25,16 +25,15 @@ import android.os.LocaleList;
import android.os.Looper;
import android.provider.Settings;
import com.android.internal.app.LocalePicker;
import com.android.settings.widget.TickButtonPreference;
import androidx.preference.PreferenceManager;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.internal.app.LocalePicker;
import com.android.settingslib.widget.SelectorWithWidgetPreference;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -91,8 +90,9 @@ public class FirstDayOfWeekItemListControllerTest {
@Test
public void displayPreference_setSelectPreferredFirstDayOfWeekIsDefault() {
TickButtonPreference pref = (TickButtonPreference) mPreferenceCategory.getPreference(0);
pref.performClick();
SelectorWithWidgetPreference pref =
(SelectorWithWidgetPreference) mPreferenceCategory.getPreference(0);
pref.onClick();
String record = Settings.System.getString(
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
@@ -103,8 +103,9 @@ public class FirstDayOfWeekItemListControllerTest {
@Test
public void displayPreference_setSelectPreferredFirstDayOfWeekIsSunday() {
TickButtonPreference pref = (TickButtonPreference) mPreferenceCategory.getPreference(1);
pref.performClick();
SelectorWithWidgetPreference pref =
(SelectorWithWidgetPreference) mPreferenceCategory.getPreference(1);
pref.onClick();
String record = Settings.System.getString(
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
@@ -114,8 +115,9 @@ public class FirstDayOfWeekItemListControllerTest {
@Test
public void displayPreference_setSelectPreferredFirstDayOfWeekIsMonday() {
TickButtonPreference pref = (TickButtonPreference) mPreferenceCategory.getPreference(2);
pref.performClick();
SelectorWithWidgetPreference pref =
(SelectorWithWidgetPreference) mPreferenceCategory.getPreference(2);
pref.onClick();
String record = Settings.System.getString(
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);

View File

@@ -38,7 +38,7 @@ import androidx.test.core.app.ApplicationProvider;
import com.android.internal.app.LocalePicker;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.widget.TickButtonPreference;
import com.android.settingslib.widget.SelectorWithWidgetPreference;
import org.junit.After;
import org.junit.Before;
@@ -82,7 +82,8 @@ public class NumberingSystemItemControllerTest {
NumberingSystemItemController.ARG_VALUE_LANGUAGE_SELECT);
bundle.putString(
NumberingSystemItemController.KEY_SELECTED_LANGUAGE, Locale.US.toLanguageTag());
TickButtonPreference preference = new TickButtonPreference(mApplicationContext);
SelectorWithWidgetPreference preference =
new SelectorWithWidgetPreference(mApplicationContext);
preference.setKey("I_am_the_key");
mPreferenceScreen.addPreference(preference);
mController = new NumberingSystemItemController(mApplicationContext, bundle);
@@ -110,7 +111,8 @@ public class NumberingSystemItemControllerTest {
NumberingSystemItemController.ARG_VALUE_NUMBERING_SYSTEM_SELECT);
bundle.putString(
NumberingSystemItemController.KEY_SELECTED_LANGUAGE, Locale.US.toLanguageTag());
TickButtonPreference preference = new TickButtonPreference(mApplicationContext);
SelectorWithWidgetPreference preference =
new SelectorWithWidgetPreference(mApplicationContext);
preference.setKey("test_key");
mPreferenceScreen.addPreference(preference);
mController = new NumberingSystemItemController(mApplicationContext, bundle);
@@ -133,8 +135,10 @@ public class NumberingSystemItemControllerTest {
NumberingSystemItemController.ARG_VALUE_NUMBERING_SYSTEM_SELECT);
bundle.putString(
NumberingSystemItemController.KEY_SELECTED_LANGUAGE, "ar-BH");
TickButtonPreference defaultPreference = new TickButtonPreference(mApplicationContext);
TickButtonPreference numberPreference = new TickButtonPreference(mApplicationContext);
SelectorWithWidgetPreference defaultPreference =
new SelectorWithWidgetPreference(mApplicationContext);
SelectorWithWidgetPreference numberPreference =
new SelectorWithWidgetPreference(mApplicationContext);
defaultPreference.setKey("default");
numberPreference.setKey("latn");
mPreferenceScreen.addPreference(defaultPreference);

View File

@@ -17,6 +17,7 @@
package com.android.settings.regionalpreferences;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.spy;
import android.content.Context;
@@ -24,16 +25,15 @@ import android.os.LocaleList;
import android.os.Looper;
import android.provider.Settings;
import com.android.internal.app.LocalePicker;
import com.android.settings.widget.TickButtonPreference;
import androidx.preference.PreferenceManager;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.internal.app.LocalePicker;
import com.android.settingslib.widget.SelectorWithWidgetPreference;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -88,8 +88,9 @@ public class TemperatureUnitListControllerTest {
@Test
public void displayPreference_setSelectPreferredTemperatureUnitIsDefault() {
TickButtonPreference pref = (TickButtonPreference) mPreferenceCategory.getPreference(0);
pref.performClick();
SelectorWithWidgetPreference pref =
(SelectorWithWidgetPreference) mPreferenceCategory.getPreference(0);
pref.onClick();
String record = Settings.System.getString(
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
@@ -101,8 +102,9 @@ public class TemperatureUnitListControllerTest {
@Test
public void displayPreference_setSelectPreferredTemperatureUnitIsCelsius() {
TickButtonPreference pref = (TickButtonPreference) mPreferenceCategory.getPreference(1);
pref.performClick();
SelectorWithWidgetPreference pref =
(SelectorWithWidgetPreference) mPreferenceCategory.getPreference(1);
pref.onClick();
String record = Settings.System.getString(
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
@@ -112,8 +114,9 @@ public class TemperatureUnitListControllerTest {
@Test
public void displayPreference_setSelectPreferredTemperatureUnitIsFahrenhe() {
TickButtonPreference pref = (TickButtonPreference) mPreferenceCategory.getPreference(2);
pref.performClick();
SelectorWithWidgetPreference pref =
(SelectorWithWidgetPreference) mPreferenceCategory.getPreference(2);
pref.onClick();
String record = Settings.System.getString(
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);