diff options
| author | 2024-09-19 14:16:41 +0000 | |
|---|---|---|
| committer | 2024-09-19 14:16:41 +0000 | |
| commit | 634d93a1302c0aa0b87933a518b6731767c5d63b (patch) | |
| tree | ab0af944b2ed2600f2056956cbb16d30e79c2937 | |
| parent | 21a1d06812766a08a5ac6e6415a1782b540150f6 (diff) | |
| parent | 6b27dc7548d2f82565fc2e3aa9951c050ff9b73e (diff) | |
Merge "Fix MultiTogglePreference highlight issue" into main
3 files changed, 35 insertions, 3 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/MultiTogglePreference.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/MultiTogglePreference.java index 01bb6f013d16..7ee7180811dc 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/MultiTogglePreference.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/MultiTogglePreference.java @@ -33,6 +33,7 @@ public class MultiTogglePreference extends DeviceSettingPreference implements Pa private final String mTitle; private final ImmutableList<ToggleInfo> mToggleInfos; private final int mState; + private final boolean mIsActive; private final boolean mIsAllowedChangingState; private final Bundle mExtras; @@ -40,6 +41,7 @@ public class MultiTogglePreference extends DeviceSettingPreference implements Pa @NonNull String title, List<ToggleInfo> toggleInfos, int state, + boolean isActive, boolean allowChangingState, Bundle extras) { super(DeviceSettingType.DEVICE_SETTING_TYPE_MULTI_TOGGLE); @@ -47,6 +49,7 @@ public class MultiTogglePreference extends DeviceSettingPreference implements Pa mTitle = title; mToggleInfos = ImmutableList.copyOf(toggleInfos); mState = state; + mIsActive = isActive; mIsAllowedChangingState = allowChangingState; mExtras = extras; } @@ -67,9 +70,11 @@ public class MultiTogglePreference extends DeviceSettingPreference implements Pa List<ToggleInfo> toggleInfos = new ArrayList<>(); in.readTypedList(toggleInfos, ToggleInfo.CREATOR); int state = in.readInt(); + boolean isActive = in.readBoolean(); boolean allowChangingState = in.readBoolean(); Bundle extras = in.readBundle(Bundle.class.getClassLoader()); - return new MultiTogglePreference(title, toggleInfos, state, allowChangingState, extras); + return new MultiTogglePreference( + title, toggleInfos, state, isActive, allowChangingState, extras); } public static final Creator<MultiTogglePreference> CREATOR = @@ -99,6 +104,7 @@ public class MultiTogglePreference extends DeviceSettingPreference implements Pa dest.writeString(mTitle); dest.writeTypedList(mToggleInfos, flags); dest.writeInt(mState); + dest.writeBoolean(mIsActive); dest.writeBoolean(mIsAllowedChangingState); dest.writeBundle(mExtras); } @@ -108,6 +114,7 @@ public class MultiTogglePreference extends DeviceSettingPreference implements Pa private String mTitle; private ImmutableList.Builder<ToggleInfo> mToggleInfos = new ImmutableList.Builder<>(); private int mState; + private boolean mIsActive; private boolean mAllowChangingState; private Bundle mExtras = Bundle.EMPTY; @@ -148,6 +155,19 @@ public class MultiTogglePreference extends DeviceSettingPreference implements Pa } /** + * Sets whether the current state is considered as an "active" state. If it's set to true, + * the toggle will be highlighted in UI. + * + * @param isActive The active state. + * @return Returns the Builder object. + */ + @NonNull + public Builder setIsActive(boolean isActive) { + mIsActive = isActive; + return this; + } + + /** * Sets whether state can be changed by user. * * @param allowChangingState Whether user is allowed to change state. @@ -178,7 +198,7 @@ public class MultiTogglePreference extends DeviceSettingPreference implements Pa @NonNull public MultiTogglePreference build() { return new MultiTogglePreference( - mTitle, mToggleInfos.build(), mState, mAllowChangingState, mExtras); + mTitle, mToggleInfos.build(), mState, mIsActive, mAllowChangingState, mExtras); } } @@ -202,6 +222,16 @@ public class MultiTogglePreference extends DeviceSettingPreference implements Pa } /** + * Whether the current state is considered as an active state. If it's set to true, the toggle + * will be highlighted in UI. + * + * @return Returns the active state. + */ + public boolean isActive() { + return mIsActive; + } + + /** * Gets the toggle list in the preference. * * @return the toggle list. diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/data/repository/DeviceSettingRepository.kt b/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/data/repository/DeviceSettingRepository.kt index 29664f63d3b2..851b614f5279 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/data/repository/DeviceSettingRepository.kt +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/data/repository/DeviceSettingRepository.kt @@ -159,7 +159,7 @@ class DeviceSettingRepositoryImpl( title = pref.title, toggles = pref.toggleInfos.map { it.toModel() }, isAllowedChangingState = pref.isAllowedChangingState, - isActive = true, + isActive = pref.isActive, state = DeviceSettingStateModel.MultiTogglePreferenceState(pref.state), updateState = { newState -> coroutineScope.launch(backgroundCoroutineContext) { diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/devicesettings/MultiTogglePreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/devicesettings/MultiTogglePreferenceTest.java index 62fcb5ec3011..1c7b5bceafe7 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/devicesettings/MultiTogglePreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/devicesettings/MultiTogglePreferenceTest.java @@ -120,6 +120,7 @@ public final class MultiTogglePreferenceTest { .addToggleInfo(TOGGLE_INFO_1) .addToggleInfo(TOGGLE_INFO_2) .setState(123) + .setIsActive(true) .setAllowChangingState(true) .setExtras(buildBundle("key1", "value1")) .build(); @@ -130,6 +131,7 @@ public final class MultiTogglePreferenceTest { assertThat(fromParcel.getToggleInfos().stream().map(ToggleInfo::getLabel).toList()) .containsExactly("label1", "label2"); assertThat(fromParcel.getState()).isEqualTo(preference.getState()); + assertThat(fromParcel.isActive()).isEqualTo(preference.isActive()); assertThat(fromParcel.isAllowedChangingState()) .isEqualTo(preference.isAllowedChangingState()); assertThat(fromParcel.getExtras().getString("key1")) |