Notify of pokes and private messages on Android, with TeamSpeak's sounds

While the app is out of sight, a poke or a private message posts a
notification; a message's one gathers the conversation, takes a reply
inline and opens its chat. The notifications are silent, as the sound
pack already plays TeamSpeak's own sound for either.

The build bundles the sound packs of the TeamSpeak 3 client found next
to the checkout (or at ts3.client.dir / TS3_CLIENT_DIR), unpacked into
the profile once per app version. Sound Settings picks the pack and its
volume, and speech packs talk through the phone's text-to-speech.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-26 15:12:16 +00:00
parent 002b1ac7ce
commit a6efc0b8da
14 changed files with 413 additions and 3 deletions

View File

@@ -74,6 +74,11 @@ public final class BBCode {
return out.toString();
}
/** The text BBCode reads as, markup dropped, for places that show no formatting. */
public static String toPlain(String input) {
return HtmlText.plain(toHtml(input));
}
/**
* Renders text carrying {@code [url=…]…[/url]} links and nothing else: everything
* outside those tags stays literal. The server log is written this way, so that a

View File

@@ -0,0 +1,15 @@
package com.ts3client.text;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
/** Messages shown where no formatting renders, such as a system notification. */
class BBCodePlainTest {
@Test
void dropsMarkupAndKeepsText() {
assertEquals("Hello bold & <tags> and a link",
BBCode.toPlain("Hello [b]bold[/b] & <tags> and [url=https://x.y]a link[/url]"));
}
}