Skip to content

Commit 4ab8b92

Browse files
authored
Merge branch 'master' into feature/162-custom-min-max
2 parents 3f844c2 + 46e2a02 commit 4ab8b92

4 files changed

Lines changed: 66 additions & 1 deletion

File tree

‎.github/workflows/release.yml‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ jobs:
3333
git config --global user.name "github-actions[bot]"
3434
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
3535
- name: Maven release
36-
# Only deploy; the site is published by the deploy workflow on pushes to master.
3736
run: mvn release:prepare release:perform -B -DreleaseVersion=${{ github.event.inputs.releaseVersion }} -Dgoals=deploy
3837
env:
3938
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

‎CHANGES.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# HAP-Java 2.0.10
22
* Add constructors with custom min/max to the window covering tilt angle characteristics [#162](https://github.com/hap-java/HAP-Java/issues/162)
3+
* Add optional Mute characteristic to Doorbell service
34

45
# HAP-Java 2.0.9
56
* Fix Set Duration and Remaining Duration characteristics to advertise format `uint32` instead of `int` [#202](https://github.com/hap-java/HAP-Java/issues/202)

‎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)