Compare commits

..

2 Commits

24 changed files with 220 additions and 22 deletions

View File

@@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Material Symbols "calendar_month" in the adaptive icon safe zone. -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="960"
android:viewportHeight="960">
<group
android:pivotX="480"
android:pivotY="480"
android:scaleX="0.5"
android:scaleY="0.5"
android:translateY="480">
<path
android:fillColor="#00497D"
android:pathData="M200,-80Q167,-80 143.5,-103.5Q120,-127 120,-160L120,-720Q120,-753 143.5,-776.5Q167,-800 200,-800L240,-800L240,-840Q240,-857 251.5,-868.5Q263,-880 280,-880Q297,-880 308.5,-868.5Q320,-857 320,-840L320,-800L640,-800L640,-840Q640,-857 651.5,-868.5Q663,-880 680,-880Q697,-880 708.5,-868.5Q720,-857 720,-840L720,-800L760,-800Q793,-800 816.5,-776.5Q840,-753 840,-720L840,-160Q840,-127 816.5,-103.5Q793,-80 760,-80L200,-80ZM200,-160L760,-160Q760,-160 760,-160Q760,-160 760,-160L760,-560L200,-560L200,-160Q200,-160 200,-160Q200,-160 200,-160ZM480,-400Q463,-400 451.5,-411.5Q440,-423 440,-440Q440,-457 451.5,-468.5Q463,-480 480,-480Q497,-480 508.5,-468.5Q520,-457 520,-440Q520,-423 508.5,-411.5Q497,-400 480,-400ZM320,-400Q303,-400 291.5,-411.5Q280,-423 280,-440Q280,-457 291.5,-468.5Q303,-480 320,-480Q337,-480 348.5,-468.5Q360,-457 360,-440Q360,-423 348.5,-411.5Q337,-400 320,-400ZM640,-400Q623,-400 611.5,-411.5Q600,-423 600,-440Q600,-457 611.5,-468.5Q623,-480 640,-480Q657,-480 668.5,-468.5Q680,-457 680,-440Q680,-423 668.5,-411.5Q657,-400 640,-400ZM480,-240Q463,-240 451.5,-251.5Q440,-263 440,-280Q440,-297 451.5,-308.5Q463,-320 480,-320Q497,-320 508.5,-308.5Q520,-297 520,-280Q520,-263 508.5,-251.5Q497,-240 480,-240ZM320,-240Q303,-240 291.5,-251.5Q280,-263 280,-280Q280,-297 291.5,-308.5Q303,-320 320,-320Q337,-320 348.5,-308.5Q360,-297 360,-280Q360,-263 348.5,-251.5Q337,-240 320,-240ZM640,-240Q623,-240 611.5,-251.5Q600,-263 600,-280Q600,-297 611.5,-308.5Q623,-320 640,-320Q657,-320 668.5,-308.5Q680,-297 680,-280Q680,-263 668.5,-251.5Q657,-240 640,-240Z" />
</group>
</vector>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
<background android:drawable="@mipmap/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
<monochrome android:drawable="@mipmap/ic_launcher_monochrome"/>
</adaptive-icon>

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

128
public/privacy.css Normal file
View File

@@ -0,0 +1,128 @@
@font-face {
font-family: "Manrope";
font-weight: 400;
font-display: swap;
src: url("fonts/manrope-400.ttf") format("truetype");
}
@font-face {
font-family: "Manrope";
font-weight: 700;
font-display: swap;
src: url("fonts/manrope-700.ttf") format("truetype");
}
:root {
color-scheme: light;
--primary: #6750a4;
--surface: #fef7ff;
--on-surface: #1d1b20;
--on-surface-variant: #49454f;
--container: #f3edf7;
--outline-variant: #cac4d0;
}
@media (prefers-color-scheme: dark) {
:root {
color-scheme: dark;
--primary: #d0bcff;
--surface: #141218;
--on-surface: #e6e0e9;
--on-surface-variant: #cac4d0;
--container: #211f26;
--outline-variant: #49454f;
}
}
* {
box-sizing: border-box;
}
body {
margin: 0;
background: var(--surface);
color: var(--on-surface);
font: 400 1rem/1.6 "Manrope", system-ui, sans-serif;
}
main {
max-width: 44rem;
margin: 0 auto;
padding: 2.5rem 1rem 4rem;
}
header {
display: flex;
gap: 1rem;
align-items: center;
margin-bottom: 1.5rem;
}
header img {
flex: none;
border-radius: 14px;
}
h1 {
margin: 0;
font-size: clamp(1.5rem, 5vw, 2rem);
line-height: 1.2;
}
h2 {
margin: 0 0 0.5rem;
font-size: 1.15rem;
}
.meta {
margin: 0.25rem 0 0;
color: var(--on-surface-variant);
font-size: 0.9rem;
}
.lead {
font-size: 1.075rem;
}
section {
margin-top: 1rem;
padding: 1.25rem;
border-radius: 20px;
background: var(--container);
}
section p:last-child,
section ul:last-child {
margin-bottom: 0;
}
p,
ul {
margin: 0 0 0.75rem;
}
ul {
padding-left: 1.25rem;
}
dl {
margin: 0;
}
dt {
font-weight: 700;
}
dd {
margin: 0 0 0.75rem;
color: var(--on-surface-variant);
}
dd:last-child {
margin-bottom: 0;
}
a {
color: var(--primary);
overflow-wrap: anywhere;
}

