Snap for 13046591 from bc93bb60aa to 25Q2-release

Change-Id: I030eda05fb737b5fcba68546e10bdc18ecdede1c
This commit is contained in:
Android Build Coastguard Worker
2025-02-11 16:21:41 -08:00
54 changed files with 454 additions and 214 deletions

View File

@@ -22,7 +22,6 @@
android:id="@+id/alias" android:id="@+id/alias"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1"
android:textAppearance="?android:attr/textAppearanceMedium" /> android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView <TextView

View File

@@ -12533,12 +12533,14 @@
<!-- Summary to show the current network mode is invalid. [CHAR LIMIT=NONE]--> <!-- Summary to show the current network mode is invalid. [CHAR LIMIT=NONE]-->
<string name="mobile_network_mode_error">Invalid Network Mode <xliff:g id="networkModeId" example="0">%1$d</xliff:g>. Ignore.</string> <string name="mobile_network_mode_error">Invalid Network Mode <xliff:g id="networkModeId" example="0">%1$d</xliff:g>. Ignore.</string>
<!-- Title for _satellite_setting_preference_layout in mobile network settings [CHAR LIMIT=60] --> <!-- Title for satellite setting preference in mobile network settings [CHAR LIMIT=60] -->
<string name="satellite_setting_title">Satellite messaging</string> <string name="satellite_setting_title">Satellite messaging</string>
<!-- Summary for _satellite_setting_preference_layout. [CHAR LIMIT=NONE]--> <!-- Summary for satellite setting preference. [CHAR LIMIT=NONE]-->
<string name="satellite_setting_enabled_summary">Send and receive text messages by satellite. Included with your account.</string> <string name="satellite_setting_enabled_summary">Send and receive text messages by satellite. Included with your account.</string>
<!-- Summary for _satellite_setting_preference_layout. [CHAR LIMIT=NONE]--> <!-- Summary for satellite setting preference. [CHAR LIMIT=NONE]-->
<string name="satellite_setting_disabled_summary">Send and receive text messages by satellite. Not included with your account.</string> <string name="satellite_setting_disabled_summary">Send and receive text messages by satellite. Not included with your account.</string>
<!-- Summary for satellite setting preference without entitlement [CHAR LIMIT=NONE]-->
<string name="satellite_setting_summary_without_entitlement">Send and receive text messages by satellite. Contact your carrier for details.</string>
<!-- Search keywords for "_satellite_setting_preference_layout" [CHAR_LIMIT=NONE] --> <!-- Search keywords for "_satellite_setting_preference_layout" [CHAR_LIMIT=NONE] -->
<string name="keywords_satellite_setting">Satellite messaging, satellite connectivity</string> <string name="keywords_satellite_setting">Satellite messaging, satellite connectivity</string>
<!-- Category name "About satellite messaging" [CHAR_LIMIT=NONE] --> <!-- Category name "About satellite messaging" [CHAR_LIMIT=NONE] -->
@@ -12565,6 +12567,8 @@
<string name="summary_supported_service">You can text anyone, including emergency services. Your phone will reconnect to a mobile network when available.</string> <string name="summary_supported_service">You can text anyone, including emergency services. Your phone will reconnect to a mobile network when available.</string>
<!-- learn more text - more about satellite messaging [CHAR_LIMIT=NONE] --> <!-- learn more text - more about satellite messaging [CHAR_LIMIT=NONE] -->
<string name="satellite_setting_summary_more_information"><xliff:g id="subject" example="satellite messaging">%1$s</xliff:g> may take longer and is available only in some areas. Weather and certain structures may affect your satellite connection. Calling by satellite isn\u2019t available. Emergency calls may still connect.\n\nIt may take some time for account changes to show in Settings. Contact <xliff:g id="carrier_name" example="T-Mobile">%2$s</xliff:g> for details.</string> <string name="satellite_setting_summary_more_information"><xliff:g id="subject" example="satellite messaging">%1$s</xliff:g> may take longer and is available only in some areas. Weather and certain structures may affect your satellite connection. Calling by satellite isn\u2019t available. Emergency calls may still connect.\n\nIt may take some time for account changes to show in Settings. Contact <xliff:g id="carrier_name" example="T-Mobile">%2$s</xliff:g> for details.</string>
<!-- learn more text - more about satellite messaging without emergency messaging support. [CHAR_LIMIT=NONE] -->
<string name="satellite_setting_summary_more_information_no_emergency_messaging"><xliff:g id="subject" example="satellite messaging">%1$s</xliff:g> may take longer and is available only in some areas. Weather and certain structures may affect your satellite connection. Calling by satellite isn\u2019t available. Emergency calls may still connect. Texting with emergency services may not be available in all areas.\n\nIt may take some time for account changes to show in Settings. Contact <xliff:g id="carrier_name" example="T-Mobile">%2$s</xliff:g> for details.</string>
<!-- more about satellite messaging [CHAR_LIMIT=NONE] --> <!-- more about satellite messaging [CHAR_LIMIT=NONE] -->
<string name="more_about_satellite_messaging">More about <xliff:g id="subject" example="satellite messaging">%1$s</xliff:g></string> <string name="more_about_satellite_messaging">More about <xliff:g id="subject" example="satellite messaging">%1$s</xliff:g></string>
<!-- Title for satellite warning dialog to avoid user using wifi/bluetooth/airplane mode [CHAR_LIMIT=NONE] --> <!-- Title for satellite warning dialog to avoid user using wifi/bluetooth/airplane mode [CHAR_LIMIT=NONE] -->
@@ -14012,6 +14016,12 @@
<string name="audio_sharing_incompatible_dialog_title">Can\'t share audio with <xliff:g example="My buds" id="device_name">%1$s</xliff:g></string> <string name="audio_sharing_incompatible_dialog_title">Can\'t share audio with <xliff:g example="My buds" id="device_name">%1$s</xliff:g></string>
<!-- Content for audio sharing incompatible device dialog [CHAR LIMIT=none]--> <!-- Content for audio sharing incompatible device dialog [CHAR LIMIT=none]-->
<string name="audio_sharing_incompatible_dialog_content">Audio sharing only works with headphones that support LE Audio</string> <string name="audio_sharing_incompatible_dialog_content">Audio sharing only works with headphones that support LE Audio</string>
<!-- Title for block pairing dialog in audio sharing [CHAR LIMIT=none]-->
<string name="audio_sharing_block_pairing_dialog_title">Turn off Audio Sharing</string>
<!-- Content for block pairing dialog in audio sharing [CHAR LIMIT=none]-->
<string name="audio_sharing_block_pairing_dialog_content">To pair a new device, turn off Audio Sharing first.</string>
<!-- Text for audio sharing turn off button [CHAR LIMIT=none]-->
<string name="audio_sharing_turn_off_button_label">Turn off</string>
<!-- Title for audio streams preference category [CHAR LIMIT=none]--> <!-- Title for audio streams preference category [CHAR LIMIT=none]-->
<string name="audio_streams_category_title">Connect to a LE audio stream</string> <string name="audio_streams_category_title">Connect to a LE audio stream</string>

View File

@@ -38,6 +38,7 @@ import com.android.settings.flags.Flags;
import com.android.settings.fuelgauge.BatterySettingsStorage; import com.android.settings.fuelgauge.BatterySettingsStorage;
import com.android.settings.homepage.SettingsHomepageActivity; import com.android.settings.homepage.SettingsHomepageActivity;
import com.android.settings.localepicker.LocaleNotificationDataManager; import com.android.settings.localepicker.LocaleNotificationDataManager;
import com.android.settings.metrics.SettingsMetricsLogger;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settings.overlay.FeatureFactoryImpl; import com.android.settings.overlay.FeatureFactoryImpl;
import com.android.settings.spa.SettingsSpaEnvironment; import com.android.settings.spa.SettingsSpaEnvironment;

View File

@@ -17,6 +17,9 @@
package com.android.settings package com.android.settings
import androidx.preference.Preference import androidx.preference.Preference
import com.android.settings.restriction.PreferenceRestrictionMixin
import com.android.settings.restriction.getRestrictionEnforcedAdmin
import com.android.settings.restriction.hasBaseUserRestriction
import com.android.settingslib.RestrictedPreferenceHelperProvider import com.android.settingslib.RestrictedPreferenceHelperProvider
import com.android.settingslib.metadata.PreferenceHierarchyNode import com.android.settingslib.metadata.PreferenceHierarchyNode
import com.android.settingslib.preference.DefaultPreferenceBindingFactory import com.android.settingslib.preference.DefaultPreferenceBindingFactory

View File

