diff --git a/res/layout/notif_importance_preference.xml b/res/layout/notif_importance_preference.xml
index b2a02d14240..614856c6d9c 100644
--- a/res/layout/notif_importance_preference.xml
+++ b/res/layout/notif_importance_preference.xml
@@ -21,8 +21,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
- android:layout_marginStart="24dp"
- android:layout_marginEnd="16dp"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingTop="@dimen/notification_importance_toggle_marginTop"
android:paddingBottom="@dimen/notification_importance_toggle_marginTop"
android:orientation="vertical">
diff --git a/res/layout/notif_priority_conversation_preference.xml b/res/layout/notif_priority_conversation_preference.xml
index 4601c008563..326c52a5407 100644
--- a/res/layout/notif_priority_conversation_preference.xml
+++ b/res/layout/notif_priority_conversation_preference.xml
@@ -21,8 +21,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
- android:layout_marginStart="24dp"
- android:layout_marginEnd="16dp"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingTop="@dimen/notification_importance_toggle_marginTop"
android:paddingBottom="@dimen/notification_importance_toggle_marginTop"
android:orientation="vertical">
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 17b76280a60..236959d2530 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -9003,9 +9003,12 @@
Conversation section
-
+
Allow app to use conversation section
+
+ Allow app to use conversation section, although conversation features like prioritization and bubbles are not supported by this app.
+
"%1$s • %2$s"
@@ -9398,8 +9401,11 @@
This app does not send notifications
+
+ App settings
+
- Categories
+ Notification categories
Other
@@ -12441,9 +12447,9 @@
About %1$s
- You can send and receive text messages by satellite as part of an eligible %1$s account
+ You can send and receive text messages by satellite with an eligible %1$s account
- Your %1$s plan
+ Your %1$s account
Messaging is included with your account
@@ -12461,7 +12467,7 @@
You can text anyone, including emergency services. Your phone will reconnect to a mobile network when available.
- %1$s 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 %1$s for details.
+ %1$s 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 %2$s for details.
More about %1$s
diff --git a/res/xml/accessibility_autoclick_settings.xml b/res/xml/accessibility_autoclick_settings.xml
index 72371f3e993..d3a951479ad 100644
--- a/res/xml/accessibility_autoclick_settings.xml
+++ b/res/xml/accessibility_autoclick_settings.xml
@@ -80,7 +80,6 @@
android:key="accessibility_control_autoclick_cursor_area_size"
android:title="@string/autoclick_cursor_area_size_title"
android:summary="@string/autoclick_cursor_area_size_summary"
- settings:seekBarIncrement="20"
android:selectable="false"
settings:searchable="false"
settings:controller="com.android.settings.accessibility.ToggleAutoclickCursorAreaSizeController"/>
diff --git a/res/xml/app_notification_settings.xml b/res/xml/app_notification_settings.xml
index 06d74f608fa..b91aea9a618 100644
--- a/res/xml/app_notification_settings.xml
+++ b/res/xml/app_notification_settings.xml
@@ -30,49 +30,21 @@
-
-
-
-
-
-
-
-
-
+ android:visibility="gone"
+ android:layout="@layout/empty_view" >
-
-
-
-
-
-
+ android:visibility="gone"
+ android:layout="@layout/empty_view" />
+
-
+
-
-
+
+
-
-
+
+
+
-
-
+
-
-
+
+
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/xml/channel_notification_settings.xml b/res/xml/channel_notification_settings.xml
index a3895e38c5e..a8b536b717d 100644
--- a/res/xml/channel_notification_settings.xml
+++ b/res/xml/channel_notification_settings.xml
@@ -111,16 +111,18 @@
android:title="@string/app_notification_override_dnd_title"
android:summary="@string/app_notification_override_dnd_summary" />
-
-
+ android:order="110"/>
+
+
+
+
diff --git a/res/xml/modes_calls_settings.xml b/res/xml/modes_calls_settings.xml
index b564020cf71..e3a6fca643d 100644
--- a/res/xml/modes_calls_settings.xml
+++ b/res/xml/modes_calls_settings.xml
@@ -32,9 +32,11 @@
android:layout_height="16dp"/>
-
+
+
+
+
+
items = mFingerprintManager.getEnrolledFingerprints(mUserId);
final int fingerprintCount = items.size();
for (int i = 0; i < fingerprintCount; i++) {
@@ -715,13 +723,30 @@ public class FingerprintSettings extends SubSettings {
mFingerprintsEnrolledCategory.addPreference(pref);
pref.setOnPreferenceChangeListener(this);
}
- mAddFingerprintPreference = findPreference(KEY_FINGERPRINT_ADD);
+ mAddFingerprintPreference = findPreference(mIsExpressiveThemeStyle
+ ? KEY_FINGERPRINT_ADD_EXPRESSIVE : KEY_FINGERPRINT_ADD);
setupAddFingerprintPreference();
return keyToReturn;
}
private void setupAddFingerprintPreference() {
mAddFingerprintPreference.setOnPreferenceChangeListener(this);
+ if (mIsExpressiveThemeStyle
+ && (mAddFingerprintPreference instanceof ButtonPreference)) {
+ ((ButtonPreference) mAddFingerprintPreference).setOnClickListener(view -> {
+ mIsEnrolling = true;
+ Intent intent = new Intent();
+ intent.setClassName(SETTINGS_PACKAGE_NAME,
+ FingerprintEnroll.AddAdditionalFingerprint.class.getName());
+ intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
+ intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, mToken);
+ if (mCalibrator != null) {
+ intent.putExtras(mCalibrator.getExtrasForNextIntent());
+ }
+ startActivityForResult(intent, ADD_FINGERPRINT_REQUEST);
+ });
+ }
+
updateAddPreference();
}
@@ -803,12 +828,15 @@ public class FingerprintSettings extends SubSettings {
return; // Activity went away
}
- mAddFingerprintPreference = findPreference(KEY_FINGERPRINT_ADD);
+ mAddFingerprintPreference = findPreference(
+ mIsExpressiveThemeStyle ? KEY_FINGERPRINT_ADD_EXPRESSIVE : KEY_FINGERPRINT_ADD);
if (mAddFingerprintPreference == null) {
return; // b/275519315 Skip if updateAddPreference() invoke before addPreference()
}
+ updateAddingButtonStyle();
+
/* Disable preference if too many fingerprints added */
final int max = getContext().getResources().getInteger(
com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser);
@@ -828,6 +856,20 @@ public class FingerprintSettings extends SubSettings {
&& !tooMany && !removalInProgress && mToken != null);
}
+ private void updateAddingButtonStyle() {
+ final Preference nonExpressiveBtnPreference = findPreference(KEY_FINGERPRINT_ADD);
+ final ButtonPreference expressiveBtnPreference =
+ findPreference(KEY_FINGERPRINT_ADD_EXPRESSIVE);
+
+ if (nonExpressiveBtnPreference != null) {
+ nonExpressiveBtnPreference.setVisible(!mIsExpressiveThemeStyle);
+ }
+
+ if (expressiveBtnPreference != null) {
+ expressiveBtnPreference.setVisible(mIsExpressiveThemeStyle);
+ }
+ }
+
private void createFooterPreference(PreferenceGroup root) {
final Context context = getActivity();
if (context == null) {
@@ -925,11 +967,11 @@ public class FingerprintSettings extends SubSettings {
@Override
public boolean onPreferenceTreeClick(Preference pref) {
final String key = pref.getKey();
- if (KEY_FINGERPRINT_ADD.equals(key)) {
+ if (!mIsExpressiveThemeStyle && KEY_FINGERPRINT_ADD.equals(key)) {
mIsEnrolling = true;
Intent intent = new Intent();
intent.setClassName(SETTINGS_PACKAGE_NAME,
- FingerprintEnroll.AddAdditionalFingerprint.class.getName());
+ FingerprintEnroll.AddAdditionalFingerprint.class.getName());
intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, mToken);
if (mCalibrator != null) {
diff --git a/src/com/android/settings/connecteddevice/BluetoothPreference.kt b/src/com/android/settings/connecteddevice/BluetoothPreference.kt
index 4d4853efbc5..8c12024ffc3 100644
--- a/src/com/android/settings/connecteddevice/BluetoothPreference.kt
+++ b/src/com/android/settings/connecteddevice/BluetoothPreference.kt
@@ -34,9 +34,9 @@ import com.android.settings.network.SatelliteWarningDialogActivity
import com.android.settings.widget.MainSwitchBarMetadata
import com.android.settingslib.WirelessUtils
import com.android.settingslib.datastore.AbstractKeyedDataObservable
-import com.android.settingslib.datastore.DataChangeReason
import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.Permissions
+import com.android.settingslib.metadata.PreferenceChangeReason
import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.ReadWritePermit
import com.android.settingslib.metadata.SensitivityLevel
@@ -152,7 +152,14 @@ class BluetoothPreference(private val bluetoothDataStore: BluetoothDataStore) :
broadcastReceiver =
object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
- notifyChange(KEY, DataChangeReason.UPDATE)
+ val state =
+ intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR)
+ if (
+ state == BluetoothAdapter.STATE_ON ||
+ state == BluetoothAdapter.STATE_OFF
+ ) {
+ notifyChange(KEY, PreferenceChangeReason.STATE)
+ }
}
}
context.registerReceiver(
diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingCallAudioPreferenceController.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingCallAudioPreferenceController.java
index 719d6cb71e6..3130a0c3600 100644
--- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingCallAudioPreferenceController.java
+++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingCallAudioPreferenceController.java
@@ -52,6 +52,7 @@ import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastAssistant;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+import com.android.settingslib.flags.Flags;
import com.android.settingslib.utils.ThreadUtils;
import com.google.common.collect.ImmutableList;
@@ -63,6 +64,7 @@ import java.util.Map;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
/** PreferenceController to control the dialog to choose the active device for calls and alarms */
public class AudioSharingCallAudioPreferenceController extends AudioSharingBasePreferenceController
@@ -379,11 +381,21 @@ public class AudioSharingCallAudioPreferenceController extends AudioSharingBaseP
private void updateDeviceItemsInSharingSession() {
mGroupedConnectedDevices = AudioSharingUtils.fetchConnectedDevicesByGroupId(mBtManager);
+ if (Flags.enableTemporaryBondDevicesUi()) {
+ mGroupedConnectedDevices =
+ mGroupedConnectedDevices.entrySet().stream()
+ .filter(entry -> !anyTemporaryBondDevice(entry.getValue()))
+ .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
+ }
mDeviceItemsInSharingSession =
AudioSharingUtils.buildOrderedConnectedLeadAudioSharingDeviceItem(
mBtManager, mGroupedConnectedDevices, /* filterByInSharing= */ true);
}
+ private boolean anyTemporaryBondDevice(List connectedDevices) {
+ return connectedDevices.stream().anyMatch(BluetoothUtils::isTemporaryBondDevice);
+ }
+
@Nullable
private Pair getActiveItemWithIndex() {
List deviceItems = new ArrayList<>(mDeviceItemsInSharingSession);
diff --git a/src/com/android/settings/datausage/DataSaverMainSwitchPreference.kt b/src/com/android/settings/datausage/DataSaverMainSwitchPreference.kt
index a05bd8784cc..e73fe948c74 100644
--- a/src/com/android/settings/datausage/DataSaverMainSwitchPreference.kt
+++ b/src/com/android/settings/datausage/DataSaverMainSwitchPreference.kt
@@ -21,9 +21,9 @@ import android.content.Context
import com.android.settings.R
import com.android.settings.widget.MainSwitchBarMetadata
import com.android.settingslib.datastore.AbstractKeyedDataObservable
-import com.android.settingslib.datastore.DataChangeReason
import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.Permissions
+import com.android.settingslib.metadata.PreferenceChangeReason
import com.android.settingslib.metadata.PreferenceLifecycleProvider
import com.android.settingslib.metadata.ReadWritePermit
import com.android.settingslib.metadata.SensitivityLevel
@@ -36,6 +36,9 @@ class DataSaverMainSwitchPreference : MainSwitchBarMetadata, PreferenceLifecycle
override val title
get() = R.string.data_saver_switch_title
+ override val disableWidgetOnCheckedChanged: Boolean
+ get() = false
+
override fun storage(context: Context) = createDataStore(context)
override fun getReadPermissions(context: Context) =
@@ -75,7 +78,7 @@ class DataSaverMainSwitchPreference : MainSwitchBarMetadata, PreferenceLifecycle
override fun onLastObserverRemoved() = dataSaverBackend.remListener(this)
override fun onDataSaverChanged(isDataSaving: Boolean) =
- notifyChange(KEY, DataChangeReason.UPDATE)
+ notifyChange(KEY, PreferenceChangeReason.VALUE)
}
companion object {
diff --git a/src/com/android/settings/display/BrightnessLevelPreference.kt b/src/com/android/settings/display/BrightnessLevelPreference.kt
index f87edcbe758..e14db6b59a6 100644
--- a/src/com/android/settings/display/BrightnessLevelPreference.kt
+++ b/src/com/android/settings/display/BrightnessLevelPreference.kt
@@ -33,7 +33,6 @@ import com.android.settings.Utils
import com.android.settings.core.SettingsBaseActivity
import com.android.settingslib.RestrictedPreference
import com.android.settingslib.datastore.AbstractKeyedDataObservable
-import com.android.settingslib.datastore.DataChangeReason
import com.android.settingslib.datastore.HandlerExecutor
import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.KeyedObserver
@@ -43,6 +42,7 @@ import com.android.settingslib.display.BrightnessUtils.GAMMA_SPACE_MAX
import com.android.settingslib.display.BrightnessUtils.GAMMA_SPACE_MIN
import com.android.settingslib.display.BrightnessUtils.convertLinearToGammaFloat
import com.android.settingslib.metadata.PersistentPreference
+import com.android.settingslib.metadata.PreferenceChangeReason
import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.PreferenceSummaryProvider
import com.android.settingslib.metadata.RangeValue
@@ -155,7 +155,7 @@ class BrightnessLevelPreference :
}
override fun onKeyChanged(key: String, reason: Int) {
- notifyChange(KEY, DataChangeReason.UPDATE)
+ notifyChange(KEY, reason)
}
override fun onDisplayAdded(displayId: Int) {}
@@ -163,7 +163,7 @@ class BrightnessLevelPreference :
override fun onDisplayRemoved(displayId: Int) {}
override fun onDisplayChanged(displayId: Int) {
- notifyChange(KEY, DataChangeReason.UPDATE)
+ notifyChange(KEY, PreferenceChangeReason.STATE)
}
}
diff --git a/src/com/android/settings/display/darkmode/DarkModeStorage.kt b/src/com/android/settings/display/darkmode/DarkModeStorage.kt
index 9c53379c2d0..768a5529822 100644
--- a/src/com/android/settings/display/darkmode/DarkModeStorage.kt
+++ b/src/com/android/settings/display/darkmode/DarkModeStorage.kt
@@ -24,8 +24,8 @@ import android.content.IntentFilter
import android.content.res.Configuration
import android.os.PowerManager
import com.android.settingslib.datastore.AbstractKeyedDataObservable
-import com.android.settingslib.datastore.DataChangeReason
import com.android.settingslib.datastore.KeyValueStore
+import com.android.settingslib.metadata.PreferenceChangeReason
/**
* Abstract storage for dark mode settings.
@@ -54,7 +54,7 @@ internal class DarkModeStorage(private val context: Context) :
broadcastReceiver =
object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
- notifyChange(DataChangeReason.UPDATE)
+ notifyChange(PreferenceChangeReason.STATE)
}
}
context.registerReceiver(
@@ -63,7 +63,7 @@ internal class DarkModeStorage(private val context: Context) :
)
darkModeObserver = DarkModeObserver(context)
- darkModeObserver.subscribe { notifyChange(DataChangeReason.UPDATE) }
+ darkModeObserver.subscribe { notifyChange(PreferenceChangeReason.VALUE) }
}
override fun onLastObserverRemoved() {
diff --git a/src/com/android/settings/fuelgauge/BatteryHeaderPreference.kt b/src/com/android/settings/fuelgauge/BatteryHeaderPreference.kt
index 9029a8511ff..f0a3ae67af9 100644
--- a/src/com/android/settings/fuelgauge/BatteryHeaderPreference.kt
+++ b/src/com/android/settings/fuelgauge/BatteryHeaderPreference.kt
@@ -32,6 +32,7 @@ import com.android.settingslib.metadata.PreferenceLifecycleProvider
import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.RangeValue
import com.android.settingslib.metadata.ReadWritePermit
+import com.android.settingslib.metadata.SensitivityLevel
import com.android.settingslib.preference.PreferenceBinding
import com.android.settingslib.widget.UsageProgressBarPreference
@@ -113,6 +114,9 @@ class BatteryHeaderPreference :
override fun getWritePermit(context: Context, value: Int?, callingPid: Int, callingUid: Int) =
ReadWritePermit.DISALLOW
+ override val sensitivityLevel: Int
+ get() = SensitivityLevel.NO_SENSITIVITY
+
companion object {
private const val KEY = "battery_header"
private const val BATTERY_MAX_LEVEL: Long = 100L
diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverPreference.kt b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverPreference.kt
index be3a3b891e1..3e5cee9f132 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverPreference.kt
+++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverPreference.kt
@@ -22,7 +22,6 @@ import com.android.settings.R
import com.android.settings.fuelgauge.BatterySaverReceiver
import com.android.settings.fuelgauge.BatterySaverReceiver.BatterySaverListener
import com.android.settingslib.datastore.AbstractKeyedDataObservable
-import com.android.settingslib.datastore.DataChangeReason
import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.Permissions
import com.android.settingslib.fuelgauge.BatterySaverLogging.SAVER_ENABLED_SETTINGS
@@ -30,6 +29,7 @@ import com.android.settingslib.fuelgauge.BatterySaverUtils
import com.android.settingslib.fuelgauge.BatteryStatus
import com.android.settingslib.fuelgauge.BatteryUtils
import com.android.settingslib.metadata.MainSwitchPreference
+import com.android.settingslib.metadata.PreferenceChangeReason
import com.android.settingslib.metadata.ReadWritePermit
import com.android.settingslib.metadata.SensitivityLevel
import kotlinx.coroutines.CoroutineScope
@@ -105,12 +105,12 @@ class BatterySaverPreference :
override fun onPowerSaveModeChanged() {
scope.launch {
delay(SWITCH_ANIMATION_DURATION)
- notifyChange(KEY, DataChangeReason.UPDATE)
+ notifyChange(KEY, PreferenceChangeReason.VALUE)
}
}
override fun onBatteryChanged(pluggedIn: Boolean) =
- notifyChange(KEY, DataChangeReason.UPDATE)
+ notifyChange(KEY, PreferenceChangeReason.STATE)
}
companion object {
diff --git a/src/com/android/settings/network/AirplaneModePreference.kt b/src/com/android/settings/network/AirplaneModePreference.kt
index 11790d0be26..b870f30eaf1 100644
--- a/src/com/android/settings/network/AirplaneModePreference.kt
+++ b/src/com/android/settings/network/AirplaneModePreference.kt
@@ -37,11 +37,11 @@ import com.android.settings.network.SatelliteRepository.Companion.isSatelliteOn
import com.android.settings.overlay.FeatureFactory.Companion.featureFactory
import com.android.settingslib.RestrictedSwitchPreference
import com.android.settingslib.datastore.AbstractKeyedDataObservable
-import com.android.settingslib.datastore.DataChangeReason
import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.SettingsGlobalStore
import com.android.settingslib.datastore.SettingsStore
import com.android.settingslib.metadata.PreferenceAvailabilityProvider
+import com.android.settingslib.metadata.PreferenceChangeReason
import com.android.settingslib.metadata.PreferenceLifecycleContext
import com.android.settingslib.metadata.PreferenceLifecycleProvider
import com.android.settingslib.metadata.ReadWritePermit
@@ -126,7 +126,7 @@ class AirplaneModePreference :
phoneStateListener =
object : PhoneStateListener(Looper.getMainLooper()) {
override fun onRadioPowerStateChanged(state: Int) {
- notifyChange(KEY, DataChangeReason.UPDATE)
+ notifyChange(KEY, PreferenceChangeReason.VALUE)
}
}
it.listen(phoneStateListener, PhoneStateListener.LISTEN_RADIO_POWER_STATE_CHANGED)
diff --git a/src/com/android/settings/network/telephony/SatelliteSettingsPreferenceCategoryController.java b/src/com/android/settings/network/telephony/SatelliteSettingsPreferenceCategoryController.java
index f0d1da42c88..6218e055038 100644
--- a/src/com/android/settings/network/telephony/SatelliteSettingsPreferenceCategoryController.java
+++ b/src/com/android/settings/network/telephony/SatelliteSettingsPreferenceCategoryController.java
@@ -18,21 +18,13 @@ package com.android.settings.network.telephony;
import static android.telephony.CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL;
import static android.telephony.CarrierConfigManager.KEY_SATELLITE_ESOS_SUPPORTED_BOOL;
-import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_DATA;
-import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_SMS;
import android.content.Context;
import android.os.PersistableBundle;
-import android.telephony.TelephonyCallback;
-import android.telephony.TelephonyManager;
-import android.telephony.satellite.NtnSignalStrength;
import android.telephony.satellite.SatelliteManager;
import android.util.Log;
-import androidx.annotation.NonNull;
-import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.DefaultLifecycleObserver;
-import androidx.lifecycle.LifecycleOwner;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen;
@@ -40,9 +32,6 @@ import com.android.settings.R;
import com.android.settings.flags.Flags;
import com.android.settings.network.CarrierConfigCache;
-import java.util.Arrays;
-import java.util.List;
-
/** Preference controller for Satellite functions in mobile network settings. */
public class SatelliteSettingsPreferenceCategoryController
extends TelephonyBasePreferenceController implements DefaultLifecycleObserver {
@@ -51,17 +40,11 @@ public class SatelliteSettingsPreferenceCategoryController
private CarrierConfigCache mCarrierConfigCache;
private SatelliteManager mSatelliteManager;
private PreferenceCategory mPreferenceCategory;
- private TelephonyManager mTelephonyManager;
-
- @VisibleForTesting
- final CarrierRoamingNtnModeCallback mCarrierRoamingNtnModeCallback =
- new CarrierRoamingNtnModeCallback();
public SatelliteSettingsPreferenceCategoryController(Context context, String key) {
super(context, key);
mCarrierConfigCache = CarrierConfigCache.getInstance(context);
mSatelliteManager = context.getSystemService(SatelliteManager.class);
- mTelephonyManager = context.getSystemService(TelephonyManager.class);
}
/**
@@ -72,13 +55,13 @@ public class SatelliteSettingsPreferenceCategoryController
public void init(int subId) {
Log.d(TAG, "init(), subId=" + subId);
mSubId = subId;
- mTelephonyManager = mTelephonyManager.createForSubscriptionId(subId);
}
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
mPreferenceCategory = screen.findPreference(getPreferenceKey());
+ mPreferenceCategory.setTitle(R.string.category_title_satellite_connectivity);
}
@Override
@@ -103,58 +86,4 @@ public class SatelliteSettingsPreferenceCategoryController
return (isSatelliteAttachSupported || isSatelliteSosSupported)
? AVAILABLE_UNSEARCHABLE : UNSUPPORTED_ON_DEVICE;
}
-
- @Override
- public void onResume(@NonNull LifecycleOwner owner) {
- if (Flags.satelliteOemSettingsUxMigration()) {
- mTelephonyManager.registerTelephonyCallback(mContext.getMainExecutor(),
- mCarrierRoamingNtnModeCallback);
- }
- }
-
- @Override
- public void onPause(@NonNull LifecycleOwner owner) {
- if (Flags.satelliteOemSettingsUxMigration()) {
- mTelephonyManager.unregisterTelephonyCallback(mCarrierRoamingNtnModeCallback);
- }
- }
-
- @VisibleForTesting
- class CarrierRoamingNtnModeCallback extends TelephonyCallback implements
- TelephonyCallback.CarrierRoamingNtnListener {
- @Override
- public void onCarrierRoamingNtnAvailableServicesChanged(int[] availableServices) {
- CarrierRoamingNtnListener.super.onCarrierRoamingNtnAvailableServicesChanged(
- availableServices);
- List availableServicesList = Arrays.stream(availableServices).boxed().toList();
- boolean isSmsAvailable = availableServicesList.contains(SERVICE_TYPE_SMS);
- boolean isDataAvailable = availableServicesList.contains(SERVICE_TYPE_DATA);
- Log.i(TAG, "isSmsAvailable : " + isSmsAvailable
- + " / isDataAvailable " + isDataAvailable);
- if (mPreferenceCategory == null) {
- Log.d(TAG, "Satellite preference category is not initialized yet");
- return;
- }
- if (isDataAvailable) {
- mPreferenceCategory.setTitle(R.string.category_title_satellite_connectivity);
- } else if (isSmsAvailable) {
- mPreferenceCategory.setTitle(R.string.satellite_setting_title);
- }
- }
-
- @Override
- public void onCarrierRoamingNtnEligibleStateChanged(boolean eligible) {
- // Do nothing
- }
-
- @Override
- public void onCarrierRoamingNtnModeChanged(boolean active) {
- // Do nothing
- }
-
- @Override
- public void onCarrierRoamingNtnSignalStrengthChanged(NtnSignalStrength ntnSignalStrength) {
- // Do nothing
- }
- }
}
diff --git a/src/com/android/settings/notification/app/AllConversationsPreferenceController.java b/src/com/android/settings/notification/app/AllConversationsPreferenceController.java
index c8631909494..1fb8e35c8bd 100644
--- a/src/com/android/settings/notification/app/AllConversationsPreferenceController.java
+++ b/src/com/android/settings/notification/app/AllConversationsPreferenceController.java
@@ -23,6 +23,7 @@ import androidx.preference.Preference;
import com.android.settings.R;
import com.android.settings.notification.NotificationBackend;
+import com.android.settingslib.widget.TopIntroPreference;
public class AllConversationsPreferenceController extends ConversationListPreferenceController {
@@ -39,9 +40,9 @@ public class AllConversationsPreferenceController extends ConversationListPrefer
@Override
Preference getSummaryPreference() {
- Preference pref = new Preference(mContext);
+ Preference pref = new TopIntroPreference(mContext);
pref.setOrder(1);
- pref.setSummary(R.string.other_conversations_summary);
+ pref.setTitle(R.string.other_conversations_summary);
pref.setSelectable(false);
return pref;
}
diff --git a/src/com/android/settings/notification/app/AllowSoundPreferenceController.java b/src/com/android/settings/notification/app/AllowSoundPreferenceController.java
index 0664c544bec..b1333b367ac 100644
--- a/src/com/android/settings/notification/app/AllowSoundPreferenceController.java
+++ b/src/com/android/settings/notification/app/AllowSoundPreferenceController.java
@@ -71,6 +71,9 @@ public class AllowSoundPreferenceController extends NotificationPreferenceContro
pref.setEnabled(!pref.isDisabledByAdmin());
pref.setChecked(mChannel.getImportance() >= IMPORTANCE_DEFAULT
|| mChannel.getImportance() == IMPORTANCE_UNSPECIFIED);
+ if (preference.getParent() != null) {
+ preference.getParent().setVisible(true);
+ }
} else { Log.i(TAG, "tried to updatestate on a null channel?!"); }
}
diff --git a/src/com/android/settings/notification/app/AppLinkPreferenceController.java b/src/com/android/settings/notification/app/AppLinkPreferenceController.java
index 043ae698f54..4b397d02ce9 100644
--- a/src/com/android/settings/notification/app/AppLinkPreferenceController.java
+++ b/src/com/android/settings/notification/app/AppLinkPreferenceController.java
@@ -54,6 +54,9 @@ public class AppLinkPreferenceController extends NotificationPreferenceControlle
}
public void updateState(Preference preference) {
+ if (preference.getParent() != null) {
+ preference.getParent().setVisible(true);
+ }
if (mAppRow != null) {
preference.setIntent(mAppRow.settingsIntent);
}
diff --git a/src/com/android/settings/notification/app/BadgePreferenceController.java b/src/com/android/settings/notification/app/BadgePreferenceController.java
index 9d55fa322b8..b5e65fca401 100644
--- a/src/com/android/settings/notification/app/BadgePreferenceController.java
+++ b/src/com/android/settings/notification/app/BadgePreferenceController.java
@@ -82,6 +82,9 @@ public class BadgePreferenceController extends NotificationPreferenceController
public void updateState(Preference preference) {
if (mAppRow != null) {
+ if (preference.getParent() != null) {
+ preference.getParent().setVisible(true);
+ }
RestrictedSwitchPreference pref = (RestrictedSwitchPreference) preference;
pref.setDisabledByAdmin(mAdmin);
if (mChannel != null) {
diff --git a/src/com/android/settings/notification/app/BubbleSummaryPreferenceController.java b/src/com/android/settings/notification/app/BubbleSummaryPreferenceController.java
index 8c22f926e9b..e82fe0b31a4 100644
--- a/src/com/android/settings/notification/app/BubbleSummaryPreferenceController.java
+++ b/src/com/android/settings/notification/app/BubbleSummaryPreferenceController.java
@@ -82,6 +82,9 @@ public class BubbleSummaryPreferenceController extends NotificationPreferenceCon
intent.putExtra(Settings.EXTRA_APP_UID, mAppRow.uid);
preference.setIntent(intent);
}
+ if (preference.getParent() != null) {
+ preference.getParent().setVisible(true);
+ }
}
@Override
diff --git a/src/com/android/settings/notification/app/ChannelListPreferenceController.java b/src/com/android/settings/notification/app/ChannelListPreferenceController.java
index b8dfb6a7069..66094a02f5f 100644
--- a/src/com/android/settings/notification/app/ChannelListPreferenceController.java
+++ b/src/com/android/settings/notification/app/ChannelListPreferenceController.java
@@ -58,6 +58,7 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr
private List mChannelGroupList;
private PreferenceCategory mPreference;
+ int mChannelCount;
public ChannelListPreferenceController(Context context, NotificationBackend backend) {
super(context, backend);
@@ -107,6 +108,7 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr
} else {
mChannelGroupList = mBackend.getGroups(mAppRow.pkg, mAppRow.uid).getList();
}
+ mChannelCount = mBackend.getChannelCount(mAppRow.pkg, mAppRow.uid);
Collections.sort(mChannelGroupList, CHANNEL_GROUP_COMPARATOR);
return null;
}
@@ -116,6 +118,7 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr
if (mContext == null) {
return;
}
+
updateFullList(mPreference, mChannelGroupList);
}
}.execute();
@@ -129,25 +132,30 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr
void updateFullList(@NonNull PreferenceCategory groupPrefsList,
@NonNull List channelGroups) {
if (channelGroups.isEmpty()) {
- if (groupPrefsList.getPreferenceCount() == 1
- && KEY_ZERO_CATEGORIES.equals(groupPrefsList.getPreference(0).getKey())) {
- // Ensure the titles are correct for the current language, but otherwise leave alone
- PreferenceGroup groupCategory = (PreferenceGroup) groupPrefsList.getPreference(0);
- groupCategory.setTitle(R.string.notification_channels);
- groupCategory.getPreference(0).setTitle(R.string.no_channels);
- } else {
- // Clear any contents and create the 'zero-categories' group.
+ if (mChannelCount > 0) {
groupPrefsList.removeAll();
+ } else {
+ if (groupPrefsList.getPreferenceCount() == 1
+ && KEY_ZERO_CATEGORIES.equals(groupPrefsList.getPreference(0).getKey())) {
+ // Ensure the titles are correct for the current language, but otherwise leave alone
+ PreferenceGroup groupCategory = (PreferenceGroup) groupPrefsList.getPreference(
+ 0);
+ groupCategory.setTitle(R.string.notification_channels);
+ groupCategory.getPreference(0).setTitle(R.string.no_channels);
+ } else {
+ // Clear any contents and create the 'zero-categories' group.
+ groupPrefsList.removeAll();
- PreferenceCategory groupCategory = new PreferenceCategory(mContext);
- groupCategory.setTitle(R.string.notification_channels);
- groupCategory.setKey(KEY_ZERO_CATEGORIES);
- groupPrefsList.addPreference(groupCategory);
+ PreferenceCategory groupCategory = new PreferenceCategory(mContext);
+ groupCategory.setTitle(R.string.notification_channels);
+ groupCategory.setKey(KEY_ZERO_CATEGORIES);
+ groupPrefsList.addPreference(groupCategory);
- Preference empty = new Preference(mContext);
- empty.setTitle(R.string.no_channels);
- empty.setEnabled(false);
- groupCategory.addPreference(empty);
+ Preference empty = new Preference(mContext);
+ empty.setTitle(R.string.no_channels);
+ empty.setEnabled(false);
+ groupCategory.addPreference(empty);
+ }
}
} else {
updateGroupList(groupPrefsList, channelGroups);
@@ -211,6 +219,11 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr
groupPrefsList.addPreference(group);
}
}
+ Preference otherGroup = groupPrefsList.findPreference(KEY_GENERAL_CATEGORY);
+ if (otherGroup != null) {
+ otherGroup.setTitle(numFinalGroups == 1
+ ? R.string.notification_channels : R.string.notification_channels_other);
+ }
}
/**
@@ -248,8 +261,7 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr
List finalOrderedPrefs = new ArrayList<>();
Preference appDefinedGroupToggle;
if (group.getId() == null) {
- // For the 'null' group, set the "Other" title.
- groupPrefGroup.setTitle(R.string.notification_channels_other);
+ groupPrefGroup.setTitle(R.string.notification_channels);
appDefinedGroupToggle = null;
} else {
// For an app-defined group, set their name and create a row to toggle 'isBlocked'.
diff --git a/src/com/android/settings/notification/app/DeletedChannelsPreferenceController.java b/src/com/android/settings/notification/app/DeletedChannelsPreferenceController.java
index 07b7fdab01d..004afe295b9 100644
--- a/src/com/android/settings/notification/app/DeletedChannelsPreferenceController.java
+++ b/src/com/android/settings/notification/app/DeletedChannelsPreferenceController.java
@@ -63,6 +63,9 @@ public class DeletedChannelsPreferenceController extends NotificationPreferenceC
}
public void updateState(Preference preference) {
+ if (preference.getParent() != null) {
+ preference.getParent().setVisible(true);
+ }
if (mAppRow != null) {
int deletedChannelCount = mBackend.getDeletedChannelCount(mAppRow.pkg, mAppRow.uid);
preference.setTitle(StringUtil.getIcuPluralsString(mContext, deletedChannelCount,
diff --git a/src/com/android/settings/notification/app/DndPreferenceController.java b/src/com/android/settings/notification/app/DndPreferenceController.java
index b65928aa915..25337879253 100644
--- a/src/com/android/settings/notification/app/DndPreferenceController.java
+++ b/src/com/android/settings/notification/app/DndPreferenceController.java
@@ -54,6 +54,9 @@ public class DndPreferenceController extends NotificationPreferenceController
public void updateState(Preference preference) {
if (mChannel != null) {
+ if (preference.getParent() != null) {
+ preference.getParent().setVisible(true);
+ }
RestrictedSwitchPreference pref = (RestrictedSwitchPreference) preference;
pref.setDisabledByAdmin(mAdmin);
pref.setEnabled(!pref.isDisabledByAdmin());
diff --git a/src/com/android/settings/notification/app/FullScreenIntentPermissionPreferenceController.kt b/src/com/android/settings/notification/app/FullScreenIntentPermissionPreferenceController.kt
index 4349b4c9f4e..6977a99a6c1 100644
--- a/src/com/android/settings/notification/app/FullScreenIntentPermissionPreferenceController.kt
+++ b/src/com/android/settings/notification/app/FullScreenIntentPermissionPreferenceController.kt
@@ -21,9 +21,9 @@ import android.app.AppOpsManager
import android.app.AppOpsManager.OP_USE_FULL_SCREEN_INTENT
import android.content.AttributionSource
import android.content.Context
-import android.content.pm.PackageManager.NameNotFoundException
import android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET
import android.content.pm.PackageManager.GET_PERMISSIONS
+import android.content.pm.PackageManager.NameNotFoundException
import android.os.UserHandle
import android.permission.PermissionManager
import android.util.Log
@@ -65,6 +65,7 @@ class FullScreenIntentPermissionPreferenceController(
preference.setDisabledByAdmin(mAdmin)
preference.isEnabled = !preference.isDisabledByAdmin
preference.isChecked = isPermissionGranted()
+ preference.parent?.isVisible = true
}
override fun onPreferenceChange(preference: Preference, value: Any): Boolean {
diff --git a/src/com/android/settings/notification/app/HeaderPreferenceController.java b/src/com/android/settings/notification/app/HeaderPreferenceController.java
index 220e7b555f1..91abe815794 100644
--- a/src/com/android/settings/notification/app/HeaderPreferenceController.java
+++ b/src/com/android/settings/notification/app/HeaderPreferenceController.java
@@ -81,9 +81,8 @@ public class HeaderPreferenceController extends NotificationPreferenceController
mHeaderController = EntityHeaderController.newInstance(
activity, mFragment, pref.findViewById(R.id.entity_header));
pref = mHeaderController.setIcon(mAppRow.icon)
- .setLabel(getLabel())
- .setSummary(getSummary())
- .setSecondSummary(getSecondSummary())
+ .setLabel(getSummary())
+ .setSummary(getSecondSummary())
.setPackageName(mAppRow.pkg)
.setUid(mAppRow.uid)
.setButtonActions(EntityHeaderController.ActionType.ACTION_NOTIF_PREFERENCE,
@@ -95,14 +94,6 @@ public class HeaderPreferenceController extends NotificationPreferenceController
}
}
- public CharSequence getLabel() {
- if (mChannel != null && !isDefaultChannel()) {
- return mChannel.getName();
- } else {
- return mAppRow.label;
- }
- }
-
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart() {
mStarted = true;
@@ -113,15 +104,7 @@ public class HeaderPreferenceController extends NotificationPreferenceController
if (mChannel != null) {
if (mChannelGroup != null
&& !TextUtils.isEmpty(mChannelGroup.getName())) {
- final SpannableStringBuilder summary = new SpannableStringBuilder();
- BidiFormatter bidi = BidiFormatter.getInstance();
- summary.append(bidi.unicodeWrap(mAppRow.label));
- summary.append(bidi.unicodeWrap(mContext.getText(
- R.string.notification_header_divider_symbol_with_spaces)));
- summary.append(bidi.unicodeWrap(mChannelGroup.getName().toString()));
- return summary.toString();
- } else {
- return mAppRow.label.toString();
+ return mChannelGroup.getName().toString();
}
}
return "";
diff --git a/src/com/android/settings/notification/app/InvalidConversationInfoPreferenceController.java b/src/com/android/settings/notification/app/InvalidConversationInfoPreferenceController.java
index 478607b193e..219457944d1 100644
--- a/src/com/android/settings/notification/app/InvalidConversationInfoPreferenceController.java
+++ b/src/com/android/settings/notification/app/InvalidConversationInfoPreferenceController.java
@@ -23,6 +23,7 @@ import androidx.preference.Preference;
import com.android.settings.R;
import com.android.settings.notification.NotificationBackend;
+import com.android.settingslib.widget.SettingsThemeHelper;
public class InvalidConversationInfoPreferenceController extends NotificationPreferenceController {
@@ -49,6 +50,9 @@ public class InvalidConversationInfoPreferenceController extends NotificationPre
if (mPreferenceFilter != null && !isIncludedInFilter()) {
return false;
}
+ if (SettingsThemeHelper.isExpressiveTheme(mContext)) {
+ return false;
+ }
return mBackend.isInInvalidMsgState(mAppRow.pkg, mAppRow.uid);
}
diff --git a/src/com/android/settings/notification/app/InvalidConversationPreferenceController.java b/src/com/android/settings/notification/app/InvalidConversationPreferenceController.java
index 5c502dccbe0..57eaad9d01e 100644
--- a/src/com/android/settings/notification/app/InvalidConversationPreferenceController.java
+++ b/src/com/android/settings/notification/app/InvalidConversationPreferenceController.java
@@ -24,6 +24,7 @@ import androidx.preference.Preference;
import com.android.settings.R;
import com.android.settings.notification.NotificationBackend;
import com.android.settingslib.RestrictedSwitchPreference;
+import com.android.settingslib.widget.SettingsThemeHelper;
public class InvalidConversationPreferenceController extends NotificationPreferenceController
implements Preference.OnPreferenceChangeListener {
@@ -67,7 +68,15 @@ public class InvalidConversationPreferenceController extends NotificationPrefere
pref.setDisabledByAdmin(mAdmin);
pref.setEnabled(!pref.isDisabledByAdmin());
pref.setChecked(!mBackend.hasUserDemotedInvalidMsgApp(mAppRow.pkg, mAppRow.uid));
- preference.setSummary(mContext.getString(R.string.conversation_section_switch_summary));
+ if (SettingsThemeHelper.isExpressiveTheme(mContext)) {
+ if (preference.getParent() != null) {
+ preference.getParent().setVisible(true);
+ }
+ preference.setSummary(mContext.getString(
+ R.string.conversation_section_switch_complete_summary));
+ } else {
+ preference.setSummary(mContext.getString(R.string.conversation_section_switch_summary));
+ }
}
@Override
diff --git a/src/com/android/settings/notification/app/PriorityConversationsPreferenceController.java b/src/com/android/settings/notification/app/PriorityConversationsPreferenceController.java
index 18fc9178510..55b50df280a 100644
--- a/src/com/android/settings/notification/app/PriorityConversationsPreferenceController.java
+++ b/src/com/android/settings/notification/app/PriorityConversationsPreferenceController.java
@@ -23,6 +23,7 @@ import androidx.preference.Preference;
import com.android.settings.R;
import com.android.settings.notification.NotificationBackend;
+import com.android.settingslib.widget.TopIntroPreference;
public class PriorityConversationsPreferenceController extends
ConversationListPreferenceController {
@@ -40,9 +41,9 @@ public class PriorityConversationsPreferenceController extends
@Override
Preference getSummaryPreference() {
- Preference pref = new Preference(mContext);
+ Preference pref = new TopIntroPreference(mContext);
pref.setOrder(1);
- pref.setSummary(R.string.important_conversations_summary_bubbles);
+ pref.setTitle(R.string.important_conversations_summary_bubbles);
pref.setSelectable(false);
return pref;
}
diff --git a/src/com/android/settings/notification/app/PromotedNotificationsPreferenceController.java b/src/com/android/settings/notification/app/PromotedNotificationsPreferenceController.java
index 13417b2ccf1..bd8229e4d48 100644
--- a/src/com/android/settings/notification/app/PromotedNotificationsPreferenceController.java
+++ b/src/com/android/settings/notification/app/PromotedNotificationsPreferenceController.java
@@ -20,14 +20,12 @@ import android.content.Context;
import androidx.annotation.NonNull;
import androidx.preference.Preference;
-import androidx.preference.PreferenceCategory;
import com.android.settings.notification.NotificationBackend;
import com.android.settingslib.RestrictedSwitchPreference;
public class PromotedNotificationsPreferenceController extends
NotificationPreferenceController implements Preference.OnPreferenceChangeListener {
- private static final String KEY_PROMOTED_CATEGORY = "promoted_category";
protected static final String KEY_PROMOTED_SWITCH = "promoted_switch";
public PromotedNotificationsPreferenceController(@NonNull Context context,
@@ -38,7 +36,7 @@ public class PromotedNotificationsPreferenceController extends
@Override
@NonNull
public String getPreferenceKey() {
- return KEY_PROMOTED_CATEGORY;
+ return KEY_PROMOTED_SWITCH;
}
@Override
@@ -56,12 +54,13 @@ public class PromotedNotificationsPreferenceController extends
}
/**
- * Updates the state of the promoted notifications switch. Because this controller governs
- * the full PreferenceCategory, we must find the switch preference within the category first.
+ * Updates the state of the promoted notifications switch.
*/
public void updateState(@NonNull Preference preference) {
- PreferenceCategory category = (PreferenceCategory) preference;
- RestrictedSwitchPreference pref = category.findPreference(KEY_PROMOTED_SWITCH);
+ RestrictedSwitchPreference pref = (RestrictedSwitchPreference) preference;
+ if (pref.getParent() != null) {
+ pref.getParent().setVisible(true);
+ }
if (pref != null && mAppRow != null) {
pref.setDisabledByAdmin(mAdmin);
diff --git a/src/com/android/settings/notification/app/RecentConversationsPreferenceController.java b/src/com/android/settings/notification/app/RecentConversationsPreferenceController.java
index f5f2e97090b..4fe0a875334 100644
--- a/src/com/android/settings/notification/app/RecentConversationsPreferenceController.java
+++ b/src/com/android/settings/notification/app/RecentConversationsPreferenceController.java
@@ -40,6 +40,7 @@ import com.android.settings.applications.AppInfoBase;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.notification.NotificationBackend;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.widget.ButtonPreference;
import com.android.settingslib.widget.LayoutPreference;
import java.text.Collator;
@@ -75,14 +76,12 @@ public class RecentConversationsPreferenceController extends AbstractPreferenceC
return true;
}
- //TODO(b/233325816): Use ButtonPreference instead.
- LayoutPreference getClearAll(PreferenceGroup parent) {
- LayoutPreference pref = new LayoutPreference(
- mContext, R.layout.conversations_clear_recents);
+ ButtonPreference getClearAll(PreferenceGroup parent) {
+ ButtonPreference pref = new ButtonPreference(mContext);
+ pref.setTitle(R.string.conversation_settings_clear_recents);
pref.setKey(getPreferenceKey() + CLEAR_ALL_KEY_SUFFIX);
pref.setOrder(1);
- Button button = pref.findViewById(R.id.conversation_settings_clear_recents);
- button.setOnClickListener(v -> {
+ pref.setOnClickListener(v -> {
try {
mPs.removeAllRecentConversations();
// Removing recents is asynchronous, so we can't immediately reload the list from
@@ -97,7 +96,8 @@ public class RecentConversationsPreferenceController extends AbstractPreferenceC
}
}
}
- button.announceForAccessibility(mContext.getString(R.string.recent_convos_removed));
+ pref.getButton().announceForAccessibility(
+ mContext.getString(R.string.recent_convos_removed));
} catch (RemoteException e) {
Slog.w(TAG, "Could not clear recents", e);
}
@@ -160,25 +160,27 @@ public class RecentConversationsPreferenceController extends AbstractPreferenceC
.forEachOrdered(pref -> {
pref.setOrder(order.getAndIncrement());
mPreferenceGroup.addPreference(pref);
- if (pref.hasClearListener()) {
+ if (pref instanceof RecentConversationPreference
+ && ((RecentConversationPreference) pref).hasClearListener()) {
hasClearable.set(true);
}
});
return hasClearable.get();
}
- protected RecentConversationPreference createConversationPref(
+ protected Preference createConversationPref(
final ConversationChannel conversation) {
final String pkg = conversation.getShortcutInfo().getPackage();
final int uid = conversation.getUid();
final String conversationId = conversation.getShortcutInfo().getId();
- RecentConversationPreference pref = new RecentConversationPreference(mContext);
+ Preference pref = conversation.hasActiveNotifications() ? new Preference(mContext)
+ : new RecentConversationPreference(mContext);
if (!conversation.hasActiveNotifications()) {
- pref.setOnClearClickListener(() -> {
+ ((RecentConversationPreference) pref).setOnClearClickListener(() -> {
try {
mPs.removeRecentConversation(pkg, UserHandle.getUserId(uid), conversationId);
- pref.getClearView().announceForAccessibility(
+ ((RecentConversationPreference) pref).getClearView().announceForAccessibility(
mContext.getString(R.string.recent_convo_removed));
mPreferenceGroup.removePreference(pref);
} catch (RemoteException e) {
diff --git a/src/com/android/settings/notification/app/ShowMorePreferenceController.java b/src/com/android/settings/notification/app/ShowMorePreferenceController.java
index dbc279a6c8b..f44a0c8518e 100644
--- a/src/com/android/settings/notification/app/ShowMorePreferenceController.java
+++ b/src/com/android/settings/notification/app/ShowMorePreferenceController.java
@@ -56,6 +56,9 @@ public class ShowMorePreferenceController extends NotificationPreferenceControll
if (mAppRow.banned || mAppRow.showAllChannels) {
return false;
}
+ if (mBackend.getChannelCount(mAppRow.pkg, mAppRow.uid) == 0) {
+ return false;
+ }
return true;
}
diff --git a/src/com/android/settings/notification/app/VisibilityPreferenceController.java b/src/com/android/settings/notification/app/VisibilityPreferenceController.java
index a2a1d76b71c..0cec7e2a4d6 100644
--- a/src/com/android/settings/notification/app/VisibilityPreferenceController.java
+++ b/src/com/android/settings/notification/app/VisibilityPreferenceController.java
@@ -75,6 +75,10 @@ public class VisibilityPreferenceController extends NotificationPreferenceContro
public void updateState(Preference preference) {
if (mChannel != null && mAppRow != null) {
+ if (preference.getParent() != null) {
+ preference.getParent().setVisible(true);
+ }
+
RestrictedListPreference pref = (RestrictedListPreference) preference;
ArrayList entries = new ArrayList<>();
ArrayList values = new ArrayList<>();
diff --git a/src/com/android/settings/restriction/UserRestrictionBindingHelper.kt b/src/com/android/settings/restriction/UserRestrictionBindingHelper.kt
index a1329c2ecdf..4dca003d704 100644
--- a/src/com/android/settings/restriction/UserRestrictionBindingHelper.kt
+++ b/src/com/android/settings/restriction/UserRestrictionBindingHelper.kt
@@ -20,8 +20,8 @@ import android.content.Context
import com.android.settings.PreferenceRestrictionMixin
import com.android.settingslib.datastore.HandlerExecutor
import com.android.settingslib.datastore.KeyedObserver
+import com.android.settingslib.metadata.PreferenceChangeReason
import com.android.settingslib.preference.PreferenceScreenBindingHelper
-import com.android.settingslib.preference.PreferenceScreenBindingHelper.Companion.CHANGE_REASON_STATE
/** Helper to rebind preference immediately when user restriction is changed. */
class UserRestrictionBindingHelper(
@@ -55,7 +55,7 @@ class UserRestrictionBindingHelper(
override fun onKeyChanged(restrictionKey: String, reason: Int) {
val keys = restrictionKeysToPreferenceKeys[restrictionKey] ?: return
- for (key in keys) screenBindingHelper.notifyChange(key, CHANGE_REASON_STATE)
+ for (key in keys) screenBindingHelper.notifyChange(key, PreferenceChangeReason.STATE)
}
override fun close() {
diff --git a/src/com/android/settings/restriction/UserRestrictions.kt b/src/com/android/settings/restriction/UserRestrictions.kt
index 880aa5d9991..3d78e8e397f 100644
--- a/src/com/android/settings/restriction/UserRestrictions.kt
+++ b/src/com/android/settings/restriction/UserRestrictions.kt
@@ -24,6 +24,7 @@ import android.os.UserManager
import com.android.settingslib.datastore.AbstractKeyedDataObservable
import com.android.settingslib.datastore.DataChangeReason
import com.android.settingslib.datastore.KeyedObserver
+import com.android.settingslib.metadata.PreferenceChangeReason
import java.util.concurrent.Executor
/** Helper class to monitor user restriction changes. */
@@ -46,7 +47,7 @@ class UserRestrictions private constructor(private val applicationContext: Conte
object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
// there is no way to get the changed keys, just notify all observers
- observable.notifyChange(DataChangeReason.UPDATE)
+ observable.notifyChange(PreferenceChangeReason.STATE)
}
}
diff --git a/src/com/android/settings/vpn2/OWNERS b/src/com/android/settings/vpn2/OWNERS
index 41356451dfa..919c56e59c4 100644
--- a/src/com/android/settings/vpn2/OWNERS
+++ b/src/com/android/settings/vpn2/OWNERS
@@ -1,13 +1,7 @@
# People who can approve changes for submission.
-jchalard@google.com
-lorenzo@google.com
-maze@google.com
-reminv@google.com
+file:platform/packages/modules/Connectivity:main:/OWNERS_core_networking_xts
xiaom@google.com
hughchen@google.com
robertluo@google.com
timhypeng@google.com
vincentwei@google.com
-
-# Emergency approvers in case the above are not available
-satk@google.com
diff --git a/src/com/android/settings/widget/MainSwitchBarMetadata.kt b/src/com/android/settings/widget/MainSwitchBarMetadata.kt
index f55cfd03789..4fc89bc19b6 100644
--- a/src/com/android/settings/widget/MainSwitchBarMetadata.kt
+++ b/src/com/android/settings/widget/MainSwitchBarMetadata.kt
@@ -27,6 +27,16 @@ import com.android.settingslib.preference.TwoStatePreferenceBinding
interface MainSwitchBarMetadata :
TwoStatePreference, TwoStatePreferenceBinding, PreferenceBindingPlaceholder {
+ /**
+ * Disable main switch bar when user toggles the switch. By this way, user cannot toggle again
+ * before last operation is done.
+ *
+ * Side-effect: If the underlying operation is completed quickly, this will causes UI flicker.
+ * Override and return `false` to get rid of the flicker.
+ */
+ val disableWidgetOnCheckedChanged: Boolean
+ get() = true
+
override fun createWidget(context: Context) = MainSwitchBarPreference(context, this)
override fun bind(preference: Preference, metadata: PreferenceMetadata) {
diff --git a/src/com/android/settings/widget/MainSwitchBarPreference.kt b/src/com/android/settings/widget/MainSwitchBarPreference.kt
index b3b341c75a9..a23409a8cc8 100644
--- a/src/com/android/settings/widget/MainSwitchBarPreference.kt
+++ b/src/com/android/settings/widget/MainSwitchBarPreference.kt
@@ -80,7 +80,7 @@ class MainSwitchBarPreference(context: Context, private val metadata: MainSwitch
override fun onCheckedChanged(buttonView: CompoundButton, isChecked: Boolean) {
// prevent user from toggling the switch before data store operation is done
- isEnabled = false
+ if (metadata.disableWidgetOnCheckedChanged) isEnabled = false
// once data store is updated, isEnabled will be reset due to rebind
persistBoolean(isChecked)
}
diff --git a/src/com/android/settings/wifi/WifiSwitchPreference.kt b/src/com/android/settings/wifi/WifiSwitchPreference.kt
index dbe5759a2e4..2b2b3443f60 100644
--- a/src/com/android/settings/wifi/WifiSwitchPreference.kt
+++ b/src/com/android/settings/wifi/WifiSwitchPreference.kt
@@ -40,9 +40,9 @@ import com.android.settings.wifi.utils.wifiManager
import com.android.settingslib.RestrictedSwitchPreference
import com.android.settingslib.WirelessUtils
import com.android.settingslib.datastore.AbstractKeyedDataObservable
-import com.android.settingslib.datastore.DataChangeReason
import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.Permissions
+import com.android.settingslib.metadata.PreferenceChangeReason
import com.android.settingslib.metadata.PreferenceLifecycleProvider
import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.ReadWritePermit
@@ -163,7 +163,7 @@ class WifiSwitchPreference :
wifiState == WifiManager.WIFI_STATE_ENABLED ||
wifiState == WifiManager.WIFI_STATE_DISABLED
) {
- notifyChange(KEY, DataChangeReason.UPDATE)
+ notifyChange(KEY, PreferenceChangeReason.VALUE)
}
}
}
diff --git a/src/com/android/settings/wifi/tether/WifiHotspotSwitchPreference.kt b/src/com/android/settings/wifi/tether/WifiHotspotSwitchPreference.kt
index c93099eb9da..3877a026480 100644
--- a/src/com/android/settings/wifi/tether/WifiHotspotSwitchPreference.kt
+++ b/src/com/android/settings/wifi/tether/WifiHotspotSwitchPreference.kt
@@ -32,7 +32,6 @@ import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R
import com.android.settings.Utils
import com.android.settings.core.SubSettingLauncher
-import com.android.settings.datausage.DataSaverMainSwitchPreference.Companion.KEY as DATA_SAVER_KEY
import com.android.settings.wifi.WifiUtils.canShowWifiHotspot
import com.android.settings.wifi.utils.tetheringManager
import com.android.settings.wifi.utils.wifiApState
@@ -41,12 +40,12 @@ import com.android.settings.wifi.utils.wifiSoftApSsid
import com.android.settingslib.PrimarySwitchPreference
import com.android.settingslib.TetherUtil
import com.android.settingslib.datastore.AbstractKeyedDataObservable
-import com.android.settingslib.datastore.DataChangeReason
import com.android.settingslib.datastore.HandlerExecutor
import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.KeyedObserver
import com.android.settingslib.datastore.Permissions
import com.android.settingslib.metadata.PreferenceAvailabilityProvider
+import com.android.settingslib.metadata.PreferenceChangeReason
import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.PreferenceSummaryProvider
import com.android.settingslib.metadata.ReadWritePermit
@@ -54,6 +53,7 @@ import com.android.settingslib.metadata.SensitivityLevel
import com.android.settingslib.metadata.SwitchPreference
import com.android.settingslib.preference.PreferenceBinding
import com.android.settingslib.wifi.WifiUtils.Companion.getWifiTetherSummaryForConnectedDevices
+import com.android.settings.datausage.DataSaverMainSwitchPreference.Companion.KEY as DATA_SAVER_KEY
// LINT.IfChange
class WifiHotspotSwitchPreference(context: Context, dataSaverStore: KeyValueStore) :
@@ -186,13 +186,13 @@ class WifiHotspotSwitchPreference(context: Context, dataSaverStore: KeyValueStor
Log.d(TAG, "onStateChanged(),state=$state,failureReason=$failureReason")
sapFailureReason = failureReason
if (state == WifiManager.WIFI_AP_STATE_DISABLED) sapClientsSize = null
- notifyChange(KEY, DataChangeReason.UPDATE)
+ notifyChange(KEY, PreferenceChangeReason.VALUE)
}
override fun onConnectedClientsChanged(clients: List?) {
sapClientsSize = clients?.size ?: 0
Log.d(TAG, "onConnectedClientsChanged(),sapClientsSize=$sapClientsSize")
- notifyChange(KEY, DataChangeReason.UPDATE)
+ notifyChange(KEY, PreferenceChangeReason.STATE)
}
override fun onTetheringStarted() {}
@@ -202,7 +202,7 @@ class WifiHotspotSwitchPreference(context: Context, dataSaverStore: KeyValueStor
}
override fun onKeyChanged(key: String, reason: Int) =
- notifyChange(KEY, DataChangeReason.UPDATE)
+ notifyChange(KEY, reason)
}
override fun bind(preference: Preference, metadata: PreferenceMetadata) {
diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleAutoclickCursorAreaSizeControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleAutoclickCursorAreaSizeControllerTest.java
index 0a22e4ac026..f67053d1a76 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ToggleAutoclickCursorAreaSizeControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ToggleAutoclickCursorAreaSizeControllerTest.java
@@ -16,6 +16,9 @@
package com.android.settings.accessibility;
+import static android.view.accessibility.AccessibilityManager.AUTOCLICK_CURSOR_AREA_SIZE_MAX;
+import static android.view.accessibility.AccessibilityManager.AUTOCLICK_CURSOR_AREA_SIZE_MIN;
+
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -32,9 +35,11 @@ import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.Settings;
import android.view.accessibility.AccessibilityManager;
+import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.widget.SliderPreference;
import com.google.common.collect.ImmutableList;
@@ -106,21 +111,74 @@ public class ToggleAutoclickCursorAreaSizeControllerTest {
}
@Test
- public void getProgress_matchesSetting() {
- assertThat(mController.getSliderPosition()).isEqualTo(readSetting());
+ public void getProgress_matchesSetting_inRangeValue() {
+ // TODO(388844952): Use parameter testing.
+ for (int size : ImmutableList.of(20, 40, 60, 80, 100)) {
+ updateSetting(size);
+
+ assertThat(mController.getSliderPosition()).isEqualTo(size);
+ }
}
@Test
- public void setProgress_updatesSetting() {
- for (int size : ImmutableList.of(20, 40, 60, 80, 100)) {
- mController.setSliderPosition(size);
- assertThat(readSetting()).isEqualTo(size);
+ public void getProgress_matchesSetting_aboveMaxValue() {
+ updateSetting(120);
+
+ assertThat(mController.getSliderPosition()).isEqualTo(AUTOCLICK_CURSOR_AREA_SIZE_MAX);
+ }
+
+ @Test
+ public void getProgress_matchesSetting_belowMinValue() {
+ updateSetting(0);
+
+ assertThat(mController.getSliderPosition()).isEqualTo(AUTOCLICK_CURSOR_AREA_SIZE_MIN);
+ }
+
+ @Test
+ public void setProgress_updatesSetting_inRangeValue() {
+ // TODO(388844952): Use parameter testing.
+ for (int position : ImmutableList.of(20, 40, 60, 80, 100)) {
+ mController.setSliderPosition(position);
+
+ assertThat(readSetting()).isEqualTo(position);
}
}
+ @Test
+ public void setProgress_updatesSetting_aboveMaxValue() {
+ mController.setSliderPosition(120);
+
+ assertThat(readSetting()).isEqualTo(AUTOCLICK_CURSOR_AREA_SIZE_MAX);
+ }
+
+ @Test
+ public void setProgress_updatesSetting_belowMinValue() {
+ mController.setSliderPosition(0);
+
+ assertThat(readSetting()).isEqualTo(AUTOCLICK_CURSOR_AREA_SIZE_MIN);
+ }
+
+ @Test
+ public void sliderPreference_setCorrectInitialValue() {
+ SliderPreference preference = mock(SliderPreference.class);
+ PreferenceScreen screen = mock(PreferenceScreen.class);
+ doReturn(preference).when(screen).findPreference(anyString());
+
+ mController.displayPreference(screen);
+
+ verify(preference).setValue(mController.getSliderPosition());
+ }
+
private int readSetting() {
return Settings.Secure.getInt(mContext.getContentResolver(),
Settings.Secure.ACCESSIBILITY_AUTOCLICK_CURSOR_AREA_SIZE,
AccessibilityManager.AUTOCLICK_CURSOR_AREA_SIZE_DEFAULT);
}
+
+ private void updateSetting(int value) {
+ Settings.Secure.putInt(
+ mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_AUTOCLICK_CURSOR_AREA_SIZE,
+ value);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingCallAudioPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingCallAudioPreferenceControllerTest.java
index 4dc4dca4ab7..3075573b728 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingCallAudioPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingCallAudioPreferenceControllerTest.java
@@ -42,6 +42,7 @@ import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.os.Looper;
+import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.Settings;
import android.view.View;
@@ -107,8 +108,11 @@ public class AudioSharingCallAudioPreferenceControllerTest {
private static final String PREF_KEY = "calls_and_alarms";
private static final String TEST_DEVICE_NAME1 = "test1";
private static final String TEST_DEVICE_NAME2 = "test2";
+ private static final String TEMP_BOND_METADATA =
+ "le_audio_sharing";
private static final int TEST_DEVICE_GROUP_ID1 = 1;
private static final int TEST_DEVICE_GROUP_ID2 = 2;
+ private static final int METADATA_FAST_PAIR_CUSTOMIZED_FIELDS = 25;
private static final String TEST_SETTINGS_KEY =
"bluetooth_le_broadcast_fallback_active_group_id";
@@ -440,6 +444,23 @@ public class AudioSharingCallAudioPreferenceControllerTest {
assertThat(mPreference.getSummary().toString()).isEmpty();
}
+ @Test
+ @EnableFlags(Flags.FLAG_ENABLE_TEMPORARY_BOND_DEVICES_UI)
+ public void displayPreference_hasTemporaryBondDevice_doNotShow() {
+ Settings.Secure.putInt(mContentResolver, TEST_SETTINGS_KEY, TEST_DEVICE_GROUP_ID1);
+ when(mCachedDevice1.isActiveDevice(BluetoothProfile.LE_AUDIO)).thenReturn(true);
+ when(mBroadcast.isEnabled(any())).thenReturn(true);
+ when(mAssistant.getAllConnectedDevices()).thenReturn(ImmutableList.of(mDevice1, mDevice2));
+ when(mAssistant.getAllSources(any())).thenReturn(ImmutableList.of(mState));
+ when(mDevice2.getMetadata(METADATA_FAST_PAIR_CUSTOMIZED_FIELDS)).thenReturn(
+ TEMP_BOND_METADATA.getBytes());
+
+ mController.displayPreference(mScreen);
+ shadowOf(Looper.getMainLooper()).idle();
+
+ assertThat(mController.mGroupedConnectedDevices).hasSize(0);
+ }
+
@Test
public void displayPreference_clickToShowCorrectDialog() {
AlertDialog latestAlertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
diff --git a/tests/robotests/src/com/android/settings/notification/app/AllowSoundPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/app/AllowSoundPreferenceControllerTest.java
index 5260ff64c1d..86a3fe4a02a 100644
--- a/tests/robotests/src/com/android/settings/notification/app/AllowSoundPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/app/AllowSoundPreferenceControllerTest.java
@@ -38,6 +38,8 @@ import android.content.Context;
import android.os.UserManager;
import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
import com.android.settings.notification.NotificationBackend;
@@ -68,7 +70,6 @@ public class AllowSoundPreferenceControllerTest {
private NotificationManager mNm;
@Mock
private UserManager mUm;
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private PreferenceScreen mScreen;
@Mock
@@ -83,6 +84,7 @@ public class AllowSoundPreferenceControllerTest {
shadowApplication.setSystemService(Context.NOTIFICATION_SERVICE, mNm);
shadowApplication.setSystemService(Context.USER_SERVICE, mUm);
mContext = RuntimeEnvironment.application;
+ mScreen = new PreferenceManager(mContext).createPreferenceScreen(mContext);
mController =
spy(new AllowSoundPreferenceController(mContext, mDependentFieldListener, mBackend));
}
@@ -160,6 +162,7 @@ public class AllowSoundPreferenceControllerTest {
RestrictedLockUtils.EnforcedAdmin.class), null);
Preference pref = new RestrictedSwitchPreference(mContext);
+ mScreen.addPreference(pref);
mController.updateState(pref);
assertFalse(pref.isEnabled());
@@ -173,6 +176,7 @@ public class AllowSoundPreferenceControllerTest {
mController.onResume(appRow, channel, null, null, null, null, null);
Preference pref = new RestrictedSwitchPreference(mContext);
+ mScreen.addPreference(pref);
mController.updateState(pref);
assertTrue(pref.isEnabled());
@@ -186,6 +190,7 @@ public class AllowSoundPreferenceControllerTest {
null);
RestrictedSwitchPreference pref = new RestrictedSwitchPreference(mContext);
+ mScreen.addPreference(pref);
mController.updateState(pref);
assertTrue(pref.isChecked());
}
@@ -198,6 +203,7 @@ public class AllowSoundPreferenceControllerTest {
null);
RestrictedSwitchPreference pref = new RestrictedSwitchPreference(mContext);
+ mScreen.addPreference(pref);
mController.updateState(pref);
assertTrue(pref.isChecked());
}
@@ -210,6 +216,7 @@ public class AllowSoundPreferenceControllerTest {
null);
RestrictedSwitchPreference pref = new RestrictedSwitchPreference(mContext);
+ mScreen.addPreference(pref);
mController.updateState(pref);
assertFalse(pref.isChecked());
}
@@ -222,7 +229,7 @@ public class AllowSoundPreferenceControllerTest {
null);
RestrictedSwitchPreference pref = new RestrictedSwitchPreference(mContext);
- when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(pref);
+ mScreen.addPreference(pref);
mController.displayPreference(mScreen);
mController.updateState(pref);
pref.setChecked(true);
@@ -240,7 +247,7 @@ public class AllowSoundPreferenceControllerTest {
null);
RestrictedSwitchPreference pref = new RestrictedSwitchPreference(mContext);
- when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(pref);
+ mScreen.addPreference(pref);
mController.displayPreference(mScreen);
mController.updateState(pref);
diff --git a/tests/robotests/src/com/android/settings/notification/app/FullScreenIntentPermissionPreferenceControllerTest.kt b/tests/robotests/src/com/android/settings/notification/app/FullScreenIntentPermissionPreferenceControllerTest.kt
index 89e33eef509..a9abf8b582b 100644
--- a/tests/robotests/src/com/android/settings/notification/app/FullScreenIntentPermissionPreferenceControllerTest.kt
+++ b/tests/robotests/src/com/android/settings/notification/app/FullScreenIntentPermissionPreferenceControllerTest.kt
@@ -37,6 +37,7 @@ import android.permission.PermissionManager.PERMISSION_HARD_DENIED
import android.permission.PermissionManager.PERMISSION_SOFT_DENIED
import android.permission.PermissionManager.PermissionResult
import androidx.preference.Preference
+import androidx.preference.PreferenceManager
import androidx.preference.PreferenceScreen
import androidx.test.core.app.ApplicationProvider
import com.android.settings.notification.NotificationBackend
@@ -80,7 +81,6 @@ class FullScreenIntentPermissionPreferenceControllerTest {
private lateinit var preference: RestrictedSwitchPreference
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private lateinit var screen: PreferenceScreen
private lateinit var controller: FullScreenIntentPermissionPreferenceController
@@ -94,7 +94,8 @@ class FullScreenIntentPermissionPreferenceControllerTest {
preference = RestrictedSwitchPreference(context).apply { key = KEY_FSI_PERMISSION }
- whenever(screen.findPreference(KEY_FSI_PERMISSION)).thenReturn(preference)
+ screen = PreferenceManager(context).createPreferenceScreen(context)
+ screen.addPreference(preference)
controller = FullScreenIntentPermissionPreferenceController(
context,
diff --git a/tests/robotests/src/com/android/settings/notification/app/HeaderPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/app/HeaderPreferenceControllerTest.java
index 05a41a63a53..b5190dd19a7 100644
--- a/tests/robotests/src/com/android/settings/notification/app/HeaderPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/app/HeaderPreferenceControllerTest.java
@@ -113,27 +113,6 @@ public class HeaderPreferenceControllerTest {
assertTrue(mController.isAvailable());
}
- @Test
- public void testGetLabel() {
- NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
- appRow.label = "bananas";
- mController.onResume(appRow, null, null, null, null, null, null);
- assertEquals(appRow.label, mController.getLabel());
-
- NotificationChannelGroup group = new NotificationChannelGroup("id", "name");
- mController.onResume(appRow, null, group, null, null, null, null);
- assertEquals(appRow.label, mController.getLabel());
-
- NotificationChannel channel = new NotificationChannel("cid", "cname", IMPORTANCE_NONE);
- mController.onResume(appRow, channel, group, null, null, null, null);
- assertEquals(channel.getName(), mController.getLabel());
-
- NotificationChannel defaultChannel = new NotificationChannel(
- NotificationChannel.DEFAULT_CHANNEL_ID, "", IMPORTANCE_NONE);
- mController.onResume(appRow, defaultChannel, null, null, null, null, null);
- assertEquals(appRow.label, mController.getLabel());
- }
-
@Test
public void testGetSummary() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
@@ -146,16 +125,14 @@ public class HeaderPreferenceControllerTest {
NotificationChannel channel = new NotificationChannel("cid", "cname", IMPORTANCE_NONE);
mController.onResume(appRow, channel, group, null, null, null, null);
assertTrue(mController.getSummary().toString().contains(group.getName()));
- assertTrue(mController.getSummary().toString().contains(appRow.label));
mController.onResume(appRow, channel, null, null, null, null, null);
assertFalse(mController.getSummary().toString().contains(group.getName()));
- assertTrue(mController.getSummary().toString().contains(appRow.label));
NotificationChannel defaultChannel = new NotificationChannel(
NotificationChannel.DEFAULT_CHANNEL_ID, "", IMPORTANCE_NONE);
mController.onResume(appRow, defaultChannel, null, null, null, null, null);
- assertEquals(appRow.label, mController.getSummary());
+ assertEquals("", mController.getSummary());
}
@Test
diff --git a/tests/robotests/src/com/android/settings/notification/app/InvalidConversationInfoPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/app/InvalidConversationInfoPreferenceControllerTest.java
index eb8046567b2..dcc9daf552e 100644
--- a/tests/robotests/src/com/android/settings/notification/app/InvalidConversationInfoPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/app/InvalidConversationInfoPreferenceControllerTest.java
@@ -34,6 +34,7 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.notification.NotificationBackend;
import com.android.settings.testutils.shadow.SettingsShadowResources;
+import com.android.settingslib.widget.SettingsThemeHelper;
import com.google.common.collect.ImmutableList;
@@ -88,6 +89,18 @@ public class InvalidConversationInfoPreferenceControllerTest {
mController.updateState(mock(Preference.class));
}
+ @Test
+ public void testIsAvailable_notIfExpressiveTheme() {
+ if (SettingsThemeHelper.isExpressiveTheme(mContext)) {
+ when(mBackend.isInInvalidMsgState(anyString(), anyInt())).thenReturn(true);
+ NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
+ appRow.pkg = "hi";
+ appRow.uid = 0;
+ mController.onResume(appRow, null, null, null, null, null, null);
+ assertFalse(mController.isAvailable());
+ }
+ }
+
@Test
public void testIsAvailable_notIfAppBlocked() {
when(mBackend.isInInvalidMsgState(anyString(), anyInt())).thenReturn(true);
@@ -111,6 +124,9 @@ public class InvalidConversationInfoPreferenceControllerTest {
@Test
public void testIsAvailable() {
+ if (SettingsThemeHelper.isExpressiveTheme(mContext)) {
+ return;
+ }
when(mBackend.isInInvalidMsgState(anyString(), anyInt())).thenReturn(true);
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
appRow.pkg = "hi";
diff --git a/tests/robotests/src/com/android/settings/notification/app/PromotedNotificationsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/app/PromotedNotificationsPreferenceControllerTest.java
index 917d4694ca3..8e0ab965443 100644
--- a/tests/robotests/src/com/android/settings/notification/app/PromotedNotificationsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/app/PromotedNotificationsPreferenceControllerTest.java
@@ -18,13 +18,12 @@ package com.android.settings.notification.app;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
import android.app.Flags;
import android.content.Context;
@@ -32,7 +31,7 @@ import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
-import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceManager;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.notification.NotificationBackend;
@@ -55,8 +54,6 @@ public class PromotedNotificationsPreferenceControllerTest {
private NotificationBackend.AppRow mAppRow;
@Mock
private NotificationBackend mBackend;
- @Mock
- private PreferenceCategory mPrefCategory;
private RestrictedSwitchPreference mSwitch;
private PromotedNotificationsPreferenceController mPrefController;
@@ -66,7 +63,7 @@ public class PromotedNotificationsPreferenceControllerTest {
MockitoAnnotations.initMocks(this);
mContext = ApplicationProvider.getApplicationContext();
mSwitch = new RestrictedSwitchPreference(mContext);
- when(mPrefCategory.findPreference("promoted_switch")).thenReturn(mSwitch);
+ new PreferenceManager(mContext).createPreferenceScreen(mContext).addPreference(mSwitch);
mPrefController = new PromotedNotificationsPreferenceController(mContext, mBackend);
mAppRow = new NotificationBackend.AppRow();
@@ -93,12 +90,12 @@ public class PromotedNotificationsPreferenceControllerTest {
mAppRow.canBePromoted = true;
mPrefController.onResume(mAppRow, null, null, null, null, null, null);
- mPrefController.updateState(mPrefCategory);
+ mPrefController.updateState(mSwitch);
assertThat(mSwitch.isChecked()).isTrue();
mAppRow.canBePromoted = false;
mPrefController.onResume(mAppRow, null, null, null, null, null, null);
- mPrefController.updateState(mPrefCategory);
+ mPrefController.updateState(mSwitch);
assertThat(mSwitch.isChecked()).isFalse();
}
diff --git a/tests/robotests/src/com/android/settings/notification/app/RecentConversationsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/app/RecentConversationsPreferenceControllerTest.java
index 3c0a0f33349..538859105ed 100644
--- a/tests/robotests/src/com/android/settings/notification/app/RecentConversationsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/app/RecentConversationsPreferenceControllerTest.java
@@ -50,6 +50,7 @@ import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R;
import com.android.settings.applications.AppInfoBase;
import com.android.settings.notification.NotificationBackend;
+import com.android.settingslib.widget.ButtonPreference;
import com.android.settingslib.widget.LayoutPreference;
import com.google.common.collect.ImmutableList;
@@ -232,14 +233,16 @@ public class RecentConversationsPreferenceControllerTest {
new NotificationChannelGroup("hi", "group"), 7,
false);
- RecentConversationPreference pref = mController.createConversationPref(ccw);
+ Preference pref = mController.createConversationPref(ccw);
final View view = View.inflate(mContext, pref.getLayoutResource(), null);
PreferenceViewHolder holder = spy(PreferenceViewHolder.createInstanceForTests(view));
- View delete = View.inflate(mContext, pref.getSecondTargetResId(), null);
- when(holder.findViewById(pref.getClearId())).thenReturn(delete);
+ View delete = View.inflate(mContext, ((RecentConversationPreference) pref)
+ .getSecondTargetResId(), null);
+ when(holder.findViewById(((RecentConversationPreference) pref).getClearId()))
+ .thenReturn(delete);
pref.onBindViewHolder(holder);
- pref.getClearView().performClick();
+ ((RecentConversationPreference) pref).getClearView().performClick();
verify(mPs).removeRecentConversation(
si.getPackage(), UserHandle.getUserId(ccw.getUid()), si.getId());
@@ -260,24 +263,24 @@ public class RecentConversationsPreferenceControllerTest {
new NotificationChannelGroup("hi", "group"), 7,
true);
- RecentConversationPreference pref = mController.createConversationPref(ccw);
+ Preference pref = mController.createConversationPref(ccw);
final View view = View.inflate(mContext, pref.getLayoutResource(), null);
PreferenceViewHolder holder = spy(PreferenceViewHolder.createInstanceForTests(view));
- View delete = View.inflate(mContext, pref.getSecondTargetResId(), null);
- when(holder.findViewById(pref.getClearId())).thenReturn(delete);
+ View delete = View.inflate(mContext, ((RecentConversationPreference) pref).
+ getSecondTargetResId(), null);
+ when(holder.findViewById(((RecentConversationPreference) pref).getClearId()))
+ .thenReturn(delete);
mPreferenceGroup.addPreference(pref);
- RecentConversationPreference pref2 = mController.createConversationPref(ccw2);
- final View view2 = View.inflate(mContext, pref2.getLayoutResource(), null);
- PreferenceViewHolder holder2 = spy(PreferenceViewHolder.createInstanceForTests(view2));
- View delete2 = View.inflate(mContext, pref2.getSecondTargetResId(), null);
- when(holder2.findViewById(pref.getClearId())).thenReturn(delete2);
+ Preference pref2 = mController.createConversationPref(ccw2);
mPreferenceGroup.addPreference(pref2);
- LayoutPreference clearAll = mController.getClearAll(mPreferenceGroup);
+ ButtonPreference clearAll = mController.getClearAll(mPreferenceGroup);
+ final View rootView = View.inflate(mContext, clearAll.getLayoutResource(), null);
+ clearAll.onBindViewHolder(PreferenceViewHolder.createInstanceForTests(rootView));
mPreferenceGroup.addPreference(clearAll);
- clearAll.findViewById(R.id.conversation_settings_clear_recents).performClick();
+ clearAll.getButton().performClick();
verify(mPs).removeAllRecentConversations();
assertThat((Preference) mPreferenceGroup.findPreference("hi:person")).isNull();
@@ -294,9 +297,9 @@ public class RecentConversationsPreferenceControllerTest {
new NotificationChannelGroup("hi", "group"), 7,
true);
- RecentConversationPreference pref = mController.createConversationPref(ccw);
+ Preference pref = mController.createConversationPref(ccw);
- assertThat(pref.hasClearListener()).isFalse();
+ assertThat(pref instanceof RecentConversationPreference).isFalse();
}
@Test
diff --git a/tests/unit/src/com/android/settings/network/telephony/SatelliteSettingsPreferenceCategoryControllerTest.java b/tests/unit/src/com/android/settings/network/telephony/SatelliteSettingsPreferenceCategoryControllerTest.java
index 82119f17bd3..085a68d8173 100644
--- a/tests/unit/src/com/android/settings/network/telephony/SatelliteSettingsPreferenceCategoryControllerTest.java
+++ b/tests/unit/src/com/android/settings/network/telephony/SatelliteSettingsPreferenceCategoryControllerTest.java
@@ -16,13 +16,12 @@
package com.android.settings.network.telephony;
-import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_DATA;
-import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_SMS;
-
import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
import static com.google.common.truth.Truth.assertThat;
+import static junit.framework.Assert.assertEquals;
+
import static org.mockito.Mockito.spy;
import android.content.Context;
@@ -35,8 +34,6 @@ import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
-import com.android.settings.R;
-
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
@@ -72,24 +69,6 @@ public class SatelliteSettingsPreferenceCategoryControllerTest {
assertThat(result).isEqualTo(UNSUPPORTED_ON_DEVICE);
}
- @Test
- @Ignore("b/382664790")
- public void setPreferenceTitle_hasDataService_showConnectivity() {
- PreferenceManager preferenceManager = new PreferenceManager(mContext);
- PreferenceScreen preferenceScreen = preferenceManager.createPreferenceScreen(mContext);
- PreferenceCategory preferenceCategory = new PreferenceCategory(mContext);
- preferenceCategory.setKey(KEY);
- preferenceCategory.addPreference(new Preference(mContext));
- preferenceScreen.addPreference(preferenceCategory);
- mController.displayPreference(preferenceScreen);
-
- mController.mCarrierRoamingNtnModeCallback.onCarrierRoamingNtnAvailableServicesChanged(
- new int[]{SERVICE_TYPE_DATA});
-
- assertThat(preferenceCategory.getTitle()).isEqualTo(
- mContext.getString(R.string.title_satellite_setting_connectivity));
- }
-
@Test
@Ignore("b/382664790")
public void setPreferenceTitle_hasSmsService_showMessaging() {
@@ -101,10 +80,6 @@ public class SatelliteSettingsPreferenceCategoryControllerTest {
preferenceCategory.addPreference(new Preference(mContext));
mController.displayPreference(preferenceScreen);
- mController.mCarrierRoamingNtnModeCallback.onCarrierRoamingNtnAvailableServicesChanged(
- new int[]{SERVICE_TYPE_SMS});
-
- assertThat(preferenceCategory.getTitle()).isEqualTo(
- mContext.getString(R.string.satellite_setting_title));
+ assertEquals(preferenceCategory.getTitle(), "Satellite connectivity");
}
}
diff --git a/tests/unit/src/com/android/settings/notification/app/ChannelListPreferenceControllerTest.java b/tests/unit/src/com/android/settings/notification/app/ChannelListPreferenceControllerTest.java
index daa2afb71ab..f68ba05b43b 100644
--- a/tests/unit/src/com/android/settings/notification/app/ChannelListPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/notification/app/ChannelListPreferenceControllerTest.java
@@ -91,6 +91,14 @@ public class ChannelListPreferenceControllerTest {
assertEquals("zeroCategories", mGroupList.getPreference(0).getKey());
}
+ // Test the case with no groups but hidden channels
+ inGroups = new ArrayList<>();
+ mController.mChannelCount = 1;
+ mController.updateFullList(mGroupList, inGroups);
+ {
+ assertEquals(0, mGroupList.getPreferenceCount());
+ }
+
// Test that adding a group clears the zero category and adds everything
NotificationChannelGroup inGroup1 = new NotificationChannelGroup("group1", "Group 1");
inGroup1.addChannel(new NotificationChannel("ch1a", "Channel 1A", IMPORTANCE_DEFAULT));
@@ -250,6 +258,7 @@ public class ChannelListPreferenceControllerTest {
}
// Test that we go back to the empty state when clearing all groups and channels.
+ mController.mChannelCount = 0;
inGroups.clear();
mController.updateFullList(mGroupList, inGroups);
{