88
public/privacy.html Normal file
View File

@@ -0,0 +1,88 @@
<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Политика конфиденциальности — Расписание ПГУ</title>
<meta name="description" content="Политика конфиденциальности приложения «Расписание ПГУ»: какие данные обрабатываются и где они хранятся.">
<link rel="icon" href="icon.svg" type="image/svg+xml">
<link rel="stylesheet" href="privacy.css">
</head>
<body>
<main>
<header>
<img src="icon-192.png" alt="" width="56" height="56">
<div>
<h1>Политика конфиденциальности</h1>
<p class="meta">Приложение «Расписание ПГУ» · редакция от 20 октября 2026 г.</p>
</div>
</header>
<p class="lead">«Расписание ПГУ» показывает расписание занятий Полоцкого государственного университета. Приложение не требует регистрации и не собирает персональные данные. Здесь описано, какие данные всё же обрабатываются и зачем.</p>
<section>
<h2>Кто отвечает за приложение</h2>
<p>Разработчик — Захар Тимошенко, частное лицо. Приложение не является официальным приложением университета. По любым вопросам о данных пишите на <a href="mailto:vp1984tanki@gmail.com">vp1984tanki@gmail.com</a>.</p>
</section>
<section>
<h2>Что хранится на вашем устройстве</h2>
<p>Эти данные остаются только на устройстве и не передаются разработчику:</p>
<ul>
<li>выбранная группа, подгруппа, скрытые занятия и недавние группы;</li>
<li>копии расписаний для работы без интернета;</li>
<li>настройки приложения: тема, напоминания, виджеты;</li>
<li>в веб-версии — Word-файлы, которые вы импортировали сами.</li>
</ul>
<p>Чтобы удалить эти данные, очистите данные приложения в настройках Android или удалите приложение. В веб-версии очистите данные сайта в браузере. Если в Android включено резервное копирование, система может сохранять настройки приложения в вашем аккаунте Google по правилам Google.</p>
</section>
<section>
<h2>Что передаётся на сервер</h2>
<p>Приложение загружает расписание с сервера разработчика. Сервер получает документы из публичного каталога университета. В запросах передаются только параметры расписания: документ, группа, дата, а при поиске — имя преподавателя или номер аудитории.</p>
<p>Как и любой веб-сервер, он видит IP-адрес устройства. Адрес используется только для ограничения числа запросов и защиты от перегрузки. Он хранится в оперативной памяти несколько минут и не записывается в журналы.</p>
<p>Word-файлы, которые вы импортируете в веб-версии, обрабатываются в памяти сервера. Временные файлы удаляются сразу после разбора.</p>
</section>
<section>
<h2>Чего в приложении нет</h2>
<ul>
<li>учётных записей и входа;</li>
<li>аналитики, рекламы и рекламных идентификаторов;</li>
<li>сторонних SDK для отслеживания и отчётов о сбоях;</li>
<li>доступа к контактам, местоположению, камере, микрофону и файлам устройства.</li>
</ul>
<p>Данные не продаются и не передаются третьим лицам.</p>
</section>
<section>
<h2>Разрешения Android</h2>
<dl>
<dt>Интернет</dt>
<dd>Загрузка и обновление расписания.</dd>
<dt>Уведомления</dt>
<dd>Напоминания о парах и сообщения об изменениях в расписании. Их можно отключить в любой момент.</dd>
<dt>Запуск при загрузке устройства</dt>
<dd>Восстановление напоминаний после перезагрузки.</dd>
<dt>Точные будильники</dt>
<dd>Необязательно. Напоминания приходят точно ко времени, если вы разрешите это в настройках системы.</dd>
</dl>
</section>
<section>
<h2>Безопасность</h2>
<p>Обмен данными с сервером идёт по HTTPS. Ссылки «Поделиться расписанием» содержат только документ и группу. Подгруппа и скрытые занятия по ссылке не передаются.</p>
</section>
<section>
<h2>Дети</h2>
<p>Приложение рассчитано на студентов и не предназначено для детей младше 13 лет. Персональные данные детей не собираются.</p>
</section>
<section>
<h2>Изменения политики</h2>
<p>Если обработка данных изменится, эта страница будет обновлена, а дата редакции вверху изменится.</p>
</section>
</main>
</body>
</html>