@@ -68,9 +68,6 @@ public class ColorAndMotionFragment extends DashboardFragment {
mShortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED); mShortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED);
mShortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED); mShortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED);
mShortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE);
mShortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS);
mShortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_QS_TARGETS);
mSettingsContentObserver = new AccessibilitySettingsContentObserver(new Handler()); mSettingsContentObserver = new AccessibilitySettingsContentObserver(new Handler());
mSettingsContentObserver.registerKeysToObserverCallback(mShortcutFeatureKeys, mSettingsContentObserver.registerKeysToObserverCallback(mShortcutFeatureKeys,

View File

@@ -20,9 +20,9 @@ import android.annotation.DrawableRes
import android.app.settings.SettingsEnums.ACTION_REMOVE_ANIMATION import android.app.settings.SettingsEnums.ACTION_REMOVE_ANIMATION
import android.content.Context import android.content.Context
import android.provider.Settings import android.provider.Settings
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.R import com.android.settings.R
import com.android.settings.contract.KEY_REMOVE_ANIMATION import com.android.settings.contract.KEY_REMOVE_ANIMATION
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settingslib.datastore.HandlerExecutor import com.android.settingslib.datastore.HandlerExecutor
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.KeyedObserver import com.android.settingslib.datastore.KeyedObserver

View File

@@ -22,9 +22,9 @@ import android.os.Vibrator
import android.provider.Settings import android.provider.Settings
import android.widget.CompoundButton import android.widget.CompoundButton
import android.widget.CompoundButton.OnCheckedChangeListener import android.widget.CompoundButton.OnCheckedChangeListener
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.R import com.android.settings.R
import com.android.settings.contract.KEY_VIBRATION_HAPTICS import com.android.settings.contract.KEY_VIBRATION_HAPTICS
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.KeyedObservableDelegate import com.android.settingslib.datastore.KeyedObservableDelegate
import com.android.settingslib.datastore.SettingsStore import com.android.settingslib.datastore.SettingsStore

View File

@@ -1,4 +1 @@
# Default reviewers for this and subdirectories. include platform/frameworks/base:/services/core/java/com/android/server/notification/OWNERS
beverlyt@google.com
dsandler@android.com
juliacr@google.com

View File

@@ -1,2 +1 @@
beverlyt@google.com include platform/frameworks/base:/services/core/java/com/android/server/notification/OWNERS
juliacr@google.com

View File

@@ -155,6 +155,7 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
final boolean isExpressiveStyle = BiometricUtils.isExpressiveStyle(getBaseContext());
if (shouldShowSplitScreenDialog()) { if (shouldShowSplitScreenDialog()) {
BiometricsSplitScreenDialog BiometricsSplitScreenDialog
@@ -213,12 +214,15 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
mFooterBarMixin = layout.getMixin(FooterBarMixin.class); mFooterBarMixin = layout.getMixin(FooterBarMixin.class);
mFooterBarMixin.setPrimaryButton(getPrimaryFooterButton()); mFooterBarMixin.setPrimaryButton(getPrimaryFooterButton());
mFooterBarMixin.setSecondaryButton(getSecondaryFooterButton(), true /* usePrimaryStyle */); mFooterBarMixin.setSecondaryButton(getSecondaryFooterButton(), true /* usePrimaryStyle */);
if (!isExpressiveStyle) {
mFooterBarMixin.getSecondaryButton().setVisibility( mFooterBarMixin.getSecondaryButton().setVisibility(
mHasScrolledToBottom ? View.VISIBLE : View.INVISIBLE); mHasScrolledToBottom ? View.VISIBLE : View.INVISIBLE);
}
final RequireScrollMixin requireScrollMixin = layout.getMixin(RequireScrollMixin.class); final RequireScrollMixin requireScrollMixin = layout.getMixin(RequireScrollMixin.class);
requireScrollMixin.requireScrollWithButton(this, getPrimaryFooterButton(), requireScrollMixin.requireScrollWithButton(this, getPrimaryFooterButton(),
getMoreButtonTextRes(), this::onNextButtonClick); getMoreButtonTextRes(), this::onNextButtonClick);
if (!isExpressiveStyle) {
requireScrollMixin.setOnRequireScrollStateChangedListener( requireScrollMixin.setOnRequireScrollStateChangedListener(
scrollNeeded -> { scrollNeeded -> {
boolean enrollmentCompleted = checkMaxEnrolled() != 0; boolean enrollmentCompleted = checkMaxEnrolled() != 0;
@@ -232,9 +236,11 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
// Show secondary button once scroll is completed. // Show secondary button once scroll is completed.
getSecondaryFooterButton().setVisibility( getSecondaryFooterButton().setVisibility(
!scrollNeeded && !enrollmentCompleted ? View.VISIBLE : View.INVISIBLE); !scrollNeeded && !enrollmentCompleted ? View.VISIBLE
: View.INVISIBLE);
mHasScrolledToBottom = !scrollNeeded; mHasScrolledToBottom = !scrollNeeded;
}); });
}
final boolean isScrollNeeded = requireScrollMixin.isScrollingRequired(); final boolean isScrollNeeded = requireScrollMixin.isScrollingRequired();
final boolean enrollmentCompleted = checkMaxEnrolled() != 0; final boolean enrollmentCompleted = checkMaxEnrolled() != 0;

View File

@@ -50,8 +50,10 @@ import com.android.settings.overlay.FeatureFactory;
import com.android.settings.password.ChooseLockGeneric; import com.android.settings.password.ChooseLockGeneric;
import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.password.SetupChooseLockGeneric; import com.android.settings.password.SetupChooseLockGeneric;
import com.android.settingslib.widget.SettingsThemeHelper;
import com.google.android.setupcompat.util.WizardManagerHelper; import com.google.android.setupcompat.util.WizardManagerHelper;
import com.google.android.setupdesign.util.ThemeHelper;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
@@ -530,6 +532,16 @@ public class BiometricUtils {
return ssb.toString(); return ssb.toString();
} }
/**
* Check if device is using Expressive Style theme.
* @param context that for applying Expressive Style
* @return true if device using Expressive Style theme, otherwise false.
*/
public static boolean isExpressiveStyle(@NonNull Context context) {
return SettingsThemeHelper.isExpressiveTheme(context)
|| ThemeHelper.shouldApplyGlifExpressiveStyle(context);
}
private static String capitalize(final String input) { private static String capitalize(final String input) {
return Character.toUpperCase(input.charAt(0)) + input.substring(1); return Character.toUpperCase(input.charAt(0)) + input.substring(1);
} }

View File

@@ -48,6 +48,7 @@ import com.android.settings.widget.GearPreference;
import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.flags.Flags;
import com.android.settingslib.utils.ThreadUtils; import com.android.settingslib.utils.ThreadUtils;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
@@ -93,6 +94,7 @@ public final class BluetoothDevicePreference extends GearPreference {
private final int mType; private final int mType;
private AlertDialog mDisconnectDialog; private AlertDialog mDisconnectDialog;
@Nullable private AlertDialog mBlockPairingDialog;
private String contentDescription = null; private String contentDescription = null;
private boolean mHideSecondTarget = false; private boolean mHideSecondTarget = false;
private boolean mIsCallbackRemoved = true; private boolean mIsCallbackRemoved = true;
@@ -409,13 +411,24 @@ public final class BluetoothDevicePreference extends GearPreference {
SettingsEnums.ACTION_SETTINGS_BLUETOOTH_CONNECT); SettingsEnums.ACTION_SETTINGS_BLUETOOTH_CONNECT);
mCachedDevice.connect(); mCachedDevice.connect();
} else if (bondState == BluetoothDevice.BOND_NONE) { } else if (bondState == BluetoothDevice.BOND_NONE) {
var unused = ThreadUtils.postOnBackgroundThread(() -> {
if (Flags.enableTemporaryBondDevicesUi() && Utils.shouldBlockPairingInAudioSharing(
mLocalBtManager)) {
// TODO: collect metric
context.getMainExecutor().execute(() ->
mBlockPairingDialog =
Utils.showBlockPairingDialog(context, mBlockPairingDialog,
mLocalBtManager));
return;
}
metricsFeatureProvider.action(context, metricsFeatureProvider.action(context,
SettingsEnums.ACTION_SETTINGS_BLUETOOTH_PAIR); SettingsEnums.ACTION_SETTINGS_BLUETOOTH_PAIR);
if (!mCachedDevice.hasHumanReadableName()) { if (!mCachedDevice.hasHumanReadableName()) {
metricsFeatureProvider.action(context, metricsFeatureProvider.action(context,
SettingsEnums.ACTION_SETTINGS_BLUETOOTH_PAIR_DEVICES_WITHOUT_NAMES); SettingsEnums.ACTION_SETTINGS_BLUETOOTH_PAIR_DEVICES_WITHOUT_NAMES);
} }
pair(); context.getMainExecutor().execute(() -> pair());
});
} }
} }

View File

@@ -34,6 +34,7 @@ import android.util.Log;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
@@ -44,6 +45,7 @@ import com.android.settingslib.bluetooth.BluetoothUtils;
import com.android.settingslib.bluetooth.BluetoothUtils.ErrorListener; import com.android.settingslib.bluetooth.BluetoothUtils.ErrorListener;
import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager; import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast;
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastAssistant; import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastAssistant;
import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothManager.BluetoothManagerCallback; import com.android.settingslib.bluetooth.LocalBluetoothManager.BluetoothManagerCallback;
@@ -324,4 +326,33 @@ public final class Utils {
.map(d -> BluetoothUtils.getGroupId(deviceManager.findDevice(d))).collect( .map(d -> BluetoothUtils.getGroupId(deviceManager.findDevice(d))).collect(
Collectors.toSet()).size() >= 2); Collectors.toSet()).size() >= 2);
} }
/**
* Show block pairing dialog during audio sharing
* @param context The dialog context
* @param dialog The dialog if already exists
* @param localBtManager {@link LocalBluetoothManager}
* @return The block pairing dialog
*/
@Nullable
static AlertDialog showBlockPairingDialog(@NonNull Context context,
@Nullable AlertDialog dialog, @Nullable LocalBluetoothManager localBtManager) {
if (!com.android.settingslib.flags.Flags.enableTemporaryBondDevicesUi()) return null;
if (dialog != null && dialog.isShowing()) return dialog;
if (dialog == null) {
AlertDialog.Builder builder = new AlertDialog.Builder(context)
.setNegativeButton(android.R.string.cancel, null)
.setTitle(R.string.audio_sharing_block_pairing_dialog_title)
.setMessage(R.string.audio_sharing_block_pairing_dialog_content);
LocalBluetoothLeBroadcast broadcast = localBtManager == null ? null :
localBtManager.getProfileManager().getLeAudioBroadcastProfile();
if (broadcast != null) {
builder.setPositiveButton(R.string.audio_sharing_turn_off_button_label,
(dlg, which) -> broadcast.stopLatestBroadcast());
}
dialog = builder.create();
}
dialog.show();
return dialog;
}
} }

View File

@@ -28,12 +28,12 @@ import android.os.UserManager
import android.provider.Settings import android.provider.Settings
import android.widget.Toast import android.widget.Toast
import androidx.preference.Preference import androidx.preference.Preference
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settings.contract.KEY_BLUETOOTH import com.android.settings.contract.KEY_BLUETOOTH
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settings.network.SatelliteRepository.Companion.isSatelliteOn import com.android.settings.network.SatelliteRepository.Companion.isSatelliteOn
import com.android.settings.network.SatelliteWarningDialogActivity import com.android.settings.network.SatelliteWarningDialogActivity
import com.android.settings.restriction.PreferenceRestrictionMixin
import com.android.settings.widget.MainSwitchBarMetadata import com.android.settings.widget.MainSwitchBarMetadata
import com.android.settingslib.WirelessUtils import com.android.settingslib.WirelessUtils
import com.android.settingslib.datastore.AbstractKeyedDataObservable import com.android.settingslib.datastore.AbstractKeyedDataObservable

View File

