mirror of
https://github.com/MarekWo/mc-webui.git
synced 2026-10-30 23:51:57 +01:00
Two changes to the Android wrapper, shipping together as app version 2.1 (versionCode 6). Notifications stopped arriving a few minutes after the app was backgrounded, and no setting on the phone could prevent it: Android freezes a process with nothing in the foreground, and a frozen process runs no JavaScript and holds no socket. MeshWatchService is a foreground service of type remoteMessaging that does no work of its own - it exists so Android leaves the process alone. Every notification is still built by the mc-webui page, so mutes, blocked senders, channel names, translations and deep links stay in one place rather than being duplicated in Kotlin. The service follows mc-webui's own notification toggle, read from localStorage by the shim rather than asked of the page, because the wrapper connects to whichever server its user typed in - very often an older mc-webui. The shim also wraps Storage.prototype.setItem, since localStorage fires no event in the document that wrote it. Android's own switches have the last word, so a revoked permission or a silenced channel stops the service too. setRendererPriorityPolicy goes with it: the page renders in a process of its own, and WebView waives that process's priority once the view stops being visible, so a service saving only the host process would still lose the renderer under memory pressure. Separately, the address screen now lists the servers reached before, so running more than one instance no longer means retyping the whole address to switch. Only addresses that answered are listed, which keeps typos out. Also replaces the deprecated setDecorFitsSystemWindows with enableEdgeToEdge, which is what Play Console has been flagging twice. Its default navigation-bar scrim is overridden, or it would paint over the strip the wrapper colours to match the page below Android 10. Docs, the privacy policy (both languages) and the app-vs-PWA comparison are updated: three of them said the app ran nothing in the background. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
464 lines
17 KiB
HTML
464 lines
17 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Privacy Policy — mc-webui for Android</title>
|
|
<meta name="description" content="Privacy policy for the mc-webui companion app for Android: the app collects no personal data, contains no analytics or advertising, and talks to no server other than the one you configure yourself.">
|
|
<style>
|
|
:root {
|
|
--bg: #ffffff;
|
|
--fg: #1f2328;
|
|
--muted: #656d76;
|
|
--border: #d0d7de;
|
|
--border-soft: #eaeef2;
|
|
--surface: #f6f8fa;
|
|
--accent: #0969da;
|
|
--code-bg: #f6f8fa;
|
|
--table-row-alt: #f6f8fa;
|
|
--note-bg: #ddf4ff;
|
|
--note-border: #54aeff;
|
|
--font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, sans-serif;
|
|
--font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
|
|
--max-width: 820px;
|
|
}
|
|
|
|
@media (prefers-color-scheme: dark) {
|
|
:root {
|
|
--bg: #0d1117;
|
|
--fg: #e6edf3;
|
|
--muted: #9198a1;
|
|
--border: #30363d;
|
|
--border-soft: #21262d;
|
|
--surface: #161b22;
|
|
--accent: #4493f8;
|
|
--code-bg: #161b22;
|
|
--table-row-alt: #161b22;
|
|
--note-bg: #1f2d3d;
|
|
--note-border: #4493f8;
|
|
}
|
|
}
|
|
|
|
* { box-sizing: border-box; }
|
|
html { scroll-behavior: smooth; }
|
|
|
|
body {
|
|
font-family: var(--font-body);
|
|
font-size: 16px;
|
|
line-height: 1.6;
|
|
color: var(--fg);
|
|
background: var(--bg);
|
|
margin: 0 auto;
|
|
padding: 32px 20px 80px;
|
|
max-width: var(--max-width);
|
|
}
|
|
|
|
h1 { font-size: 1.9rem; line-height: 1.25; margin: 0 0 4px; }
|
|
h2 {
|
|
font-size: 1.35rem;
|
|
margin: 40px 0 12px;
|
|
padding-bottom: 6px;
|
|
border-bottom: 1px solid var(--border-soft);
|
|
}
|
|
h3 { font-size: 1.05rem; margin: 24px 0 8px; }
|
|
|
|
p, ul, ol { margin: 0 0 14px; }
|
|
li { margin-bottom: 6px; }
|
|
|
|
a { color: var(--accent); text-decoration: none; }
|
|
a:hover { text-decoration: underline; }
|
|
|
|
code {
|
|
font-family: var(--font-mono);
|
|
font-size: 0.87em;
|
|
background: var(--code-bg);
|
|
border: 1px solid var(--border-soft);
|
|
border-radius: 5px;
|
|
padding: 1px 5px;
|
|
}
|
|
|
|
.updated { color: var(--muted); font-size: 0.9rem; margin: 0 0 28px; }
|
|
|
|
.langbar {
|
|
display: flex;
|
|
gap: 8px;
|
|
margin: 0 0 28px;
|
|
padding-bottom: 20px;
|
|
border-bottom: 1px solid var(--border-soft);
|
|
}
|
|
.langbar a {
|
|
border: 1px solid var(--border);
|
|
border-radius: 6px;
|
|
padding: 5px 12px;
|
|
font-size: 0.9rem;
|
|
background: var(--surface);
|
|
}
|
|
|
|
.note {
|
|
background: var(--note-bg);
|
|
border-left: 4px solid var(--note-border);
|
|
border-radius: 0 6px 6px 0;
|
|
padding: 14px 18px;
|
|
margin: 0 0 24px;
|
|
}
|
|
.note p:last-child { margin-bottom: 0; }
|
|
|
|
table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
margin: 0 0 18px;
|
|
font-size: 0.94rem;
|
|
display: block;
|
|
overflow-x: auto;
|
|
}
|
|
th, td {
|
|
border: 1px solid var(--border);
|
|
padding: 8px 12px;
|
|
text-align: left;
|
|
vertical-align: top;
|
|
}
|
|
th { background: var(--surface); font-weight: 600; }
|
|
tbody tr:nth-child(even) { background: var(--table-row-alt); }
|
|
|
|
hr {
|
|
border: 0;
|
|
border-top: 1px solid var(--border);
|
|
margin: 56px 0 40px;
|
|
}
|
|
|
|
footer {
|
|
margin-top: 56px;
|
|
padding-top: 20px;
|
|
border-top: 1px solid var(--border-soft);
|
|
color: var(--muted);
|
|
font-size: 0.9rem;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
|
|
<div class="langbar">
|
|
<a href="#english">English</a>
|
|
<a href="#polski">Polski</a>
|
|
</div>
|
|
|
|
<!-- ===================================================== ENGLISH ========== -->
|
|
<h1 id="english">Privacy Policy — mc-webui for Android</h1>
|
|
<p class="updated">Last updated: 6 September 2026 · Applies to the app <code>it.wojtaszek.mc.wrapper</code></p>
|
|
|
|
<div class="note">
|
|
<p><strong>In short:</strong> this app collects no personal data. It contains no
|
|
analytics, no advertising and no tracking of any kind. The developer runs no
|
|
servers and receives nothing from the app. Everything the app does happens
|
|
between your phone and the mc-webui server whose address you type in yourself.</p>
|
|
</div>
|
|
|
|
<h2>1. What this app is</h2>
|
|
<p><strong>mc-webui for Android</strong> is a companion app for
|
|
<a href="https://github.com/MarekWo/mc-webui">mc-webui</a>, an open-source web
|
|
interface for the MeshCore mesh network that users install and run on their own
|
|
hardware.</p>
|
|
<p>The app is a thin wrapper: it asks once for the address of <em>your</em>
|
|
mc-webui server and then displays that interface full screen. It contains no
|
|
mesh logic of its own, no accounts, and no content of its own. The full source
|
|
code of the app is public in the repository linked above.</p>
|
|
<p>The app is published by Marek Wojtaszek, the author of the mc-webui project.</p>
|
|
|
|
<h2>2. Data collected by the developer</h2>
|
|
<p><strong>None.</strong> The developer operates no backend, no telemetry
|
|
endpoint and no account system, and therefore receives no data from the app —
|
|
not usage statistics, not crash reports, not identifiers, not your server
|
|
address.</p>
|
|
|
|
<h2>3. Data stored on your device</h2>
|
|
<p>The app keeps the following in its own private application storage, which on
|
|
a standard, non-rooted Android device is readable only by this app:</p>
|
|
|
|
<table>
|
|
<thead>
|
|
<tr><th>What</th><th>Why</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>The server address you entered</td>
|
|
<td>So you do not have to type it again on every launch</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Username and password, per server host — only if your server asks for
|
|
HTTP authentication</td>
|
|
<td>So the app can sign in again on the next launch instead of prompting
|
|
every time</td>
|
|
</tr>
|
|
<tr>
|
|
<td>The addresses of servers you have connected to before</td>
|
|
<td>So you can switch back to one without typing it again. Kept only on
|
|
the phone, at most six of them, and any of them can be removed from
|
|
the address screen</td>
|
|
</tr>
|
|
<tr>
|
|
<td>A flag recording whether the notification permission has already been
|
|
requested</td>
|
|
<td>To tell "not asked yet" apart from "declined", so the app does not
|
|
keep asking</td>
|
|
</tr>
|
|
<tr>
|
|
<td>The WebView's own cache, cookies and local storage for your server</td>
|
|
<td>Standard web browsing storage, the same as a browser would keep for
|
|
that site</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<p>None of this is transmitted anywhere except, where relevant, to the mc-webui
|
|
server you configured.</p>
|
|
|
|
<h2>4. Data sent to your server</h2>
|
|
<p>Everything you do in the interface — messages, contacts, settings — is sent to
|
|
the mc-webui instance at the address you entered, exactly as it would be if you
|
|
opened that address in a web browser.</p>
|
|
<p>That server is operated by you, or by whoever you chose to trust with it. It
|
|
is not operated by the developer of this app, and this policy does not govern
|
|
what happens on it.</p>
|
|
|
|
<h2>5. Permissions and what they are used for</h2>
|
|
|
|
<table>
|
|
<thead>
|
|
<tr><th>Permission</th><th>Used for</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>INTERNET</code></td>
|
|
<td>Reaching the mc-webui server you configured. It is the only network
|
|
destination the app loads.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>CAMERA</code></td>
|
|
<td>Scanning QR codes when adding a contact. The camera is opened only
|
|
when the interface asks for it, the image is processed on the device
|
|
by the page itself, and the app neither stores nor uploads any image.
|
|
The app works fully without this permission, minus QR scanning.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>POST_NOTIFICATIONS</code></td>
|
|
<td>Showing alerts about new messages, generated locally from what your
|
|
own server reports. There is no push service and no third party
|
|
involved.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>FOREGROUND_SERVICE</code><br><code>FOREGROUND_SERVICE_REMOTE_MESSAGING</code></td>
|
|
<td>Keeping the app running while it is in the background, so that alerts
|
|
about new messages still reach you rather than stopping a few minutes
|
|
after you switch away. The service starts only once you turn
|
|
notifications on in mc-webui itself, shows a permanent notice while it
|
|
runs, and can be stopped from that notice. It sends nothing anywhere:
|
|
the connection it holds open is the one to your own server.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>WRITE_EXTERNAL_STORAGE</code><br>(Android 9 and older only)</td>
|
|
<td>Saving files you choose to download from your own server, such as a
|
|
database backup, into the phone's Downloads folder.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<p>The app requests no location permission, reads no contacts, and accesses no
|
|
files other than the downloads you start yourself.</p>
|
|
|
|
<h2>6. Third parties</h2>
|
|
<p>The app bundles no analytics SDK, no advertising SDK, no crash-reporting
|
|
service and no social-network integration. No data is shared with, or sold to,
|
|
anyone.</p>
|
|
<p>Links that point outside your server — for example a link inside a message —
|
|
are opened in the phone's own browser or the appropriate app. From that moment
|
|
on the privacy policy of that site or app applies, not this one.</p>
|
|
|
|
<h2>7. Children</h2>
|
|
<p>The app is a technical tool for operators of MeshCore radio nodes. It is not
|
|
directed at children and contains nothing aimed at them.</p>
|
|
|
|
<h2>8. Deleting your data</h2>
|
|
<p>Everything the app stores lives on your device. To remove all of it, clear
|
|
the app's storage in Android settings (<em>Settings → Apps → mc-webui → Storage →
|
|
Clear storage</em>) or uninstall the app. There is nothing held elsewhere for the
|
|
developer to delete on your behalf.</p>
|
|
|
|
<h2>9. Changes to this policy</h2>
|
|
<p>Any change is published on this page with an updated date at the top. The
|
|
history of changes is visible in the project repository, since this page is part
|
|
of it.</p>
|
|
|
|
<h2>10. Contact</h2>
|
|
<p>Questions about this policy, or about the app's handling of data, can be
|
|
raised at
|
|
<a href="https://github.com/MarekWo/mc-webui/issues">github.com/MarekWo/mc-webui/issues</a>.</p>
|
|
|
|
<hr>
|
|
|
|
<!-- ====================================================== POLSKI ========== -->
|
|
<h1 id="polski" lang="pl">Polityka prywatności — mc-webui dla Androida</h1>
|
|
<div lang="pl">
|
|
<p class="updated">Ostatnia aktualizacja: 6 września 2026 · Dotyczy aplikacji <code>it.wojtaszek.mc.wrapper</code></p>
|
|
|
|
<div class="note">
|
|
<p><strong>W skrócie:</strong> ta aplikacja nie zbiera żadnych danych
|
|
osobowych. Nie zawiera analityki, reklam ani śledzenia w jakiejkolwiek
|
|
postaci. Autor nie prowadzi żadnych serwerów i nie otrzymuje z aplikacji
|
|
niczego. Wszystko, co aplikacja robi, dzieje się między Twoim telefonem
|
|
a serwerem mc-webui, którego adres sam wpisujesz.</p>
|
|
</div>
|
|
|
|
<h2>1. Czym jest ta aplikacja</h2>
|
|
<p><strong>mc-webui dla Androida</strong> to aplikacja towarzysząca projektowi
|
|
<a href="https://github.com/MarekWo/mc-webui">mc-webui</a> — otwartoźródłowego
|
|
interfejsu webowego dla sieci mesh MeshCore, który użytkownicy instalują
|
|
i uruchamiają na własnym sprzęcie.</p>
|
|
<p>Aplikacja jest cienką nakładką: raz pyta o adres <em>Twojego</em> serwera
|
|
mc-webui, a następnie wyświetla ten interfejs na pełnym ekranie. Nie zawiera
|
|
własnej logiki sieci mesh, nie ma kont użytkowników ani własnych treści. Pełny
|
|
kod źródłowy aplikacji jest publicznie dostępny w repozytorium wskazanym
|
|
powyżej.</p>
|
|
<p>Wydawcą aplikacji jest Marek Wojtaszek, autor projektu mc-webui.</p>
|
|
|
|
<h2>2. Dane zbierane przez autora aplikacji</h2>
|
|
<p><strong>Żadne.</strong> Autor nie prowadzi zaplecza serwerowego, punktu
|
|
telemetrycznego ani systemu kont, a więc nie otrzymuje z aplikacji żadnych
|
|
danych — ani statystyk użycia, ani raportów o awariach, ani identyfikatorów, ani
|
|
adresu Twojego serwera.</p>
|
|
|
|
<h2>3. Dane przechowywane na Twoim urządzeniu</h2>
|
|
<p>Aplikacja trzyma poniższe informacje we własnej, prywatnej pamięci aplikacji,
|
|
która na standardowym urządzeniu z Androidem (bez roota) jest czytelna wyłącznie
|
|
dla niej:</p>
|
|
|
|
<table>
|
|
<thead>
|
|
<tr><th>Co</th><th>Po co</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Wpisany przez Ciebie adres serwera</td>
|
|
<td>Żebyś nie musiał wpisywać go przy każdym uruchomieniu</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Nazwa użytkownika i hasło, osobno dla każdego serwera — tylko jeśli
|
|
Twój serwer wymaga uwierzytelnienia HTTP</td>
|
|
<td>Żeby aplikacja mogła zalogować się ponownie przy kolejnym
|
|
uruchomieniu, zamiast pytać za każdym razem</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Adresy serwerów, z którymi łączyłeś się wcześniej</td>
|
|
<td>Żebyś mógł wrócić do jednego z nich bez wpisywania adresu od nowa.
|
|
Przechowywane wyłącznie na telefonie, najwyżej sześć, i każdy z nich
|
|
można usunąć z ekranu adresu</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Znacznik, czy pytano już o zgodę na powiadomienia</td>
|
|
<td>Żeby odróżnić „jeszcze nie pytano" od „odmówiono" i nie pytać
|
|
w kółko</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Pamięć podręczna, ciasteczka i local storage komponentu WebView dla
|
|
Twojego serwera</td>
|
|
<td>Standardowa pamięć przeglądania, taka sama jaką dla tej strony
|
|
trzymałaby przeglądarka</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<p>Żadna z tych informacji nie jest nigdzie przesyłana poza — tam gdzie to
|
|
wynika z działania interfejsu — skonfigurowany przez Ciebie serwer mc-webui.</p>
|
|
|
|
<h2>4. Dane wysyłane do Twojego serwera</h2>
|
|
<p>Wszystko, co robisz w interfejsie — wiadomości, kontakty, ustawienia — trafia
|
|
do instancji mc-webui pod adresem, który wpisałeś, dokładnie tak samo jak
|
|
gdybyś otworzył ten adres w przeglądarce.</p>
|
|
<p>Ten serwer prowadzisz Ty albo osoba, której zdecydowałeś się zaufać. Nie
|
|
prowadzi go autor tej aplikacji i niniejsza polityka nie reguluje tego, co się
|
|
na nim dzieje.</p>
|
|
|
|
<h2>5. Uprawnienia i do czego służą</h2>
|
|
|
|
<table>
|
|
<thead>
|
|
<tr><th>Uprawnienie</th><th>Zastosowanie</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>INTERNET</code></td>
|
|
<td>Połączenie ze skonfigurowanym przez Ciebie serwerem mc-webui. To
|
|
jedyny adres sieciowy, jaki aplikacja wczytuje.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>CAMERA</code></td>
|
|
<td>Skanowanie kodów QR przy dodawaniu kontaktu. Aparat uruchamia się
|
|
wyłącznie wtedy, gdy interfejs o to poprosi, obraz jest przetwarzany
|
|
na urządzeniu przez samą stronę, a aplikacja nie zapisuje ani nie
|
|
wysyła żadnego zdjęcia. Bez tego uprawnienia aplikacja działa
|
|
w pełni, poza skanowaniem QR.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>POST_NOTIFICATIONS</code></td>
|
|
<td>Pokazywanie powiadomień o nowych wiadomościach, tworzonych lokalnie
|
|
na podstawie tego, co zgłasza Twój własny serwer. Nie ma tu żadnej
|
|
usługi push ani podmiotu trzeciego.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>FOREGROUND_SERVICE</code><br><code>FOREGROUND_SERVICE_REMOTE_MESSAGING</code></td>
|
|
<td>Utrzymywanie aplikacji przy życiu, gdy jest w tle, żeby powiadomienia
|
|
o nowych wiadomościach nadal do Ciebie docierały, a nie milkły kilka
|
|
minut po przełączeniu się na coś innego. Usługa uruchamia się dopiero
|
|
po włączeniu powiadomień w samym mc-webui, przez cały czas działania
|
|
pokazuje stałe powiadomienie i można ją z niego zatrzymać. Niczego
|
|
nigdzie nie wysyła: podtrzymuje połączenie z Twoim własnym serwerem.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>WRITE_EXTERNAL_STORAGE</code><br>(tylko Android 9 i starszy)</td>
|
|
<td>Zapisywanie plików, które sam pobierasz z własnego serwera, na
|
|
przykład kopii zapasowej bazy danych, do folderu Pobrane.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<p>Aplikacja nie prosi o dostęp do lokalizacji, nie odczytuje kontaktów i nie
|
|
sięga do żadnych plików poza pobraniami, które sam rozpoczniesz.</p>
|
|
|
|
<h2>6. Podmioty trzecie</h2>
|
|
<p>Aplikacja nie zawiera bibliotek analitycznych, reklamowych, usług
|
|
raportowania awarii ani integracji z sieciami społecznościowymi. Żadne dane nie
|
|
są nikomu udostępniane ani sprzedawane.</p>
|
|
<p>Odnośniki prowadzące poza Twój serwer — na przykład link w treści wiadomości —
|
|
otwierają się w przeglądarce telefonu lub odpowiedniej aplikacji. Od tego
|
|
momentu obowiązuje polityka prywatności tamtej strony lub aplikacji, a nie
|
|
niniejsza.</p>
|
|
|
|
<h2>7. Dzieci</h2>
|
|
<p>Aplikacja jest narzędziem technicznym dla operatorów węzłów radiowych
|
|
MeshCore. Nie jest kierowana do dzieci i nie zawiera treści adresowanych do
|
|
nich.</p>
|
|
|
|
<h2>8. Usuwanie danych</h2>
|
|
<p>Wszystko, co aplikacja przechowuje, znajduje się na Twoim urządzeniu. Aby to
|
|
usunąć, wyczyść dane aplikacji w ustawieniach Androida (<em>Ustawienia →
|
|
Aplikacje → mc-webui → Pamięć → Wyczyść dane</em>) albo odinstaluj aplikację. Nie
|
|
ma niczego przechowywanego gdzie indziej, co autor mógłby usunąć w Twoim
|
|
imieniu.</p>
|
|
|
|
<h2>9. Zmiany w polityce</h2>
|
|
<p>Każda zmiana jest publikowana na tej stronie wraz z aktualną datą u góry.
|
|
Historia zmian jest widoczna w repozytorium projektu, którego ta strona jest
|
|
częścią.</p>
|
|
|
|
<h2>10. Kontakt</h2>
|
|
<p>Pytania dotyczące tej polityki lub sposobu, w jaki aplikacja obchodzi się
|
|
z danymi, można zgłaszać pod adresem
|
|
<a href="https://github.com/MarekWo/mc-webui/issues">github.com/MarekWo/mc-webui/issues</a>.</p>
|
|
</div>
|
|
|
|
<footer>
|
|
<p>mc-webui — <a href="https://github.com/MarekWo/mc-webui">github.com/MarekWo/mc-webui</a></p>
|
|
</footer>
|
|
|
|
</body>
|
|
</html>
|