Skip to content
This repository was archived by the owner on Jun 22, 2025. It is now read-only.

Commit be43842

Browse files
committed
Handle devices in "hiddenroom" as if it were in room "hidden", so hide them from all devices #1306
1 parent d46ed74 commit be43842

File tree

8 files changed

+49
-20
lines changed

8 files changed

+49
-20
lines changed

app/src/main/java/li/klass/fhem/adapter/rooms/RoomListAdapter.kt

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,13 @@ import li.klass.fhem.settings.SettingsKeys.SHOW_HIDDEN_DEVICES
3636
import org.slf4j.LoggerFactory
3737
import java.util.*
3838

39-
class RoomListAdapter(context: Context, resource: Int, data: List<String>) : ListDataAdapter<String>(context, resource, data, CASE_INSENSITIVE_COMPARATOR) {
39+
class RoomListAdapter(
40+
context: Context,
41+
resource: Int,
42+
data: List<String>,
43+
val hiddenRooms: Set<String>
44+
) : ListDataAdapter<String>(context, resource, data, CASE_INSENSITIVE_COMPARATOR) {
45+
4046
private var selectedRoom: String? = null
4147

4248
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
@@ -67,13 +73,13 @@ class RoomListAdapter(context: Context, resource: Int, data: List<String>) : Lis
6773

6874
val preferences = getDefaultSharedPreferences(context)
6975
val showHiddenDevices = preferences.getBoolean(SHOW_HIDDEN_DEVICES, false)
70-
if (!showHiddenDevices) {
71-
newData
72-
.filter { it.equals("hidden", ignoreCase = true) }
73-
.forEach { newData.remove(it) }
76+
77+
val newRooms = when (showHiddenDevices) {
78+
true -> newData
79+
else -> newData.filterNot { hiddenRooms.contains(it) }
7480
}
7581

76-
updateData(newData)
82+
updateData(newRooms)
7783
}
7884

7985
private fun setSelectedRoom(selectedRoom: String?) {
@@ -84,7 +90,7 @@ class RoomListAdapter(context: Context, resource: Int, data: List<String>) : Lis
8490
override fun doSort(): Boolean = true
8591

8692
companion object {
87-
val CASE_INSENSITIVE_COMPARATOR: Comparator<String> = Comparator { lhs, rhs -> lhs.toLowerCase(Locale.getDefault()).compareTo(rhs.toLowerCase(Locale.getDefault())) }
93+
val CASE_INSENSITIVE_COMPARATOR: Comparator<String> = Comparator { lhs, rhs -> lhs.toLowerCase().compareTo(rhs.toLowerCase()) }
8894

8995
private val LOG = LoggerFactory.getLogger(RoomListAdapter::class.java)
9096
}

app/src/main/java/li/klass/fhem/devices/list/backend/HiddenRoomsDeviceFilter.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,21 @@ package li.klass.fhem.devices.list.backend
2626

2727
import li.klass.fhem.domain.core.RoomDeviceList
2828
import li.klass.fhem.settings.SettingsKeys
29+
import li.klass.fhem.update.backend.fhemweb.FhemWebConfigurationService
2930
import li.klass.fhem.util.ApplicationProperties
3031
import javax.inject.Inject
3132

3233
class HiddenRoomsDeviceFilter @Inject constructor(
33-
val applicationProperties: ApplicationProperties
34+
val applicationProperties: ApplicationProperties,
35+
val fhemWebConfigurationService: FhemWebConfigurationService
3436
) {
3537
fun filterHiddenDevicesIfRequired(roomDeviceList: RoomDeviceList): RoomDeviceList {
3638
val showHiddenDevices = applicationProperties.getBooleanSharedPreference(SettingsKeys.SHOW_HIDDEN_DEVICES, false)
3739
if (showHiddenDevices) {
3840
return roomDeviceList
3941
}
4042

41-
return roomDeviceList.filter({ !it.isInRoom("hidden") })
43+
val hiddenRooms = fhemWebConfigurationService.getHiddenRooms()
44+
return roomDeviceList.filter { !it.isInAnyRoomsOf(hiddenRooms) }
4245
}
4346
}

app/src/main/java/li/klass/fhem/domain/core/FhemDevice.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,9 @@ class FhemDevice(val xmlListDevice: XmlListDevice) : Serializable {
112112
*/
113113
fun isInRoom(room: String): Boolean = getRooms().contains(room)
114114

115+
fun isInAnyRoomsOf(rooms: Set<String>): Boolean =
116+
getRooms().intersect(rooms).isNotEmpty()
117+
115118
fun getRooms() = roomConcatenated.split(",")
116119

117120
override fun equals(other: Any?): Boolean {

app/src/main/java/li/klass/fhem/room/list/ui/RoomListFragment.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ import li.klass.fhem.room.list.backend.ViewableRoomListService
4848
import li.klass.fhem.service.advertisement.AdvertisementService
4949
import li.klass.fhem.ui.FragmentType
5050
import li.klass.fhem.update.backend.DeviceListUpdateService
51+
import li.klass.fhem.update.backend.fhemweb.FhemWebConfigurationService
5152
import li.klass.fhem.util.Reject
5253
import java.io.Serializable
5354
import java.util.*
@@ -63,6 +64,8 @@ open class RoomListFragment : BaseFragment() {
6364
lateinit var roomListService: ViewableRoomListService
6465
@Inject
6566
lateinit var appWidgetUpdateService: AppWidgetUpdateService
67+
@Inject
68+
lateinit var fhemWebConfigurationService: FhemWebConfigurationService
6669

6770
private var roomName: String? = null
6871
private var emptyTextId = R.string.noRooms
@@ -88,7 +91,9 @@ open class RoomListFragment : BaseFragment() {
8891
if (superView != null) return superView
8992
val myActivity = activity ?: return superView
9093

91-
val adapter = RoomListAdapter(myActivity, R.layout.room_list_name, ArrayList<String>())
94+
val hiddenRooms = fhemWebConfigurationService.getHiddenRooms()
95+
96+
val adapter = RoomListAdapter(myActivity, R.layout.room_list_name, ArrayList(), hiddenRooms)
9297
val layout = inflater.inflate(R.layout.room_list, container, false)
9398
advertisementService.addAd(layout, myActivity)
9499

app/src/main/java/li/klass/fhem/search/SearchResultsProvider.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,28 @@
11
package li.klass.fhem.search
22

3+
import li.klass.fhem.devices.list.backend.HiddenRoomsDeviceFilter
34
import li.klass.fhem.domain.core.RoomDeviceList
45
import li.klass.fhem.update.backend.DeviceListService
56
import java.util.*
67
import javax.inject.Inject
78

8-
class SearchResultsProvider @Inject constructor(val deviceListService: DeviceListService) {
9+
class SearchResultsProvider @Inject constructor(
10+
val deviceListService: DeviceListService,
11+
val hiddenRoomsDeviceFilter: HiddenRoomsDeviceFilter
12+
) {
913
fun query(query: String): RoomDeviceList {
1014
if (query.trim().isEmpty()) {
1115
return RoomDeviceList(RoomDeviceList.ALL_DEVICES_ROOM)
1216
}
1317
val comparableQuery = toComparable(query)
1418
val allRoomsList = deviceListService.getAllRoomsDeviceList()
15-
return allRoomsList.filter({
19+
val filtered = allRoomsList.filter {
1620
(toComparable(it.name).contains(comparableQuery)
1721
|| toComparable(it.aliasOrName).contains(comparableQuery)
1822
|| toComparable(it.roomConcatenated).contains(comparableQuery))
19-
})
23+
}
2024

25+
return hiddenRoomsDeviceFilter.filterHiddenDevicesIfRequired(filtered)
2126
}
2227

2328
private fun toComparable(input: String): String {

app/src/main/java/li/klass/fhem/update/backend/fhemweb/FhemWebConfigurationService.kt

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,22 +46,29 @@ class FhemWebConfigurationService @Inject constructor(
4646
}
4747

4848
fun filterHiddenRoomsIn(roomNames: Collection<String>): Set<String> {
49-
val fhemwebDevice = findFhemWebDevice() ?: return roomNames.toSet()
50-
val hiddenRooms = hiddenRoomsAttributeProvider.provideFor(fhemwebDevice)
51-
logger.info("filterHiddenRoomsIn - fhemwebDevice=${fhemwebDevice.name}, hiddenRoomsAttribute=${hiddenRooms.joinToString(separator = ",")}")
49+
val hiddenRooms = getHiddenRooms()
50+
logger.info("filterHiddenRoomsIn - hiddenRoomsAttribute=${hiddenRooms.joinToString(separator = ",")}")
5251

5352
return roomNames.filter { it !in hiddenRooms }.toSet()
5453
}
5554

55+
fun getHiddenRooms(): Set<String> {
56+
val fhemwebDevice = findFhemWebDevice()
57+
val hiddenRooms = fhemwebDevice?.let { hiddenRoomsAttributeProvider.provideFor(it) }
58+
?: emptySet()
59+
60+
return hiddenRooms + "hidden"
61+
}
62+
5663
fun filterHiddenGroupsFrom(roomDeviceList: RoomDeviceList): RoomDeviceList {
5764
val fhemwebDevice = findFhemWebDevice() ?: return roomDeviceList
5865
val hiddenGroups = hiddenGroupsAttributeProvider.provideFor(fhemwebDevice)
5966
logger.info("filterHiddenGroupsFrom - fhemwebDevice=${fhemwebDevice.name}, hiddenGroupsAttribute=${hiddenGroups.joinToString(separator = ",")}")
6067

61-
return roomDeviceList.filter({
68+
return roomDeviceList.filter {
6269
val groups = it.internalDeviceGroupOrGroupAttributes.map { it.toLowerCase(Locale.getDefault()) }
6370
!hiddenGroups.containsAll(groups)
64-
})
71+
}
6572
}
6673

6774
fun getColumnAttributeFor(room: String): List<String> {

app/whatsnew-de.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
TODO
1+
* Behandle Geräte in "hiddenrooms" als ob sie im Raum "hidden" wären. Wenn der entsprechende Schalter in den Einstellunge gesetzt ist werden damit diese Geräte auch nicht mehr im "Alle Geräte" Tab angezeigt.

app/whatsnew-en.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
TODO
1+
* Treat devices in "hiddenrooms" as if they were in room"hidden". If the respective switch in the settings has been set, those devices are also hidden from the "All devices" tab.

0 commit comments

Comments
 (0)