@@ -44,10 +44,12 @@ import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.bluetooth.BluetoothUtils; import com.android.settingslib.bluetooth.BluetoothUtils;
import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager; import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
import com.android.settingslib.bluetooth.LeAudioProfile;
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast; import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast;
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastAssistant; import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastAssistant;
import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.flags.Flags;
import com.android.settingslib.utils.ThreadUtils; import com.android.settingslib.utils.ThreadUtils;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
@@ -225,6 +227,14 @@ public class AudioSharingDialogHandler {
mLocalBtManager, groupedDevices, /* filterByInSharing= */ true); mLocalBtManager, groupedDevices, /* filterByInSharing= */ true);
AudioSharingStopDialogFragment.DialogEventListener listener = AudioSharingStopDialogFragment.DialogEventListener listener =
() -> { () -> {
if (Flags.adoptPrimaryGroupManagementApi() && mLocalBtManager != null) {
LeAudioProfile profile =
mLocalBtManager.getProfileManager().getLeAudioProfile();
if (profile != null) {
profile.setBroadcastToUnicastFallbackGroup(
BluetoothCsipSetCoordinator.GROUP_ID_INVALID);
}
}
cachedDevice.setActive(); cachedDevice.setActive();
mIsStoppingBroadcast = true; mIsStoppingBroadcast = true;
AudioSharingUtils.stopBroadcasting(mLocalBtManager); AudioSharingUtils.stopBroadcasting(mLocalBtManager);

View File

@@ -18,9 +18,9 @@ package com.android.settings.datausage
import android.app.settings.SettingsEnums.ACTION_DATA_SAVER_MODE import android.app.settings.SettingsEnums.ACTION_DATA_SAVER_MODE
import android.content.Context import android.content.Context
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.R import com.android.settings.R
import com.android.settings.contract.KEY_DATA_SAVER import com.android.settings.contract.KEY_DATA_SAVER
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settings.widget.MainSwitchBarMetadata import com.android.settings.widget.MainSwitchBarMetadata
import com.android.settingslib.datastore.AbstractKeyedDataObservable import com.android.settingslib.datastore.AbstractKeyedDataObservable
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore

View File

@@ -27,10 +27,10 @@ import android.hardware.SensorPrivacyManager.Sensors.CAMERA
import android.os.PowerManager import android.os.PowerManager
import android.os.UserManager import android.os.UserManager
import android.provider.Settings import android.provider.Settings
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settings.contract.KEY_SCREEN_ATTENTION import com.android.settings.contract.KEY_SCREEN_ATTENTION
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settings.restriction.PreferenceRestrictionMixin
import com.android.settingslib.RestrictedSwitchPreference import com.android.settingslib.RestrictedSwitchPreference
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.KeyedObservableDelegate import com.android.settingslib.datastore.KeyedObservableDelegate

View File

@@ -23,11 +23,11 @@ import android.os.SystemProperties
import android.os.UserHandle import android.os.UserHandle
import android.os.UserManager import android.os.UserManager
import android.provider.Settings.Secure.DOZE_ALWAYS_ON import android.provider.Settings.Secure.DOZE_ALWAYS_ON
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settings.contract.KEY_AMBIENT_DISPLAY_ALWAYS_ON import com.android.settings.contract.KEY_AMBIENT_DISPLAY_ALWAYS_ON
import com.android.settings.display.AmbientDisplayAlwaysOnPreferenceController.isAodSuppressedByBedtime import com.android.settings.display.AmbientDisplayAlwaysOnPreferenceController.isAodSuppressedByBedtime
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settings.restriction.PreferenceRestrictionMixin
import com.android.settingslib.datastore.AbstractKeyedDataObservable import com.android.settingslib.datastore.AbstractKeyedDataObservable
import com.android.settingslib.datastore.HandlerExecutor import com.android.settingslib.datastore.HandlerExecutor
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore

View File

@@ -23,11 +23,11 @@ import android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC
import android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL import android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settings.contract.KEY_ADAPTIVE_BRIGHTNESS import com.android.settings.contract.KEY_ADAPTIVE_BRIGHTNESS
import com.android.settings.flags.Flags import com.android.settings.flags.Flags
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settings.restriction.PreferenceRestrictionMixin
import com.android.settingslib.PrimarySwitchPreferenceBinding import com.android.settingslib.PrimarySwitchPreferenceBinding
import com.android.settingslib.datastore.AbstractKeyedDataObservable import com.android.settingslib.datastore.AbstractKeyedDataObservable
import com.android.settingslib.datastore.HandlerExecutor import com.android.settingslib.datastore.HandlerExecutor

View File

@@ -18,10 +18,10 @@ package com.android.settings.display
import android.app.settings.SettingsEnums.OPEN_BATTERY_PERCENTAGE import android.app.settings.SettingsEnums.OPEN_BATTERY_PERCENTAGE
import android.content.Context import android.content.Context
import android.provider.Settings import android.provider.Settings
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.R import com.android.settings.R
import com.android.settings.Utils import com.android.settings.Utils
import com.android.settings.contract.KEY_BATTERY_PERCENTAGE import com.android.settings.contract.KEY_BATTERY_PERCENTAGE
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.KeyedObservableDelegate import com.android.settingslib.datastore.KeyedObservableDelegate
import com.android.settingslib.datastore.SettingsStore import com.android.settingslib.datastore.SettingsStore

View File

@@ -27,12 +27,12 @@ import android.hardware.display.DisplayManager.DisplayListener
import android.os.UserManager import android.os.UserManager
import android.provider.Settings.System import android.provider.Settings.System
import androidx.preference.Preference import androidx.preference.Preference
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settings.Utils import com.android.settings.Utils
import com.android.settings.contract.KEY_BRIGHTNESS_LEVEL import com.android.settings.contract.KEY_BRIGHTNESS_LEVEL
import com.android.settings.core.SettingsBaseActivity import com.android.settings.core.SettingsBaseActivity
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settings.restriction.PreferenceRestrictionMixin
import com.android.settingslib.RestrictedPreference import com.android.settingslib.RestrictedPreference
import com.android.settingslib.datastore.AbstractKeyedDataObservable import com.android.settingslib.datastore.AbstractKeyedDataObservable
import com.android.settingslib.datastore.HandlerExecutor import com.android.settingslib.datastore.HandlerExecutor

View File

@@ -24,9 +24,9 @@ import com.android.internal.display.RefreshRateSettingsUtils.DEFAULT_REFRESH_RAT
import com.android.internal.display.RefreshRateSettingsUtils.findHighestRefreshRateAmongAllDisplays import com.android.internal.display.RefreshRateSettingsUtils.findHighestRefreshRateAmongAllDisplays
import com.android.internal.display.RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay import com.android.internal.display.RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay
import com.android.server.display.feature.flags.Flags import com.android.server.display.feature.flags.Flags
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.R import com.android.settings.R
import com.android.settings.contract.KEY_SMOOTH_DISPLAY import com.android.settings.contract.KEY_SMOOTH_DISPLAY
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settingslib.datastore.HandlerExecutor import com.android.settingslib.datastore.HandlerExecutor
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.KeyedObservableDelegate import com.android.settingslib.datastore.KeyedObservableDelegate

View File

@@ -22,10 +22,10 @@ import android.content.Context
import android.os.PowerManager import android.os.PowerManager
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.R import com.android.settings.R
import com.android.settings.contract.KEY_DARK_THEME import com.android.settings.contract.KEY_DARK_THEME
import com.android.settings.flags.Flags import com.android.settings.flags.Flags
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settingslib.PrimarySwitchPreferenceBinding import com.android.settingslib.PrimarySwitchPreferenceBinding
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.Permissions import com.android.settingslib.datastore.Permissions

View File

@@ -20,10 +20,10 @@ import android.app.settings.SettingsEnums.ACTION_BATTERY_LEVEL
import android.content.Context import android.content.Context
import androidx.annotation.VisibleForTesting import androidx.annotation.VisibleForTesting
import androidx.preference.Preference import androidx.preference.Preference
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.R import com.android.settings.R
import com.android.settings.contract.KEY_BATTERY_LEVEL import com.android.settings.contract.KEY_BATTERY_LEVEL
import com.android.settings.fuelgauge.BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_NOT_PRESENT import com.android.settings.fuelgauge.BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_NOT_PRESENT
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settingslib.Utils import com.android.settingslib.Utils
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.NoOpKeyedObservable import com.android.settingslib.datastore.NoOpKeyedObservable

View File

@@ -19,11 +19,11 @@ import android.Manifest
import android.app.settings.SettingsEnums.ACTION_BATTERY_SAVER import android.app.settings.SettingsEnums.ACTION_BATTERY_SAVER
import android.content.Context import android.content.Context
import android.os.PowerManager import android.os.PowerManager
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.R import com.android.settings.R
import com.android.settings.contract.KEY_BATTERY_SAVER import com.android.settings.contract.KEY_BATTERY_SAVER
import com.android.settings.fuelgauge.BatterySaverReceiver import com.android.settings.fuelgauge.BatterySaverReceiver
import com.android.settings.fuelgauge.BatterySaverReceiver.BatterySaverListener import com.android.settings.fuelgauge.BatterySaverReceiver.BatterySaverListener
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settingslib.datastore.AbstractKeyedDataObservable import com.android.settingslib.datastore.AbstractKeyedDataObservable
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.Permissions import com.android.settingslib.datastore.Permissions

View File

@@ -53,13 +53,6 @@ public class KeyboardAccessibilityBounceKeysController extends
mPrimaryPreference = screen.findPreference(getPreferenceKey()); mPrimaryPreference = screen.findPreference(getPreferenceKey());
} }
@Override
public int getAvailabilityStatus() {
return (super.getAvailabilityStatus() == AVAILABLE)
&& InputSettings.isAccessibilityBounceKeysFeatureEnabled() ? AVAILABLE
: UNSUPPORTED_ON_DEVICE;
}
@Override @Override
public boolean handlePreferenceTreeClick(@NonNull Preference preference) { public boolean handlePreferenceTreeClick(@NonNull Preference preference) {
if (!TextUtils.equals(preference.getKey(), getPreferenceKey()) if (!TextUtils.equals(preference.getKey(), getPreferenceKey())

View File

@@ -65,13 +65,6 @@ public class KeyboardAccessibilitySlowKeysController extends
return true; return true;
} }
@Override
public int getAvailabilityStatus() {
return (super.getAvailabilityStatus() == AVAILABLE)
&& InputSettings.isAccessibilitySlowKeysFeatureFlagEnabled() ? AVAILABLE
: UNSUPPORTED_ON_DEVICE;
}
@Override @Override
protected void onInputSettingUpdated() { protected void onInputSettingUpdated() {
if (mPrimarySwitchPreference != null) { if (mPrimarySwitchPreference != null) {

View File

@@ -60,13 +60,6 @@ public class KeyboardAccessibilityStickyKeysController extends
return true; return true;
} }
@Override
public int getAvailabilityStatus() {
return (super.getAvailabilityStatus() == AVAILABLE)
&& InputSettings.isAccessibilitySlowKeysFeatureFlagEnabled() ? AVAILABLE
: UNSUPPORTED_ON_DEVICE;
}
@Override @Override
protected void onInputSettingUpdated() { protected void onInputSettingUpdated() {
if (mTwoStatePreference != null) { if (mTwoStatePreference != null) {

View File

@@ -169,16 +169,13 @@ public final class PhysicalKeyboardFragment extends DashboardFragment
mKeyboardAssistanceCategory.removePreference( mKeyboardAssistanceCategory.removePreference(
findPreference(ACCESSIBILITY_PHYSICAL_KEYBOARD_A11Y)); findPreference(ACCESSIBILITY_PHYSICAL_KEYBOARD_A11Y));
} }
if (!InputSettings.isAccessibilityBounceKeysFeatureEnabled() if (isKeyboardAndTouchpadA11yNewPageEnabled) {
|| isKeyboardAndTouchpadA11yNewPageEnabled) {
mKeyboardA11yCategory.removePreference(mAccessibilityBounceKeys); mKeyboardA11yCategory.removePreference(mAccessibilityBounceKeys);
} }
if (!InputSettings.isAccessibilitySlowKeysFeatureFlagEnabled() if (isKeyboardAndTouchpadA11yNewPageEnabled) {
|| isKeyboardAndTouchpadA11yNewPageEnabled) {
mKeyboardA11yCategory.removePreference(mAccessibilitySlowKeys); mKeyboardA11yCategory.removePreference(mAccessibilitySlowKeys);
} }
if (!InputSettings.isAccessibilityStickyKeysFeatureEnabled() if (isKeyboardAndTouchpadA11yNewPageEnabled) {
|| isKeyboardAndTouchpadA11yNewPageEnabled) {
mKeyboardA11yCategory.removePreference(mAccessibilityStickyKeys); mKeyboardA11yCategory.removePreference(mAccessibilityStickyKeys);
} }
if (!InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled() if (!InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()
@@ -338,15 +335,12 @@ public final class PhysicalKeyboardFragment extends DashboardFragment
mFeatureProvider.registerKeyboardInformationCategory(preferenceScreen); mFeatureProvider.registerKeyboardInformationCategory(preferenceScreen);
} }
if (InputSettings.isAccessibilityBounceKeysFeatureEnabled()
|| InputSettings.isAccessibilityStickyKeysFeatureEnabled()
|| InputSettings.isAccessibilitySlowKeysFeatureFlagEnabled()
|| InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()) {
Objects.requireNonNull(mKeyboardA11yCategory).setOrder(2); Objects.requireNonNull(mKeyboardA11yCategory).setOrder(2);
preferenceScreen.addPreference(mKeyboardA11yCategory); preferenceScreen.addPreference(mKeyboardA11yCategory);
updateAccessibilityStickyKeysSwitch(context);
updateAccessibilityBounceKeysSwitch(context); updateAccessibilityBounceKeysSwitch(context);
updateAccessibilitySlowKeysSwitch(context); updateAccessibilitySlowKeysSwitch(context);
updateAccessibilityStickyKeysSwitch(context); if (InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()) {
updateAccessibilityMouseKeysSwitch(context); updateAccessibilityMouseKeysSwitch(context);
} }
} }
@@ -370,27 +364,21 @@ public final class PhysicalKeyboardFragment extends DashboardFragment
false, false,
mContentObserver, mContentObserver,
UserHandle.myUserId()); UserHandle.myUserId());
if (InputSettings.isAccessibilityBounceKeysFeatureEnabled()) {
contentResolver.registerContentObserver( contentResolver.registerContentObserver(
sAccessibilityBounceKeysUri, sAccessibilityBounceKeysUri,
false, false,
mContentObserver, mContentObserver,
UserHandle.myUserId()); UserHandle.myUserId());
}
if (InputSettings.isAccessibilitySlowKeysFeatureFlagEnabled()) {
contentResolver.registerContentObserver( contentResolver.registerContentObserver(
sAccessibilitySlowKeysUri, sAccessibilitySlowKeysUri,
false, false,
mContentObserver, mContentObserver,
UserHandle.myUserId()); UserHandle.myUserId());
}
if (InputSettings.isAccessibilityStickyKeysFeatureEnabled()) {
contentResolver.registerContentObserver( contentResolver.registerContentObserver(
sAccessibilityStickyKeysUri, sAccessibilityStickyKeysUri,
false, false,
mContentObserver, mContentObserver,
UserHandle.myUserId()); UserHandle.myUserId());
}
if (InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()) { if (InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()) {
contentResolver.registerContentObserver( contentResolver.registerContentObserver(
sAccessibilityMouseKeysUri, sAccessibilityMouseKeysUri,
@@ -413,25 +401,16 @@ public final class PhysicalKeyboardFragment extends DashboardFragment
} }
private void updateAccessibilityBounceKeysSwitch(@NonNull Context context) { private void updateAccessibilityBounceKeysSwitch(@NonNull Context context) {
if (!InputSettings.isAccessibilityBounceKeysFeatureEnabled()) {
return;
}
Objects.requireNonNull(mAccessibilityBounceKeys).setChecked( Objects.requireNonNull(mAccessibilityBounceKeys).setChecked(
InputSettings.isAccessibilityBounceKeysEnabled(context)); InputSettings.isAccessibilityBounceKeysEnabled(context));
} }
private void updateAccessibilitySlowKeysSwitch(@NonNull Context context) { private void updateAccessibilitySlowKeysSwitch(@NonNull Context context) {
if (!InputSettings.isAccessibilitySlowKeysFeatureFlagEnabled()) {
return;
}
Objects.requireNonNull(mAccessibilitySlowKeys).setChecked( Objects.requireNonNull(mAccessibilitySlowKeys).setChecked(
InputSettings.isAccessibilitySlowKeysEnabled(context)); InputSettings.isAccessibilitySlowKeysEnabled(context));
} }
private void updateAccessibilityStickyKeysSwitch(@NonNull Context context) { private void updateAccessibilityStickyKeysSwitch(@NonNull Context context) {
if (!InputSettings.isAccessibilityStickyKeysFeatureEnabled()) {
return;
}
Objects.requireNonNull(mAccessibilityStickyKeys).setChecked( Objects.requireNonNull(mAccessibilityStickyKeys).setChecked(
InputSettings.isAccessibilityStickyKeysEnabled(context)); InputSettings.isAccessibilityStickyKeysEnabled(context));
} }

View File

@@ -0,0 +1,24 @@
/*
* Copyright (C) 2025 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.metrics
/** Provides metrics for preference action. */
interface PreferenceActionMetricsProvider {
/** Metrics action id for the preference. */
val preferenceActionMetrics: Int
}

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.android.settings package com.android.settings.metrics
import android.content.Context import android.content.Context
import com.android.settings.overlay.FeatureFactory import com.android.settings.overlay.FeatureFactory
@@ -23,13 +23,6 @@ import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.PreferenceScreenMetadata import com.android.settingslib.metadata.PreferenceScreenMetadata
import com.android.settingslib.metadata.PreferenceUiActionMetricsLogger import com.android.settingslib.metadata.PreferenceUiActionMetricsLogger
/** Provides metrics for preference action. */
interface PreferenceActionMetricsProvider {
/** Metrics action id for the preference. */
val preferenceActionMetrics: Int
}
/** [PreferenceUiActionMetricsLogger] of Settings app. */ /** [PreferenceUiActionMetricsLogger] of Settings app. */
class SettingsMetricsLogger class SettingsMetricsLogger
@JvmOverloads @JvmOverloads

View File

@@ -18,7 +18,6 @@ package com.android.settings.metrics
import android.app.settings.SettingsEnums import android.app.settings.SettingsEnums
import android.content.Context import android.content.Context
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.core.instrumentation.SettingsStatsLog import com.android.settings.core.instrumentation.SettingsStatsLog
import com.android.settingslib.graph.PreferenceGetterErrorCode import com.android.settingslib.graph.PreferenceGetterErrorCode
import com.android.settingslib.graph.PreferenceSetterResult import com.android.settingslib.graph.PreferenceSetterResult

View File

@@ -20,14 +20,13 @@ import android.app.settings.SettingsEnums.ACTION_ADAPTIVE_CONNECTIVITY
import android.content.Context import android.content.Context
import android.net.wifi.WifiManager import android.net.wifi.WifiManager
import android.provider.Settings.Secure.ADAPTIVE_CONNECTIVITY_ENABLED import android.provider.Settings.Secure.ADAPTIVE_CONNECTIVITY_ENABLED
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.R import com.android.settings.R
import com.android.settings.contract.KEY_ADAPTIVE_CONNECTIVITY import com.android.settings.contract.KEY_ADAPTIVE_CONNECTIVITY
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.KeyedObservableDelegate import com.android.settingslib.datastore.KeyedObservableDelegate
import com.android.settingslib.datastore.SettingsSecureStore import com.android.settingslib.datastore.SettingsSecureStore
import com.android.settingslib.datastore.SettingsStore import com.android.settingslib.datastore.SettingsStore
import com.android.settingslib.datastore.and
import com.android.settingslib.metadata.MainSwitchPreference import com.android.settingslib.metadata.MainSwitchPreference
import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.ReadWritePermit
import com.android.settingslib.metadata.SensitivityLevel import com.android.settingslib.metadata.SensitivityLevel

View File

@@ -30,12 +30,12 @@ import android.telephony.TelephonyManager
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.preference.Preference import androidx.preference.Preference
import com.android.settings.AirplaneModeEnabler import com.android.settings.AirplaneModeEnabler
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settings.Utils import com.android.settings.Utils
import com.android.settings.contract.KEY_AIRPLANE_MODE import com.android.settings.contract.KEY_AIRPLANE_MODE
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settings.network.SatelliteRepository.Companion.isSatelliteOn import com.android.settings.network.SatelliteRepository.Companion.isSatelliteOn
import com.android.settings.restriction.PreferenceRestrictionMixin
import com.android.settingslib.RestrictedSwitchPreference import com.android.settingslib.RestrictedSwitchPreference
import com.android.settingslib.datastore.AbstractKeyedDataObservable import com.android.settingslib.datastore.AbstractKeyedDataObservable
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore

View File

@@ -20,9 +20,9 @@ import android.Manifest
import android.app.settings.SettingsEnums.ACTION_MOBILE_DATA import android.app.settings.SettingsEnums.ACTION_MOBILE_DATA
import android.content.Context import android.content.Context
import android.telephony.SubscriptionManager import android.telephony.SubscriptionManager
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.R import com.android.settings.R
import com.android.settings.contract.KEY_MOBILE_DATA import com.android.settings.contract.KEY_MOBILE_DATA
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settings.network.telephony.MobileDataRepository import com.android.settings.network.telephony.MobileDataRepository
import com.android.settings.network.telephony.SubscriptionRepository import com.android.settings.network.telephony.SubscriptionRepository
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore

View File

@@ -22,7 +22,6 @@ import android.telephony.SubscriptionManager
import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.Preference.OnPreferenceClickListener import androidx.preference.Preference.OnPreferenceClickListener
import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settings.flags.Flags import com.android.settings.flags.Flags
import com.android.settings.network.AirplaneModePreference.Companion.isAirplaneModeOn import com.android.settings.network.AirplaneModePreference.Companion.isAirplaneModeOn
@@ -30,6 +29,7 @@ import com.android.settings.network.SubscriptionUtil.getUniqueSubscriptionDispla
import com.android.settings.network.telephony.SimRepository import com.android.settings.network.telephony.SimRepository
import com.android.settings.network.telephony.SubscriptionRepository import com.android.settings.network.telephony.SubscriptionRepository
import com.android.settings.network.telephony.euicc.EuiccRepository import com.android.settings.network.telephony.euicc.EuiccRepository
import com.android.settings.restriction.PreferenceRestrictionMixin
import com.android.settings.spa.network.getAddSimIntent import com.android.settings.spa.network.getAddSimIntent
import com.android.settings.spa.network.startAddSimFlow import com.android.settings.spa.network.startAddSimFlow
import com.android.settingslib.RestrictedPreference import com.android.settingslib.RestrictedPreference

View File

@@ -17,9 +17,9 @@ package com.android.settings.network
import android.content.Context import android.content.Context
import android.os.UserManager import android.os.UserManager
import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settings.flags.Flags import com.android.settings.flags.Flags
import com.android.settings.restriction.PreferenceRestrictionMixin
import com.android.settings.wifi.WifiSwitchPreference import com.android.settings.wifi.WifiSwitchPreference
import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.ProvidePreferenceScreen
@@ -55,9 +55,8 @@ class NetworkProviderScreen :
override fun fragmentClass() = NetworkProviderSettings::class.java override fun fragmentClass() = NetworkProviderSettings::class.java
override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) { override fun getPreferenceHierarchy(context: Context) =
+WifiSwitchPreference() preferenceHierarchy(context, this) { +WifiSwitchPreference() }
}
companion object { companion object {
const val KEY = "internet_settings" const val KEY = "internet_settings"

View File

@@ -122,9 +122,10 @@ class SimOnboardingActivity : SpaBaseDialogActivity() {
return return
} }
if (onboardingService.activeSubInfoList.isEmpty()) { if (onboardingService.activeSubInfoList.isEmpty()
|| (!onboardingService.isMultiSimEnabled && !onboardingService.isMultiSimSupported)) {
// TODO: refactor and replace the ToggleSubscriptionDialogActivity // TODO: refactor and replace the ToggleSubscriptionDialogActivity
Log.d(TAG, "onboardingService.activeSubInfoList is empty" + Log.d(TAG, "onboardingService.activeSubInfoList is empty or restricted ss mode " +
", start ToggleSubscriptionDialogActivity") ", start ToggleSubscriptionDialogActivity")
this.startActivity(ToggleSubscriptionDialogActivity this.startActivity(ToggleSubscriptionDialogActivity
.getIntent(this.applicationContext, targetSubId, true)) .getIntent(this.applicationContext, targetSubId, true))

View File

@@ -19,7 +19,9 @@ package com.android.settings.network.telephony;
import static android.telephony.CarrierConfigManager.CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC; import static android.telephony.CarrierConfigManager.CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC;
import static android.telephony.CarrierConfigManager.CARRIER_ROAMING_NTN_CONNECT_MANUAL; import static android.telephony.CarrierConfigManager.CARRIER_ROAMING_NTN_CONNECT_MANUAL;
import static android.telephony.CarrierConfigManager.KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT; import static android.telephony.CarrierConfigManager.KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT;
import static android.telephony.CarrierConfigManager.KEY_EMERGENCY_MESSAGING_SUPPORTED_BOOL;
import static android.telephony.CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL; import static android.telephony.CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL;
import static android.telephony.CarrierConfigManager.KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL;
import static android.telephony.CarrierConfigManager.KEY_SATELLITE_INFORMATION_REDIRECT_URL_STRING; import static android.telephony.CarrierConfigManager.KEY_SATELLITE_INFORMATION_REDIRECT_URL_STRING;
import android.app.Activity; import android.app.Activity;
@@ -165,8 +167,14 @@ public class SatelliteSetting extends RestrictedDashboardFragment {
} }
private void updateMobilePlan(boolean isSatelliteEligible) { private void updateMobilePlan(boolean isSatelliteEligible) {
// Your mobile plan
PreferenceCategory prefCategory = findPreference(PREF_KEY_CATEGORY_YOUR_SATELLITE_PLAN); PreferenceCategory prefCategory = findPreference(PREF_KEY_CATEGORY_YOUR_SATELLITE_PLAN);
if (prefCategory == null || !mConfigBundle.getBoolean(
KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL)) {
prefCategory.setVisible(false);
return;
}
// Your mobile plan
prefCategory.setTitle(getResources().getString(R.string.category_title_your_satellite_plan, prefCategory.setTitle(getResources().getString(R.string.category_title_your_satellite_plan,
mSimOperatorName)); mSimOperatorName));
Preference messagingPreference = findPreference(PREF_KEY_YOUR_SATELLITE_PLAN); Preference messagingPreference = findPreference(PREF_KEY_YOUR_SATELLITE_PLAN);
@@ -227,8 +235,10 @@ public class SatelliteSetting extends RestrictedDashboardFragment {
// More about satellite messaging // More about satellite messaging
FooterPreference footerPreference = findPreference(KEY_FOOTER_PREFERENCE); FooterPreference footerPreference = findPreference(KEY_FOOTER_PREFERENCE);
if (footerPreference != null) { if (footerPreference != null) {
footerPreference.setSummary( int summary = mConfigBundle.getBoolean(KEY_EMERGENCY_MESSAGING_SUPPORTED_BOOL)
getResources().getString(R.string.satellite_setting_summary_more_information, ? R.string.satellite_setting_summary_more_information
: R.string.satellite_setting_summary_more_information_no_emergency_messaging;
footerPreference.setSummary(getResources().getString(summary,
getSubjectString(), mSimOperatorName)); getSubjectString(), mSimOperatorName));
final String[] link = new String[1]; final String[] link = new String[1];
@@ -273,7 +283,9 @@ public class SatelliteSetting extends RestrictedDashboardFragment {
bundle = carrierConfigManager.getConfigForSubId(subId, bundle = carrierConfigManager.getConfigForSubId(subId,
KEY_SATELLITE_ATTACH_SUPPORTED_BOOL, KEY_SATELLITE_ATTACH_SUPPORTED_BOOL,
KEY_SATELLITE_INFORMATION_REDIRECT_URL_STRING, KEY_SATELLITE_INFORMATION_REDIRECT_URL_STRING,
KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT); KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT,
KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL,
KEY_EMERGENCY_MESSAGING_SUPPORTED_BOOL);
if (bundle.isEmpty()) { if (bundle.isEmpty()) {
Log.d(TAG, "SatelliteSettings: getDefaultConfig"); Log.d(TAG, "SatelliteSettings: getDefaultConfig");
bundle = CarrierConfigManager.getDefaultConfig(); bundle = CarrierConfigManager.getDefaultConfig();

View File

@@ -17,9 +17,9 @@
package com.android.settings.network.telephony; package com.android.settings.network.telephony;
import static android.telephony.CarrierConfigManager.CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC; import static android.telephony.CarrierConfigManager.CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC;
import static android.telephony.CarrierConfigManager.CARRIER_ROAMING_NTN_CONNECT_MANUAL;
import static android.telephony.CarrierConfigManager.KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT; import static android.telephony.CarrierConfigManager.KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT;
import static android.telephony.CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL; import static android.telephony.CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL;
import static android.telephony.CarrierConfigManager.KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL;
import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_DATA; import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_DATA;
import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_SMS; import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_SMS;
@@ -65,9 +65,9 @@ public class SatelliteSettingPreferenceController extends
@Nullable @Nullable
private Boolean mIsSatelliteEligible = null; private Boolean mIsSatelliteEligible = null;
private boolean mIsServiceDataType = false; private boolean mIsServiceDataType = false;
private boolean mIsSatelliteSmsAvailableForManualType = false; @VisibleForTesting
private boolean mIsCarrierSatelliteAttachSupported = false; boolean mIsSatelliteSmsAvailableForManualType = false;
private boolean mIsCarrierRoamingNtnConnectedTypeManual = false; private PersistableBundle mCarrierConfigs = new PersistableBundle();
public SatelliteSettingPreferenceController(@NonNull Context context, @NonNull String key) { public SatelliteSettingPreferenceController(@NonNull Context context, @NonNull String key) {
super(context, key); super(context, key);
@@ -95,13 +95,15 @@ public class SatelliteSettingPreferenceController extends
return UNSUPPORTED_ON_DEVICE; return UNSUPPORTED_ON_DEVICE;
} }
int availabilityStatus = mIsCarrierSatelliteAttachSupported boolean isSatelliteAttachSupport = mCarrierConfigs.getBoolean(
? AVAILABLE : CONDITIONALLY_UNAVAILABLE; KEY_SATELLITE_ATTACH_SUPPORTED_BOOL);
if (availabilityStatus == AVAILABLE && mIsCarrierRoamingNtnConnectedTypeManual
&& !mIsSatelliteSmsAvailableForManualType) { if (isSatelliteAttachSupport && isCarrierRoamingNtnConnectedTypeAuto()
availabilityStatus = CONDITIONALLY_UNAVAILABLE; && mIsSatelliteSmsAvailableForManualType) {
return AVAILABLE;
} }
return availabilityStatus;
return CONDITIONALLY_UNAVAILABLE;
} }
@Override @Override
@@ -128,7 +130,7 @@ public class SatelliteSettingPreferenceController extends
@Override @Override
public void updateState(@Nullable Preference preference) { public void updateState(@Nullable Preference preference) {
super.updateState(preference); super.updateState(preference);
if (preference != null) { if (preference != null && preference.getKey().equals(getPreferenceKey())) {
mCarrierRoamingNtnModeCallback.mPref = preference; mCarrierRoamingNtnModeCallback.mPref = preference;
updateSummary(preference); updateSummary(preference);
} }
@@ -162,18 +164,7 @@ public class SatelliteSettingPreferenceController extends
logd("init(), subId=" + subId); logd("init(), subId=" + subId);
mSubId = subId; mSubId = subId;
mTelephonyManager = mTelephonyManager.createForSubscriptionId(subId); mTelephonyManager = mTelephonyManager.createForSubscriptionId(subId);
mCarrierConfigs = mCarrierConfigCache.getConfigForSubId(subId);
final PersistableBundle carrierConfig = mCarrierConfigCache.getConfigForSubId(subId);
if (carrierConfig == null) {
logd("init(), no carrier config data");
return;
}
mIsCarrierSatelliteAttachSupported = carrierConfig.getBoolean(
KEY_SATELLITE_ATTACH_SUPPORTED_BOOL);
mIsCarrierRoamingNtnConnectedTypeManual =
CARRIER_ROAMING_NTN_CONNECT_MANUAL == carrierConfig.getInt(
KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT,
CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC);
} }
private void updateSummary(Preference preference) { private void updateSummary(Preference preference) {
@@ -186,11 +177,12 @@ public class SatelliteSettingPreferenceController extends
return; return;
} }
if (mIsCarrierRoamingNtnConnectedTypeManual) { if (!mCarrierConfigs.getBoolean(KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL)) {
preference.setSummary(mIsSatelliteSmsAvailableForManualType preference.setSummary(R.string.satellite_setting_summary_without_entitlement);
? R.string.satellite_setting_enabled_summary return;
: R.string.satellite_setting_disabled_summary); }
} else {
if (isCarrierRoamingNtnConnectedTypeAuto()) {
try { try {
Set<Integer> restrictionReason = Set<Integer> restrictionReason =
mSatelliteManager.getAttachRestrictionReasonsForCarrier(mSubId); mSatelliteManager.getAttachRestrictionReasonsForCarrier(mSubId);
@@ -207,9 +199,19 @@ public class SatelliteSettingPreferenceController extends
loge(ex.toString()); loge(ex.toString());
preference.setSummary(R.string.satellite_setting_disabled_summary); preference.setSummary(R.string.satellite_setting_disabled_summary);
} }
} else {
preference.setSummary(mIsSatelliteSmsAvailableForManualType
? R.string.satellite_setting_enabled_summary
: R.string.satellite_setting_disabled_summary);
} }
} }
private boolean isCarrierRoamingNtnConnectedTypeAuto() {
return CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC == mCarrierConfigs.getInt(
KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT,
CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC);
}
@VisibleForTesting @VisibleForTesting
class CarrierRoamingNtnModeCallback extends TelephonyCallback implements class CarrierRoamingNtnModeCallback extends TelephonyCallback implements
TelephonyCallback.CarrierRoamingNtnListener { TelephonyCallback.CarrierRoamingNtnListener {

View File

@@ -18,12 +18,12 @@ package com.android.settings.network.tether
import android.content.Context import android.content.Context
import android.net.TetheringManager import android.net.TetheringManager
import android.os.UserManager import android.os.UserManager
import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settings.Settings.TetherSettingsActivity import com.android.settings.Settings.TetherSettingsActivity
import com.android.settings.datausage.DataSaverMainSwitchPreference import com.android.settings.datausage.DataSaverMainSwitchPreference
import com.android.settings.flags.Flags import com.android.settings.flags.Flags
import com.android.settings.network.TetherPreferenceController import com.android.settings.network.TetherPreferenceController
import com.android.settings.restriction.PreferenceRestrictionMixin
import com.android.settings.utils.makeLaunchIntent import com.android.settings.utils.makeLaunchIntent
import com.android.settings.wifi.tether.WifiHotspotSwitchPreference import com.android.settings.wifi.tether.WifiHotspotSwitchPreference
import com.android.settingslib.TetherUtil import com.android.settingslib.TetherUtil

View File

@@ -27,10 +27,10 @@ import android.media.AudioManager.STREAM_BLUETOOTH_SCO
import android.media.AudioManager.STREAM_VOICE_CALL import android.media.AudioManager.STREAM_VOICE_CALL
import android.os.UserManager import android.os.UserManager
import androidx.preference.Preference import androidx.preference.Preference
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settings.contract.KEY_CALL_VOLUME import com.android.settings.contract.KEY_CALL_VOLUME
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settings.restriction.PreferenceRestrictionMixin
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.NoOpKeyedObservable import com.android.settingslib.datastore.NoOpKeyedObservable
import com.android.settingslib.datastore.Permissions import com.android.settingslib.datastore.Permissions

View File

@@ -24,10 +24,10 @@ import android.content.pm.PackageManager.FEATURE_AUTOMOTIVE
import android.media.AudioManager.STREAM_MUSIC import android.media.AudioManager.STREAM_MUSIC
import android.os.UserManager import android.os.UserManager
import androidx.preference.Preference import androidx.preference.Preference
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settings.contract.KEY_MEDIA_VOLUME import com.android.settings.contract.KEY_MEDIA_VOLUME
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settings.restriction.PreferenceRestrictionMixin
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.NoOpKeyedObservable import com.android.settingslib.datastore.NoOpKeyedObservable
import com.android.settingslib.datastore.Permissions import com.android.settingslib.datastore.Permissions

View File

@@ -40,10 +40,10 @@ import android.os.Vibrator
import android.service.notification.NotificationListenerService.HINT_HOST_DISABLE_CALL_EFFECTS import android.service.notification.NotificationListenerService.HINT_HOST_DISABLE_CALL_EFFECTS
import android.service.notification.NotificationListenerService.HINT_HOST_DISABLE_EFFECTS import android.service.notification.NotificationListenerService.HINT_HOST_DISABLE_EFFECTS
import androidx.preference.Preference import androidx.preference.Preference
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settings.contract.KEY_RING_VOLUME import com.android.settings.contract.KEY_RING_VOLUME
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settings.restriction.PreferenceRestrictionMixin
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.NoOpKeyedObservable import com.android.settingslib.datastore.NoOpKeyedObservable
import com.android.settingslib.datastore.Permissions import com.android.settingslib.datastore.Permissions

View File

@@ -47,7 +47,6 @@ public class VolumeSeekBarPreference extends SeekBarPreference {
private final InteractionJankMonitor mJankMonitor = InteractionJankMonitor.getInstance(); private final InteractionJankMonitor mJankMonitor = InteractionJankMonitor.getInstance();
protected SeekBar mSeekBar;
private int mStream; private int mStream;
private SeekBarVolumizer mVolumizer; private SeekBarVolumizer mVolumizer;
@VisibleForTesting @VisibleForTesting
@@ -115,17 +114,20 @@ public class VolumeSeekBarPreference extends SeekBarPreference {
@Override @Override
public void onDetached() { public void onDetached() {
destroyVolumizer();
super.onDetached();
}
private void destroyVolumizer() {
if (mVolumizer != null) { if (mVolumizer != null) {
mVolumizer.stop(); mVolumizer.stop();
mVolumizer = null; mVolumizer = null;
} }
super.onDetached();
} }
@Override @Override
public void onBindViewHolder(PreferenceViewHolder view) { public void onBindViewHolder(PreferenceViewHolder view) {
super.onBindViewHolder(view); super.onBindViewHolder(view);
mSeekBar = (SeekBar) view.findViewById(com.android.internal.R.id.seekbar);
mIconView = (ImageView) view.findViewById(com.android.internal.R.id.icon); mIconView = (ImageView) view.findViewById(com.android.internal.R.id.icon);
mSuppressionTextView = (TextView) view.findViewById(R.id.suppression_text); mSuppressionTextView = (TextView) view.findViewById(R.id.suppression_text);
mTitle = (TextView) view.findViewById(com.android.internal.R.id.title); mTitle = (TextView) view.findViewById(com.android.internal.R.id.title);
@@ -133,15 +135,20 @@ public class VolumeSeekBarPreference extends SeekBarPreference {
} }
protected void onBindViewHolder() { protected void onBindViewHolder() {
boolean isEnabled = isEnabled(); if (isEnabled()) {
mSeekBar.setEnabled(isEnabled);
if (mVolumizer == null) { if (mVolumizer == null) {
createSeekBarVolumizer(); createSeekBarVolumizer();
} }
// note that setSeekBar will update enabled state!
mVolumizer.setSeekBar(mSeekBar); mVolumizer.setSeekBar(mSeekBar);
} else {
// destroy volumizer to avoid updateSeekBar reset enabled state
destroyVolumizer();
mSeekBar.setEnabled(false);
}
updateIconView(); updateIconView();
updateSuppressionText(); updateSuppressionText();
if (isEnabled && mListener != null) { if (mListener != null) {
mListener.onUpdateMuteState(); mListener.onUpdateMuteState();
} }
} }

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.android.settings package com.android.settings.restriction
import android.content.Context import android.content.Context
import android.os.UserHandle import android.os.UserHandle

View File

@@ -17,7 +17,6 @@
package com.android.settings.restriction package com.android.settings.restriction
import android.content.Context import android.content.Context
import com.android.settings.PreferenceRestrictionMixin
import com.android.settingslib.datastore.HandlerExecutor import com.android.settingslib.datastore.HandlerExecutor
import com.android.settingslib.datastore.KeyedObserver import com.android.settingslib.datastore.KeyedObserver
import com.android.settingslib.metadata.PreferenceChangeReason import com.android.settingslib.metadata.PreferenceChangeReason

View File

@@ -33,6 +33,7 @@ import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.SeekBar; import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.SeekBar.OnSeekBarChangeListener;
import androidx.annotation.VisibleForTesting;
import androidx.core.content.res.TypedArrayUtils; import androidx.core.content.res.TypedArrayUtils;
import androidx.preference.PreferenceViewHolder; import androidx.preference.PreferenceViewHolder;
@@ -59,7 +60,8 @@ public class SeekBarPreference extends RestrictedPreference
private int mHapticFeedbackMode = HAPTIC_FEEDBACK_MODE_NONE; private int mHapticFeedbackMode = HAPTIC_FEEDBACK_MODE_NONE;
private int mDefaultProgress = -1; private int mDefaultProgress = -1;
private SeekBar mSeekBar; @VisibleForTesting(otherwise = VisibleForTesting.PROTECTED)
public SeekBar mSeekBar;
private boolean mShouldBlink; private boolean mShouldBlink;
private int mAccessibilityRangeInfoType = AccessibilityNodeInfo.RangeInfo.RANGE_TYPE_INT; private int mAccessibilityRangeInfoType = AccessibilityNodeInfo.RangeInfo.RANGE_TYPE_INT;
private CharSequence mOverrideSeekBarStateDescription; private CharSequence mOverrideSeekBarStateDescription;

View File

@@ -30,13 +30,13 @@ import android.provider.Settings
import android.widget.Toast import android.widget.Toast
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.Preference.OnPreferenceChangeListener import androidx.preference.Preference.OnPreferenceChangeListener
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settings.contract.KEY_WIFI import com.android.settings.contract.KEY_WIFI
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settings.network.SatelliteRepository.Companion.isSatelliteOn import com.android.settings.network.SatelliteRepository.Companion.isSatelliteOn
import com.android.settings.network.SatelliteWarningDialogActivity import com.android.settings.network.SatelliteWarningDialogActivity
import com.android.settings.overlay.FeatureFactory.Companion.featureFactory import com.android.settings.overlay.FeatureFactory.Companion.featureFactory
import com.android.settings.restriction.PreferenceRestrictionMixin
import com.android.settings.wifi.utils.isDefaultNetworkWifi import com.android.settings.wifi.utils.isDefaultNetworkWifi
import com.android.settings.wifi.utils.isWifiEnabled import com.android.settings.wifi.utils.isWifiEnabled
import com.android.settings.wifi.utils.wifiManager import com.android.settings.wifi.utils.wifiManager

View File

@@ -25,9 +25,9 @@ import android.telephony.SubscriptionManager
import android.telephony.TelephonyManager import android.telephony.TelephonyManager
import android.telephony.ims.ImsMmTelManager import android.telephony.ims.ImsMmTelManager
import android.util.Log import android.util.Log
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.R import com.android.settings.R
import com.android.settings.contract.KEY_WIFI_CALLING import com.android.settings.contract.KEY_WIFI_CALLING
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settings.network.ims.WifiCallingQueryImsState import com.android.settings.network.ims.WifiCallingQueryImsState
import com.android.settings.network.telephony.wificalling.WifiCallingRepository import com.android.settings.network.telephony.wificalling.WifiCallingRepository
import com.android.settings.widget.SettingsMainSwitchPreference import com.android.settings.widget.SettingsMainSwitchPreference

View File

@@ -28,13 +28,13 @@ import android.net.wifi.WifiManager
import android.os.UserManager import android.os.UserManager
import android.text.BidiFormatter import android.text.BidiFormatter
import android.util.Log import android.util.Log
import com.android.settings.PreferenceActionMetricsProvider
import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settings.Utils import com.android.settings.Utils
import com.android.settings.contract.KEY_WIFI_HOTSPOT import com.android.settings.contract.KEY_WIFI_HOTSPOT
import com.android.settings.core.SubSettingLauncher import com.android.settings.core.SubSettingLauncher
import com.android.settings.datausage.DataSaverMainSwitchPreference.Companion.KEY as DATA_SAVER_KEY import com.android.settings.datausage.DataSaverMainSwitchPreference.Companion.KEY as DATA_SAVER_KEY
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settings.restriction.PreferenceRestrictionMixin
import com.android.settings.wifi.WifiUtils.canShowWifiHotspot import com.android.settings.wifi.WifiUtils.canShowWifiHotspot
import com.android.settings.wifi.utils.tetheringManager import com.android.settings.wifi.utils.tetheringManager
import com.android.settings.wifi.utils.wifiApState import com.android.settings.wifi.utils.wifiApState

View File

@@ -28,11 +28,17 @@ import static org.mockito.Mockito.when;
import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothLeBroadcastReceiveState;
import android.bluetooth.BluetoothStatusCodes;
import android.content.Context; import android.content.Context;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Looper;
import android.os.UserManager; import android.os.UserManager;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.util.Pair; import android.util.Pair;
import androidx.appcompat.app.AlertDialog;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -42,8 +48,13 @@ import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settings.testutils.shadow.ShadowBluetoothUtils; import com.android.settings.testutils.shadow.ShadowBluetoothUtils;
import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager; import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast;
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastAssistant;
import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.flags.Flags;
import com.android.settingslib.testutils.shadow.ShadowBluetoothAdapter;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
@@ -57,7 +68,9 @@ import org.mockito.Mock;
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.Shadows;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import org.robolectric.shadow.api.Shadow;
import org.robolectric.util.ReflectionHelpers; import org.robolectric.util.ReflectionHelpers;
import java.util.ArrayList; import java.util.ArrayList;
@@ -81,6 +94,8 @@ public class BluetoothDevicePreferenceTest {
@Rule @Rule
public final MockitoRule mockito = MockitoJUnit.rule(); public final MockitoRule mockito = MockitoJUnit.rule();
@Rule
public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
@Mock @Mock
private CachedBluetoothDevice mCachedBluetoothDevice; private CachedBluetoothDevice mCachedBluetoothDevice;
@Mock @Mock
@@ -107,6 +122,7 @@ public class BluetoothDevicePreferenceTest {
private CachedBluetoothDeviceManager mDeviceManager; private CachedBluetoothDeviceManager mDeviceManager;
private Context mContext = ApplicationProvider.getApplicationContext(); private Context mContext = ApplicationProvider.getApplicationContext();
private ShadowBluetoothAdapter mShadowBluetoothAdapter;
private FakeFeatureFactory mFakeFeatureFactory; private FakeFeatureFactory mFakeFeatureFactory;
private MetricsFeatureProvider mMetricsFeatureProvider; private MetricsFeatureProvider mMetricsFeatureProvider;
@@ -166,6 +182,7 @@ public class BluetoothDevicePreferenceTest {
when(mCachedBluetoothDevice.hasHumanReadableName()).thenReturn(true); when(mCachedBluetoothDevice.hasHumanReadableName()).thenReturn(true);
mPreference.onClicked(); mPreference.onClicked();
Shadows.shadowOf(Looper.getMainLooper()).idle();
verify(mMetricsFeatureProvider) verify(mMetricsFeatureProvider)
.action(mContext, MetricsEvent.ACTION_SETTINGS_BLUETOOTH_PAIR); .action(mContext, MetricsEvent.ACTION_SETTINGS_BLUETOOTH_PAIR);
@@ -182,6 +199,7 @@ public class BluetoothDevicePreferenceTest {
when(mCachedBluetoothDevice.hasHumanReadableName()).thenReturn(false); when(mCachedBluetoothDevice.hasHumanReadableName()).thenReturn(false);
mPreference.onClicked(); mPreference.onClicked();
Shadows.shadowOf(Looper.getMainLooper()).idle();
verify(mMetricsFeatureProvider) verify(mMetricsFeatureProvider)
.action(mContext, MetricsEvent.ACTION_SETTINGS_BLUETOOTH_PAIR); .action(mContext, MetricsEvent.ACTION_SETTINGS_BLUETOOTH_PAIR);
@@ -190,6 +208,58 @@ public class BluetoothDevicePreferenceTest {
MetricsEvent.ACTION_SETTINGS_BLUETOOTH_PAIR_DEVICES_WITHOUT_NAMES); MetricsEvent.ACTION_SETTINGS_BLUETOOTH_PAIR_DEVICES_WITHOUT_NAMES);
} }
@Test
@EnableFlags({Flags.FLAG_ENABLE_LE_AUDIO_SHARING, Flags.FLAG_ENABLE_TEMPORARY_BOND_DEVICES_UI})
public void onClicked_deviceNotBonded_blockPairing() {
mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter());
mShadowBluetoothAdapter.setEnabled(true);
mShadowBluetoothAdapter.setIsLeAudioBroadcastSourceSupported(
BluetoothStatusCodes.FEATURE_SUPPORTED);
mShadowBluetoothAdapter.setIsLeAudioBroadcastAssistantSupported(
BluetoothStatusCodes.FEATURE_SUPPORTED);
LocalBluetoothProfileManager profileManager = mock(LocalBluetoothProfileManager.class);
LocalBluetoothLeBroadcast broadcast = mock(LocalBluetoothLeBroadcast.class);
LocalBluetoothLeBroadcastAssistant assistant = mock(
LocalBluetoothLeBroadcastAssistant.class);
when(mLocalBluetoothManager.getProfileManager()).thenReturn(profileManager);
when(profileManager.getLeAudioBroadcastProfile()).thenReturn(broadcast);
when(profileManager.getLeAudioBroadcastAssistantProfile()).thenReturn(assistant);
when(broadcast.isEnabled(null)).thenReturn(true);
when(broadcast.getLatestBroadcastId()).thenReturn(1);
BluetoothDevice device1 = mock(BluetoothDevice.class);
BluetoothDevice device2 = mock(BluetoothDevice.class);
CachedBluetoothDevice cachedDevice1 = mock(CachedBluetoothDevice.class);
CachedBluetoothDevice cachedDevice2 = mock(CachedBluetoothDevice.class);
when(cachedDevice1.getDevice()).thenReturn(device1);
when(cachedDevice2.getDevice()).thenReturn(device2);
when(cachedDevice1.getGroupId()).thenReturn(1);
when(cachedDevice2.getGroupId()).thenReturn(2);
when(mDeviceManager.findDevice(device1)).thenReturn(cachedDevice1);
when(mDeviceManager.findDevice(device2)).thenReturn(cachedDevice2);
when(assistant.getAllConnectedDevices()).thenReturn(ImmutableList.of(device1, device2));
BluetoothLeBroadcastReceiveState state = mock(BluetoothLeBroadcastReceiveState.class);
when(state.getBroadcastId()).thenReturn(1);
when(assistant.getAllSources(any())).thenReturn(ImmutableList.of(state));
when(mCachedBluetoothDevice.isConnected()).thenReturn(false);
when(mCachedBluetoothDevice.getBondState()).thenReturn(BluetoothDevice.BOND_NONE);
when(mCachedBluetoothDevice.startPairing()).thenReturn(true);
when(mCachedBluetoothDevice.hasHumanReadableName()).thenReturn(true);
mPreference.onClicked();
Shadows.shadowOf(Looper.getMainLooper()).idle();
AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
assertThat(dialog).isNotNull();
ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(dialog);
assertThat(shadowAlertDialog.getTitle().toString()).isEqualTo(
mContext.getString(R.string.audio_sharing_block_pairing_dialog_title));
verify(mMetricsFeatureProvider, never())
.action(mContext, MetricsEvent.ACTION_SETTINGS_BLUETOOTH_PAIR);
verify(mCachedBluetoothDevice, never()).startPairing();
}
@Test @Test
public void getSecondTargetResource_shouldBeGearIconLayout() { public void getSecondTargetResource_shouldBeGearIconLayout() {
assertThat(mPreference.getSecondTargetResId()).isEqualTo(R.layout.preference_widget_gear); assertThat(mPreference.getSecondTargetResId()).isEqualTo(R.layout.preference_widget_gear);

View File

@@ -18,7 +18,7 @@ package com.android.settings.testutils
import android.content.Context import android.content.Context
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import com.android.settings.SettingsMetricsLogger import com.android.settings.metrics.SettingsMetricsLogger
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider import com.android.settingslib.core.instrumentation.MetricsFeatureProvider
import com.android.settingslib.metadata.PreferenceScreenRegistry import com.android.settingslib.metadata.PreferenceScreenRegistry
import org.junit.rules.TestWatcher import org.junit.rules.TestWatcher

View File

@@ -16,10 +16,12 @@
package com.android.settings.network.telephony; package com.android.settings.network.telephony;
import static android.telephony.CarrierConfigManager.CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC;
import static android.telephony.CarrierConfigManager.CARRIER_ROAMING_NTN_CONNECT_MANUAL;
import static android.telephony.CarrierConfigManager.KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL;
import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_DATA; import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_DATA;
import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_SMS; import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_SMS;
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE; import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE; import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
@@ -39,6 +41,9 @@ import android.telephony.TelephonyManager;
import android.telephony.satellite.SatelliteManager; import android.telephony.satellite.SatelliteManager;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
import androidx.test.annotation.UiThreadTest;
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;
@@ -47,7 +52,6 @@ import com.android.settings.R;
import com.android.settings.network.CarrierConfigCache; import com.android.settings.network.CarrierConfigCache;
import org.junit.Before; import org.junit.Before;
import org.junit.Ignore;
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;
@@ -56,10 +60,10 @@ import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule; import org.mockito.junit.MockitoRule;
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
@Ignore("b/382664790") @UiThreadTest
public class SatelliteSettingsPreferenceControllerTest { public class SatelliteSettingsPreferenceControllerTest {
private static final String KEY = "key"; private static final String KEY = "SatelliteSettingsPreferenceControllerTest";
private static final int TEST_SUB_ID = 0; private static final int TEST_SUB_ID = 5;
@Rule @Rule
public final MockitoRule mMockitoRule = MockitoJUnit.rule(); public final MockitoRule mMockitoRule = MockitoJUnit.rule();
@@ -85,12 +89,13 @@ public class SatelliteSettingsPreferenceControllerTest {
when(mContext.getSystemService(SatelliteManager.class)).thenReturn(mSatelliteManager); when(mContext.getSystemService(SatelliteManager.class)).thenReturn(mSatelliteManager);
when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager); when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
when(mTelephonyManager.createForSubscriptionId(TEST_SUB_ID)).thenReturn(mTelephonyManager); when(mTelephonyManager.createForSubscriptionId(TEST_SUB_ID)).thenReturn(mTelephonyManager);
when(mCarrierConfigCache.getConfigForSubId(TEST_SUB_ID)).thenReturn(mCarrierConfig);
mController = spy(new SatelliteSettingPreferenceController(mContext, KEY)); mController = spy(new SatelliteSettingPreferenceController(mContext, KEY));
} }
@Test @Test
@EnableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG) @EnableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG)
public void getAvailabilityStatus_noSatellite_returnUnsupport() { public void getAvailabilityStatus_noSatellite_returnUnsupported() {
when(mContext.getSystemService(SatelliteManager.class)).thenReturn(null); when(mContext.getSystemService(SatelliteManager.class)).thenReturn(null);
mController = new SatelliteSettingPreferenceController(mContext, KEY); mController = new SatelliteSettingPreferenceController(mContext, KEY);
@@ -102,11 +107,39 @@ public class SatelliteSettingsPreferenceControllerTest {
@Test @Test
@EnableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG) @EnableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG)
public void getAvailabilityStatus_carrierIsNotSupport_returnUnavailable() { public void getAvailabilityStatus_carrierIsNotSupport_returnUnavailable() {
when(mContext.getSystemService(SatelliteManager.class)).thenReturn(null);
mCarrierConfig.putBoolean( mCarrierConfig.putBoolean(
CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL, CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL,
false); false);
when(mCarrierConfigCache.getConfigForSubId(TEST_SUB_ID)).thenReturn(mCarrierConfig); int result = mController.getAvailabilityStatus(TEST_SUB_ID);
assertThat(result).isEqualTo(CONDITIONALLY_UNAVAILABLE);
}
@Test
@EnableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG)
public void getAvailabilityStatus_ntnConnectIsManual_returnUnavailable() {
mCarrierConfig.putBoolean(
CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL,
true);
mCarrierConfig.putInt(
CarrierConfigManager.KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT,
CARRIER_ROAMING_NTN_CONNECT_MANUAL);
int result = mController.getAvailabilityStatus(TEST_SUB_ID);
assertThat(result).isEqualTo(CONDITIONALLY_UNAVAILABLE);
}
@Test
@EnableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG)
public void getAvailabilityStatus_smsNotAvailable_returnUnavailable() {
mCarrierConfig.putBoolean(
CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL,
true);
mCarrierConfig.putInt(
CarrierConfigManager.KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT,
CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC);
mController.mCarrierRoamingNtnModeCallback.onCarrierRoamingNtnAvailableServicesChanged(
new int[]{SERVICE_TYPE_SMS});
int result = mController.getAvailabilityStatus(TEST_SUB_ID); int result = mController.getAvailabilityStatus(TEST_SUB_ID);
@@ -115,22 +148,25 @@ public class SatelliteSettingsPreferenceControllerTest {
@Test @Test
@EnableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG) @EnableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG)
public void getAvailabilityStatus_carrierIsSupport_returnAvailable() { public void getAvailabilityStatus_matchAllConditions_returnAvailable() {
when(mContext.getSystemService(SatelliteManager.class)).thenReturn(null);
mCarrierConfig.putBoolean( mCarrierConfig.putBoolean(
CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL, CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL,
true); true);
when(mCarrierConfigCache.getConfigForSubId(TEST_SUB_ID)).thenReturn(mCarrierConfig); mCarrierConfig.putInt(
CarrierConfigManager.KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT,
CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC);
mController.mCarrierRoamingNtnModeCallback.onCarrierRoamingNtnAvailableServicesChanged(
new int[]{SERVICE_TYPE_SMS});
int result = mController.getAvailabilityStatus(TEST_SUB_ID); int result = mController.getAvailabilityStatus(TEST_SUB_ID);
assertThat(result).isEqualTo(AVAILABLE); assertThat(result).isEqualTo(CONDITIONALLY_UNAVAILABLE);
} }
@Test @Test
@Ignore("avoid post submit failed")
@EnableFlags(com.android.settings.flags.Flags.FLAG_SATELLITE_OEM_SETTINGS_UX_MIGRATION) @EnableFlags(com.android.settings.flags.Flags.FLAG_SATELLITE_OEM_SETTINGS_UX_MIGRATION)
public void getAvailabilityStatus_registerTelephonyCallback_success() { public void onResume_registerTelephonyCallback_success() {
mController.init(TEST_SUB_ID); mController.init(TEST_SUB_ID);
mController.onResume(null); mController.onResume(null);
@@ -138,7 +174,6 @@ public class SatelliteSettingsPreferenceControllerTest {
} }
@Test @Test
@Ignore("avoid post submit failed")
@EnableFlags(com.android.settings.flags.Flags.FLAG_SATELLITE_OEM_SETTINGS_UX_MIGRATION) @EnableFlags(com.android.settings.flags.Flags.FLAG_SATELLITE_OEM_SETTINGS_UX_MIGRATION)
public void getAvailabilityStatus_unregisterTelephonyCallback_success() { public void getAvailabilityStatus_unregisterTelephonyCallback_success() {
mController.init(TEST_SUB_ID); mController.init(TEST_SUB_ID);
@@ -178,4 +213,66 @@ public class SatelliteSettingsPreferenceControllerTest {
assertThat(preference.getTitle()).isEqualTo( assertThat(preference.getTitle()).isEqualTo(
mContext.getString(R.string.satellite_setting_title)); mContext.getString(R.string.satellite_setting_title));
} }
@Test
@EnableFlags(com.android.settings.flags.Flags.FLAG_SATELLITE_OEM_SETTINGS_UX_MIGRATION)
public void getAvailabilityStatus_noEntitlement_showSummaryWithoutEntitlement() {
mCarrierConfig.putBoolean(
KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL,
false);
mController.init(TEST_SUB_ID);
Preference preference = new Preference(mContext);
preference.setKey(KEY);
preference.setTitle("test title");
mController.updateState(preference);
assertThat(preference.getSummary()).isEqualTo(
mContext.getString(R.string.satellite_setting_summary_without_entitlement));
}
@Test
@EnableFlags(com.android.settings.flags.Flags.FLAG_SATELLITE_OEM_SETTINGS_UX_MIGRATION)
public void getAvailabilityStatus_smsAvailableForManualType_showSummaryWithAccount() {
mCarrierConfig.putBoolean(
KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL,
true);
mCarrierConfig.putInt(
CarrierConfigManager.KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT,
CARRIER_ROAMING_NTN_CONNECT_MANUAL);
mController.init(TEST_SUB_ID);
PreferenceManager preferenceManager = new PreferenceManager(mContext);
PreferenceScreen preferenceScreen = preferenceManager.createPreferenceScreen(mContext);
Preference preference = new Preference(mContext);
preference.setKey(KEY);
preference.setTitle("test title");
preferenceScreen.addPreference(preference);
mController.mIsSatelliteSmsAvailableForManualType = true;
mController.displayPreference(preferenceScreen);
assertThat(preference.getSummary()).isEqualTo(
mContext.getString(R.string.satellite_setting_enabled_summary));
}
@Test
@EnableFlags(com.android.settings.flags.Flags.FLAG_SATELLITE_OEM_SETTINGS_UX_MIGRATION)
public void getAvailabilityStatus_smsAvailableForAutoType_showSummaryWithoutAccount() {
mCarrierConfig.putBoolean(
KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL,
true);
mCarrierConfig.putInt(
CarrierConfigManager.KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT,
CARRIER_ROAMING_NTN_CONNECT_MANUAL);
mController.init(TEST_SUB_ID);
PreferenceManager preferenceManager = new PreferenceManager(mContext);
PreferenceScreen preferenceScreen = preferenceManager.createPreferenceScreen(mContext);
Preference preference = new Preference(mContext);
preference.setKey(KEY);
preference.setTitle("test title");
preferenceScreen.addPreference(preference);
mController.mIsSatelliteSmsAvailableForManualType = false;
mController.displayPreference(preferenceScreen);
assertThat(preference.getSummary()).isEqualTo(
mContext.getString(R.string.satellite_setting_disabled_summary));
}
} }