Snap for 12580585 from 2fdca61ce4 to 25Q1-release
Change-Id: Ie71c37f1bd466ff9c65edf8e11d237c7ae894435
This commit is contained in:
@@ -35,6 +35,17 @@
|
|||||||
android:layout_marginEnd="20dp"
|
android:layout_marginEnd="20dp"
|
||||||
android:minHeight="48dp" />
|
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
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
|||||||
26
res/layout/preference_category_bluetooth_no_padding.xml
Normal file
26
res/layout/preference_category_bluetooth_no_padding.xml
Normal 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>
|
||||||
@@ -13738,8 +13738,10 @@
|
|||||||
<string name="audio_streams_main_page_password_dialog_join_button">Listen to stream</string>
|
<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] -->
|
<!-- 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>
|
<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>
|
<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]-->
|
<!-- Text for audio sharing qrcode scanner [CHAR LIMIT=none]-->
|
||||||
<string name="audio_streams_qr_code_scanner_label">QR code scanner</string>
|
<string name="audio_streams_qr_code_scanner_label">QR code scanner</string>
|
||||||
<!-- Learn more link for audio sharing qrcode [CHAR LIMIT=none]-->
|
<!-- Learn more link for audio sharing qrcode [CHAR LIMIT=none]-->
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
settings:lottie_rawRes="@drawable/ic_enhanced_connectivity"/>
|
settings:lottie_rawRes="@drawable/ic_enhanced_connectivity"/>
|
||||||
|
|
||||||
<com.android.settingslib.widget.MainSwitchPreference
|
<com.android.settingslib.widget.MainSwitchPreference
|
||||||
android:key="adaptive_connectivity"
|
android:key="adaptive_connectivity_enabled"
|
||||||
android:title="@string/adaptive_connectivity_main_switch_title"
|
android:title="@string/adaptive_connectivity_main_switch_title"
|
||||||
settings:controller="com.android.settings.network.AdaptiveConnectivityTogglePreferenceController"/>
|
settings:controller="com.android.settings.network.AdaptiveConnectivityTogglePreferenceController"/>
|
||||||
|
|
||||||
|
|||||||
@@ -24,22 +24,22 @@
|
|||||||
android:title="@string/terms_of_address_intro_title"
|
android:title="@string/terms_of_address_intro_title"
|
||||||
android:persistent="false"/>
|
android:persistent="false"/>
|
||||||
|
|
||||||
<com.android.settings.widget.TickButtonPreference
|
<com.android.settingslib.widget.SelectorWithWidgetPreference
|
||||||
android:key="key_terms_of_address_not_specified"
|
android:key="key_terms_of_address_not_specified"
|
||||||
android:title="@string/terms_of_address_not_specified"
|
android:title="@string/terms_of_address_not_specified"
|
||||||
settings:controller="com.android.settings.localepicker.TermsOfAddressNotSpecifiedController"/>
|
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:key="key_terms_of_address_feminine"
|
||||||
android:title="@string/terms_of_address_feminine"
|
android:title="@string/terms_of_address_feminine"
|
||||||
settings:controller="com.android.settings.localepicker.TermsOfAddressFeminineController"/>
|
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:key="key_terms_of_address_masculine"
|
||||||
android:title="@string/terms_of_address_masculine"
|
android:title="@string/terms_of_address_masculine"
|
||||||
settings:controller="com.android.settings.localepicker.TermsOfAddressMasculineController"/>
|
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:key="key_terms_of_address_neutral"
|
||||||
android:title="@string/terms_of_address_neutral"
|
android:title="@string/terms_of_address_neutral"
|
||||||
settings:controller="com.android.settings.localepicker.TermsOfAddressNeutralController"/>
|
settings:controller="com.android.settings.localepicker.TermsOfAddressNeutralController"/>
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import android.hardware.fingerprint.FingerprintManager;
|
|||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.util.FeatureFlagUtils;
|
import android.util.FeatureFlagUtils;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
@@ -58,8 +59,9 @@ import java.util.List;
|
|||||||
)
|
)
|
||||||
public class SettingsApplication extends Application {
|
public class SettingsApplication extends Application {
|
||||||
|
|
||||||
|
private static final String TAG = "SettingsApplication";
|
||||||
private WeakReference<SettingsHomepageActivity> mHomeActivity = new WeakReference<>(null);
|
private WeakReference<SettingsHomepageActivity> mHomeActivity = new WeakReference<>(null);
|
||||||
@Nullable private BiometricsEnvironment mBiometricsEnvironment;
|
@Nullable volatile private BiometricsEnvironment mBiometricsEnvironment;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void attachBaseContext(Context base) {
|
protected void attachBaseContext(Context base) {
|
||||||
@@ -138,20 +140,23 @@ public class SettingsApplication extends Application {
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public BiometricsEnvironment getBiometricEnvironment() {
|
public BiometricsEnvironment getBiometricEnvironment() {
|
||||||
if (Flags.fingerprintV2Enrollment()) {
|
BiometricsEnvironment localEnvironment = mBiometricsEnvironment;
|
||||||
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
|
if (localEnvironment == null) {
|
||||||
final FingerprintManager fpm = getSystemService(FingerprintManager.class);
|
synchronized (this) {
|
||||||
if (mBiometricsEnvironment == null) {
|
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
|
||||||
mBiometricsEnvironment = new BiometricsEnvironment(this, fpm);
|
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
|
@Override
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import android.view.LayoutInflater;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.preference.PreferenceCategory;
|
import androidx.preference.PreferenceCategory;
|
||||||
|
|
||||||
import com.android.internal.accessibility.AccessibilityShortcutController;
|
import com.android.internal.accessibility.AccessibilityShortcutController;
|
||||||
@@ -118,6 +119,21 @@ public class AccessibilityHearingAidsFragment extends AccessibilityShortcutPrefe
|
|||||||
return getText(R.string.accessibility_hearing_device_shortcut_title);
|
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 =
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -148,8 +148,16 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity {
|
|||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(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);
|
mChallenge = getIntent().getLongExtra(EXTRA_KEY_CHALLENGE, -1L);
|
||||||
mSensorId = getIntent().getIntExtra(EXTRA_KEY_SENSOR_ID, -1);
|
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
|
// Don't need to retrieve the HAT if it already exists. In some cases, the extras do not
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.settings.biometrics.fingerprint2.data.repository
|
package com.android.settings.biometrics.fingerprint2.data.repository
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
import android.hardware.biometrics.ComponentInfoInternal
|
import android.hardware.biometrics.ComponentInfoInternal
|
||||||
import android.hardware.biometrics.SensorLocationInternal
|
import android.hardware.biometrics.SensorLocationInternal
|
||||||
import android.hardware.biometrics.SensorProperties
|
import android.hardware.biometrics.SensorProperties
|
||||||
@@ -23,18 +24,24 @@ import android.hardware.fingerprint.FingerprintManager
|
|||||||
import android.hardware.fingerprint.FingerprintSensorProperties
|
import android.hardware.fingerprint.FingerprintSensorProperties
|
||||||
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal
|
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal
|
||||||
import android.hardware.fingerprint.IFingerprintAuthenticatorsRegisteredCallback
|
import android.hardware.fingerprint.IFingerprintAuthenticatorsRegisteredCallback
|
||||||
|
import android.util.Log
|
||||||
import com.android.systemui.biometrics.shared.model.FingerprintSensor
|
import com.android.systemui.biometrics.shared.model.FingerprintSensor
|
||||||
import com.android.systemui.biometrics.shared.model.toFingerprintSensor
|
import com.android.systemui.biometrics.shared.model.toFingerprintSensor
|
||||||
import kotlinx.coroutines.CoroutineDispatcher
|
import kotlinx.coroutines.CoroutineDispatcher
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.channels.awaitClose
|
import kotlinx.coroutines.channels.awaitClose
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||||
|
import kotlinx.coroutines.flow.SharedFlow
|
||||||
import kotlinx.coroutines.flow.SharingStarted
|
import kotlinx.coroutines.flow.SharingStarted
|
||||||
|
import kotlinx.coroutines.flow.asSharedFlow
|
||||||
import kotlinx.coroutines.flow.callbackFlow
|
import kotlinx.coroutines.flow.callbackFlow
|
||||||
import kotlinx.coroutines.flow.flatMapLatest
|
import kotlinx.coroutines.flow.flatMapLatest
|
||||||
import kotlinx.coroutines.flow.flow
|
import kotlinx.coroutines.flow.flow
|
||||||
|
import kotlinx.coroutines.flow.shareIn
|
||||||
import kotlinx.coroutines.flow.stateIn
|
import kotlinx.coroutines.flow.stateIn
|
||||||
import kotlinx.coroutines.flow.transform
|
import kotlinx.coroutines.flow.transform
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -56,17 +63,24 @@ class FingerprintSensorRepositoryImpl(
|
|||||||
activityScope: CoroutineScope,
|
activityScope: CoroutineScope,
|
||||||
) : FingerprintSensorRepository {
|
) : FingerprintSensorRepository {
|
||||||
|
|
||||||
private val fingerprintPropsInternal: Flow<FingerprintSensorPropertiesInternal> =
|
private val _fingerprintSensor = MutableSharedFlow<FingerprintSensor>(replay = 1)
|
||||||
callbackFlow {
|
override val fingerprintSensor: Flow<FingerprintSensor>
|
||||||
|
get() = _fingerprintSensor.asSharedFlow()
|
||||||
|
|
||||||
|
init {
|
||||||
|
activityScope.launch {
|
||||||
|
callbackFlow{
|
||||||
val callback =
|
val callback =
|
||||||
object : IFingerprintAuthenticatorsRegisteredCallback.Stub() {
|
object : IFingerprintAuthenticatorsRegisteredCallback.Stub() {
|
||||||
|
@SuppressLint("LongLogTag")
|
||||||
override fun onAllAuthenticatorsRegistered(
|
override fun onAllAuthenticatorsRegistered(
|
||||||
sensors: List<FingerprintSensorPropertiesInternal>
|
sensors: List<FingerprintSensorPropertiesInternal>
|
||||||
) {
|
) {
|
||||||
if (sensors.isEmpty()) {
|
if (sensors.isEmpty()) {
|
||||||
trySend(DEFAULT_PROPS)
|
Log.e(TAG, "empty sensors from onAllAuthenticatorsRegistered")
|
||||||
} else {
|
} else {
|
||||||
trySend(sensors[0])
|
trySend(sensors[0])
|
||||||
|
channel.close()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -74,27 +88,16 @@ class FingerprintSensorRepositoryImpl(
|
|||||||
fingerprintManager.addAuthenticatorsRegisteredCallback(callback)
|
fingerprintManager.addAuthenticatorsRegisteredCallback(callback)
|
||||||
}
|
}
|
||||||
awaitClose {}
|
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> =
|
override val hasSideFps: Flow<Boolean> =
|
||||||
fingerprintSensor.flatMapLatest { flow { emit(fingerprintManager.isPowerbuttonFps()) } }
|
fingerprintSensor.flatMapLatest { flow { emit(fingerprintManager.isPowerbuttonFps()) } }
|
||||||
|
|
||||||
companion object {
|
private companion object {
|
||||||
|
const val TAG = "FingerprintSensorRepository"
|
||||||
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),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import androidx.preference.PreferenceFragmentCompat;
|
|||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.flags.Flags;
|
||||||
import com.android.settingslib.bluetooth.A2dpProfile;
|
import com.android.settingslib.bluetooth.A2dpProfile;
|
||||||
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
||||||
import com.android.settingslib.bluetooth.LeAudioProfile;
|
import com.android.settingslib.bluetooth.LeAudioProfile;
|
||||||
@@ -134,6 +135,9 @@ public class BluetoothDetailsAudioDeviceTypeController extends BluetoothDetailsC
|
|||||||
@Override
|
@Override
|
||||||
protected void init(PreferenceScreen screen) {
|
protected void init(PreferenceScreen screen) {
|
||||||
mProfilesContainer = screen.findPreference(getPreferenceKey());
|
mProfilesContainer = screen.findPreference(getPreferenceKey());
|
||||||
|
if (Flags.enableBluetoothDeviceDetailsPolish()) {
|
||||||
|
mProfilesContainer.setLayoutResource(R.layout.preference_category_bluetooth_no_padding);
|
||||||
|
}
|
||||||
refresh();
|
refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -96,6 +96,7 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
|
|||||||
new HashMap<String, List<CachedBluetoothDevice>>();
|
new HashMap<String, List<CachedBluetoothDevice>>();
|
||||||
private boolean mIsLeAudioToggleEnabled = false;
|
private boolean mIsLeAudioToggleEnabled = false;
|
||||||
private boolean mIsLeAudioOnlyDevice = false;
|
private boolean mIsLeAudioOnlyDevice = false;
|
||||||
|
private boolean mHasExtraSpace;
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
PreferenceCategory mProfilesContainer;
|
PreferenceCategory mProfilesContainer;
|
||||||
@@ -106,7 +107,8 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
|
|||||||
LocalBluetoothManager manager,
|
LocalBluetoothManager manager,
|
||||||
CachedBluetoothDevice device,
|
CachedBluetoothDevice device,
|
||||||
Lifecycle lifecycle,
|
Lifecycle lifecycle,
|
||||||
@Nullable List<String> invisibleProfiles) {
|
@Nullable List<String> invisibleProfiles,
|
||||||
|
boolean hasExtraSpace) {
|
||||||
super(context, fragment, device, lifecycle);
|
super(context, fragment, device, lifecycle);
|
||||||
mManager = manager;
|
mManager = manager;
|
||||||
mProfileManager = mManager.getProfileManager();
|
mProfileManager = mManager.getProfileManager();
|
||||||
@@ -115,12 +117,17 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
|
|||||||
if (invisibleProfiles != null) {
|
if (invisibleProfiles != null) {
|
||||||
mInvisibleProfiles = Set.copyOf(invisibleProfiles);
|
mInvisibleProfiles = Set.copyOf(invisibleProfiles);
|
||||||
}
|
}
|
||||||
|
mHasExtraSpace = hasExtraSpace;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void init(PreferenceScreen screen) {
|
protected void init(PreferenceScreen screen) {
|
||||||
mProfilesContainer = (PreferenceCategory)screen.findPreference(getPreferenceKey());
|
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
|
// Call refresh here even though it will get called later in onResume, to avoid the
|
||||||
// list of switches appearing to "pop" into the page.
|
// list of switches appearing to "pop" into the page.
|
||||||
refresh();
|
refresh();
|
||||||
@@ -609,7 +616,11 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
|
|||||||
Preference preference = mProfilesContainer.findPreference(KEY_BOTTOM_PREFERENCE);
|
Preference preference = mProfilesContainer.findPreference(KEY_BOTTOM_PREFERENCE);
|
||||||
if (preference == null) {
|
if (preference == null) {
|
||||||
preference = new Preference(mContext);
|
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.setEnabled(false);
|
||||||
preference.setKey(KEY_BOTTOM_PREFERENCE);
|
preference.setKey(KEY_BOTTOM_PREFERENCE);
|
||||||
preference.setOrder(ORDINAL);
|
preference.setOrder(ORDINAL);
|
||||||
|
|||||||
@@ -458,7 +458,7 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
|
|||||||
controllers.add(new BluetoothDetailsSpatialAudioController(context, this, mCachedDevice,
|
controllers.add(new BluetoothDetailsSpatialAudioController(context, this, mCachedDevice,
|
||||||
lifecycle));
|
lifecycle));
|
||||||
controllers.add(new BluetoothDetailsProfilesController(context, this, mManager,
|
controllers.add(new BluetoothDetailsProfilesController(context, this, mManager,
|
||||||
mCachedDevice, lifecycle, invisibleProfiles));
|
mCachedDevice, lifecycle, invisibleProfiles, invisibleProfiles == null));
|
||||||
controllers.add(new BluetoothDetailsMacAddressController(context, this, mCachedDevice,
|
controllers.add(new BluetoothDetailsMacAddressController(context, this, mCachedDevice,
|
||||||
lifecycle));
|
lifecycle));
|
||||||
controllers.add(new StylusDevicesController(context, mInputDevice, mCachedDevice,
|
controllers.add(new StylusDevicesController(context, mInputDevice, mCachedDevice,
|
||||||
|
|||||||
@@ -143,6 +143,7 @@ class DeviceDetailsMoreSettingsFragment : DashboardFragment() {
|
|||||||
formatter.getInvisibleBluetoothProfiles(
|
formatter.getInvisibleBluetoothProfiles(
|
||||||
FragmentTypeModel.DeviceDetailsMoreSettingsFragment
|
FragmentTypeModel.DeviceDetailsMoreSettingsFragment
|
||||||
),
|
),
|
||||||
|
false,
|
||||||
),
|
),
|
||||||
BluetoothDetailsAudioDeviceTypeController(
|
BluetoothDetailsAudioDeviceTypeController(
|
||||||
context,
|
context,
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ public class AudioSharingPasswordPreference extends ValidatedEditTextPreference
|
|||||||
@Nullable private EditText mEditText;
|
@Nullable private EditText mEditText;
|
||||||
@Nullable private CheckBox mCheckBox;
|
@Nullable private CheckBox mCheckBox;
|
||||||
@Nullable private View mDialogMessage;
|
@Nullable private View mDialogMessage;
|
||||||
|
@Nullable private View mEditTextFormatAlert;
|
||||||
private boolean mEditable = true;
|
private boolean mEditable = true;
|
||||||
|
|
||||||
interface OnDialogEventListener {
|
interface OnDialogEventListener {
|
||||||
@@ -77,6 +78,7 @@ public class AudioSharingPasswordPreference extends ValidatedEditTextPreference
|
|||||||
mEditText = view.findViewById(android.R.id.edit);
|
mEditText = view.findViewById(android.R.id.edit);
|
||||||
mCheckBox = view.findViewById(R.id.audio_sharing_stream_password_checkbox);
|
mCheckBox = view.findViewById(R.id.audio_sharing_stream_password_checkbox);
|
||||||
mDialogMessage = view.findViewById(android.R.id.message);
|
mDialogMessage = view.findViewById(android.R.id.message);
|
||||||
|
mEditTextFormatAlert = view.findViewById(R.id.edit_alert_message);
|
||||||
|
|
||||||
if (mEditText == null || mCheckBox == null || mDialogMessage == null) {
|
if (mEditText == null || mCheckBox == null || mDialogMessage == null) {
|
||||||
Log.w(TAG, "onBindDialogView() : Invalid layout");
|
Log.w(TAG, "onBindDialogView() : Invalid layout");
|
||||||
@@ -123,6 +125,14 @@ public class AudioSharingPasswordPreference extends ValidatedEditTextPreference
|
|||||||
mDialogMessage.setVisibility(editable ? GONE : VISIBLE);
|
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) {
|
void setChecked(boolean checked) {
|
||||||
if (mCheckBox == null) {
|
if (mCheckBox == null) {
|
||||||
Log.w(TAG, "setChecked() : Invalid layout");
|
Log.w(TAG, "setChecked() : Invalid layout");
|
||||||
|
|||||||
@@ -136,7 +136,11 @@ public class AudioSharingPasswordPreferenceController extends BasePreferenceCont
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isTextValid(String value) {
|
public boolean isTextValid(String value) {
|
||||||
return mAudioSharingPasswordValidator.isTextValid(value);
|
boolean isValid = mAudioSharingPasswordValidator.isTextValid(value);
|
||||||
|
if (mPreference != null) {
|
||||||
|
mPreference.showEditTextFormatAlert(!isValid);
|
||||||
|
}
|
||||||
|
return isValid;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
|||||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||||
|
|
||||||
public class AudioSharingReceiver extends BroadcastReceiver {
|
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 =
|
private static final String ACTION_LE_AUDIO_SHARING_SETTINGS =
|
||||||
"com.android.settings.BLUETOOTH_AUDIO_SHARING_SETTINGS";
|
"com.android.settings.BLUETOOTH_AUDIO_SHARING_SETTINGS";
|
||||||
private static final String ACTION_LE_AUDIO_SHARING_STOP =
|
private static final String ACTION_LE_AUDIO_SHARING_STOP =
|
||||||
@@ -49,10 +49,6 @@ public class AudioSharingReceiver extends BroadcastReceiver {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
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();
|
String action = intent.getAction();
|
||||||
if (action == null) {
|
if (action == null) {
|
||||||
Log.w(TAG, "Received unexpected intent with null action.");
|
Log.w(TAG, "Received unexpected intent with null action.");
|
||||||
@@ -66,13 +62,22 @@ public class AudioSharingReceiver extends BroadcastReceiver {
|
|||||||
intent.getIntExtra(
|
intent.getIntExtra(
|
||||||
LocalBluetoothLeBroadcast.EXTRA_LE_AUDIO_SHARING_STATE, -1);
|
LocalBluetoothLeBroadcast.EXTRA_LE_AUDIO_SHARING_STATE, -1);
|
||||||
if (state == LocalBluetoothLeBroadcast.BROADCAST_STATE_ON) {
|
if (state == LocalBluetoothLeBroadcast.BROADCAST_STATE_ON) {
|
||||||
|
if (!BluetoothUtils.isAudioSharingEnabled()) {
|
||||||
|
Log.w(TAG, "Skip showSharingNotification, feature disabled.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
showSharingNotification(context);
|
showSharingNotification(context);
|
||||||
metricsFeatureProvider.action(
|
metricsFeatureProvider.action(
|
||||||
context, SettingsEnums.ACTION_SHOW_AUDIO_SHARING_NOTIFICATION);
|
context, SettingsEnums.ACTION_SHOW_AUDIO_SHARING_NOTIFICATION);
|
||||||
} else if (state == LocalBluetoothLeBroadcast.BROADCAST_STATE_OFF) {
|
} 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);
|
cancelSharingNotification(context);
|
||||||
metricsFeatureProvider.action(
|
metricsFeatureProvider.action(
|
||||||
context, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION);
|
context, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
|
||||||
|
LocalBluetoothLeBroadcast.ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
|
||||||
} else {
|
} else {
|
||||||
Log.w(
|
Log.w(
|
||||||
TAG,
|
TAG,
|
||||||
@@ -80,16 +85,24 @@ public class AudioSharingReceiver extends BroadcastReceiver {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ACTION_LE_AUDIO_SHARING_STOP:
|
case ACTION_LE_AUDIO_SHARING_STOP:
|
||||||
LocalBluetoothManager manager = Utils.getLocalBtManager(context);
|
if (BluetoothUtils.isAudioSharingEnabled()) {
|
||||||
if (BluetoothUtils.isBroadcasting(manager)) {
|
LocalBluetoothManager manager = Utils.getLocalBtManager(context);
|
||||||
AudioSharingUtils.stopBroadcasting(manager);
|
if (BluetoothUtils.isBroadcasting(manager)) {
|
||||||
metricsFeatureProvider.action(
|
AudioSharingUtils.stopBroadcasting(manager);
|
||||||
context, SettingsEnums.ACTION_STOP_AUDIO_SHARING_FROM_NOTIFICATION);
|
metricsFeatureProvider.action(
|
||||||
} else {
|
context, SettingsEnums.ACTION_STOP_AUDIO_SHARING_FROM_NOTIFICATION);
|
||||||
cancelSharingNotification(context);
|
return;
|
||||||
metricsFeatureProvider.action(
|
}
|
||||||
context, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION);
|
|
||||||
}
|
}
|
||||||
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.w(TAG, "Received unexpected intent " + intent.getAction());
|
Log.w(TAG, "Received unexpected intent " + intent.getAction());
|
||||||
@@ -129,15 +142,15 @@ public class AudioSharingReceiver extends BroadcastReceiver {
|
|||||||
PendingIntent.FLAG_IMMUTABLE);
|
PendingIntent.FLAG_IMMUTABLE);
|
||||||
NotificationCompat.Action stopAction =
|
NotificationCompat.Action stopAction =
|
||||||
new NotificationCompat.Action.Builder(
|
new NotificationCompat.Action.Builder(
|
||||||
0,
|
0,
|
||||||
context.getString(R.string.audio_sharing_stop_button_label),
|
context.getString(R.string.audio_sharing_stop_button_label),
|
||||||
stopPendingIntent)
|
stopPendingIntent)
|
||||||
.build();
|
.build();
|
||||||
NotificationCompat.Action settingsAction =
|
NotificationCompat.Action settingsAction =
|
||||||
new NotificationCompat.Action.Builder(
|
new NotificationCompat.Action.Builder(
|
||||||
0,
|
0,
|
||||||
context.getString(R.string.audio_sharing_settings_button_label),
|
context.getString(R.string.audio_sharing_settings_button_label),
|
||||||
settingsPendingIntent)
|
settingsPendingIntent)
|
||||||
.build();
|
.build();
|
||||||
final Bundle extras = new Bundle();
|
final Bundle extras = new Bundle();
|
||||||
extras.putString(
|
extras.putString(
|
||||||
|
|||||||
@@ -34,8 +34,6 @@ class DataSaverScreen : PreferenceScreenCreator {
|
|||||||
override val icon: Int
|
override val icon: Int
|
||||||
get() = R.drawable.ic_settings_data_usage
|
get() = R.drawable.ic_settings_data_usage
|
||||||
|
|
||||||
override fun order(context: Context) = 10
|
|
||||||
|
|
||||||
override fun isFlagEnabled(context: Context) = Flags.catalystRestrictBackgroundParentEntry()
|
override fun isFlagEnabled(context: Context) = Flags.catalystRestrictBackgroundParentEntry()
|
||||||
|
|
||||||
override fun fragmentClass() = DataSaverSummary::class.java
|
override fun fragmentClass() = DataSaverSummary::class.java
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ class DisplayScreen :
|
|||||||
|
|
||||||
override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {
|
override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {
|
||||||
+DarkModeScreen.KEY
|
+DarkModeScreen.KEY
|
||||||
|
+PeakRefreshRateSwitchPreference()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isAvailable(context: Context) =
|
override fun isAvailable(context: Context) =
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ import com.android.settingslib.core.lifecycle.events.OnStop;
|
|||||||
|
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
|
// LINT.IfChange
|
||||||
public class PeakRefreshRatePreferenceController extends TogglePreferenceController
|
public class PeakRefreshRatePreferenceController extends TogglePreferenceController
|
||||||
implements LifecycleObserver, OnStart, OnStop {
|
implements LifecycleObserver, OnStart, OnStop {
|
||||||
|
|
||||||
@@ -196,3 +197,4 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl
|
|||||||
return defaultPeakRefreshRate;
|
return defaultPeakRefreshRate;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// LINT.ThenChange(PeakRefreshRateSwitchPreference.kt)
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -23,8 +23,8 @@ import androidx.preference.PreferenceScreen;
|
|||||||
|
|
||||||
import com.android.settings.core.BasePreferenceController;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
import com.android.settings.overlay.FeatureFactory;
|
import com.android.settings.overlay.FeatureFactory;
|
||||||
import com.android.settings.widget.TickButtonPreference;
|
|
||||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||||
|
import com.android.settingslib.widget.SelectorWithWidgetPreference;
|
||||||
|
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
@@ -32,9 +32,9 @@ import java.util.concurrent.Executors;
|
|||||||
public abstract class TermsOfAddressBaseController extends BasePreferenceController {
|
public abstract class TermsOfAddressBaseController extends BasePreferenceController {
|
||||||
|
|
||||||
private static final Executor sExecutor = Executors.newSingleThreadExecutor();
|
private static final Executor sExecutor = Executors.newSingleThreadExecutor();
|
||||||
private PreferenceScreen mPreferenceScreen;
|
|
||||||
private MetricsFeatureProvider mMetricsFeatureProvider;
|
private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||||
private TickButtonPreference mPreference;
|
private SelectorWithWidgetPreference mPreference;
|
||||||
|
|
||||||
private TermsOfAddressHelper mTermsOfAddressHelper;
|
private TermsOfAddressHelper mTermsOfAddressHelper;
|
||||||
|
|
||||||
public TermsOfAddressBaseController(Context context, String preferenceKey) {
|
public TermsOfAddressBaseController(Context context, String preferenceKey) {
|
||||||
@@ -49,34 +49,17 @@ public abstract class TermsOfAddressBaseController extends BasePreferenceControl
|
|||||||
@Override
|
@Override
|
||||||
public void displayPreference(PreferenceScreen screen) {
|
public void displayPreference(PreferenceScreen screen) {
|
||||||
super.displayPreference(screen);
|
super.displayPreference(screen);
|
||||||
mPreferenceScreen = screen;
|
|
||||||
mPreference = screen.findPreference(getPreferenceKey());
|
mPreference = screen.findPreference(getPreferenceKey());
|
||||||
mPreference.setOnPreferenceClickListener(clickedPref -> {
|
mPreference.setChecked(
|
||||||
|
mTermsOfAddressHelper.getSystemGrammaticalGender() == getGrammaticalGenderType());
|
||||||
|
mPreference.setOnClickListener(v -> {
|
||||||
sExecutor.execute(
|
sExecutor.execute(
|
||||||
() -> {
|
() -> {
|
||||||
mTermsOfAddressHelper.setSystemGrammaticalGender(
|
mTermsOfAddressHelper.setSystemGrammaticalGender(
|
||||||
getGrammaticalGenderType());
|
getGrammaticalGenderType());
|
||||||
});
|
});
|
||||||
setSelected(mPreference);
|
|
||||||
mMetricsFeatureProvider.action(mContext, getMetricsActionKey());
|
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
|
@Override
|
||||||
|
|||||||
@@ -35,7 +35,9 @@ class AdaptiveConnectivityScreen : PreferenceScreenCreator {
|
|||||||
|
|
||||||
override fun fragmentClass() = AdaptiveConnectivitySettings::class.java
|
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
|
override fun hasCompleteHierarchy() = false
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -29,6 +29,7 @@ import com.android.settings.widget.SettingsMainSwitchPreferenceController;
|
|||||||
* {@link SettingsMainSwitchPreferenceController}
|
* {@link SettingsMainSwitchPreferenceController}
|
||||||
* that controls whether Adaptive connectivity option is enabled.
|
* that controls whether Adaptive connectivity option is enabled.
|
||||||
*/
|
*/
|
||||||
|
// LINT.IfChange
|
||||||
public class AdaptiveConnectivityTogglePreferenceController extends
|
public class AdaptiveConnectivityTogglePreferenceController extends
|
||||||
SettingsMainSwitchPreferenceController {
|
SettingsMainSwitchPreferenceController {
|
||||||
|
|
||||||
@@ -69,3 +70,4 @@ public class AdaptiveConnectivityTogglePreferenceController extends
|
|||||||
return R.string.menu_key_network;
|
return R.string.menu_key_network;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// LINT.ThenChange(AdaptiveConnectivityTogglePreference.kt)
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import android.telephony.CarrierConfigManager
|
|||||||
import android.telephony.NetworkRegistrationInfo
|
import android.telephony.NetworkRegistrationInfo
|
||||||
import android.telephony.TelephonyManager
|
import android.telephony.TelephonyManager
|
||||||
import android.telephony.satellite.SatelliteManager
|
import android.telephony.satellite.SatelliteManager
|
||||||
|
import android.util.Log
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
import androidx.lifecycle.LifecycleOwner
|
import androidx.lifecycle.LifecycleOwner
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
@@ -92,6 +93,11 @@ class NetworkSelectRepository(context: Context, private val subId: Int) {
|
|||||||
* Update satellite PLMNs from the satellite framework.
|
* Update satellite PLMNs from the satellite framework.
|
||||||
*/
|
*/
|
||||||
private fun getSatellitePlmns(): List<String> {
|
private fun getSatellitePlmns(): List<String> {
|
||||||
|
if (satelliteManager == null) {
|
||||||
|
Log.d(TAG, "SatelliteManager is null")
|
||||||
|
return emptyList()
|
||||||
|
}
|
||||||
|
|
||||||
val config = carrierConfigManager.getConfigForSubId(
|
val config = carrierConfigManager.getConfigForSubId(
|
||||||
subId,
|
subId,
|
||||||
CarrierConfigManager.KEY_REMOVE_SATELLITE_PLMN_IN_MANUAL_NETWORK_SCAN_BOOL
|
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) {
|
return if (shouldFilter) {
|
||||||
satelliteManager.getSatellitePlmnsForCarrier(subId)
|
satelliteManager.getSatellitePlmnsForCarrier(subId)
|
||||||
} else {
|
} else {
|
||||||
emptyList();
|
emptyList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private companion object {
|
||||||
|
private const val TAG = "NetworkSelectRepository"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,8 +52,6 @@ open class CallVolumePreference :
|
|||||||
|
|
||||||
override fun getIcon(context: Context) = R.drawable.ic_local_phone_24_lib
|
override fun getIcon(context: Context) = R.drawable.ic_local_phone_24_lib
|
||||||
|
|
||||||
override fun order(context: Context) = -170
|
|
||||||
|
|
||||||
override fun isAvailable(context: Context) =
|
override fun isAvailable(context: Context) =
|
||||||
context.resources.getBoolean(R.bool.config_show_call_volume) &&
|
context.resources.getBoolean(R.bool.config_show_call_volume) &&
|
||||||
!createAudioHelper(context).isSingleVolume()
|
!createAudioHelper(context).isSingleVolume()
|
||||||
|
|||||||
@@ -49,8 +49,8 @@ class SoundScreen : PreferenceScreenCreator, PreferenceIconProvider {
|
|||||||
|
|
||||||
override fun getPreferenceHierarchy(context: Context) =
|
override fun getPreferenceHierarchy(context: Context) =
|
||||||
preferenceHierarchy(this) {
|
preferenceHierarchy(this) {
|
||||||
+CallVolumePreference()
|
+CallVolumePreference() order -170
|
||||||
+DialPadTonePreference()
|
+DialPadTonePreference() order -50
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
@@ -66,10 +66,13 @@ import com.android.internal.widget.LockscreenCredential;
|
|||||||
import com.android.internal.widget.TextViewInputDisabler;
|
import com.android.internal.widget.TextViewInputDisabler;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.SetupRedactionInterstitial;
|
import com.android.settings.SetupRedactionInterstitial;
|
||||||
|
import com.android.settings.SetupWizardUtils;
|
||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
import com.android.settingslib.animation.AppearAnimationUtils;
|
import com.android.settingslib.animation.AppearAnimationUtils;
|
||||||
import com.android.settingslib.animation.DisappearAnimationUtils;
|
import com.android.settingslib.animation.DisappearAnimationUtils;
|
||||||
|
|
||||||
|
import com.google.android.setupdesign.util.ThemeHelper;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
|
public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
|
||||||
@@ -85,6 +88,18 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
|
|||||||
public static class InternalActivity extends ConfirmLockPassword {
|
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
|
@Override
|
||||||
public Intent getIntent() {
|
public Intent getIntent() {
|
||||||
Intent modIntent = new Intent(super.getIntent());
|
Intent modIntent = new Intent(super.getIntent());
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ import com.android.settings.core.BasePreferenceController;
|
|||||||
import com.android.settings.core.SubSettingLauncher;
|
import com.android.settings.core.SubSettingLauncher;
|
||||||
import com.android.settings.dashboard.DashboardFragment;
|
import com.android.settings.dashboard.DashboardFragment;
|
||||||
import com.android.settings.overlay.FeatureFactory;
|
import com.android.settings.overlay.FeatureFactory;
|
||||||
import com.android.settings.widget.TickButtonPreference;
|
|
||||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||||
|
import com.android.settingslib.widget.SelectorWithWidgetPreference;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
@@ -138,13 +138,13 @@ public class NumberingSystemItemController extends BasePreferenceController {
|
|||||||
for (String localeTag : locales) {
|
for (String localeTag : locales) {
|
||||||
Locale supportedLocale = Locale.forLanguageTag(localeTag);
|
Locale supportedLocale = Locale.forLanguageTag(localeTag);
|
||||||
if (isSameBaseLocale(targetLocale, supportedLocale)) {
|
if (isSameBaseLocale(targetLocale, supportedLocale)) {
|
||||||
TickButtonPreference pref = new TickButtonPreference(mContext);
|
SelectorWithWidgetPreference pref = new SelectorWithWidgetPreference(mContext);
|
||||||
String numberingName = getNumberingSystem(supportedLocale);
|
String numberingName = getNumberingSystem(supportedLocale);
|
||||||
pref.setTitle(numberingName);
|
pref.setTitle(numberingName);
|
||||||
String key = supportedLocale.getUnicodeLocaleType(
|
String key = supportedLocale.getUnicodeLocaleType(
|
||||||
ExtensionTypes.NUMBERING_SYSTEM);
|
ExtensionTypes.NUMBERING_SYSTEM);
|
||||||
pref.setKey(key == null ? RegionalPreferencesDataUtils.DEFAULT_VALUE : key);
|
pref.setKey(key == null ? RegionalPreferencesDataUtils.DEFAULT_VALUE : key);
|
||||||
pref.setSelected(isSameNumberingSystem(targetLocale, supportedLocale));
|
pref.setChecked(isSameNumberingSystem(targetLocale, supportedLocale));
|
||||||
screen.addPreference(pref);
|
screen.addPreference(pref);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -168,11 +168,12 @@ public class NumberingSystemItemController extends BasePreferenceController {
|
|||||||
|
|
||||||
private void handleNumberSystemSelect(Preference preference) {
|
private void handleNumberSystemSelect(Preference preference) {
|
||||||
for (int i = 0; i < mPreferenceScreen.getPreferenceCount(); i++) {
|
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());
|
Log.i(TAG, "[onPreferenceClick] key is " + pref.getKey());
|
||||||
if (pref.getKey().equals(preference.getKey())) {
|
if (pref.getKey().equals(preference.getKey())) {
|
||||||
String numberingSystem = pref.getKey();
|
String numberingSystem = pref.getKey();
|
||||||
pref.setSelected(true);
|
pref.setChecked(true);
|
||||||
Locale updatedLocale =
|
Locale updatedLocale =
|
||||||
saveNumberingSystemToLocale(Locale.forLanguageTag(mSelectedLanguage),
|
saveNumberingSystemToLocale(Locale.forLanguageTag(mSelectedLanguage),
|
||||||
numberingSystem);
|
numberingSystem);
|
||||||
@@ -188,7 +189,7 @@ public class NumberingSystemItemController extends BasePreferenceController {
|
|||||||
mParentFragment.setArguments(bundle);
|
mParentFragment.setArguments(bundle);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
pref.setSelected(false);
|
pref.setChecked(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ import androidx.preference.PreferenceScreen;
|
|||||||
|
|
||||||
import com.android.settings.core.BasePreferenceController;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
import com.android.settings.overlay.FeatureFactory;
|
import com.android.settings.overlay.FeatureFactory;
|
||||||
import com.android.settings.widget.TickButtonPreference;
|
|
||||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||||
|
import com.android.settingslib.widget.SelectorWithWidgetPreference;
|
||||||
|
|
||||||
/** A base controller for handling all regional preferences controllers. */
|
/** A base controller for handling all regional preferences controllers. */
|
||||||
public abstract class RegionalPreferenceListBasePreferenceController extends
|
public abstract class RegionalPreferenceListBasePreferenceController extends
|
||||||
@@ -54,15 +54,14 @@ public abstract class RegionalPreferenceListBasePreferenceController extends
|
|||||||
String[] unitValues = getUnitValues();
|
String[] unitValues = getUnitValues();
|
||||||
|
|
||||||
for (int i = 0; i < unitValues.length; i++) {
|
for (int i = 0; i < unitValues.length; i++) {
|
||||||
TickButtonPreference pref = new TickButtonPreference(mContext);
|
SelectorWithWidgetPreference pref = new SelectorWithWidgetPreference(mContext);
|
||||||
mPreferenceCategory.addPreference(pref);
|
mPreferenceCategory.addPreference(pref);
|
||||||
final String item = unitValues[i];
|
final String item = unitValues[i];
|
||||||
final String value = RegionalPreferencesDataUtils.getDefaultUnicodeExtensionData(
|
final String value = RegionalPreferencesDataUtils.getDefaultUnicodeExtensionData(
|
||||||
mContext, getExtensionTypes());
|
mContext, getExtensionTypes());
|
||||||
pref.setTitle(getPreferenceTitle(item));
|
pref.setTitle(getPreferenceTitle(item));
|
||||||
pref.setKey(item);
|
pref.setKey(item);
|
||||||
pref.setOnPreferenceClickListener(clickedPref -> {
|
pref.setOnClickListener(v -> {
|
||||||
setSelected(pref);
|
|
||||||
RegionalPreferencesDataUtils.savePreference(mContext, getExtensionTypes(),
|
RegionalPreferencesDataUtils.savePreference(mContext, getExtensionTypes(),
|
||||||
item.equals(RegionalPreferencesDataUtils.DEFAULT_VALUE)
|
item.equals(RegionalPreferencesDataUtils.DEFAULT_VALUE)
|
||||||
? null : item);
|
? null : item);
|
||||||
@@ -70,20 +69,8 @@ public abstract class RegionalPreferenceListBasePreferenceController extends
|
|||||||
getMetricsActionKey() == SettingsEnums.ACTION_SET_FIRST_DAY_OF_WEEK ? ""
|
getMetricsActionKey() == SettingsEnums.ACTION_SET_FIRST_DAY_OF_WEEK ? ""
|
||||||
: getPreferenceTitle(value) + " > " + getPreferenceTitle(item);
|
: getPreferenceTitle(value) + " > " + getPreferenceTitle(item);
|
||||||
mMetricsFeatureProvider.action(mContext, getMetricsActionKey(), metrics);
|
mMetricsFeatureProvider.action(mContext, getMetricsActionKey(), metrics);
|
||||||
return true;
|
|
||||||
});
|
});
|
||||||
pref.setSelected(!value.isEmpty() && item.equals(value));
|
pref.setChecked(!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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,33 +22,52 @@ import static org.mockito.Mockito.doReturn;
|
|||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import android.bluetooth.BluetoothAdapter;
|
||||||
|
import android.bluetooth.BluetoothProfile;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.platform.test.annotations.EnableFlags;
|
||||||
|
import android.platform.test.flag.junit.SetFlagsRule;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
|
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.bluetooth.Utils;
|
||||||
import com.android.settings.testutils.XmlTestUtils;
|
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.Before;
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.Mock;
|
||||||
import org.mockito.Spy;
|
import org.mockito.Spy;
|
||||||
import org.mockito.junit.MockitoJUnit;
|
import org.mockito.junit.MockitoJUnit;
|
||||||
import org.mockito.junit.MockitoRule;
|
import org.mockito.junit.MockitoRule;
|
||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
|
import org.robolectric.annotation.Config;
|
||||||
|
import org.robolectric.shadow.api.Shadow;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/** Tests for {@link AccessibilityHearingAidsFragment}. */
|
/** Tests for {@link AccessibilityHearingAidsFragment}. */
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
|
@Config(shadows = {ShadowBluetoothAdapter.class, ShadowBluetoothUtils.class})
|
||||||
public class AccessibilityHearingAidsFragmentTest {
|
public class AccessibilityHearingAidsFragmentTest {
|
||||||
|
|
||||||
@Rule
|
@Rule
|
||||||
public MockitoRule mMockitoRule = MockitoJUnit.rule();
|
public MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||||
|
@Rule
|
||||||
|
public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
|
||||||
@Spy
|
@Spy
|
||||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private LocalBluetoothManager mLocalBluetoothManager;
|
||||||
|
private ShadowBluetoothAdapter mShadowBluetoothAdapter;
|
||||||
|
private BluetoothAdapter mBluetoothAdapter;
|
||||||
private TelephonyManager mTelephonyManager;
|
private TelephonyManager mTelephonyManager;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
@@ -56,10 +75,18 @@ public class AccessibilityHearingAidsFragmentTest {
|
|||||||
mTelephonyManager = spy(mContext.getSystemService(TelephonyManager.class));
|
mTelephonyManager = spy(mContext.getSystemService(TelephonyManager.class));
|
||||||
when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
|
when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
|
||||||
doReturn(true).when(mTelephonyManager).isHearingAidCompatibilitySupported();
|
doReturn(true).when(mTelephonyManager).isHearingAidCompatibilitySupported();
|
||||||
|
|
||||||
|
ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBluetoothManager;
|
||||||
|
mLocalBluetoothManager = Utils.getLocalBtManager(mContext);
|
||||||
|
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
|
||||||
|
mShadowBluetoothAdapter = Shadow.extract(mBluetoothAdapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getNonIndexableKeys_existInXmlLayout() {
|
public void getNonIndexableKeys_existInXmlLayout() {
|
||||||
|
mShadowBluetoothAdapter.clearSupportedProfiles();
|
||||||
|
mShadowBluetoothAdapter.addSupportedProfiles(BluetoothProfile.HEARING_AID);
|
||||||
|
|
||||||
final List<String> niks = AccessibilityHearingAidsFragment.SEARCH_INDEX_DATA_PROVIDER
|
final List<String> niks = AccessibilityHearingAidsFragment.SEARCH_INDEX_DATA_PROVIDER
|
||||||
.getNonIndexableKeys(mContext);
|
.getNonIndexableKeys(mContext);
|
||||||
final List<String> keys =
|
final List<String> keys =
|
||||||
@@ -67,4 +94,22 @@ public class AccessibilityHearingAidsFragmentTest {
|
|||||||
|
|
||||||
assertThat(keys).containsAtLeastElementsIn(niks);
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -656,7 +656,7 @@ public class BluetoothDetailsProfilesControllerTest extends BluetoothDetailsCont
|
|||||||
|
|
||||||
private void initController(List<String> invisibleProfiles) {
|
private void initController(List<String> invisibleProfiles) {
|
||||||
mController = new BluetoothDetailsProfilesController(mContext, mFragment, mLocalManager,
|
mController = new BluetoothDetailsProfilesController(mContext, mFragment, mLocalManager,
|
||||||
mCachedDevice, mLifecycle, invisibleProfiles);
|
mCachedDevice, mLifecycle, invisibleProfiles, true);
|
||||||
mProfiles.setKey(mController.getPreferenceKey());
|
mProfiles.setKey(mController.getPreferenceKey());
|
||||||
mController.mProfilesContainer = mProfiles;
|
mController.mProfilesContainer = mProfiles;
|
||||||
mScreen.removeAll();
|
mScreen.removeAll();
|
||||||
|
|||||||
@@ -320,16 +320,37 @@ public class AudioSharingPasswordPreferenceControllerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void idTextValid_emptyString() {
|
public void isTextValid_emptyString() {
|
||||||
boolean valid = mController.isTextValid("");
|
boolean valid = mController.isTextValid("");
|
||||||
|
|
||||||
assertThat(valid).isFalse();
|
assertThat(valid).isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@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);
|
boolean valid = mController.isTextValid(BROADCAST_PASSWORD);
|
||||||
|
|
||||||
assertThat(valid).isTrue();
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,10 +71,12 @@ public class AudioSharingPasswordPreferenceTest {
|
|||||||
var editText = view.findViewById(android.R.id.edit);
|
var editText = view.findViewById(android.R.id.edit);
|
||||||
var checkBox = view.findViewById(R.id.audio_sharing_stream_password_checkbox);
|
var checkBox = view.findViewById(R.id.audio_sharing_stream_password_checkbox);
|
||||||
var dialogMessage = view.findViewById(android.R.id.message);
|
var dialogMessage = view.findViewById(android.R.id.message);
|
||||||
|
var editTextAlertMessage = view.findViewById(R.id.edit_alert_message);
|
||||||
|
|
||||||
assertThat(editText).isNotNull();
|
assertThat(editText).isNotNull();
|
||||||
assertThat(checkBox).isNotNull();
|
assertThat(checkBox).isNotNull();
|
||||||
assertThat(dialogMessage).isNotNull();
|
assertThat(dialogMessage).isNotNull();
|
||||||
|
assertThat(editTextAlertMessage).isNotNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -147,6 +149,34 @@ public class AudioSharingPasswordPreferenceTest {
|
|||||||
assertThat(checkBox.isChecked()).isFalse();
|
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
|
@Test
|
||||||
public void onDialogEventListener_onClick_positiveButton() {
|
public void onDialogEventListener_onClick_positiveButton() {
|
||||||
AudioSharingPasswordPreference.OnDialogEventListener listener =
|
AudioSharingPasswordPreference.OnDialogEventListener listener =
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ public class AudioSharingReceiverTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void broadcastReceiver_receiveAudioSharingStateChangeIntentFlagOff_doNothing() {
|
public void broadcastReceiver_receiveAudioSharingStateOn_flagOff_doNothing() {
|
||||||
mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
||||||
|
|
||||||
Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
|
Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
|
||||||
@@ -140,6 +140,23 @@ public class AudioSharingReceiverTest {
|
|||||||
audioSharingReceiver.onReceive(mContext, intent);
|
audioSharingReceiver.onReceive(mContext, intent);
|
||||||
|
|
||||||
verifyNoInteractions(mNm);
|
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
|
@Test
|
||||||
@@ -152,10 +169,11 @@ public class AudioSharingReceiverTest {
|
|||||||
audioSharingReceiver.onReceive(mContext, intent);
|
audioSharingReceiver.onReceive(mContext, intent);
|
||||||
|
|
||||||
verifyNoInteractions(mNm);
|
verifyNoInteractions(mNm);
|
||||||
|
verifyNoInteractions(mFeatureFactory.metricsFeatureProvider);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void broadcastReceiver_receiveAudioSharingStateChangeIntentOnState_showNotification() {
|
public void broadcastReceiver_receiveAudioSharingStateOn_broadcastEnabled_showNotification() {
|
||||||
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
||||||
|
|
||||||
Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
|
Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
|
||||||
@@ -171,7 +189,26 @@ public class AudioSharingReceiverTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void
|
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);
|
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
||||||
|
|
||||||
Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
|
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(mNm).cancel(R.drawable.ic_bt_le_audio_sharing);
|
||||||
verify(mFeatureFactory.metricsFeatureProvider)
|
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
|
@Test
|
||||||
public void broadcastReceiver_receiveAudioSharingStopIntentFlagOff_doNothing() {
|
public void broadcastReceiver_receiveAudioSharingStop_broadcastDisabled_cancelNotification() {
|
||||||
mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
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 intent = new Intent(ACTION_LE_AUDIO_SHARING_STOP);
|
||||||
intent.setPackage(mContext.getPackageName());
|
intent.setPackage(mContext.getPackageName());
|
||||||
@@ -195,11 +235,14 @@ public class AudioSharingReceiverTest {
|
|||||||
audioSharingReceiver.onReceive(mContext, intent);
|
audioSharingReceiver.onReceive(mContext, intent);
|
||||||
|
|
||||||
verifyNoInteractions(mBroadcast);
|
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
|
@Test
|
||||||
public void
|
public void broadcastReceiver_receiveAudioSharingStop_notInBroadcast_cancelNotification() {
|
||||||
broadcastReceiver_receiveAudioSharingStopIntent_notInBroadcast_cancelNotification() {
|
|
||||||
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
||||||
when(mBroadcast.isEnabled(null)).thenReturn(false);
|
when(mBroadcast.isEnabled(null)).thenReturn(false);
|
||||||
int broadcastId = 1;
|
int broadcastId = 1;
|
||||||
@@ -213,11 +256,12 @@ public class AudioSharingReceiverTest {
|
|||||||
verify(mBroadcast, never()).stopBroadcast(broadcastId);
|
verify(mBroadcast, never()).stopBroadcast(broadcastId);
|
||||||
verify(mNm).cancel(R.drawable.ic_bt_le_audio_sharing);
|
verify(mNm).cancel(R.drawable.ic_bt_le_audio_sharing);
|
||||||
verify(mFeatureFactory.metricsFeatureProvider)
|
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
|
@Test
|
||||||
public void broadcastReceiver_receiveAudioSharingStopIntent_inBroadcast_stopBroadcast() {
|
public void broadcastReceiver_receiveAudioSharingStop_inBroadcast_stopBroadcast() {
|
||||||
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
|
||||||
when(mBroadcast.isEnabled(null)).thenReturn(true);
|
when(mBroadcast.isEnabled(null)).thenReturn(true);
|
||||||
int broadcastId = 1;
|
int broadcastId = 1;
|
||||||
@@ -231,6 +275,10 @@ public class AudioSharingReceiverTest {
|
|||||||
verify(mBroadcast).stopBroadcast(broadcastId);
|
verify(mBroadcast).stopBroadcast(broadcastId);
|
||||||
verify(mFeatureFactory.metricsFeatureProvider)
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
.action(mContext, SettingsEnums.ACTION_STOP_AUDIO_SHARING_FROM_NOTIFICATION);
|
.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) {
|
private AudioSharingReceiver getAudioSharingReceiver(Intent intent) {
|
||||||
|
|||||||
@@ -36,10 +36,11 @@ import org.mockito.MockitoAnnotations;
|
|||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
|
|
||||||
|
// LINT.IfChange
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class AdaptiveConnectivityTogglePreferenceControllerTest {
|
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)
|
@Mock(answer = RETURNS_DEEP_STUBS)
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
@@ -87,3 +88,4 @@ public class AdaptiveConnectivityTogglePreferenceControllerTest {
|
|||||||
verify(mWifiManager).setWifiScoringEnabled(false);
|
verify(mWifiManager).setWifiScoringEnabled(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// LINT.ThenChange(AdaptiveConnectivityTogglePreferenceTest.kt)
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -31,7 +31,7 @@ import androidx.preference.PreferenceScreen;
|
|||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
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.Before;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
@@ -53,10 +53,10 @@ public class TermsOfAddressFeminineControllerTest {
|
|||||||
private PreferenceCategory mPreferenceCategory;
|
private PreferenceCategory mPreferenceCategory;
|
||||||
private PreferenceScreen mPreferenceScreen;
|
private PreferenceScreen mPreferenceScreen;
|
||||||
private TermsOfAddressFeminineController mController;
|
private TermsOfAddressFeminineController mController;
|
||||||
private TickButtonPreference mFemininePreference;
|
private SelectorWithWidgetPreference mFemininePreference;
|
||||||
private TickButtonPreference mMasculinePreference;
|
private SelectorWithWidgetPreference mMasculinePreference;
|
||||||
private TickButtonPreference mNotSpecifiedPreference;
|
private SelectorWithWidgetPreference mNotSpecifiedPreference;
|
||||||
private TickButtonPreference mNeutralPreference;
|
private SelectorWithWidgetPreference mNeutralPreference;
|
||||||
private GrammaticalInflectionManager mGrammaticalInflectionManager;
|
private GrammaticalInflectionManager mGrammaticalInflectionManager;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
@@ -74,13 +74,13 @@ public class TermsOfAddressFeminineControllerTest {
|
|||||||
mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
|
mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
|
||||||
mPreferenceCategory = new PreferenceCategory(mContext);
|
mPreferenceCategory = new PreferenceCategory(mContext);
|
||||||
mPreferenceCategory.setKey(KEY_CATEGORY_TERMS_OF_ADDRESS);
|
mPreferenceCategory.setKey(KEY_CATEGORY_TERMS_OF_ADDRESS);
|
||||||
mNotSpecifiedPreference = new TickButtonPreference(mContext);
|
mNotSpecifiedPreference = new SelectorWithWidgetPreference(mContext);
|
||||||
mNotSpecifiedPreference.setKey(KEY_NOT_SPECIFIED);
|
mNotSpecifiedPreference.setKey(KEY_NOT_SPECIFIED);
|
||||||
mFemininePreference = new TickButtonPreference(mContext);
|
mFemininePreference = new SelectorWithWidgetPreference(mContext);
|
||||||
mFemininePreference.setKey(KEY_FEMININE);
|
mFemininePreference.setKey(KEY_FEMININE);
|
||||||
mMasculinePreference = new TickButtonPreference(mContext);
|
mMasculinePreference = new SelectorWithWidgetPreference(mContext);
|
||||||
mMasculinePreference.setKey(KEY_MASCULINE);
|
mMasculinePreference.setKey(KEY_MASCULINE);
|
||||||
mNeutralPreference = new TickButtonPreference(mContext);
|
mNeutralPreference = new SelectorWithWidgetPreference(mContext);
|
||||||
mNeutralPreference.setKey(KEY_NEUTRAL);
|
mNeutralPreference.setKey(KEY_NEUTRAL);
|
||||||
mPreferenceScreen.addPreference(mPreferenceCategory);
|
mPreferenceScreen.addPreference(mPreferenceCategory);
|
||||||
mPreferenceScreen.addPreference(mNotSpecifiedPreference);
|
mPreferenceScreen.addPreference(mNotSpecifiedPreference);
|
||||||
@@ -95,8 +95,8 @@ public class TermsOfAddressFeminineControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
@Ignore("b/339543490")
|
@Ignore("b/339543490")
|
||||||
public void displayPreference_setGrammaticalGenderIsFeminine_FeminineIsSelected() {
|
public void displayPreference_setGrammaticalGenderIsFeminine_FeminineIsSelected() {
|
||||||
TickButtonPreference selectedPreference =
|
SelectorWithWidgetPreference selectedPreference =
|
||||||
(TickButtonPreference) mPreferenceScreen.getPreference(2);
|
(SelectorWithWidgetPreference) mPreferenceScreen.getPreference(2);
|
||||||
selectedPreference.performClick();
|
selectedPreference.performClick();
|
||||||
|
|
||||||
assertThat(selectedPreference.getKey()).isEqualTo(KEY_FEMININE);
|
assertThat(selectedPreference.getKey()).isEqualTo(KEY_FEMININE);
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ import androidx.preference.PreferenceScreen;
|
|||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
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.Before;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
@@ -53,10 +53,10 @@ public class TermsOfAddressMasculineControllerTest {
|
|||||||
private PreferenceCategory mPreferenceCategory;
|
private PreferenceCategory mPreferenceCategory;
|
||||||
private PreferenceScreen mPreferenceScreen;
|
private PreferenceScreen mPreferenceScreen;
|
||||||
private TermsOfAddressMasculineController mController;
|
private TermsOfAddressMasculineController mController;
|
||||||
private TickButtonPreference mFemininePreference;
|
private SelectorWithWidgetPreference mFemininePreference;
|
||||||
private TickButtonPreference mMasculinePreference;
|
private SelectorWithWidgetPreference mMasculinePreference;
|
||||||
private TickButtonPreference mNotSpecifiedPreference;
|
private SelectorWithWidgetPreference mNotSpecifiedPreference;
|
||||||
private TickButtonPreference mNeutralPreference;
|
private SelectorWithWidgetPreference mNeutralPreference;
|
||||||
private GrammaticalInflectionManager mGrammaticalInflectionManager;
|
private GrammaticalInflectionManager mGrammaticalInflectionManager;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
@@ -74,13 +74,13 @@ public class TermsOfAddressMasculineControllerTest {
|
|||||||
mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
|
mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
|
||||||
mPreferenceCategory = new PreferenceCategory(mContext);
|
mPreferenceCategory = new PreferenceCategory(mContext);
|
||||||
mPreferenceCategory.setKey(KEY_CATEGORY_TERMS_OF_ADDRESS);
|
mPreferenceCategory.setKey(KEY_CATEGORY_TERMS_OF_ADDRESS);
|
||||||
mNotSpecifiedPreference = new TickButtonPreference(mContext);
|
mNotSpecifiedPreference = new SelectorWithWidgetPreference(mContext);
|
||||||
mNotSpecifiedPreference.setKey(KEY_NOT_SPECIFIED);
|
mNotSpecifiedPreference.setKey(KEY_NOT_SPECIFIED);
|
||||||
mFemininePreference = new TickButtonPreference(mContext);
|
mFemininePreference = new SelectorWithWidgetPreference(mContext);
|
||||||
mFemininePreference.setKey(KEY_FEMININE);
|
mFemininePreference.setKey(KEY_FEMININE);
|
||||||
mMasculinePreference = new TickButtonPreference(mContext);
|
mMasculinePreference = new SelectorWithWidgetPreference(mContext);
|
||||||
mMasculinePreference.setKey(KEY_MASCULINE);
|
mMasculinePreference.setKey(KEY_MASCULINE);
|
||||||
mNeutralPreference = new TickButtonPreference(mContext);
|
mNeutralPreference = new SelectorWithWidgetPreference(mContext);
|
||||||
mNeutralPreference.setKey(KEY_NEUTRAL);
|
mNeutralPreference.setKey(KEY_NEUTRAL);
|
||||||
mPreferenceScreen.addPreference(mPreferenceCategory);
|
mPreferenceScreen.addPreference(mPreferenceCategory);
|
||||||
mPreferenceScreen.addPreference(mNotSpecifiedPreference);
|
mPreferenceScreen.addPreference(mNotSpecifiedPreference);
|
||||||
@@ -95,8 +95,8 @@ public class TermsOfAddressMasculineControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
@Ignore("b/339543490")
|
@Ignore("b/339543490")
|
||||||
public void displayPreference_setGrammaticalGenderIsMasculine_MasculineIsSelected() {
|
public void displayPreference_setGrammaticalGenderIsMasculine_MasculineIsSelected() {
|
||||||
TickButtonPreference selectedPreference =
|
SelectorWithWidgetPreference selectedPreference =
|
||||||
(TickButtonPreference) mPreferenceScreen.getPreference(3);
|
(SelectorWithWidgetPreference) mPreferenceScreen.getPreference(3);
|
||||||
selectedPreference.performClick();
|
selectedPreference.performClick();
|
||||||
|
|
||||||
assertThat(selectedPreference.getKey()).isEqualTo(KEY_MASCULINE);
|
assertThat(selectedPreference.getKey()).isEqualTo(KEY_MASCULINE);
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ import androidx.preference.PreferenceScreen;
|
|||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
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.Before;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
@@ -53,10 +53,10 @@ public class TermsOfAddressNeutralControllerTest {
|
|||||||
private PreferenceCategory mPreferenceCategory;
|
private PreferenceCategory mPreferenceCategory;
|
||||||
private PreferenceScreen mPreferenceScreen;
|
private PreferenceScreen mPreferenceScreen;
|
||||||
private TermsOfAddressNeutralController mController;
|
private TermsOfAddressNeutralController mController;
|
||||||
private TickButtonPreference mFemininePreference;
|
private SelectorWithWidgetPreference mFemininePreference;
|
||||||
private TickButtonPreference mMasculinePreference;
|
private SelectorWithWidgetPreference mMasculinePreference;
|
||||||
private TickButtonPreference mNotSpecifiedPreference;
|
private SelectorWithWidgetPreference mNotSpecifiedPreference;
|
||||||
private TickButtonPreference mNeutralPreference;
|
private SelectorWithWidgetPreference mNeutralPreference;
|
||||||
private GrammaticalInflectionManager mGrammaticalInflectionManager;
|
private GrammaticalInflectionManager mGrammaticalInflectionManager;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
@@ -74,13 +74,13 @@ public class TermsOfAddressNeutralControllerTest {
|
|||||||
mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
|
mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
|
||||||
mPreferenceCategory = new PreferenceCategory(mContext);
|
mPreferenceCategory = new PreferenceCategory(mContext);
|
||||||
mPreferenceCategory.setKey(KEY_CATEGORY_TERMS_OF_ADDRESS);
|
mPreferenceCategory.setKey(KEY_CATEGORY_TERMS_OF_ADDRESS);
|
||||||
mNotSpecifiedPreference = new TickButtonPreference(mContext);
|
mNotSpecifiedPreference = new SelectorWithWidgetPreference(mContext);
|
||||||
mNotSpecifiedPreference.setKey(KEY_NOT_SPECIFIED);
|
mNotSpecifiedPreference.setKey(KEY_NOT_SPECIFIED);
|
||||||
mFemininePreference = new TickButtonPreference(mContext);
|
mFemininePreference = new SelectorWithWidgetPreference(mContext);
|
||||||
mFemininePreference.setKey(KEY_FEMININE);
|
mFemininePreference.setKey(KEY_FEMININE);
|
||||||
mMasculinePreference = new TickButtonPreference(mContext);
|
mMasculinePreference = new SelectorWithWidgetPreference(mContext);
|
||||||
mMasculinePreference.setKey(KEY_MASCULINE);
|
mMasculinePreference.setKey(KEY_MASCULINE);
|
||||||
mNeutralPreference = new TickButtonPreference(mContext);
|
mNeutralPreference = new SelectorWithWidgetPreference(mContext);
|
||||||
mNeutralPreference.setKey(KEY_NEUTRAL);
|
mNeutralPreference.setKey(KEY_NEUTRAL);
|
||||||
mPreferenceScreen.addPreference(mPreferenceCategory);
|
mPreferenceScreen.addPreference(mPreferenceCategory);
|
||||||
mPreferenceScreen.addPreference(mNotSpecifiedPreference);
|
mPreferenceScreen.addPreference(mNotSpecifiedPreference);
|
||||||
@@ -95,8 +95,8 @@ public class TermsOfAddressNeutralControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
@Ignore("b/339543490")
|
@Ignore("b/339543490")
|
||||||
public void displayPreference_setGrammaticalGenderIsNotSpecified_NeutralIsSelected() {
|
public void displayPreference_setGrammaticalGenderIsNotSpecified_NeutralIsSelected() {
|
||||||
TickButtonPreference selectedPreference =
|
SelectorWithWidgetPreference selectedPreference =
|
||||||
(TickButtonPreference) mPreferenceScreen.getPreference(4);
|
(SelectorWithWidgetPreference) mPreferenceScreen.getPreference(4);
|
||||||
selectedPreference.performClick();
|
selectedPreference.performClick();
|
||||||
|
|
||||||
assertThat(selectedPreference.getKey()).isEqualTo(KEY_NEUTRAL);
|
assertThat(selectedPreference.getKey()).isEqualTo(KEY_NEUTRAL);
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ import androidx.preference.PreferenceScreen;
|
|||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
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.Before;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
@@ -53,10 +53,10 @@ public class TermsOfAddressNotSpecifiedControllerTest {
|
|||||||
private PreferenceCategory mPreferenceCategory;
|
private PreferenceCategory mPreferenceCategory;
|
||||||
private PreferenceScreen mPreferenceScreen;
|
private PreferenceScreen mPreferenceScreen;
|
||||||
private TermsOfAddressNotSpecifiedController mController;
|
private TermsOfAddressNotSpecifiedController mController;
|
||||||
private TickButtonPreference mFemininePreference;
|
private SelectorWithWidgetPreference mFemininePreference;
|
||||||
private TickButtonPreference mMasculinePreference;
|
private SelectorWithWidgetPreference mMasculinePreference;
|
||||||
private TickButtonPreference mNotSpecifiedPreference;
|
private SelectorWithWidgetPreference mNotSpecifiedPreference;
|
||||||
private TickButtonPreference mNeutralPreference;
|
private SelectorWithWidgetPreference mNeutralPreference;
|
||||||
private GrammaticalInflectionManager mGrammaticalInflectionManager;
|
private GrammaticalInflectionManager mGrammaticalInflectionManager;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
@@ -74,13 +74,13 @@ public class TermsOfAddressNotSpecifiedControllerTest {
|
|||||||
mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
|
mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
|
||||||
mPreferenceCategory = new PreferenceCategory(mContext);
|
mPreferenceCategory = new PreferenceCategory(mContext);
|
||||||
mPreferenceCategory.setKey(KEY_CATEGORY_TERMS_OF_ADDRESS);
|
mPreferenceCategory.setKey(KEY_CATEGORY_TERMS_OF_ADDRESS);
|
||||||
mNotSpecifiedPreference = new TickButtonPreference(mContext);
|
mNotSpecifiedPreference = new SelectorWithWidgetPreference(mContext);
|
||||||
mNotSpecifiedPreference.setKey(KEY_NOT_SPECIFIED);
|
mNotSpecifiedPreference.setKey(KEY_NOT_SPECIFIED);
|
||||||
mFemininePreference = new TickButtonPreference(mContext);
|
mFemininePreference = new SelectorWithWidgetPreference(mContext);
|
||||||
mFemininePreference.setKey(KEY_FEMININE);
|
mFemininePreference.setKey(KEY_FEMININE);
|
||||||
mMasculinePreference = new TickButtonPreference(mContext);
|
mMasculinePreference = new SelectorWithWidgetPreference(mContext);
|
||||||
mMasculinePreference.setKey(KEY_MASCULINE);
|
mMasculinePreference.setKey(KEY_MASCULINE);
|
||||||
mNeutralPreference = new TickButtonPreference(mContext);
|
mNeutralPreference = new SelectorWithWidgetPreference(mContext);
|
||||||
mNeutralPreference.setKey(KEY_NEUTRAL);
|
mNeutralPreference.setKey(KEY_NEUTRAL);
|
||||||
mPreferenceScreen.addPreference(mPreferenceCategory);
|
mPreferenceScreen.addPreference(mPreferenceCategory);
|
||||||
mPreferenceScreen.addPreference(mNotSpecifiedPreference);
|
mPreferenceScreen.addPreference(mNotSpecifiedPreference);
|
||||||
@@ -95,8 +95,8 @@ public class TermsOfAddressNotSpecifiedControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
@Ignore("b/339543490")
|
@Ignore("b/339543490")
|
||||||
public void displayPreference_setGrammaticalGenderIsNotSpecified_NotSpecifiedIsSelected() {
|
public void displayPreference_setGrammaticalGenderIsNotSpecified_NotSpecifiedIsSelected() {
|
||||||
TickButtonPreference selectedPreference =
|
SelectorWithWidgetPreference selectedPreference =
|
||||||
(TickButtonPreference) mPreferenceScreen.getPreference(1);
|
(SelectorWithWidgetPreference) mPreferenceScreen.getPreference(1);
|
||||||
selectedPreference.performClick();
|
selectedPreference.performClick();
|
||||||
|
|
||||||
assertThat(selectedPreference.getKey()).isEqualTo(KEY_NOT_SPECIFIED);
|
assertThat(selectedPreference.getKey()).isEqualTo(KEY_NOT_SPECIFIED);
|
||||||
|
|||||||
@@ -25,16 +25,15 @@ import android.os.LocaleList;
|
|||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.provider.Settings;
|
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.PreferenceCategory;
|
||||||
|
import androidx.preference.PreferenceManager;
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
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.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -91,8 +90,9 @@ public class FirstDayOfWeekItemListControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void displayPreference_setSelectPreferredFirstDayOfWeekIsDefault() {
|
public void displayPreference_setSelectPreferredFirstDayOfWeekIsDefault() {
|
||||||
TickButtonPreference pref = (TickButtonPreference) mPreferenceCategory.getPreference(0);
|
SelectorWithWidgetPreference pref =
|
||||||
pref.performClick();
|
(SelectorWithWidgetPreference) mPreferenceCategory.getPreference(0);
|
||||||
|
pref.onClick();
|
||||||
String record = Settings.System.getString(
|
String record = Settings.System.getString(
|
||||||
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
|
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
|
||||||
|
|
||||||
@@ -103,8 +103,9 @@ public class FirstDayOfWeekItemListControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void displayPreference_setSelectPreferredFirstDayOfWeekIsSunday() {
|
public void displayPreference_setSelectPreferredFirstDayOfWeekIsSunday() {
|
||||||
TickButtonPreference pref = (TickButtonPreference) mPreferenceCategory.getPreference(1);
|
SelectorWithWidgetPreference pref =
|
||||||
pref.performClick();
|
(SelectorWithWidgetPreference) mPreferenceCategory.getPreference(1);
|
||||||
|
pref.onClick();
|
||||||
String record = Settings.System.getString(
|
String record = Settings.System.getString(
|
||||||
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
|
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
|
||||||
|
|
||||||
@@ -114,8 +115,9 @@ public class FirstDayOfWeekItemListControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void displayPreference_setSelectPreferredFirstDayOfWeekIsMonday() {
|
public void displayPreference_setSelectPreferredFirstDayOfWeekIsMonday() {
|
||||||
TickButtonPreference pref = (TickButtonPreference) mPreferenceCategory.getPreference(2);
|
SelectorWithWidgetPreference pref =
|
||||||
pref.performClick();
|
(SelectorWithWidgetPreference) mPreferenceCategory.getPreference(2);
|
||||||
|
pref.onClick();
|
||||||
String record = Settings.System.getString(
|
String record = Settings.System.getString(
|
||||||
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
|
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ import androidx.test.core.app.ApplicationProvider;
|
|||||||
|
|
||||||
import com.android.internal.app.LocalePicker;
|
import com.android.internal.app.LocalePicker;
|
||||||
import com.android.settings.testutils.FakeFeatureFactory;
|
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.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -82,7 +82,8 @@ public class NumberingSystemItemControllerTest {
|
|||||||
NumberingSystemItemController.ARG_VALUE_LANGUAGE_SELECT);
|
NumberingSystemItemController.ARG_VALUE_LANGUAGE_SELECT);
|
||||||
bundle.putString(
|
bundle.putString(
|
||||||
NumberingSystemItemController.KEY_SELECTED_LANGUAGE, Locale.US.toLanguageTag());
|
NumberingSystemItemController.KEY_SELECTED_LANGUAGE, Locale.US.toLanguageTag());
|
||||||
TickButtonPreference preference = new TickButtonPreference(mApplicationContext);
|
SelectorWithWidgetPreference preference =
|
||||||
|
new SelectorWithWidgetPreference(mApplicationContext);
|
||||||
preference.setKey("I_am_the_key");
|
preference.setKey("I_am_the_key");
|
||||||
mPreferenceScreen.addPreference(preference);
|
mPreferenceScreen.addPreference(preference);
|
||||||
mController = new NumberingSystemItemController(mApplicationContext, bundle);
|
mController = new NumberingSystemItemController(mApplicationContext, bundle);
|
||||||
@@ -110,7 +111,8 @@ public class NumberingSystemItemControllerTest {
|
|||||||
NumberingSystemItemController.ARG_VALUE_NUMBERING_SYSTEM_SELECT);
|
NumberingSystemItemController.ARG_VALUE_NUMBERING_SYSTEM_SELECT);
|
||||||
bundle.putString(
|
bundle.putString(
|
||||||
NumberingSystemItemController.KEY_SELECTED_LANGUAGE, Locale.US.toLanguageTag());
|
NumberingSystemItemController.KEY_SELECTED_LANGUAGE, Locale.US.toLanguageTag());
|
||||||
TickButtonPreference preference = new TickButtonPreference(mApplicationContext);
|
SelectorWithWidgetPreference preference =
|
||||||
|
new SelectorWithWidgetPreference(mApplicationContext);
|
||||||
preference.setKey("test_key");
|
preference.setKey("test_key");
|
||||||
mPreferenceScreen.addPreference(preference);
|
mPreferenceScreen.addPreference(preference);
|
||||||
mController = new NumberingSystemItemController(mApplicationContext, bundle);
|
mController = new NumberingSystemItemController(mApplicationContext, bundle);
|
||||||
@@ -133,8 +135,10 @@ public class NumberingSystemItemControllerTest {
|
|||||||
NumberingSystemItemController.ARG_VALUE_NUMBERING_SYSTEM_SELECT);
|
NumberingSystemItemController.ARG_VALUE_NUMBERING_SYSTEM_SELECT);
|
||||||
bundle.putString(
|
bundle.putString(
|
||||||
NumberingSystemItemController.KEY_SELECTED_LANGUAGE, "ar-BH");
|
NumberingSystemItemController.KEY_SELECTED_LANGUAGE, "ar-BH");
|
||||||
TickButtonPreference defaultPreference = new TickButtonPreference(mApplicationContext);
|
SelectorWithWidgetPreference defaultPreference =
|
||||||
TickButtonPreference numberPreference = new TickButtonPreference(mApplicationContext);
|
new SelectorWithWidgetPreference(mApplicationContext);
|
||||||
|
SelectorWithWidgetPreference numberPreference =
|
||||||
|
new SelectorWithWidgetPreference(mApplicationContext);
|
||||||
defaultPreference.setKey("default");
|
defaultPreference.setKey("default");
|
||||||
numberPreference.setKey("latn");
|
numberPreference.setKey("latn");
|
||||||
mPreferenceScreen.addPreference(defaultPreference);
|
mPreferenceScreen.addPreference(defaultPreference);
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package com.android.settings.regionalpreferences;
|
package com.android.settings.regionalpreferences;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -24,16 +25,15 @@ import android.os.LocaleList;
|
|||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.provider.Settings;
|
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.PreferenceCategory;
|
||||||
|
import androidx.preference.PreferenceManager;
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
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.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -88,8 +88,9 @@ public class TemperatureUnitListControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void displayPreference_setSelectPreferredTemperatureUnitIsDefault() {
|
public void displayPreference_setSelectPreferredTemperatureUnitIsDefault() {
|
||||||
TickButtonPreference pref = (TickButtonPreference) mPreferenceCategory.getPreference(0);
|
SelectorWithWidgetPreference pref =
|
||||||
pref.performClick();
|
(SelectorWithWidgetPreference) mPreferenceCategory.getPreference(0);
|
||||||
|
pref.onClick();
|
||||||
String record = Settings.System.getString(
|
String record = Settings.System.getString(
|
||||||
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
|
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
|
||||||
|
|
||||||
@@ -101,8 +102,9 @@ public class TemperatureUnitListControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void displayPreference_setSelectPreferredTemperatureUnitIsCelsius() {
|
public void displayPreference_setSelectPreferredTemperatureUnitIsCelsius() {
|
||||||
TickButtonPreference pref = (TickButtonPreference) mPreferenceCategory.getPreference(1);
|
SelectorWithWidgetPreference pref =
|
||||||
pref.performClick();
|
(SelectorWithWidgetPreference) mPreferenceCategory.getPreference(1);
|
||||||
|
pref.onClick();
|
||||||
String record = Settings.System.getString(
|
String record = Settings.System.getString(
|
||||||
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
|
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
|
||||||
|
|
||||||
@@ -112,8 +114,9 @@ public class TemperatureUnitListControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void displayPreference_setSelectPreferredTemperatureUnitIsFahrenhe() {
|
public void displayPreference_setSelectPreferredTemperatureUnitIsFahrenhe() {
|
||||||
TickButtonPreference pref = (TickButtonPreference) mPreferenceCategory.getPreference(2);
|
SelectorWithWidgetPreference pref =
|
||||||
pref.performClick();
|
(SelectorWithWidgetPreference) mPreferenceCategory.getPreference(2);
|
||||||
|
pref.onClick();
|
||||||
String record = Settings.System.getString(
|
String record = Settings.System.getString(
|
||||||
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
|
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user