Skip to content

Commit 46e2a02

Browse files
authored
Merge pull request #211 from hap-java/fix/doorbell-mute
Add optional Mute characteristic to Doorbell service
2 parents a0cb6b8 + 298f6dd commit 46e2a02

3 files changed

Lines changed: 68 additions & 0 deletions

File tree

‎CHANGES.md‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# HAP-Java 2.0.10
2+
* Add optional Mute characteristic to Doorbell service
3+
14
# HAP-Java 2.0.9
25
* Fix Set Duration and Remaining Duration characteristics to advertise format `uint32` instead of `int` [#202](https://github.com/hap-java/HAP-Java/issues/202)
36
* Stop logging the SRP shared secret, derived key and M5 message data during pairing at DEBUG level

‎src/main/java/io/github/hapjava/services/impl/DoorbellService.java‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
import io.github.hapjava.accessories.DoorbellAccessory;
44
import io.github.hapjava.accessories.optionalcharacteristic.AccessoryWithBrightness;
5+
import io.github.hapjava.accessories.optionalcharacteristic.AccessoryWithMute;
56
import io.github.hapjava.accessories.optionalcharacteristic.AccessoryWithName;
67
import io.github.hapjava.accessories.optionalcharacteristic.AccessoryWithVolume;
8+
import io.github.hapjava.characteristics.impl.audio.MuteCharacteristic;
79
import io.github.hapjava.characteristics.impl.audio.VolumeCharacteristic;
810
import io.github.hapjava.characteristics.impl.common.NameCharacteristic;
911
import io.github.hapjava.characteristics.impl.common.ProgrammableSwitchEventCharacteristic;
@@ -42,6 +44,14 @@ public DoorbellService(DoorbellAccessory accessory) {
4244
((AccessoryWithVolume) accessory)::subscribeVolume,
4345
((AccessoryWithVolume) accessory)::unsubscribeVolume));
4446
}
47+
if (accessory instanceof AccessoryWithMute) {
48+
addOptionalCharacteristic(
49+
new MuteCharacteristic(
50+
((AccessoryWithMute) accessory)::isMuted,
51+
((AccessoryWithMute) accessory)::setMute,
52+
((AccessoryWithMute) accessory)::subscribeMuteState,
53+
((AccessoryWithMute) accessory)::unsubscribeMuteState));
54+
}
4555
}
4656

4757
public void addOptionalCharacteristic(NameCharacteristic name) {
@@ -55,4 +65,8 @@ public void addOptionalCharacteristic(BrightnessCharacteristic brightness) {
5565
public void addOptionalCharacteristic(VolumeCharacteristic volume) {
5666
addCharacteristic(volume);
5767
}
68+
69+
public void addOptionalCharacteristic(MuteCharacteristic mute) {
70+
addCharacteristic(mute);
71+
}
5872
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package io.github.hapjava.services.impl;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
import static org.mockito.Mockito.mock;
5+
import static org.mockito.Mockito.verify;
6+
import static org.mockito.Mockito.when;
7+
import static org.mockito.Mockito.withSettings;
8+
9+
import io.github.hapjava.accessories.DoorbellAccessory;
10+
import io.github.hapjava.accessories.optionalcharacteristic.AccessoryWithMute;
11+
import io.github.hapjava.characteristics.Characteristic;
12+
import io.github.hapjava.characteristics.impl.audio.MuteCharacteristic;
13+
import io.github.hapjava.characteristics.impl.common.ProgrammableSwitchEventCharacteristic;
14+
import java.util.concurrent.CompletableFuture;
15+
import javax.json.JsonObject;
16+
import javax.json.JsonValue;
17+
import org.junit.Test;
18+
19+
public class DoorbellServiceTest {
20+
21+
@Test
22+
public void doorbellWithoutOptionalsOnlyHasSwitchEvent() {
23+
DoorbellService service = new DoorbellService(mock(DoorbellAccessory.class));
24+
25+
assertThat(service.getType()).isEqualTo("00000121-0000-1000-8000-0026BB765291");
26+
assertThat(service.getCharacteristics())
27+
.hasExactlyElementsOfTypes(ProgrammableSwitchEventCharacteristic.class);
28+
}
29+
30+
@Test
31+
public void doorbellWithMuteHasMuteCharacteristic() throws Exception {
32+
DoorbellAccessory accessory =
33+
mock(DoorbellAccessory.class, withSettings().extraInterfaces(AccessoryWithMute.class));
34+
when(((AccessoryWithMute) accessory).isMuted())
35+
.thenReturn(CompletableFuture.completedFuture(true));
36+
37+
DoorbellService service = new DoorbellService(accessory);
38+
39+
assertThat(service.getCharacteristics())
40+
.hasExactlyElementsOfTypes(
41+
ProgrammableSwitchEventCharacteristic.class, MuteCharacteristic.class);
42+
43+
Characteristic mute = service.getCharacteristics().get(1);
44+
JsonObject json = mute.toJson(2).join();
45+
assertThat(json.getString("type")).isEqualTo("11A");
46+
assertThat(json.getBoolean("value")).isTrue();
47+
48+
mute.setValue(JsonValue.FALSE);
49+
verify((AccessoryWithMute) accessory).setMute(false);
50+
}
51+
}

0 commit comments

Comments
 (0)