Compare commits
341 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
2d6d823a87 | ||
![]() |
02a9724587 | ||
![]() |
c17237015e | ||
![]() |
2681794676 | ||
![]() |
42e59ac0db | ||
![]() |
cac98ee3d4 | ||
![]() |
aeecc48639 | ||
![]() |
db444d89f0 | ||
![]() |
29971777a7 | ||
![]() |
88cd18b8c6 | ||
![]() |
30a77f1a99 | ||
![]() |
6de7ee9cee | ||
![]() |
d44b85073a | ||
![]() |
514fbafd00 | ||
![]() |
c35222cdfd | ||
![]() |
37a94595c0 | ||
![]() |
58d9dec33c | ||
![]() |
095403cc76 | ||
![]() |
7f3a607246 | ||
![]() |
ffee78d4f7 | ||
![]() |
f2a20c3aae | ||
![]() |
1e7dbba995 | ||
![]() |
0b8f3fe94b | ||
![]() |
0e8b0673ca | ||
![]() |
8450f6953e | ||
![]() |
ddefda08f1 | ||
![]() |
c5b173b40a | ||
![]() |
f10bc42c7b | ||
![]() |
6371d71b7a | ||
![]() |
09f0c986e0 | ||
![]() |
10043cc62c | ||
![]() |
f795412551 | ||
![]() |
6a7020a516 | ||
![]() |
137ea65e0f | ||
![]() |
50ef7f8617 | ||
![]() |
e1dbc2f050 | ||
![]() |
77e1acbb1e | ||
![]() |
6e19f37d79 | ||
0823e72328 | |||
![]() |
fadf1d7754 | ||
![]() |
1071a0848a | ||
![]() |
cefb0deba8 | ||
![]() |
53c813f014 | ||
![]() |
90a151c129 | ||
![]() |
9fd9721ae7 | ||
![]() |
ceca75ef4b | ||
![]() |
21c00bbe53 | ||
![]() |
db00566ebf | ||
![]() |
07ab1b984f | ||
![]() |
8177d4aa2d | ||
![]() |
beff1b6460 | ||
![]() |
31b569b02e | ||
![]() |
8bf77817d2 | ||
![]() |
87b7bd9b30 | ||
![]() |
27b61adf1d | ||
![]() |
8d7dc511ea | ||
![]() |
a0244841ad | ||
![]() |
12c0c6f2ec | ||
![]() |
aaa3b8626e | ||
![]() |
48c9e2dfe3 | ||
![]() |
81d4801d27 | ||
![]() |
5f8016061d | ||
![]() |
5007587192 | ||
![]() |
dfd1083e41 | ||
![]() |
a322986df5 | ||
![]() |
678baf46e5 | ||
![]() |
4077fe448d | ||
![]() |
f085e17ef7 | ||
![]() |
7fd2cad46b | ||
![]() |
93dc2ac9ab | ||
![]() |
ac53e267fc | ||
![]() |
86eb1a0f42 | ||
![]() |
710d82da27 | ||
![]() |
0123f50810 | ||
![]() |
6d3eb65445 | ||
![]() |
a9a0630226 | ||
![]() |
ec7577f999 | ||
![]() |
05c7c0012c | ||
![]() |
d65c6db954 | ||
![]() |
771dc437e6 | ||
![]() |
3d5d3847cc | ||
![]() |
726c22b70a | ||
![]() |
18cc60a80b | ||
![]() |
fedde9f739 | ||
![]() |
9fde97bef0 | ||
![]() |
742bd03e9e | ||
![]() |
62ffc652ab | ||
![]() |
bfd2e9883a | ||
![]() |
00e077d01f | ||
![]() |
c21d89cf60 | ||
![]() |
f52cc1b197 | ||
![]() |
c90ad97f55 | ||
![]() |
845e09d875 | ||
![]() |
158b69a8d3 | ||
![]() |
9535f53563 | ||
![]() |
eeb3fc4621 | ||
![]() |
41693a9fc8 | ||
![]() |
d3599b8c89 | ||
![]() |
ffd81f8b82 | ||
![]() |
2c34924052 | ||
![]() |
26ad6373e6 | ||
![]() |
cac8f94407 | ||
![]() |
6628b97faf | ||
![]() |
8424414317 | ||
![]() |
d8bb927703 | ||
![]() |
c8e8c172a2 | ||
![]() |
0d4dee765a | ||
![]() |
fd407b2b03 | ||
![]() |
40ed5a221f | ||
![]() |
5150467372 | ||
![]() |
63c5720f63 | ||
![]() |
6c93cd4217 | ||
![]() |
649d4f619a | ||
![]() |
ba10d10a10 | ||
![]() |
1450d63fcb | ||
![]() |
2ec06bc39a | ||
![]() |
6f12227c2e | ||
![]() |
3a91f87ccd | ||
![]() |
52a53334ca | ||
![]() |
3ab9602865 | ||
![]() |
dc19043f73 | ||
![]() |
cf25507850 | ||
![]() |
044cedff99 | ||
![]() |
4de066bf5f | ||
![]() |
8d174bda01 | ||
![]() |
e2fd714070 | ||
![]() |
8097e8d06d | ||
![]() |
93ccdbdeb7 | ||
![]() |
7ded400a30 | ||
![]() |
2ff784066e | ||
![]() |
6c96875c83 | ||
![]() |
9f3aaf6e86 | ||
![]() |
55369eaa8b | ||
![]() |
c983c16907 | ||
![]() |
c7362bce12 | ||
![]() |
7935d0f097 | ||
![]() |
4b64277948 | ||
![]() |
ef0996c80e | ||
![]() |
132729bbd9 | ||
![]() |
6d36ab27d1 | ||
![]() |
11fabb231f | ||
![]() |
6fd999f88c | ||
![]() |
7711413b30 | ||
![]() |
cdc0c9d458 | ||
![]() |
8e5f750a80 | ||
![]() |
f4e7e8978c | ||
![]() |
14952307b3 | ||
![]() |
96c542d6d2 | ||
![]() |
77d22b87aa | ||
![]() |
37c68443bd | ||
![]() |
9dbb5d70e9 | ||
![]() |
99afa77a63 | ||
![]() |
a5d0f4212d | ||
![]() |
a85f935eb4 | ||
![]() |
bb44fa066c | ||
![]() |
54a61c6254 | ||
![]() |
ac10874bf1 | ||
![]() |
fa55b4901a | ||
![]() |
86c41d9191 | ||
![]() |
0f90430387 | ||
![]() |
745523c620 | ||
![]() |
c1ef0e9d11 | ||
![]() |
8911ce2bc1 | ||
![]() |
2990fc5479 | ||
![]() |
48b7adb564 | ||
![]() |
2e97467c57 | ||
![]() |
f8ac9e793a | ||
![]() |
148597e578 | ||
![]() |
6c50a80b42 | ||
![]() |
1bf0679e92 | ||
![]() |
5b5dc5cade | ||
![]() |
46de915965 | ||
![]() |
98a89b1ca1 | ||
![]() |
6d1e18cce2 | ||
![]() |
8fe0f88be4 | ||
![]() |
aeed735521 | ||
![]() |
e314fafaff | ||
![]() |
2ab0dd7546 | ||
![]() |
aa06868a4e | ||
![]() |
9a6d56ec77 | ||
![]() |
2b104e6463 | ||
![]() |
afb1863827 | ||
![]() |
d8228748e4 | ||
![]() |
b0608c47c4 | ||
![]() |
dda0d88f19 | ||
![]() |
a1b5560977 | ||
![]() |
86f5811bda | ||
![]() |
3f11e75985 | ||
![]() |
c39b5442c9 | ||
![]() |
3b80adf355 | ||
![]() |
cae41d17b6 | ||
![]() |
519d75d9d9 | ||
![]() |
cb953ea8a8 | ||
![]() |
52968cafad | ||
![]() |
b7755dae96 | ||
![]() |
113ecc0ef1 | ||
![]() |
23bd9b8e05 | ||
![]() |
decfd2068a | ||
![]() |
a88cfb8ae3 | ||
![]() |
50cb0acc7d | ||
![]() |
27413a9745 | ||
![]() |
49a093201b | ||
![]() |
7c925cb88a | ||
![]() |
8745d7d526 | ||
![]() |
e02246f97d | ||
![]() |
e629e03b33 | ||
![]() |
e2ad3758e0 | ||
![]() |
f3e2d21b89 | ||
![]() |
fd62653d79 | ||
![]() |
ca3e6f7fc9 | ||
![]() |
d8abac1917 | ||
![]() |
2807659da3 | ||
![]() |
7884bf4077 | ||
![]() |
59f80c049c | ||
![]() |
f1e58db151 | ||
![]() |
74b766f18a | ||
![]() |
7e0f69d95d | ||
![]() |
fa318d4509 | ||
![]() |
63b74a9fda | ||
![]() |
1a543814f4 | ||
![]() |
50ae767fcd | ||
![]() |
44263ac95f | ||
![]() |
a6aca42c8c | ||
![]() |
83daae46b8 | ||
![]() |
6611fc5843 | ||
![]() |
fe82c86c93 | ||
![]() |
692555732d | ||
![]() |
d59286bb05 | ||
![]() |
91cfa7e945 | ||
![]() |
2d277e80cc | ||
![]() |
3cdca5eb33 | ||
![]() |
591abb4bb8 | ||
![]() |
0b4421c7a7 | ||
![]() |
325efd8b14 | ||
![]() |
959168771b | ||
![]() |
41217190bb | ||
![]() |
18c306b9ea | ||
![]() |
c6be1a7954 | ||
![]() |
e8e9f04050 | ||
![]() |
3700a71c39 | ||
![]() |
60f0628f5e | ||
![]() |
80dcd9aa69 | ||
![]() |
d60e622626 | ||
![]() |
91b685576b | ||
![]() |
2e3e3dcf3c | ||
![]() |
118f5e1794 | ||
![]() |
e902352a4b | ||
![]() |
2f7fcb6dc3 | ||
![]() |
21ddb9d706 | ||
![]() |
efa63452e7 | ||
![]() |
83f84de019 | ||
![]() |
b9aca981e5 | ||
![]() |
5913707519 | ||
![]() |
dd6a2c0979 | ||
![]() |
9fdee6e0c7 | ||
![]() |
b31bf5c1ab | ||
![]() |
cf4906f2f4 | ||
![]() |
680a5dfea3 | ||
![]() |
c1062cd7ed | ||
![]() |
8edc581f0b | ||
![]() |
ea9d801d08 | ||
![]() |
8f72e11d0c | ||
![]() |
452271e8c0 | ||
![]() |
7b4effe889 | ||
![]() |
e2bf48d1b6 | ||
![]() |
c88056ddb9 | ||
![]() |
96dbb0a057 | ||
![]() |
288c80ea26 | ||
![]() |
5a217aca01 | ||
![]() |
4bed62aa6f | ||
![]() |
a4d604e146 | ||
![]() |
ae4405ef78 | ||
![]() |
71ca51e813 | ||
![]() |
1bf07d736f | ||
![]() |
c011f550bb | ||
![]() |
909899612e | ||
![]() |
4184fbb2cd | ||
![]() |
75010c0771 | ||
![]() |
5562498e84 | ||
![]() |
c2d0940a80 | ||
![]() |
baa98f25c5 | ||
![]() |
26645ee83c | ||
![]() |
85d74bec1c | ||
![]() |
fd0fc652a3 | ||
![]() |
c85dac2e4d | ||
![]() |
c855f08f9c | ||
![]() |
a31c68e87a | ||
![]() |
99021f6b3a | ||
![]() |
e2b47db3fd | ||
![]() |
8609956ae7 | ||
![]() |
e25ca930e0 | ||
![]() |
47ec1899a1 | ||
![]() |
1e8fb6a9ae | ||
![]() |
02eb5b7ee4 | ||
![]() |
776806caef | ||
![]() |
755b846b50 | ||
![]() |
73f3ba17de | ||
![]() |
07fb1e0e12 | ||
![]() |
297867cbf3 | ||
![]() |
db598af28a | ||
![]() |
ec765c9070 | ||
![]() |
5eaa754401 | ||
![]() |
b48b5589f4 | ||
![]() |
634ef16bc5 | ||
![]() |
ccf0bdaf05 | ||
![]() |
4647da7803 | ||
![]() |
613f271c4e | ||
![]() |
8b1529f240 | ||
![]() |
3eb09033bf | ||
![]() |
12619f6bde | ||
![]() |
f5ceaa9afe | ||
![]() |
777ae945e0 | ||
![]() |
3eae8fb58b | ||
![]() |
b14ef5cd78 | ||
![]() |
98bf4f3bdc | ||
![]() |
2d6cf50ca7 | ||
![]() |
95baf9fb9c | ||
![]() |
61b7410bd0 | ||
![]() |
dd0972b528 | ||
![]() |
d5c10fbd2b | ||
![]() |
d17f6297d3 | ||
![]() |
3ae785a45c | ||
![]() |
dd254d4bec | ||
![]() |
e04bd75f1f | ||
![]() |
929ccb53db | ||
![]() |
72319a4613 | ||
![]() |
fd31cafd8f | ||
![]() |
df7044cc64 | ||
![]() |
0a127ac6ee | ||
![]() |
6b75715e87 | ||
![]() |
b9e0d91220 | ||
![]() |
0d5bb331f3 | ||
![]() |
0e52fb7386 | ||
![]() |
339bb9c8f6 | ||
![]() |
b44fa6b2e4 | ||
![]() |
9cc98fcf08 | ||
![]() |
67b794ce2b | ||
![]() |
31b502bb6c | ||
![]() |
7686c451e6 | ||
![]() |
04f3ce4d64 | ||
![]() |
3a6087e421 |
2
.github/utils/_get_password.py
vendored
@ -23,8 +23,6 @@ def get_password(
|
|||||||
auth_plugin="mysql_native_password",
|
auth_plugin="mysql_native_password",
|
||||||
)
|
)
|
||||||
|
|
||||||
print(f"Generating passwords for version {version_name} ({version_code})")
|
|
||||||
|
|
||||||
password = base64.b64encode(secrets.token_bytes(16)).decode()
|
password = base64.b64encode(secrets.token_bytes(16)).decode()
|
||||||
iv = secrets.token_bytes(16)
|
iv = secrets.token_bytes(16)
|
||||||
|
|
||||||
|
4
.github/utils/_utils.py
vendored
@ -102,7 +102,9 @@ def get_commit_log(project_dir: str, format: str, max_lines: int = None) -> str:
|
|||||||
)
|
)
|
||||||
|
|
||||||
log = subprocess.run(
|
log = subprocess.run(
|
||||||
args=f"git log {last_tag}..HEAD --format=%an%x00%at%x00%h%x00%s%x00%D".split(" "),
|
args=f"git log {last_tag}..HEAD --format=%an%x00%at%x00%h%x00%s%x00%D".split(
|
||||||
|
" "
|
||||||
|
),
|
||||||
cwd=project_dir,
|
cwd=project_dir,
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
)
|
)
|
||||||
|
29
.github/utils/bump_nightly.py
vendored
@ -1,10 +1,7 @@
|
|||||||
import json
|
|
||||||
import os
|
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
from zoneinfo import ZoneInfo
|
||||||
import requests
|
|
||||||
|
|
||||||
from _utils import (
|
from _utils import (
|
||||||
get_commit_log,
|
get_commit_log,
|
||||||
@ -18,38 +15,20 @@ if __name__ == "__main__":
|
|||||||
print("usage: bump_nightly.py <project dir>")
|
print("usage: bump_nightly.py <project dir>")
|
||||||
exit(-1)
|
exit(-1)
|
||||||
|
|
||||||
repo = os.getenv("GITHUB_REPOSITORY")
|
|
||||||
sha = os.getenv("GITHUB_SHA")
|
|
||||||
|
|
||||||
if not repo or not sha:
|
|
||||||
print("Missing GitHub environment variables.")
|
|
||||||
exit(-1)
|
|
||||||
|
|
||||||
with requests.get(
|
|
||||||
f"https://api.github.com/repos/{repo}/actions/runs?per_page=1&status=success"
|
|
||||||
) as r:
|
|
||||||
data = json.loads(r.text)
|
|
||||||
runs = [run for run in data["workflow_runs"] if run["head_sha"] == sha]
|
|
||||||
if runs:
|
|
||||||
print("::set-output name=hasNewChanges::false")
|
|
||||||
exit(0)
|
|
||||||
|
|
||||||
print("::set-output name=hasNewChanges::true")
|
|
||||||
|
|
||||||
project_dir = get_project_dir()
|
project_dir = get_project_dir()
|
||||||
|
|
||||||
(version_code, version_name) = read_gradle_version(project_dir)
|
(version_code, version_name) = read_gradle_version(project_dir)
|
||||||
version_name = version_name.split("+")[0]
|
version_name = version_name.split("+")[0]
|
||||||
|
|
||||||
date = datetime.now()
|
date = datetime.now(tz=ZoneInfo("Europe/Warsaw"))
|
||||||
if date.hour > 6:
|
if date.hour > 6:
|
||||||
version_name += "+daily." + date.strftime("%Y%m%d-%H%M")
|
version_name += "+daily." + date.strftime("%Y%m%d-%H%M")
|
||||||
else:
|
else:
|
||||||
date -= timedelta(days=1)
|
date -= timedelta(days=1)
|
||||||
version_name += "+nightly." + date.strftime("%Y%m%d")
|
version_name += "+nightly." + date.strftime("%Y%m%d")
|
||||||
|
|
||||||
print("::set-output name=appVersionName::" + version_name)
|
print("appVersionName=" + version_name)
|
||||||
print("::set-output name=appVersionCode::" + str(version_code))
|
print("appVersionCode=" + str(version_code))
|
||||||
|
|
||||||
write_gradle_version(project_dir, version_code, version_name)
|
write_gradle_version(project_dir, version_code, version_name)
|
||||||
|
|
||||||
|
23
.github/utils/check_nightly.py
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import json
|
||||||
|
import os
|
||||||
|
|
||||||
|
import requests
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
repo = os.getenv("GITHUB_REPOSITORY")
|
||||||
|
sha = os.getenv("GITHUB_SHA")
|
||||||
|
|
||||||
|
if not repo or not sha:
|
||||||
|
print("Missing GitHub environment variables.")
|
||||||
|
exit(-1)
|
||||||
|
|
||||||
|
with requests.get(
|
||||||
|
f"https://api.github.com/repos/{repo}/actions/runs?per_page=5&status=success"
|
||||||
|
) as r:
|
||||||
|
data = json.loads(r.text)
|
||||||
|
runs = [run for run in data["workflow_runs"] if run["head_sha"] == sha]
|
||||||
|
if runs:
|
||||||
|
print("hasNewChanges=false")
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
print("hasNewChanges=true")
|
40
.github/utils/extract_changelogs.py
vendored
@ -12,48 +12,60 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
(version_code, version_name) = read_gradle_version(project_dir)
|
(version_code, version_name) = read_gradle_version(project_dir)
|
||||||
|
|
||||||
print("::set-output name=appVersionName::" + version_name)
|
print("appVersionName=" + version_name)
|
||||||
print("::set-output name=appVersionCode::" + str(version_code))
|
print("appVersionCode=" + str(version_code))
|
||||||
|
|
||||||
dir = f"{project_dir}/app/release/whatsnew-{version_name}/"
|
dir = f"{project_dir}/app/release/whatsnew-{version_name}/"
|
||||||
os.makedirs(dir, exist_ok=True)
|
os.makedirs(dir, exist_ok=True)
|
||||||
|
|
||||||
print("::set-output name=changelogDir::" + dir)
|
print("changelogDir=" + dir)
|
||||||
|
|
||||||
(title, changelog) = get_changelog(project_dir, format="plain")
|
(title, changelog) = get_changelog(project_dir, format="plain")
|
||||||
with open(dir + "whatsnew-pl-PL", "w", encoding="utf-8") as f:
|
|
||||||
f.write(changelog)
|
|
||||||
print("::set-output name=changelogPlainFile::" + dir + "whatsnew-pl-PL")
|
|
||||||
|
|
||||||
with open(dir + "whatsnew-titled.txt", "w", encoding="utf-8") as f:
|
# plain text changelog - Firebase App Distribution
|
||||||
|
with open(dir + "whatsnew_titled.txt", "w", encoding="utf-8") as f:
|
||||||
f.write(title)
|
f.write(title)
|
||||||
f.write("\n")
|
f.write("\n")
|
||||||
f.write(changelog)
|
f.write(changelog)
|
||||||
print("::set-output name=changelogPlainTitledFile::" + dir + "whatsnew-titled.txt")
|
print("changelogPlainTitledFile=" + dir + "whatsnew_titled.txt")
|
||||||
|
|
||||||
print("::set-output name=changelogTitle::" + title)
|
print("changelogTitle=" + title)
|
||||||
|
|
||||||
|
# plain text changelog, max 500 chars - Google Play
|
||||||
|
with open(dir + "whatsnew-pl-PL", "w", encoding="utf-8") as f:
|
||||||
|
changelog_lines = changelog.split("\n")
|
||||||
|
changelog = ""
|
||||||
|
for line in changelog_lines:
|
||||||
|
if len(changelog) + len(line) < 500:
|
||||||
|
changelog += "\n" + line
|
||||||
|
changelog = changelog.strip()
|
||||||
|
f.write(changelog)
|
||||||
|
|
||||||
|
print("changelogPlainFile=" + dir + "whatsnew-pl-PL")
|
||||||
|
|
||||||
|
# markdown changelog - Discord webhook
|
||||||
(_, changelog) = get_changelog(project_dir, format="markdown")
|
(_, changelog) = get_changelog(project_dir, format="markdown")
|
||||||
with open(dir + "whatsnew.md", "w", encoding="utf-8") as f:
|
with open(dir + "whatsnew.md", "w", encoding="utf-8") as f:
|
||||||
f.write(changelog)
|
f.write(changelog)
|
||||||
print("::set-output name=changelogMarkdownFile::" + dir + "whatsnew.md")
|
print("changelogMarkdownFile=" + dir + "whatsnew.md")
|
||||||
|
|
||||||
|
# html changelog - version info in DB
|
||||||
(_, changelog) = get_changelog(project_dir, format="html")
|
(_, changelog) = get_changelog(project_dir, format="html")
|
||||||
with open(dir + "whatsnew.html", "w", encoding="utf-8") as f:
|
with open(dir + "whatsnew.html", "w", encoding="utf-8") as f:
|
||||||
f.write(changelog)
|
f.write(changelog)
|
||||||
print("::set-output name=changelogHtmlFile::" + dir + "whatsnew.html")
|
print("changelogHtmlFile=" + dir + "whatsnew.html")
|
||||||
|
|
||||||
changelog = get_commit_log(project_dir, format="plain", max_lines=10)
|
changelog = get_commit_log(project_dir, format="plain", max_lines=10)
|
||||||
with open(dir + "commit_log.txt", "w", encoding="utf-8") as f:
|
with open(dir + "commit_log.txt", "w", encoding="utf-8") as f:
|
||||||
f.write(changelog)
|
f.write(changelog)
|
||||||
print("::set-output name=commitLogPlainFile::" + dir + "commit_log.txt")
|
print("commitLogPlainFile=" + dir + "commit_log.txt")
|
||||||
|
|
||||||
changelog = get_commit_log(project_dir, format="markdown", max_lines=10)
|
changelog = get_commit_log(project_dir, format="markdown", max_lines=10)
|
||||||
with open(dir + "commit_log.md", "w", encoding="utf-8") as f:
|
with open(dir + "commit_log.md", "w", encoding="utf-8") as f:
|
||||||
f.write(changelog)
|
f.write(changelog)
|
||||||
print("::set-output name=commitLogMarkdownFile::" + dir + "commit_log.md")
|
print("commitLogMarkdownFile=" + dir + "commit_log.md")
|
||||||
|
|
||||||
changelog = get_commit_log(project_dir, format="html", max_lines=10)
|
changelog = get_commit_log(project_dir, format="html", max_lines=10)
|
||||||
with open(dir + "commit_log.html", "w", encoding="utf-8") as f:
|
with open(dir + "commit_log.html", "w", encoding="utf-8") as f:
|
||||||
f.write(changelog)
|
f.write(changelog)
|
||||||
print("::set-output name=commitLogHtmlFile::" + dir + "commit_log.html")
|
print("commitLogHtmlFile=" + dir + "commit_log.html")
|
||||||
|
@ -13,7 +13,7 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
files = glob.glob(f"{project_dir}/app/release/*.*")
|
files = glob.glob(f"{project_dir}/app/release/*.*")
|
||||||
for file in files:
|
for file in files:
|
||||||
file_relative = file.replace(os.getenv("GITHUB_WORKSPACE") + "/", "")
|
file_relative = file.replace(project_dir + "/", "")
|
||||||
if "-aligned.apk" in file:
|
if "-aligned.apk" in file:
|
||||||
os.unlink(file)
|
os.unlink(file)
|
||||||
elif "-signed.apk" in file:
|
elif "-signed.apk" in file:
|
||||||
@ -22,5 +22,5 @@ if __name__ == "__main__":
|
|||||||
os.unlink(new_file)
|
os.unlink(new_file)
|
||||||
os.rename(file, new_file)
|
os.rename(file, new_file)
|
||||||
elif ".apk" in file or ".aab" in file:
|
elif ".apk" in file or ".aab" in file:
|
||||||
print("::set-output name=signedReleaseFile::" + file)
|
print("signedReleaseFile=" + file)
|
||||||
print("::set-output name=signedReleaseFileRelative::" + file_relative)
|
print("signedReleaseFileRelative=" + file_relative)
|
25
.github/utils/save_version.py
vendored
@ -3,6 +3,7 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from time import time
|
from time import time
|
||||||
|
from zoneinfo import ZoneInfo
|
||||||
|
|
||||||
import mysql.connector as mysql
|
import mysql.connector as mysql
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
@ -59,12 +60,22 @@ def save_version(
|
|||||||
build_date = int(os.stat(file).st_mtime)
|
build_date = int(os.stat(file).st_mtime)
|
||||||
bundle_name_play = output_aab_play
|
bundle_name_play = output_aab_play
|
||||||
|
|
||||||
build_date = datetime.fromtimestamp(build_date).strftime("%Y-%m-%d %H:%M:%S")
|
build_date = datetime.fromtimestamp(
|
||||||
|
build_date,
|
||||||
|
tz=ZoneInfo("Europe/Warsaw"),
|
||||||
|
).strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
|
||||||
if build_type in ["nightly", "daily"]:
|
if build_type in ["nightly", "daily"]:
|
||||||
download_url = apk_server_nightly + apk_name if apk_name else None
|
download_url = apk_server_nightly + apk_name if apk_name else None
|
||||||
else:
|
else:
|
||||||
download_url = apk_server_release + apk_name if apk_name else None
|
# download_url = apk_server_release + apk_name if apk_name else None
|
||||||
|
download_url = (
|
||||||
|
f"https://github.com/szkolny-eu/szkolny-android/releases/download/v{version_name}/{apk_name}"
|
||||||
|
if apk_name
|
||||||
|
else None
|
||||||
|
)
|
||||||
|
if download_url:
|
||||||
|
print("downloadUrl=" + download_url)
|
||||||
|
|
||||||
cols = [
|
cols = [
|
||||||
"versionCode",
|
"versionCode",
|
||||||
@ -119,4 +130,12 @@ if __name__ == "__main__":
|
|||||||
APK_SERVER_RELEASE = os.getenv("APK_SERVER_RELEASE")
|
APK_SERVER_RELEASE = os.getenv("APK_SERVER_RELEASE")
|
||||||
APK_SERVER_NIGHTLY = os.getenv("APK_SERVER_NIGHTLY")
|
APK_SERVER_NIGHTLY = os.getenv("APK_SERVER_NIGHTLY")
|
||||||
|
|
||||||
save_version(project_dir, DB_HOST, DB_USER, DB_PASS, DB_NAME, APK_SERVER_RELEASE, APK_SERVER_NIGHTLY)
|
save_version(
|
||||||
|
project_dir,
|
||||||
|
DB_HOST,
|
||||||
|
DB_USER,
|
||||||
|
DB_PASS,
|
||||||
|
DB_NAME,
|
||||||
|
APK_SERVER_RELEASE,
|
||||||
|
APK_SERVER_NIGHTLY,
|
||||||
|
)
|
||||||
|
6
.github/utils/sign.py
vendored
@ -31,8 +31,6 @@ def sign(
|
|||||||
SIGNING_FORMAT = "$param1.{}.$param2"
|
SIGNING_FORMAT = "$param1.{}.$param2"
|
||||||
CPP_FORMAT = "/*{}*/\nstatic toys AES_IV[16] = {{\n\t{} }};"
|
CPP_FORMAT = "/*{}*/\nstatic toys AES_IV[16] = {{\n\t{} }};"
|
||||||
|
|
||||||
print(f"Writing passwords for version {version_name} ({version_code})")
|
|
||||||
|
|
||||||
iv_hex = " ".join(["{:02x}".format(x) for x in iv])
|
iv_hex = " ".join(["{:02x}".format(x) for x in iv])
|
||||||
iv_cpp = ", ".join(["0x{:02x}".format(x) for x in iv])
|
iv_cpp = ", ".join(["0x{:02x}".format(x) for x in iv])
|
||||||
|
|
||||||
@ -71,8 +69,8 @@ if __name__ == "__main__":
|
|||||||
version_name, version_code, DB_HOST, DB_USER, DB_PASS, DB_NAME
|
version_name, version_code, DB_HOST, DB_USER, DB_PASS, DB_NAME
|
||||||
)
|
)
|
||||||
|
|
||||||
print("::set-output name=appVersionName::" + version_name)
|
print("appVersionName=" + version_name)
|
||||||
print("::set-output name=appVersionCode::" + str(version_code))
|
print("appVersionCode=" + str(version_code))
|
||||||
|
|
||||||
sign(
|
sign(
|
||||||
project_dir,
|
project_dir,
|
||||||
|
39
.github/utils/webhook_discord.py
vendored
@ -1,6 +1,7 @@
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from zoneinfo import ZoneInfo
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
@ -11,8 +12,7 @@ from _utils import get_changelog, get_commit_log, get_project_dir, read_gradle_v
|
|||||||
def post_webhook(
|
def post_webhook(
|
||||||
project_dir: str,
|
project_dir: str,
|
||||||
apk_file: str,
|
apk_file: str,
|
||||||
apk_server_release: str,
|
download_url: str,
|
||||||
apk_server_nightly: str,
|
|
||||||
webhook_release: str,
|
webhook_release: str,
|
||||||
webhook_testing: str,
|
webhook_testing: str,
|
||||||
):
|
):
|
||||||
@ -25,16 +25,13 @@ def post_webhook(
|
|||||||
testing = ["dev", "beta", "nightly", "daily"]
|
testing = ["dev", "beta", "nightly", "daily"]
|
||||||
testing = build_type in testing
|
testing = build_type in testing
|
||||||
|
|
||||||
apk_name = os.path.basename(apk_file)
|
|
||||||
if build_type in ["nightly", "daily"]:
|
|
||||||
download_url = apk_server_nightly + apk_name
|
|
||||||
else:
|
|
||||||
download_url = apk_server_release + apk_name
|
|
||||||
|
|
||||||
if testing:
|
if testing:
|
||||||
build_date = int(os.stat(apk_file).st_mtime)
|
build_date = int(os.stat(apk_file).st_mtime)
|
||||||
if build_date:
|
if build_date:
|
||||||
build_date = datetime.fromtimestamp(build_date).strftime("%Y-%m-%d %H:%M")
|
build_date = datetime.fromtimestamp(
|
||||||
|
build_date,
|
||||||
|
tz=ZoneInfo("Europe/Warsaw"),
|
||||||
|
).strftime("%Y-%m-%d %H:%M")
|
||||||
|
|
||||||
# untagged release, get commit log
|
# untagged release, get commit log
|
||||||
if build_type in ["nightly", "daily"]:
|
if build_type in ["nightly", "daily"]:
|
||||||
@ -48,13 +45,17 @@ def post_webhook(
|
|||||||
requests.post(url=webhook_testing, json=webhook)
|
requests.post(url=webhook_testing, json=webhook)
|
||||||
else:
|
else:
|
||||||
changelog = get_changelog(project_dir, format="markdown")
|
changelog = get_changelog(project_dir, format="markdown")
|
||||||
webhook = get_webhook_release(changelog, download_url)
|
webhook = get_webhook_release(version_name, changelog, download_url)
|
||||||
requests.post(url=webhook_release, json=webhook)
|
requests.post(url=webhook_release, json=webhook)
|
||||||
|
|
||||||
|
|
||||||
def get_webhook_release(changelog: str, download_url: str):
|
def get_webhook_release(version_name: str, changelog: str, download_url: str):
|
||||||
(title, content) = changelog
|
(title, content) = changelog
|
||||||
return {"content": f"__**{title}**__\n{content}\n{download_url}"}
|
return {
|
||||||
|
"content": (
|
||||||
|
f"__**{title}**__\n{content}\n[Szkolny.eu {version_name}]({download_url})"
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def get_webhook_testing(
|
def get_webhook_testing(
|
||||||
@ -73,9 +74,11 @@ def get_webhook_testing(
|
|||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"name": f"Wersja `{version_name}`",
|
"name": f"Wersja `{version_name}`",
|
||||||
"value": f"[Pobierz .APK]({download_url})"
|
"value": (
|
||||||
if download_url
|
f"[Pobierz .APK]({download_url})"
|
||||||
else "*Pobieranie niedostępne*",
|
if download_url
|
||||||
|
else "*Pobieranie niedostępne*"
|
||||||
|
),
|
||||||
"inline": False,
|
"inline": False,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -103,16 +106,14 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
APK_FILE = os.getenv("APK_FILE")
|
APK_FILE = os.getenv("APK_FILE")
|
||||||
APK_SERVER_RELEASE = os.getenv("APK_SERVER_RELEASE")
|
DOWNLOAD_URL = os.getenv("DOWNLOAD_URL")
|
||||||
APK_SERVER_NIGHTLY = os.getenv("APK_SERVER_NIGHTLY")
|
|
||||||
WEBHOOK_RELEASE = os.getenv("WEBHOOK_RELEASE")
|
WEBHOOK_RELEASE = os.getenv("WEBHOOK_RELEASE")
|
||||||
WEBHOOK_TESTING = os.getenv("WEBHOOK_TESTING")
|
WEBHOOK_TESTING = os.getenv("WEBHOOK_TESTING")
|
||||||
|
|
||||||
post_webhook(
|
post_webhook(
|
||||||
project_dir,
|
project_dir,
|
||||||
APK_FILE,
|
APK_FILE,
|
||||||
APK_SERVER_RELEASE,
|
DOWNLOAD_URL,
|
||||||
APK_SERVER_NIGHTLY,
|
|
||||||
WEBHOOK_RELEASE,
|
WEBHOOK_RELEASE,
|
||||||
WEBHOOK_TESTING,
|
WEBHOOK_TESTING,
|
||||||
)
|
)
|
||||||
|
195
.github/workflows/_build.yml
vendored
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
name: "[reusable] Szkolny.eu Build"
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
nightly:
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
build-apk:
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
build-aab:
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
|
||||||
|
release-ssh:
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
release-github:
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
release-firebase:
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
release-google-play:
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
release-discord:
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
secrets:
|
||||||
|
APK_SERVER_NIGHTLY:
|
||||||
|
APK_SERVER_RELEASE:
|
||||||
|
DB_HOST:
|
||||||
|
DB_NAME:
|
||||||
|
DB_PASS:
|
||||||
|
DB_USER:
|
||||||
|
FIREBASE_APP_ID:
|
||||||
|
FIREBASE_GROUPS_NIGHTLY:
|
||||||
|
FIREBASE_GROUPS_RELEASE:
|
||||||
|
FIREBASE_SERVICE_ACCOUNT_JSON:
|
||||||
|
KEY_ALIAS_PASSWORD:
|
||||||
|
KEY_ALIAS:
|
||||||
|
KEY_STORE_PASSWORD:
|
||||||
|
KEY_STORE:
|
||||||
|
PLAY_RELEASE_TRACK:
|
||||||
|
PLAY_SERVICE_ACCOUNT_JSON:
|
||||||
|
SSH_IP:
|
||||||
|
SSH_KEY:
|
||||||
|
SSH_PATH_NIGHTLY:
|
||||||
|
SSH_PATH_RELEASE:
|
||||||
|
SSH_USERNAME:
|
||||||
|
WEBHOOK_RELEASE:
|
||||||
|
WEBHOOK_TESTING:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
clean: false
|
||||||
|
- name: Setup JDK 17
|
||||||
|
uses: actions/setup-java@v3
|
||||||
|
with:
|
||||||
|
distribution: "temurin"
|
||||||
|
java-version: "17"
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
- name: Install Python packages
|
||||||
|
uses: BSFishy/pip-action@v1
|
||||||
|
with:
|
||||||
|
packages: |
|
||||||
|
python-dotenv
|
||||||
|
pycryptodome
|
||||||
|
mysql-connector-python
|
||||||
|
requests
|
||||||
|
- name: Setup Gradle
|
||||||
|
uses: gradle/actions/setup-gradle@v3
|
||||||
|
|
||||||
|
- name: Bump nightly version
|
||||||
|
if: ${{ inputs.nightly }}
|
||||||
|
run: python $GITHUB_WORKSPACE/.github/utils/bump_nightly.py $GITHUB_WORKSPACE >> $GITHUB_OUTPUT
|
||||||
|
- name: Write signing passwords and keystore
|
||||||
|
env:
|
||||||
|
DB_HOST: ${{ secrets.DB_HOST }}
|
||||||
|
DB_USER: ${{ secrets.DB_USER }}
|
||||||
|
DB_PASS: ${{ secrets.DB_PASS }}
|
||||||
|
DB_NAME: ${{ secrets.DB_NAME }}
|
||||||
|
KEY_STORE: ${{ secrets.KEY_STORE }}
|
||||||
|
run: |
|
||||||
|
python $GITHUB_WORKSPACE/.github/utils/sign.py $GITHUB_WORKSPACE commit >> $GITHUB_OUTPUT
|
||||||
|
echo $KEY_STORE | base64 --decode > keystore.jks
|
||||||
|
- name: Clean build artifacts
|
||||||
|
run: |
|
||||||
|
rm -rf app/release/*
|
||||||
|
rm -rf app/build/outputs/apk/*
|
||||||
|
rm -rf app/build/outputs/bundle/*
|
||||||
|
|
||||||
|
- name: Build app with Gradle
|
||||||
|
if: ${{ inputs.build-apk || inputs.build-aab }}
|
||||||
|
run: |
|
||||||
|
chmod +x ./gradlew
|
||||||
|
./gradlew \
|
||||||
|
${{ inputs.build-apk && 'assembleOfficialRelease' || '' }} \
|
||||||
|
${{ inputs.build-aab && 'bundlePlayRelease' || '' }} \
|
||||||
|
-P android.injected.signing.store.file=${{ github.workspace }}/keystore.jks \
|
||||||
|
-P android.injected.signing.store.password=${{ secrets.KEY_STORE_PASSWORD }} \
|
||||||
|
-P android.injected.signing.key.alias=${{ secrets.KEY_ALIAS }} \
|
||||||
|
-P android.injected.signing.key.password=${{ secrets.KEY_ALIAS_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Upload release to server
|
||||||
|
if: ${{ inputs.release-ssh }}
|
||||||
|
uses: easingthemes/ssh-deploy@v2.1.6
|
||||||
|
env:
|
||||||
|
REMOTE_HOST: ${{ secrets.SSH_IP }}
|
||||||
|
REMOTE_USER: ${{ secrets.SSH_USERNAME }}
|
||||||
|
SSH_PRIVATE_KEY: ${{ secrets.SSH_KEY }}
|
||||||
|
SOURCE: app/release/
|
||||||
|
TARGET: ${{ inputs.nightly && secrets.SSH_PATH_NIGHTLY || secrets.SSH_PATH_RELEASE }}
|
||||||
|
|
||||||
|
- name: Find signed artifacts
|
||||||
|
id: artifacts
|
||||||
|
run: python $GITHUB_WORKSPACE/.github/utils/find_artifacts.py $GITHUB_WORKSPACE >> $GITHUB_OUTPUT
|
||||||
|
- name: Extract release changelogs
|
||||||
|
id: changelog
|
||||||
|
run: python $GITHUB_WORKSPACE/.github/utils/extract_changelogs.py $GITHUB_WORKSPACE >> $GITHUB_OUTPUT
|
||||||
|
- name: Save version to database
|
||||||
|
id: save
|
||||||
|
env:
|
||||||
|
DB_HOST: ${{ secrets.DB_HOST }}
|
||||||
|
DB_USER: ${{ secrets.DB_USER }}
|
||||||
|
DB_PASS: ${{ secrets.DB_PASS }}
|
||||||
|
DB_NAME: ${{ secrets.DB_NAME }}
|
||||||
|
APK_SERVER_RELEASE: ${{ secrets.APK_SERVER_RELEASE }}
|
||||||
|
APK_SERVER_NIGHTLY: ${{ secrets.APK_SERVER_NIGHTLY }}
|
||||||
|
run: python $GITHUB_WORKSPACE/.github/utils/save_version.py $GITHUB_WORKSPACE >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Release on GitHub
|
||||||
|
if: ${{ inputs.release-github }}
|
||||||
|
uses: softprops/action-gh-release@v1
|
||||||
|
with:
|
||||||
|
name: ${{ steps.changelog.outputs.changelogTitle }}
|
||||||
|
body_path: ${{ steps.changelog.outputs.changelogMarkdownFile }}
|
||||||
|
files: ${{ steps.artifacts.outputs.signedReleaseFile }}
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Distribute to App Distribution
|
||||||
|
if: ${{ inputs.release-firebase }}
|
||||||
|
uses: wzieba/Firebase-Distribution-Github-Action@v1
|
||||||
|
with:
|
||||||
|
appId: ${{ secrets.FIREBASE_APP_ID }}
|
||||||
|
serviceCredentialsFileContent: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_JSON }}
|
||||||
|
file: ${{ steps.artifacts.outputs.signedReleaseFile }}
|
||||||
|
groups: ${{ inputs.nightly && secrets.FIREBASE_GROUPS_NIGHTLY || secrets.FIREBASE_GROUPS_RELEASE }}
|
||||||
|
releaseNotesFile: ${{ inputs.nightly && steps.changelog.outputs.commitLogPlainFile || steps.changelog.outputs.changelogPlainTitledFile }}
|
||||||
|
|
||||||
|
- name: Publish AAB to Google Play
|
||||||
|
if: ${{ inputs.release-google-play }}
|
||||||
|
uses: r0adkll/upload-google-play@v1
|
||||||
|
with:
|
||||||
|
serviceAccountJsonPlainText: ${{ secrets.PLAY_SERVICE_ACCOUNT_JSON }}
|
||||||
|
packageName: pl.szczodrzynski.edziennik
|
||||||
|
releaseFiles: ${{ steps.artifacts.outputs.signedReleaseFile }}
|
||||||
|
releaseName: ${{ steps.changelog.outputs.appVersionName }}
|
||||||
|
track: ${{ secrets.PLAY_RELEASE_TRACK }}
|
||||||
|
whatsNewDirectory: ${{ steps.changelog.outputs.changelogDir }}
|
||||||
|
status: completed
|
||||||
|
|
||||||
|
- name: Post Discord webhook
|
||||||
|
if: ${{ inputs.release-discord }}
|
||||||
|
env:
|
||||||
|
APK_FILE: ${{ steps.artifacts.outputs.signedReleaseFile }}
|
||||||
|
DOWNLOAD_URL: ${{ steps.save.outputs.downloadUrl }}
|
||||||
|
WEBHOOK_RELEASE: ${{ secrets.WEBHOOK_RELEASE }}
|
||||||
|
WEBHOOK_TESTING: ${{ secrets.WEBHOOK_TESTING }}
|
||||||
|
run: python $GITHUB_WORKSPACE/.github/utils/webhook_discord.py $GITHUB_WORKSPACE >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Upload workflow artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
if: always()
|
||||||
|
with:
|
||||||
|
name: ${{ steps.changelog.outputs.appVersionName }}
|
||||||
|
path: |
|
||||||
|
app/release/whatsnew*/
|
||||||
|
app/release/*.apk
|
||||||
|
app/release/*.aab
|
||||||
|
app/release/*.json
|
||||||
|
app/release/*.txt
|
151
.github/workflows/build-nightly-apk.yml
vendored
@ -1,151 +0,0 @@
|
|||||||
name: Nightly build
|
|
||||||
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
# 23:30 UTC, 0:30 or 1:30 CET/CEST
|
|
||||||
- cron: "30 23 * * *"
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
prepare:
|
|
||||||
name: Prepare build environment
|
|
||||||
runs-on: self-hosted
|
|
||||||
outputs:
|
|
||||||
hasNewChanges: ${{ steps.nightly.outputs.hasNewChanges }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
clean: false
|
|
||||||
- name: Set executable permissions to gradlew
|
|
||||||
run: chmod +x ./gradlew
|
|
||||||
- name: Setup Python
|
|
||||||
uses: actions/setup-python@v2
|
|
||||||
- name: Install packages
|
|
||||||
uses: BSFishy/pip-action@v1
|
|
||||||
with:
|
|
||||||
packages: |
|
|
||||||
python-dotenv
|
|
||||||
pycryptodome
|
|
||||||
mysql-connector-python
|
|
||||||
requests
|
|
||||||
- name: Bump nightly version
|
|
||||||
id: nightly
|
|
||||||
run: python $GITHUB_WORKSPACE/.github/utils/bump_nightly.py $GITHUB_WORKSPACE
|
|
||||||
- name: Write signing passwords
|
|
||||||
if: steps.nightly.outputs.hasNewChanges
|
|
||||||
env:
|
|
||||||
DB_HOST: ${{ secrets.DB_HOST }}
|
|
||||||
DB_USER: ${{ secrets.DB_USER }}
|
|
||||||
DB_PASS: ${{ secrets.DB_PASS }}
|
|
||||||
DB_NAME: ${{ secrets.DB_NAME }}
|
|
||||||
run: python $GITHUB_WORKSPACE/.github/utils/sign.py $GITHUB_WORKSPACE commit
|
|
||||||
build:
|
|
||||||
name: Build APK
|
|
||||||
runs-on: self-hosted
|
|
||||||
needs:
|
|
||||||
- prepare
|
|
||||||
if: needs.prepare.outputs.hasNewChanges
|
|
||||||
outputs:
|
|
||||||
androidHome: ${{ env.ANDROID_HOME }}
|
|
||||||
androidSdkRoot: ${{ env.ANDROID_SDK_ROOT }}
|
|
||||||
steps:
|
|
||||||
- name: Setup JDK 1.8
|
|
||||||
uses: actions/setup-java@v1
|
|
||||||
with:
|
|
||||||
java-version: 1.8
|
|
||||||
- name: Setup Android SDK
|
|
||||||
uses: android-actions/setup-android@v2
|
|
||||||
- name: Clean build artifacts
|
|
||||||
run: |
|
|
||||||
rm -rf app/release/*
|
|
||||||
rm -rf app/build/outputs/apk/*
|
|
||||||
rm -rf app/build/outputs/bundle/*
|
|
||||||
- name: Assemble official release with Gradle
|
|
||||||
run: ./gradlew assembleOfficialRelease
|
|
||||||
sign:
|
|
||||||
name: Sign APK
|
|
||||||
runs-on: self-hosted
|
|
||||||
needs:
|
|
||||||
- build
|
|
||||||
outputs:
|
|
||||||
signedReleaseFile: ${{ steps.artifacts.outputs.signedReleaseFile }}
|
|
||||||
signedReleaseFileRelative: ${{ steps.artifacts.outputs.signedReleaseFileRelative }}
|
|
||||||
steps:
|
|
||||||
- name: Sign build artifacts
|
|
||||||
id: sign_app
|
|
||||||
uses: r0adkll/sign-android-release@v1
|
|
||||||
with:
|
|
||||||
releaseDirectory: app/release
|
|
||||||
signingKeyBase64: ${{ secrets.KEY_STORE }}
|
|
||||||
alias: ${{ secrets.KEY_ALIAS }}
|
|
||||||
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
|
|
||||||
keyPassword: ${{ secrets.KEY_ALIAS_PASSWORD }}
|
|
||||||
env:
|
|
||||||
ANDROID_HOME: ${{ needs.build.outputs.androidHome }}
|
|
||||||
ANDROID_SDK_ROOT: ${{ needs.build.outputs.androidSdkRoot }}
|
|
||||||
BUILD_TOOLS_VERSION: "30.0.2"
|
|
||||||
- name: Rename signed artifacts
|
|
||||||
id: artifacts
|
|
||||||
run: python $GITHUB_WORKSPACE/.github/utils/rename_artifacts.py $GITHUB_WORKSPACE
|
|
||||||
publish:
|
|
||||||
name: Publish APK
|
|
||||||
runs-on: self-hosted
|
|
||||||
needs:
|
|
||||||
- sign
|
|
||||||
steps:
|
|
||||||
- name: Setup Python
|
|
||||||
uses: actions/setup-python@v2
|
|
||||||
|
|
||||||
- name: Extract changelogs
|
|
||||||
id: changelog
|
|
||||||
run: python $GITHUB_WORKSPACE/.github/utils/extract_changelogs.py $GITHUB_WORKSPACE
|
|
||||||
|
|
||||||
- name: Upload APK to SFTP
|
|
||||||
uses: easingthemes/ssh-deploy@v2.1.6
|
|
||||||
env:
|
|
||||||
REMOTE_HOST: ${{ secrets.SSH_IP }}
|
|
||||||
REMOTE_USER: ${{ secrets.SSH_USERNAME }}
|
|
||||||
SSH_PRIVATE_KEY: ${{ secrets.SSH_KEY }}
|
|
||||||
SOURCE: ${{ needs.sign.outputs.signedReleaseFileRelative }}
|
|
||||||
TARGET: ${{ secrets.SSH_PATH_NIGHTLY }}
|
|
||||||
- name: Save version metadata
|
|
||||||
env:
|
|
||||||
DB_HOST: ${{ secrets.DB_HOST }}
|
|
||||||
DB_USER: ${{ secrets.DB_USER }}
|
|
||||||
DB_PASS: ${{ secrets.DB_PASS }}
|
|
||||||
DB_NAME: ${{ secrets.DB_NAME }}
|
|
||||||
APK_SERVER_RELEASE: ${{ secrets.APK_SERVER_RELEASE }}
|
|
||||||
APK_SERVER_NIGHTLY: ${{ secrets.APK_SERVER_NIGHTLY }}
|
|
||||||
run: python $GITHUB_WORKSPACE/.github/utils/save_version.py $GITHUB_WORKSPACE
|
|
||||||
|
|
||||||
- name: Distribute to App Distribution
|
|
||||||
uses: wzieba/Firebase-Distribution-Github-Action@v1
|
|
||||||
with:
|
|
||||||
appId: ${{ secrets.FIREBASE_APP_ID }}
|
|
||||||
token: ${{ secrets.FIREBASE_TOKEN }}
|
|
||||||
groups: ${{ secrets.FIREBASE_GROUPS_NIGHTLY }}
|
|
||||||
file: ${{ needs.sign.outputs.signedReleaseFile }}
|
|
||||||
releaseNotesFile: ${{ steps.changelog.outputs.commitLogPlainFile }}
|
|
||||||
|
|
||||||
- name: Post Discord webhook
|
|
||||||
env:
|
|
||||||
APK_FILE: ${{ needs.sign.outputs.signedReleaseFile }}
|
|
||||||
APK_SERVER_RELEASE: ${{ secrets.APK_SERVER_RELEASE }}
|
|
||||||
APK_SERVER_NIGHTLY: ${{ secrets.APK_SERVER_NIGHTLY }}
|
|
||||||
WEBHOOK_RELEASE: ${{ secrets.WEBHOOK_RELEASE }}
|
|
||||||
WEBHOOK_TESTING: ${{ secrets.WEBHOOK_TESTING }}
|
|
||||||
run: python $GITHUB_WORKSPACE/.github/utils/webhook_discord.py $GITHUB_WORKSPACE
|
|
||||||
|
|
||||||
- name: Upload workflow artifact
|
|
||||||
uses: actions/upload-artifact@v2
|
|
||||||
if: true
|
|
||||||
with:
|
|
||||||
name: ${{ steps.changelog.outputs.appVersionName }}
|
|
||||||
path: |
|
|
||||||
app/release/whatsnew*/
|
|
||||||
app/release/*.apk
|
|
||||||
app/release/*.aab
|
|
||||||
app/release/*.json
|
|
||||||
app/release/*.txt
|
|
129
.github/workflows/build-release-aab-play.yml
vendored
@ -1,129 +0,0 @@
|
|||||||
name: Release build - Google Play [AAB]
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- "master"
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
prepare:
|
|
||||||
name: Prepare build environment
|
|
||||||
runs-on: self-hosted
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
clean: false
|
|
||||||
- name: Set executable permissions to gradlew
|
|
||||||
run: chmod +x ./gradlew
|
|
||||||
- name: Setup Python
|
|
||||||
uses: actions/setup-python@v2
|
|
||||||
- name: Install packages
|
|
||||||
uses: BSFishy/pip-action@v1
|
|
||||||
with:
|
|
||||||
packages: |
|
|
||||||
python-dotenv
|
|
||||||
pycryptodome
|
|
||||||
mysql-connector-python
|
|
||||||
requests
|
|
||||||
- name: Write signing passwords
|
|
||||||
env:
|
|
||||||
DB_HOST: ${{ secrets.DB_HOST }}
|
|
||||||
DB_USER: ${{ secrets.DB_USER }}
|
|
||||||
DB_PASS: ${{ secrets.DB_PASS }}
|
|
||||||
DB_NAME: ${{ secrets.DB_NAME }}
|
|
||||||
run: python $GITHUB_WORKSPACE/.github/utils/sign.py $GITHUB_WORKSPACE commit
|
|
||||||
build:
|
|
||||||
name: Build App Bundle
|
|
||||||
runs-on: self-hosted
|
|
||||||
needs:
|
|
||||||
- prepare
|
|
||||||
outputs:
|
|
||||||
androidHome: ${{ env.ANDROID_HOME }}
|
|
||||||
androidSdkRoot: ${{ env.ANDROID_SDK_ROOT }}
|
|
||||||
steps:
|
|
||||||
- name: Setup JDK 1.8
|
|
||||||
uses: actions/setup-java@v1
|
|
||||||
with:
|
|
||||||
java-version: 1.8
|
|
||||||
- name: Setup Android SDK
|
|
||||||
uses: android-actions/setup-android@v2
|
|
||||||
- name: Clean build artifacts
|
|
||||||
run: |
|
|
||||||
rm -rf app/release/*
|
|
||||||
rm -rf app/build/outputs/apk/*
|
|
||||||
rm -rf app/build/outputs/bundle/*
|
|
||||||
- name: Bundle play release with Gradle
|
|
||||||
run: ./gradlew bundlePlayRelease
|
|
||||||
sign:
|
|
||||||
name: Sign App Bundle
|
|
||||||
runs-on: self-hosted
|
|
||||||
needs:
|
|
||||||
- build
|
|
||||||
outputs:
|
|
||||||
signedReleaseFile: ${{ steps.artifacts.outputs.signedReleaseFile }}
|
|
||||||
signedReleaseFileRelative: ${{ steps.artifacts.outputs.signedReleaseFileRelative }}
|
|
||||||
steps:
|
|
||||||
- name: Sign build artifacts
|
|
||||||
id: sign_app
|
|
||||||
uses: r0adkll/sign-android-release@v1
|
|
||||||
with:
|
|
||||||
releaseDirectory: app/release
|
|
||||||
signingKeyBase64: ${{ secrets.KEY_STORE }}
|
|
||||||
alias: ${{ secrets.KEY_ALIAS }}
|
|
||||||
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
|
|
||||||
keyPassword: ${{ secrets.KEY_ALIAS_PASSWORD }}
|
|
||||||
env:
|
|
||||||
ANDROID_HOME: ${{ needs.build.outputs.androidHome }}
|
|
||||||
ANDROID_SDK_ROOT: ${{ needs.build.outputs.androidSdkRoot }}
|
|
||||||
BUILD_TOOLS_VERSION: "30.0.2"
|
|
||||||
- name: Rename signed artifacts
|
|
||||||
id: artifacts
|
|
||||||
run: python $GITHUB_WORKSPACE/.github/utils/rename_artifacts.py $GITHUB_WORKSPACE
|
|
||||||
publish:
|
|
||||||
name: Publish App Bundle
|
|
||||||
runs-on: self-hosted
|
|
||||||
needs:
|
|
||||||
- sign
|
|
||||||
steps:
|
|
||||||
- name: Setup Python
|
|
||||||
uses: actions/setup-python@v2
|
|
||||||
|
|
||||||
- name: Extract changelogs
|
|
||||||
id: changelog
|
|
||||||
run: python $GITHUB_WORKSPACE/.github/utils/extract_changelogs.py $GITHUB_WORKSPACE
|
|
||||||
|
|
||||||
- name: Save version metadata
|
|
||||||
env:
|
|
||||||
DB_HOST: ${{ secrets.DB_HOST }}
|
|
||||||
DB_USER: ${{ secrets.DB_USER }}
|
|
||||||
DB_PASS: ${{ secrets.DB_PASS }}
|
|
||||||
DB_NAME: ${{ secrets.DB_NAME }}
|
|
||||||
APK_SERVER_RELEASE: ${{ secrets.APK_SERVER_RELEASE }}
|
|
||||||
APK_SERVER_NIGHTLY: ${{ secrets.APK_SERVER_NIGHTLY }}
|
|
||||||
run: python $GITHUB_WORKSPACE/.github/utils/save_version.py $GITHUB_WORKSPACE
|
|
||||||
|
|
||||||
- name: Publish AAB to Google Play
|
|
||||||
uses: r0adkll/upload-google-play@v1
|
|
||||||
if: ${{ endsWith(needs.sign.outputs.signedReleaseFile, '.aab') }}
|
|
||||||
with:
|
|
||||||
serviceAccountJsonPlainText: ${{ secrets.PLAY_SERVICE_ACCOUNT_JSON }}
|
|
||||||
packageName: pl.szczodrzynski.edziennik
|
|
||||||
releaseFile: ${{ needs.sign.outputs.signedReleaseFile }}
|
|
||||||
releaseName: ${{ steps.changelog.outputs.appVersionName }}
|
|
||||||
track: ${{ secrets.PLAY_RELEASE_TRACK }}
|
|
||||||
userFraction: 1.0
|
|
||||||
whatsNewDirectory: ${{ steps.changelog.outputs.changelogDir }}
|
|
||||||
|
|
||||||
- name: Upload workflow artifact
|
|
||||||
uses: actions/upload-artifact@v2
|
|
||||||
if: true
|
|
||||||
with:
|
|
||||||
name: ${{ steps.changelog.outputs.appVersionName }}
|
|
||||||
path: |
|
|
||||||
app/release/whatsnew*/
|
|
||||||
app/release/*.apk
|
|
||||||
app/release/*.aab
|
|
||||||
app/release/*.json
|
|
||||||
app/release/*.txt
|
|
151
.github/workflows/build-release-apk.yml
vendored
@ -1,151 +0,0 @@
|
|||||||
name: Release build - official
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- "*"
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
prepare:
|
|
||||||
name: Prepare build environment
|
|
||||||
runs-on: self-hosted
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
clean: false
|
|
||||||
- name: Set executable permissions to gradlew
|
|
||||||
run: chmod +x ./gradlew
|
|
||||||
- name: Setup Python
|
|
||||||
uses: actions/setup-python@v2
|
|
||||||
- name: Install packages
|
|
||||||
uses: BSFishy/pip-action@v1
|
|
||||||
with:
|
|
||||||
packages: |
|
|
||||||
python-dotenv
|
|
||||||
pycryptodome
|
|
||||||
mysql-connector-python
|
|
||||||
requests
|
|
||||||
- name: Write signing passwords
|
|
||||||
env:
|
|
||||||
DB_HOST: ${{ secrets.DB_HOST }}
|
|
||||||
DB_USER: ${{ secrets.DB_USER }}
|
|
||||||
DB_PASS: ${{ secrets.DB_PASS }}
|
|
||||||
DB_NAME: ${{ secrets.DB_NAME }}
|
|
||||||
run: python $GITHUB_WORKSPACE/.github/utils/sign.py $GITHUB_WORKSPACE commit
|
|
||||||
build:
|
|
||||||
name: Build APK
|
|
||||||
runs-on: self-hosted
|
|
||||||
needs:
|
|
||||||
- prepare
|
|
||||||
outputs:
|
|
||||||
androidHome: ${{ env.ANDROID_HOME }}
|
|
||||||
androidSdkRoot: ${{ env.ANDROID_SDK_ROOT }}
|
|
||||||
steps:
|
|
||||||
- name: Setup JDK 1.8
|
|
||||||
uses: actions/setup-java@v1
|
|
||||||
with:
|
|
||||||
java-version: 1.8
|
|
||||||
- name: Setup Android SDK
|
|
||||||
uses: android-actions/setup-android@v2
|
|
||||||
- name: Clean build artifacts
|
|
||||||
run: |
|
|
||||||
rm -rf app/release/*
|
|
||||||
rm -rf app/build/outputs/apk/*
|
|
||||||
rm -rf app/build/outputs/bundle/*
|
|
||||||
- name: Assemble official release with Gradle
|
|
||||||
run: ./gradlew assembleOfficialRelease
|
|
||||||
sign:
|
|
||||||
name: Sign APK
|
|
||||||
runs-on: self-hosted
|
|
||||||
needs:
|
|
||||||
- build
|
|
||||||
outputs:
|
|
||||||
signedReleaseFile: ${{ steps.artifacts.outputs.signedReleaseFile }}
|
|
||||||
signedReleaseFileRelative: ${{ steps.artifacts.outputs.signedReleaseFileRelative }}
|
|
||||||
steps:
|
|
||||||
- name: Sign build artifacts
|
|
||||||
id: sign_app
|
|
||||||
uses: r0adkll/sign-android-release@v1
|
|
||||||
with:
|
|
||||||
releaseDirectory: app/release
|
|
||||||
signingKeyBase64: ${{ secrets.KEY_STORE }}
|
|
||||||
alias: ${{ secrets.KEY_ALIAS }}
|
|
||||||
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
|
|
||||||
keyPassword: ${{ secrets.KEY_ALIAS_PASSWORD }}
|
|
||||||
env:
|
|
||||||
ANDROID_HOME: ${{ needs.build.outputs.androidHome }}
|
|
||||||
ANDROID_SDK_ROOT: ${{ needs.build.outputs.androidSdkRoot }}
|
|
||||||
BUILD_TOOLS_VERSION: "30.0.2"
|
|
||||||
- name: Rename signed artifacts
|
|
||||||
id: artifacts
|
|
||||||
run: python $GITHUB_WORKSPACE/.github/utils/rename_artifacts.py $GITHUB_WORKSPACE
|
|
||||||
publish:
|
|
||||||
name: Publish APK
|
|
||||||
runs-on: self-hosted
|
|
||||||
needs:
|
|
||||||
- sign
|
|
||||||
steps:
|
|
||||||
- name: Setup Python
|
|
||||||
uses: actions/setup-python@v2
|
|
||||||
|
|
||||||
- name: Extract changelogs
|
|
||||||
id: changelog
|
|
||||||
run: python $GITHUB_WORKSPACE/.github/utils/extract_changelogs.py $GITHUB_WORKSPACE
|
|
||||||
|
|
||||||
- name: Upload APK to SFTP
|
|
||||||
uses: easingthemes/ssh-deploy@v2.1.6
|
|
||||||
env:
|
|
||||||
REMOTE_HOST: ${{ secrets.SSH_IP }}
|
|
||||||
REMOTE_USER: ${{ secrets.SSH_USERNAME }}
|
|
||||||
SSH_PRIVATE_KEY: ${{ secrets.SSH_KEY }}
|
|
||||||
SOURCE: ${{ needs.sign.outputs.signedReleaseFileRelative }}
|
|
||||||
TARGET: ${{ secrets.SSH_PATH_RELEASE }}
|
|
||||||
- name: Save version metadata
|
|
||||||
env:
|
|
||||||
DB_HOST: ${{ secrets.DB_HOST }}
|
|
||||||
DB_USER: ${{ secrets.DB_USER }}
|
|
||||||
DB_PASS: ${{ secrets.DB_PASS }}
|
|
||||||
DB_NAME: ${{ secrets.DB_NAME }}
|
|
||||||
APK_SERVER_RELEASE: ${{ secrets.APK_SERVER_RELEASE }}
|
|
||||||
APK_SERVER_NIGHTLY: ${{ secrets.APK_SERVER_NIGHTLY }}
|
|
||||||
run: python $GITHUB_WORKSPACE/.github/utils/save_version.py $GITHUB_WORKSPACE
|
|
||||||
|
|
||||||
- name: Distribute to App Distribution
|
|
||||||
uses: wzieba/Firebase-Distribution-Github-Action@v1
|
|
||||||
with:
|
|
||||||
appId: ${{ secrets.FIREBASE_APP_ID }}
|
|
||||||
token: ${{ secrets.FIREBASE_TOKEN }}
|
|
||||||
groups: ${{ secrets.FIREBASE_GROUPS_RELEASE }}
|
|
||||||
file: ${{ needs.sign.outputs.signedReleaseFile }}
|
|
||||||
releaseNotesFile: ${{ steps.changelog.outputs.changelogPlainTitledFile }}
|
|
||||||
- name: Release on GitHub
|
|
||||||
uses: softprops/action-gh-release@v1
|
|
||||||
with:
|
|
||||||
name: ${{ steps.changelog.outputs.changelogTitle }}
|
|
||||||
body_path: ${{ steps.changelog.outputs.changelogMarkdownFile }}
|
|
||||||
files: ${{ needs.sign.outputs.signedReleaseFile }}
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Post Discord webhook
|
|
||||||
env:
|
|
||||||
APK_FILE: ${{ needs.sign.outputs.signedReleaseFile }}
|
|
||||||
APK_SERVER_RELEASE: ${{ secrets.APK_SERVER_RELEASE }}
|
|
||||||
APK_SERVER_NIGHTLY: ${{ secrets.APK_SERVER_NIGHTLY }}
|
|
||||||
WEBHOOK_RELEASE: ${{ secrets.WEBHOOK_RELEASE }}
|
|
||||||
WEBHOOK_TESTING: ${{ secrets.WEBHOOK_TESTING }}
|
|
||||||
run: python $GITHUB_WORKSPACE/.github/utils/webhook_discord.py $GITHUB_WORKSPACE
|
|
||||||
|
|
||||||
- name: Upload workflow artifact
|
|
||||||
uses: actions/upload-artifact@v2
|
|
||||||
if: true
|
|
||||||
with:
|
|
||||||
name: ${{ steps.changelog.outputs.appVersionName }}
|
|
||||||
path: |
|
|
||||||
app/release/whatsnew*/
|
|
||||||
app/release/*.apk
|
|
||||||
app/release/*.aab
|
|
||||||
app/release/*.json
|
|
||||||
app/release/*.txt
|
|
13
.github/workflows/push-master.yml
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
name: Push (master)
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: ["master"]
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Build for Google Play (AAB)
|
||||||
|
uses: szkolny-eu/szkolny-android/.github/workflows/_build.yml@develop
|
||||||
|
with:
|
||||||
|
build-aab: true
|
||||||
|
release-ssh: true
|
||||||
|
release-google-play: true
|
||||||
|
secrets: inherit
|
15
.github/workflows/release.yml
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
name: Release
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags: ["v*.*.*"]
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Build release (APK)
|
||||||
|
uses: szkolny-eu/szkolny-android/.github/workflows/_build.yml@develop
|
||||||
|
with:
|
||||||
|
build-apk: true
|
||||||
|
release-ssh: true
|
||||||
|
release-github: true
|
||||||
|
release-firebase: true
|
||||||
|
release-discord: true
|
||||||
|
secrets: inherit
|
42
.github/workflows/schedule-dispatch.yml
vendored
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
name: Schedule/dispatch
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
# 23:30 UTC, 0:30 or 1:30 CET/CEST
|
||||||
|
- cron: "30 23 * * *"
|
||||||
|
workflow_dispatch:
|
||||||
|
jobs:
|
||||||
|
check:
|
||||||
|
name: Check new changes
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
hasNewChanges: ${{ steps.nightly.outputs.hasNewChanges }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
clean: false
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
- name: Install packages
|
||||||
|
uses: BSFishy/pip-action@v1
|
||||||
|
with:
|
||||||
|
packages: |
|
||||||
|
requests
|
||||||
|
- name: Check new changes
|
||||||
|
id: nightly
|
||||||
|
run: python $GITHUB_WORKSPACE/.github/utils/check_nightly.py $GITHUB_WORKSPACE >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
build:
|
||||||
|
name: Build nightly release (APK)
|
||||||
|
needs:
|
||||||
|
- check
|
||||||
|
if: ${{ needs.check.outputs.hasNewChanges == 'true' }}
|
||||||
|
uses: szkolny-eu/szkolny-android/.github/workflows/_build.yml@develop
|
||||||
|
with:
|
||||||
|
nightly: true
|
||||||
|
build-apk: true
|
||||||
|
release-ssh: true
|
||||||
|
release-firebase: true
|
||||||
|
release-discord: true
|
||||||
|
secrets: inherit
|
1
.gitignore
vendored
@ -265,3 +265,4 @@ fabric.properties
|
|||||||
# End of https://www.toptal.com/developers/gitignore/api/android,androidstudio,gradle,java,kotlin
|
# End of https://www.toptal.com/developers/gitignore/api/android,androidstudio,gradle,java,kotlin
|
||||||
|
|
||||||
signatures/
|
signatures/
|
||||||
|
.idea/*.xml
|
||||||
|
37
.idea/codeStyles/Project.xml
generated
@ -1,8 +1,33 @@
|
|||||||
<component name="ProjectCodeStyleConfiguration">
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
<code_scheme name="Project" version="173">
|
<code_scheme name="Project" version="173">
|
||||||
|
<AndroidXmlCodeStyleSettings>
|
||||||
|
<option name="LAYOUT_SETTINGS">
|
||||||
|
<value>
|
||||||
|
<option name="INSERT_LINE_BREAK_BEFORE_NAMESPACE_DECLARATION" value="true" />
|
||||||
|
</value>
|
||||||
|
</option>
|
||||||
|
<option name="MANIFEST_SETTINGS">
|
||||||
|
<value>
|
||||||
|
<option name="INSERT_LINE_BREAK_BEFORE_NAMESPACE_DECLARATION" value="true" />
|
||||||
|
</value>
|
||||||
|
</option>
|
||||||
|
<option name="OTHER_SETTINGS">
|
||||||
|
<value>
|
||||||
|
<option name="INSERT_LINE_BREAK_BEFORE_NAMESPACE_DECLARATION" value="true" />
|
||||||
|
</value>
|
||||||
|
</option>
|
||||||
|
</AndroidXmlCodeStyleSettings>
|
||||||
<JetCodeStyleSettings>
|
<JetCodeStyleSettings>
|
||||||
|
<option name="ALLOW_TRAILING_COMMA" value="true" />
|
||||||
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
||||||
</JetCodeStyleSettings>
|
</JetCodeStyleSettings>
|
||||||
|
<codeStyleSettings language="JSON">
|
||||||
|
<indentOptions>
|
||||||
|
<option name="INDENT_SIZE" value="4" />
|
||||||
|
<option name="USE_TAB_CHARACTER" value="true" />
|
||||||
|
<option name="SMART_TABS" value="true" />
|
||||||
|
</indentOptions>
|
||||||
|
</codeStyleSettings>
|
||||||
<codeStyleSettings language="XML">
|
<codeStyleSettings language="XML">
|
||||||
<option name="FORCE_REARRANGE_MODE" value="1" />
|
<option name="FORCE_REARRANGE_MODE" value="1" />
|
||||||
<indentOptions>
|
<indentOptions>
|
||||||
@ -15,6 +40,7 @@
|
|||||||
<match>
|
<match>
|
||||||
<AND>
|
<AND>
|
||||||
<NAME>xmlns:android</NAME>
|
<NAME>xmlns:android</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||||
</AND>
|
</AND>
|
||||||
</match>
|
</match>
|
||||||
@ -25,6 +51,7 @@
|
|||||||
<match>
|
<match>
|
||||||
<AND>
|
<AND>
|
||||||
<NAME>xmlns:.*</NAME>
|
<NAME>xmlns:.*</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||||
</AND>
|
</AND>
|
||||||
</match>
|
</match>
|
||||||
@ -36,6 +63,7 @@
|
|||||||
<match>
|
<match>
|
||||||
<AND>
|
<AND>
|
||||||
<NAME>.*:id</NAME>
|
<NAME>.*:id</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||||
</AND>
|
</AND>
|
||||||
</match>
|
</match>
|
||||||
@ -46,6 +74,7 @@
|
|||||||
<match>
|
<match>
|
||||||
<AND>
|
<AND>
|
||||||
<NAME>.*:name</NAME>
|
<NAME>.*:name</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||||
</AND>
|
</AND>
|
||||||
</match>
|
</match>
|
||||||
@ -56,6 +85,7 @@
|
|||||||
<match>
|
<match>
|
||||||
<AND>
|
<AND>
|
||||||
<NAME>name</NAME>
|
<NAME>name</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||||
</AND>
|
</AND>
|
||||||
</match>
|
</match>
|
||||||
@ -66,6 +96,7 @@
|
|||||||
<match>
|
<match>
|
||||||
<AND>
|
<AND>
|
||||||
<NAME>style</NAME>
|
<NAME>style</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||||
</AND>
|
</AND>
|
||||||
</match>
|
</match>
|
||||||
@ -76,6 +107,7 @@
|
|||||||
<match>
|
<match>
|
||||||
<AND>
|
<AND>
|
||||||
<NAME>.*</NAME>
|
<NAME>.*</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||||
</AND>
|
</AND>
|
||||||
</match>
|
</match>
|
||||||
@ -87,6 +119,7 @@
|
|||||||
<match>
|
<match>
|
||||||
<AND>
|
<AND>
|
||||||
<NAME>.*</NAME>
|
<NAME>.*</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||||
</AND>
|
</AND>
|
||||||
</match>
|
</match>
|
||||||
@ -98,6 +131,7 @@
|
|||||||
<match>
|
<match>
|
||||||
<AND>
|
<AND>
|
||||||
<NAME>.*</NAME>
|
<NAME>.*</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
<XML_NAMESPACE>.*</XML_NAMESPACE>
|
<XML_NAMESPACE>.*</XML_NAMESPACE>
|
||||||
</AND>
|
</AND>
|
||||||
</match>
|
</match>
|
||||||
@ -109,6 +143,9 @@
|
|||||||
</codeStyleSettings>
|
</codeStyleSettings>
|
||||||
<codeStyleSettings language="kotlin">
|
<codeStyleSettings language="kotlin">
|
||||||
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
||||||
|
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
|
||||||
|
<option name="PARAMETER_ANNOTATION_WRAP" value="2" />
|
||||||
|
<option name="ENUM_CONSTANTS_WRAP" value="2" />
|
||||||
</codeStyleSettings>
|
</codeStyleSettings>
|
||||||
</code_scheme>
|
</code_scheme>
|
||||||
</component>
|
</component>
|
6
.idea/copyright/Antoni.xml
generated
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<component name="CopyrightManager">
|
||||||
|
<copyright>
|
||||||
|
<option name="notice" value="Copyright (c) Antoni Czaplicki &#36;{today.year}-&#36;{today.month}-&#36;{today.day}. " />
|
||||||
|
<option name="myName" value="Antoni" />
|
||||||
|
</copyright>
|
||||||
|
</component>
|
4
.idea/dictionaries/Kuba.xml
generated
@ -4,7 +4,10 @@
|
|||||||
<w>autoryzacji</w>
|
<w>autoryzacji</w>
|
||||||
<w>ciasteczko</w>
|
<w>ciasteczko</w>
|
||||||
<w>csrf</w>
|
<w>csrf</w>
|
||||||
|
<w>daynight</w>
|
||||||
<w>edziennik</w>
|
<w>edziennik</w>
|
||||||
|
<w>eggfall</w>
|
||||||
|
<w>elearning</w>
|
||||||
<w>gson</w>
|
<w>gson</w>
|
||||||
<w>hebe</w>
|
<w>hebe</w>
|
||||||
<w>idziennik</w>
|
<w>idziennik</w>
|
||||||
@ -12,6 +15,7 @@
|
|||||||
<w>synergia</w>
|
<w>synergia</w>
|
||||||
<w>szczodrzyński</w>
|
<w>szczodrzyński</w>
|
||||||
<w>szkolny</w>
|
<w>szkolny</w>
|
||||||
|
<w>usos</w>
|
||||||
</words>
|
</words>
|
||||||
</dictionary>
|
</dictionary>
|
||||||
</component>
|
</component>
|
9
.idea/discord.xml
generated
@ -1,9 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="DiscordProjectSettings">
|
|
||||||
<option name="show" value="PROJECT_FILES" />
|
|
||||||
</component>
|
|
||||||
<component name="ProjectNotificationSettings">
|
|
||||||
<option name="askShowProject" value="false" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
6
.idea/kotlinc.xml
generated
@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="Kotlin2JvmCompilerArguments">
|
|
||||||
<option name="jvmTarget" value="1.8" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
13
.idea/runConfigurations.xml
generated
@ -1,13 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="RunConfigurationProducerService">
|
|
||||||
<option name="ignoredProducers">
|
|
||||||
<set>
|
|
||||||
<option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
|
|
||||||
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
|
|
||||||
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
|
|
||||||
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
|
|
||||||
</set>
|
|
||||||
</option>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
@ -6,13 +6,13 @@
|
|||||||
[](https://szkolny.eu/)
|
[](https://szkolny.eu/)
|
||||||
[](https://szkolny.eu/facebook)
|
[](https://szkolny.eu/facebook)
|
||||||
|
|
||||||

|

|
||||||
[](https://github.com/szkolny-eu/szkolny-android/releases/latest)
|
[](https://github.com/szkolny-eu/szkolny-android/releases/latest)
|
||||||

|

|
||||||
|
|
||||||
[](https://github.com/szkolny-eu/szkolny-android/actions/workflows/build-release-apk.yml)
|
[](https://github.com/szkolny-eu/szkolny-android/actions/workflows/release.yml)
|
||||||
[](https://github.com/szkolny-eu/szkolny-android/actions/workflows/build-release-aab-play.yml)
|
[](https://github.com/szkolny-eu/szkolny-android/actions/workflows/push-master.yml)
|
||||||
[](https://github.com/szkolny-eu/szkolny-android/actions/workflows/build-nightly-apk.yml)
|
[](https://github.com/szkolny-eu/szkolny-android/actions/workflows/schedule-dispatch.yml)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
171
app/build.gradle
@ -1,6 +1,7 @@
|
|||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
apply plugin: 'kotlin-android'
|
apply plugin: 'kotlin-android'
|
||||||
apply plugin: 'kotlin-kapt'
|
apply plugin: 'kotlin-kapt'
|
||||||
|
apply plugin: 'kotlin-parcelize'
|
||||||
apply plugin: 'com.google.gms.google-services'
|
apply plugin: 'com.google.gms.google-services'
|
||||||
apply plugin: 'com.google.firebase.crashlytics'
|
apply plugin: 'com.google.firebase.crashlytics'
|
||||||
|
|
||||||
@ -9,8 +10,10 @@ apply from: 'git-info.gradle'
|
|||||||
android {
|
android {
|
||||||
compileSdkVersion setup.compileSdk
|
compileSdkVersion setup.compileSdk
|
||||||
|
|
||||||
|
namespace "pl.szczodrzynski.edziennik"
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId 'pl.szczodrzynski.edziennik'
|
applicationId "pl.szczodrzynski.edziennik"
|
||||||
minSdkVersion setup.minSdk
|
minSdkVersion setup.minSdk
|
||||||
targetSdkVersion setup.targetSdk
|
targetSdkVersion setup.targetSdk
|
||||||
|
|
||||||
@ -19,8 +22,9 @@ android {
|
|||||||
|
|
||||||
buildConfigField "java.util.Map<String, String>", "GIT_INFO", gitInfoMap
|
buildConfigField "java.util.Map<String, String>", "GIT_INFO", gitInfoMap
|
||||||
buildConfigField "String", "VERSION_BASE", "\"${release.versionName}\""
|
buildConfigField "String", "VERSION_BASE", "\"${release.versionName}\""
|
||||||
|
|
||||||
manifestPlaceholders = [
|
manifestPlaceholders = [
|
||||||
buildTimestamp: String.valueOf(System.currentTimeMillis())
|
buildTimestamp: String.valueOf(System.currentTimeMillis())
|
||||||
]
|
]
|
||||||
|
|
||||||
multiDexEnabled = true
|
multiDexEnabled = true
|
||||||
@ -30,12 +34,26 @@ android {
|
|||||||
cppFlags "-std=c++11"
|
cppFlags "-std=c++11"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kapt {
|
||||||
|
arguments {
|
||||||
|
arg("room.schemaLocation", "$projectDir/schemas")
|
||||||
|
}
|
||||||
|
|
||||||
|
correctErrorTypes = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
buildTypes {
|
buildTypes {
|
||||||
debug {
|
debug {
|
||||||
|
getIsDefault().set(true)
|
||||||
minifyEnabled = false
|
minifyEnabled = false
|
||||||
|
applicationIdSuffix = ".debug"
|
||||||
|
manifestPlaceholders = [
|
||||||
|
buildTimestamp: "0"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
release {
|
release {
|
||||||
minifyEnabled = true
|
minifyEnabled = true
|
||||||
shrinkResources = true
|
shrinkResources = true
|
||||||
@ -43,51 +61,82 @@ android {
|
|||||||
proguardFiles fileTree('proguard').asList().toArray()
|
proguardFiles fileTree('proguard').asList().toArray()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
flavorDimensions "platform"
|
|
||||||
|
flavorDimensions += "platform"
|
||||||
|
|
||||||
productFlavors {
|
productFlavors {
|
||||||
main {
|
unofficial {
|
||||||
versionName gitInfo.versionHuman
|
getIsDefault().set(true)
|
||||||
|
versionName "${release.versionName}-${gitInfo.versionSuffix}"
|
||||||
}
|
}
|
||||||
|
|
||||||
official {}
|
official {}
|
||||||
play {}
|
play {}
|
||||||
}
|
}
|
||||||
|
|
||||||
variantFilter { variant ->
|
variantFilter { variant ->
|
||||||
def flavors = variant.flavors*.name
|
def flavors = variant.flavors*.name
|
||||||
setIgnore(variant.buildType.name == "debug" && !flavors.contains("main"))
|
setIgnore(variant.buildType.name == "debug" && !flavors.contains("unofficial") || flavors.contains("main"))
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
unofficial {
|
||||||
|
java.srcDirs = ["src/main/java", "src/play-not/java"]
|
||||||
|
manifest.srcFile("src/play-not/AndroidManifest.xml")
|
||||||
|
}
|
||||||
|
|
||||||
|
official {
|
||||||
|
java.srcDirs = ["src/main/java", "src/play-not/java"]
|
||||||
|
manifest.srcFile("src/play-not/AndroidManifest.xml")
|
||||||
|
}
|
||||||
|
|
||||||
|
play {
|
||||||
|
java.srcDirs = ["src/main/java", "src/play/java"]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
vectorDrawables.useSupportLibrary = true
|
vectorDrawables.useSupportLibrary = true
|
||||||
}
|
}
|
||||||
lintOptions {
|
|
||||||
checkReleaseBuilds = false
|
|
||||||
}
|
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
dataBinding = true
|
dataBinding = true
|
||||||
viewBinding = true
|
viewBinding = true
|
||||||
|
buildConfig = true
|
||||||
}
|
}
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
coreLibraryDesugaringEnabled = true
|
coreLibraryDesugaringEnabled = true
|
||||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||||
targetCompatibility = JavaVersion.VERSION_1_8
|
targetCompatibility = JavaVersion.VERSION_1_8
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
jvmTarget = "1.8"
|
jvmTarget = "1.8"
|
||||||
|
freeCompilerArgs += "-Xcontext-receivers"
|
||||||
}
|
}
|
||||||
|
|
||||||
packagingOptions {
|
packagingOptions {
|
||||||
exclude 'META-INF/library-core_release.kotlin_module'
|
resources {
|
||||||
|
excludes += ['META-INF/library-core_release.kotlin_module']
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
externalNativeBuild {
|
externalNativeBuild {
|
||||||
cmake {
|
cmake {
|
||||||
path "src/main/cpp/CMakeLists.txt"
|
path "src/main/cpp/CMakeLists.txt"
|
||||||
version "3.10.2"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lint {
|
||||||
|
checkReleaseBuilds false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.whenTaskAdded { task ->
|
tasks.whenTaskAdded { task ->
|
||||||
if (!task.name.endsWith("Release") && !task.name.endsWith("ReleaseWithR8"))
|
if (!(task.name == "assembleUnofficialRelease" || task.name == "assembleOfficialRelease" || task.name == "signPlayReleaseBundle"))
|
||||||
return
|
return
|
||||||
|
|
||||||
def renameTaskName = "rename${task.name.capitalize()}"
|
def renameTaskName = "rename${task.name.capitalize()}"
|
||||||
|
|
||||||
def flavor = ""
|
def flavor = ""
|
||||||
@ -97,17 +146,22 @@ tasks.whenTaskAdded { task ->
|
|||||||
flavor = task.name.substring("assemble".length(), task.name.indexOf("Release")).uncapitalize()
|
flavor = task.name.substring("assemble".length(), task.name.indexOf("Release")).uncapitalize()
|
||||||
if (task.name.startsWith("minify"))
|
if (task.name.startsWith("minify"))
|
||||||
flavor = task.name.substring("minify".length(), task.name.indexOf("Release")).uncapitalize()
|
flavor = task.name.substring("minify".length(), task.name.indexOf("Release")).uncapitalize()
|
||||||
|
if (task.name.startsWith("sign"))
|
||||||
|
flavor = task.name.substring("sign".length(), task.name.indexOf("Release")).uncapitalize()
|
||||||
|
|
||||||
if (flavor != "") {
|
if (flavor != "") {
|
||||||
tasks.create(renameTaskName, Copy) {
|
tasks.register(renameTaskName, Copy) {
|
||||||
|
dependsOn(task.name)
|
||||||
|
duplicatesStrategy DuplicatesStrategy.FAIL
|
||||||
from file("${projectDir}/${flavor}/release/"),
|
from file("${projectDir}/${flavor}/release/"),
|
||||||
file("${buildDir}/outputs/mapping/${flavor}Release/"),
|
file("${projectDir}/build/outputs/apk/${flavor}/release/"),
|
||||||
file("${buildDir}/outputs/apk/${flavor}/release/"),
|
file("${projectDir}/build/outputs/mapping/${flavor}Release/"),
|
||||||
file("${buildDir}/outputs/bundle/${flavor}Release/")
|
file("${projectDir}/build/outputs/bundle/${flavor}Release/")
|
||||||
include "*.aab", "*.apk", "mapping.txt", "output-metadata.json"
|
include "*-release.aab", "*-release.apk", "mapping.txt", "output-metadata.json"
|
||||||
destinationDir file("${projectDir}/release/")
|
destinationDir file("${projectDir}/release/")
|
||||||
rename ".+?\\.(.+)", "Edziennik_${android.defaultConfig.versionName}_${flavor}." + '$1'
|
rename ".+?\\.(.+)", "Edziennik_${android.defaultConfig.versionName}_${flavor}." + '$1'
|
||||||
}
|
}
|
||||||
|
|
||||||
task.finalizedBy(renameTaskName)
|
task.finalizedBy(renameTaskName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -117,28 +171,30 @@ dependencies {
|
|||||||
|
|
||||||
// Language cores
|
// Language cores
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||||
coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:1.1.5"
|
implementation "androidx.multidex:multidex:2.0.1"
|
||||||
|
coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:2.0.4"
|
||||||
|
|
||||||
// Android Jetpack
|
// Android Jetpack
|
||||||
implementation "androidx.appcompat:appcompat:1.2.0"
|
implementation "androidx.appcompat:appcompat:1.7.0"
|
||||||
implementation "androidx.cardview:cardview:1.0.0"
|
implementation "androidx.cardview:cardview:1.0.0"
|
||||||
implementation "androidx.constraintlayout:constraintlayout:2.0.4"
|
implementation "androidx.constraintlayout:constraintlayout:2.1.4"
|
||||||
implementation "androidx.core:core-ktx:1.3.2"
|
implementation "androidx.core:core-ktx:1.13.1"
|
||||||
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.0"
|
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.8.2"
|
||||||
implementation "androidx.navigation:navigation-fragment-ktx:2.3.4"
|
implementation "androidx.navigation:navigation-fragment-ktx:2.7.7"
|
||||||
implementation "androidx.recyclerview:recyclerview:1.1.0"
|
implementation "androidx.recyclerview:recyclerview:1.3.2"
|
||||||
implementation "androidx.room:room-runtime:2.2.6"
|
implementation "androidx.room:room-runtime:2.6.1"
|
||||||
implementation "androidx.work:work-runtime-ktx:2.5.0"
|
implementation "androidx.room:room-ktx:2.6.1"
|
||||||
kapt "androidx.room:room-compiler:2.2.6"
|
implementation "androidx.work:work-runtime-ktx:2.9.0"
|
||||||
|
kapt "androidx.room:room-compiler:2.6.1"
|
||||||
|
|
||||||
// Google design libs
|
// Google design libs
|
||||||
implementation "com.google.android.material:material:1.3.0"
|
implementation "com.google.android.material:material:1.12.0"
|
||||||
implementation "com.google.android:flexbox:2.0.1"
|
implementation "com.google.android.flexbox:flexbox:3.0.0"
|
||||||
|
|
||||||
// Play Services/Firebase
|
// Play Services/Firebase
|
||||||
implementation "com.google.android.gms:play-services-wearable:17.0.0"
|
implementation "com.google.android.gms:play-services-wearable:18.2.0"
|
||||||
implementation "com.google.firebase:firebase-core:18.0.2"
|
implementation("com.google.firebase:firebase-core") { version { strictly "19.0.2" } }
|
||||||
implementation "com.google.firebase:firebase-crashlytics:17.4.0"
|
implementation "com.google.firebase:firebase-crashlytics:19.0.1"
|
||||||
implementation("com.google.firebase:firebase-messaging") { version { strictly "20.1.3" } }
|
implementation("com.google.firebase:firebase-messaging") { version { strictly "20.1.3" } }
|
||||||
|
|
||||||
// OkHttp, Retrofit, Gson, Jsoup
|
// OkHttp, Retrofit, Gson, Jsoup
|
||||||
@ -146,55 +202,60 @@ dependencies {
|
|||||||
implementation "com.squareup.retrofit2:retrofit:2.9.0"
|
implementation "com.squareup.retrofit2:retrofit:2.9.0"
|
||||||
implementation "com.squareup.retrofit2:converter-gson:2.9.0"
|
implementation "com.squareup.retrofit2:converter-gson:2.9.0"
|
||||||
implementation "com.squareup.retrofit2:converter-scalars:2.9.0"
|
implementation "com.squareup.retrofit2:converter-scalars:2.9.0"
|
||||||
implementation 'com.google.code.gson:gson:2.8.6'
|
implementation 'com.google.code.gson:gson:2.11.0'
|
||||||
implementation "org.jsoup:jsoup:1.13.1"
|
implementation 'org.jsoup:jsoup:1.14.3'
|
||||||
implementation "pl.droidsonroids:jspoon:1.3.2"
|
implementation "pl.droidsonroids:jspoon:1.3.2"
|
||||||
implementation "pl.droidsonroids.retrofit2:converter-jspoon:1.3.2"
|
implementation "pl.droidsonroids.retrofit2:converter-jspoon:1.3.2"
|
||||||
|
|
||||||
// Szkolny.eu libraries/forks
|
// Szkolny.eu libraries/forks
|
||||||
implementation "eu.szkolny:agendacalendarview:1799f8ef47"
|
implementation project(":navlib")
|
||||||
|
implementation "eu.szkolny:android-snowfall:1ca9ea2da3"
|
||||||
|
implementation "eu.szkolny:agendacalendarview:1.0.4"
|
||||||
implementation "eu.szkolny:cafebar:5bf0c618de"
|
implementation "eu.szkolny:cafebar:5bf0c618de"
|
||||||
implementation "eu.szkolny.fslogin:lib:2.0.0"
|
implementation "eu.szkolny.fslogin:lib:2.0.0"
|
||||||
implementation "eu.szkolny:material-about-library:1d5ebaf47c"
|
implementation "eu.szkolny:material-about-library:1d5ebaf47c"
|
||||||
implementation "eu.szkolny:mhttp:af4b62e6e9"
|
implementation "eu.szkolny:mhttp:af4b62e6e9"
|
||||||
implementation "eu.szkolny:nachos:0e5dfcaceb"
|
implementation "eu.szkolny:nachos:0e5dfcaceb"
|
||||||
implementation "eu.szkolny.selective-dao:annotation:27f8f3f194"
|
implementation "eu.szkolny.selective-dao:annotation:6a337f9"
|
||||||
implementation "eu.szkolny:ssl-provider:1.0.0"
|
officialImplementation "eu.szkolny:ssl-provider:1.0.0"
|
||||||
implementation "pl.szczodrzynski:navlib:0.8.0"
|
unofficialImplementation "eu.szkolny:ssl-provider:1.0.0"
|
||||||
|
|
||||||
implementation "pl.szczodrzynski:numberslidingpicker:2921225f76"
|
implementation "pl.szczodrzynski:numberslidingpicker:2921225f76"
|
||||||
implementation "pl.szczodrzynski:recyclertablayout:700f980584"
|
implementation "pl.szczodrzynski:recyclertablayout:700f980584"
|
||||||
implementation "pl.szczodrzynski:tachyon:551943a6b5"
|
implementation "pl.szczodrzynski:tachyon:551943a6b5"
|
||||||
kapt "eu.szkolny.selective-dao:codegen:27f8f3f194"
|
kapt "eu.szkolny.selective-dao:codegen:6a337f9"
|
||||||
|
|
||||||
// Iconics & related
|
// Iconics & related
|
||||||
implementation "com.mikepenz:iconics-core:5.3.0-b01"
|
implementation "com.mikepenz:iconics-core:5.3.2"
|
||||||
implementation "com.mikepenz:iconics-views:5.3.0-b01"
|
implementation "com.mikepenz:iconics-views:5.3.2"
|
||||||
|
implementation "com.mikepenz:materialdrawer:9.0.1"
|
||||||
implementation "com.mikepenz:community-material-typeface:5.8.55.0-kotlin@aar"
|
implementation "com.mikepenz:community-material-typeface:5.8.55.0-kotlin@aar"
|
||||||
implementation "eu.szkolny:szkolny-font:1.3"
|
implementation 'com.mikepenz:google-material-typeface:4.0.0.2-kotlin@aar'
|
||||||
|
implementation "eu.szkolny:szkolny-font:95eabe7"
|
||||||
|
|
||||||
// Other dependencies
|
// Other dependencies
|
||||||
implementation "cat.ereza:customactivityoncrash:2.3.0"
|
implementation "cat.ereza:customactivityoncrash:2.3.0"
|
||||||
implementation "com.applandeo:material-calendar-view:1.5.0"
|
implementation "com.android.volley:volley:1.2.1"
|
||||||
implementation "com.daimajia.swipelayout:library:1.2.0@aar"
|
implementation "com.daimajia.swipelayout:library:1.2.0@aar"
|
||||||
implementation "com.github.antonKozyriatskyi:CircularProgressIndicator:1.2.2"
|
implementation "com.github.Applandeo:Material-Calendar-View:15de569cbc" // https://github.com/Applandeo/Material-Calendar-View
|
||||||
implementation "com.github.bassaer:chatmessageview:2.0.1"
|
implementation "com.github.CanHub:Android-Image-Cropper:2.2.2" // https://github.com/CanHub/Android-Image-Cropper
|
||||||
implementation "com.github.CanHub:Android-Image-Cropper:2.2.2"
|
implementation "com.github.ChuckerTeam.Chucker:library:3.5.2" // https://github.com/ChuckerTeam/chucker
|
||||||
implementation "com.github.ChuckerTeam.Chucker:library:3.0.1"
|
implementation "com.github.antonKozyriatskyi:CircularProgressIndicator:1.2.2" // https://github.com/antonKozyriatskyi/CircularProgressIndicator
|
||||||
implementation "com.github.jetradarmobile:android-snowfall:1.2.0"
|
implementation "com.github.bassaer:chatmessageview:2.0.1" // https://github.com/bassaer/ChatMessageView
|
||||||
implementation "com.github.wulkanowy.uonet-request-signer:hebe-jvm:a99ca50a31"
|
implementation "com.github.smuyyh:JsonViewer:V1.0.6" // https://github.com/smuyyh/JsonViewer
|
||||||
implementation("com.heinrichreimersoftware:material-intro") { version { strictly "1.5.8" } }
|
implementation "com.github.underwindfall.PowerPermission:powerpermission-coroutines:1.4.0" // https://github.com/underwindfall/PowerPermission
|
||||||
implementation "com.hypertrack:hyperlog:0.0.10"
|
implementation "com.github.underwindfall.PowerPermission:powerpermission:1.4.0" // https://github.com/underwindfall/PowerPermission
|
||||||
|
implementation "com.github.wulkanowy.uonet-request-signer:hebe-jvm:a99ca50a31" // https://github.com/wulkanowy/uonet-request-signer
|
||||||
|
implementation 'com.jakewharton.timber:timber:5.0.1'
|
||||||
implementation "com.jaredrummler:colorpicker:1.1.0"
|
implementation "com.jaredrummler:colorpicker:1.1.0"
|
||||||
implementation "com.qifan.powerpermission:powerpermission-coroutines:1.3.0"
|
|
||||||
implementation "com.qifan.powerpermission:powerpermission:1.3.0"
|
|
||||||
implementation "com.yuyh.json:jsonviewer:1.0.6"
|
|
||||||
implementation "io.coil-kt:coil:1.1.1"
|
implementation "io.coil-kt:coil:1.1.1"
|
||||||
implementation "me.dm7.barcodescanner:zxing:1.9.8"
|
implementation "me.dm7.barcodescanner:zxing:1.9.8"
|
||||||
implementation "me.grantland:autofittextview:0.2.1"
|
implementation "me.grantland:autofittextview:0.2.1"
|
||||||
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
|
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
|
||||||
implementation "org.greenrobot:eventbus:3.2.0"
|
implementation "org.greenrobot:eventbus:3.2.0"
|
||||||
|
implementation("com.heinrichreimersoftware:material-intro") { version { strictly "1.5.8" } }
|
||||||
implementation("pl.droidsonroids.gif:android-gif-drawable") { version { strictly "1.2.15" } }
|
implementation("pl.droidsonroids.gif:android-gif-drawable") { version { strictly "1.2.15" } }
|
||||||
|
|
||||||
// Debug-only dependencies
|
// Debug-only dependencies
|
||||||
debugImplementation "com.amitshekhar.android:debug-db:1.0.5"
|
debugImplementation "com.github.amitshekhariitbhu.Android-Debug-Database:debug-db:v1.0.6"
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
buildscript {
|
buildscript {
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
jcenter()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath "org.eclipse.jgit:org.eclipse.jgit:5.5.+"
|
classpath "org.eclipse.jgit:org.eclipse.jgit:5.5.+"
|
||||||
@ -97,18 +97,17 @@ private def buildGitInfo() {
|
|||||||
def tag = getLastTag(repo, git, head)
|
def tag = getLastTag(repo, git, head)
|
||||||
def tagName = tag[1]
|
def tagName = tag[1]
|
||||||
def tagRevCount = tag[2]
|
def tagRevCount = tag[2]
|
||||||
def versionName = tagName.replace("v", "")
|
|
||||||
|
|
||||||
def result = [
|
def result = [
|
||||||
hash : head.objectId.name,
|
hash : head.objectId.name,
|
||||||
branch : repo.branch,
|
branch : repo.branch,
|
||||||
dirty : dirty,
|
dirty : dirty,
|
||||||
remotes : remotes,
|
remotes : remotes,
|
||||||
unstaged : status.uncommittedChanges.join("; "),
|
unstaged : status.uncommittedChanges.join("; "),
|
||||||
tag : tagName,
|
tag : tagName,
|
||||||
revCount : tagRevCount,
|
revCount : tagRevCount,
|
||||||
version : """$tagName-$tagRevCount-g${head.objectId.name.substring(0, 8)}""" + (dirty ? ".dirty" : ""),
|
version : """$tagName-$tagRevCount-g${head.objectId.name.substring(0, 8)}""" + (dirty ? ".dirty" : ""),
|
||||||
versionHuman: """$versionName-${repo.branch.replace("/", "_")}""" + (dirty ? ".dirty" : "")
|
versionSuffix : """${repo.branch.replace("/", "_")}""" + (dirty ? ".dirty" : "")
|
||||||
]
|
]
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,37 @@
|
|||||||
"status": 2
|
"status": 2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:640759989760:android:4aa71407b25cdc8d",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "pl.szczodrzynski.edziennik.debug"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "640759989760-6f8q00u864lnuh3gh36e8g4cer9lv8pv.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyAvq9HMPxulz9ntdAHZ0eZuPf2YQs4nDSU"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"analytics_service": {
|
||||||
|
"status": 1
|
||||||
|
},
|
||||||
|
"appinvite_service": {
|
||||||
|
"status": 1,
|
||||||
|
"other_platform_oauth_client": []
|
||||||
|
},
|
||||||
|
"ads_service": {
|
||||||
|
"status": 2
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"configuration_version": "1"
|
"configuration_version": "1"
|
||||||
|
43
app/proguard-rules.pro
vendored
@ -19,23 +19,46 @@
|
|||||||
# If you keep the line number information, uncomment this to
|
# If you keep the line number information, uncomment this to
|
||||||
# hide the original source file name.
|
# hide the original source file name.
|
||||||
#-renamesourcefileattribute SourceFile
|
#-renamesourcefileattribute SourceFile
|
||||||
|
-keepattributes Signature
|
||||||
-keep class android.support.v7.widget.** { *; }
|
-keep class android.support.v7.widget.** { *; }
|
||||||
|
-keep class com.google.gson.reflect.TypeToken { *; }
|
||||||
|
-keep class * extends com.google.gson.reflect.TypeToken
|
||||||
|
|
||||||
-keep class pl.szczodrzynski.edziennik.utils.models.** { *; }
|
-keep class pl.szczodrzynski.edziennik.utils.models.** { *; }
|
||||||
|
-keep class pl.szczodrzynski.edziennik.data.enums.* { *; }
|
||||||
-keep class pl.szczodrzynski.edziennik.data.db.entity.Event { *; }
|
-keep class pl.szczodrzynski.edziennik.data.db.entity.Event { *; }
|
||||||
-keep class pl.szczodrzynski.edziennik.data.db.full.EventFull { *; }
|
-keep class pl.szczodrzynski.edziennik.data.db.full.EventFull { *; }
|
||||||
-keep class pl.szczodrzynski.edziennik.data.db.entity.FeedbackMessage { *; }
|
-keep class pl.szczodrzynski.edziennik.data.db.entity.FeedbackMessage { *; }
|
||||||
-keep class pl.szczodrzynski.edziennik.ui.modules.home.HomeCardModel { *; }
|
-keep class pl.szczodrzynski.edziennik.data.db.entity.Note { *; }
|
||||||
|
-keep class pl.szczodrzynski.edziennik.ui.home.HomeCardModel { *; }
|
||||||
-keepclassmembers class pl.szczodrzynski.edziennik.ui.widgets.WidgetConfig { public *; }
|
-keepclassmembers class pl.szczodrzynski.edziennik.ui.widgets.WidgetConfig { public *; }
|
||||||
-keepnames class pl.szczodrzynski.edziennik.ui.widgets.timetable.WidgetTimetableProvider
|
-keepnames class pl.szczodrzynski.edziennik.ui.widgets.timetable.WidgetTimetableProvider
|
||||||
-keepnames class pl.szczodrzynski.edziennik.ui.widgets.notifications.WidgetNotificationsProvider
|
-keepnames class pl.szczodrzynski.edziennik.ui.widgets.notifications.WidgetNotificationsProvider
|
||||||
-keepnames class pl.szczodrzynski.edziennik.ui.widgets.luckynumber.WidgetLuckyNumberProvider
|
-keepnames class pl.szczodrzynski.edziennik.ui.widgets.luckynumber.WidgetLuckyNumberProvider
|
||||||
|
-keep class pl.szczodrzynski.edziennik.data.config.AppData { *; }
|
||||||
|
-keep class pl.szczodrzynski.edziennik.data.config.AppData$** { *; }
|
||||||
|
-keep class pl.szczodrzynski.edziennik.core.manager.TextStylingManager$HtmlMode { *; }
|
||||||
|
|
||||||
-keepnames class androidx.appcompat.view.menu.MenuBuilder { setHeaderTitleInt(java.lang.CharSequence); }
|
-keepnames class androidx.appcompat.view.menu.MenuBuilder { setHeaderTitleInt(java.lang.CharSequence); }
|
||||||
-keepclassmembernames class androidx.appcompat.view.menu.StandardMenuPopup { private *; }
|
|
||||||
-keepnames class androidx.appcompat.view.menu.MenuPopupHelper { showPopup(int, int, boolean, boolean); }
|
-keepnames class androidx.appcompat.view.menu.MenuPopupHelper { showPopup(int, int, boolean, boolean); }
|
||||||
|
-keepclassmembernames class androidx.appcompat.view.menu.StandardMenuPopup { private *; }
|
||||||
|
-keepclassmembernames class androidx.appcompat.view.menu.MenuItemImpl { private *; }
|
||||||
|
|
||||||
-keepclassmembernames class com.mikepenz.materialdrawer.widget.MiniDrawerSliderView { private *; }
|
-keepclassmembernames class com.mikepenz.materialdrawer.widget.MiniDrawerSliderView { private *; }
|
||||||
|
-keepclassmembernames class com.mikepenz.iconics.internal.IconicsViewsAttrsApplier {
|
||||||
|
<fields>;
|
||||||
|
readIconicsTextView(android.content.Context, android.util.AttributeSet, com.mikepenz.iconics.internal.CompoundIconsBundle);
|
||||||
|
getIconicsImageViewDrawable(android.content.Context, android.util.AttributeSet);
|
||||||
|
}
|
||||||
|
|
||||||
|
-keepclassmembernames class com.mikepenz.iconics.internal.CompoundIconsBundle {
|
||||||
|
setIcons(android.widget.TextView);
|
||||||
|
}
|
||||||
|
|
||||||
|
# for RecyclerTabView
|
||||||
|
-keepclassmembernames class com.google.android.material.tabs.TabLayout { *; }
|
||||||
|
-keepclassmembernames class com.google.android.material.tabs.TabLayout$TabView { *; }
|
||||||
|
-keepclassmembernames class com.google.android.material.tabs.TabIndicatorInterpolator { *; }
|
||||||
|
|
||||||
-keep class .R
|
-keep class .R
|
||||||
-keep class **.R$* {
|
-keep class **.R$* {
|
||||||
@ -49,8 +72,19 @@
|
|||||||
|
|
||||||
-keep class com.google.android.material.tabs.** {*;}
|
-keep class com.google.android.material.tabs.** {*;}
|
||||||
|
|
||||||
|
# Exclude AgendaCalendarView
|
||||||
|
# Preserve generic type information for EventRenderer and its subclasses
|
||||||
|
-keepclassmembers class * extends com.github.tibolte.agendacalendarview.render.EventRenderer {
|
||||||
|
<fields>;
|
||||||
|
<methods>;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Keep the EventRenderer class itself and all its subclasses
|
||||||
|
-keep class com.github.tibolte.agendacalendarview.render.EventRenderer
|
||||||
|
-keep class * extends com.github.tibolte.agendacalendarview.render.EventRenderer
|
||||||
|
|
||||||
# ServiceLoader support
|
# ServiceLoader support
|
||||||
-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
|
-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
|
||||||
-keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}
|
-keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}
|
||||||
|
|
||||||
# Most of volatile fields are updated with AFU and should not be mangled
|
# Most of volatile fields are updated with AFU and should not be mangled
|
||||||
@ -64,9 +98,10 @@
|
|||||||
|
|
||||||
-keep class pl.szczodrzynski.edziennik.data.api.szkolny.interceptor.Signing { public final byte[] pleaseStopRightNow(java.lang.String, long); }
|
-keep class pl.szczodrzynski.edziennik.data.api.szkolny.interceptor.Signing { public final byte[] pleaseStopRightNow(java.lang.String, long); }
|
||||||
|
|
||||||
|
-keepclassmembers class pl.szczodrzynski.edziennik.ui.login.qr.* { *; }
|
||||||
-keepclassmembers class pl.szczodrzynski.edziennik.data.api.szkolny.request.** { *; }
|
-keepclassmembers class pl.szczodrzynski.edziennik.data.api.szkolny.request.** { *; }
|
||||||
-keepclassmembers class pl.szczodrzynski.edziennik.data.api.szkolny.response.** { *; }
|
-keepclassmembers class pl.szczodrzynski.edziennik.data.api.szkolny.response.** { *; }
|
||||||
-keepclassmembernames class pl.szczodrzynski.edziennik.ui.modules.login.LoginInfo$Platform { *; }
|
-keepclassmembernames class pl.szczodrzynski.edziennik.ui.login.LoginInfo$Platform { *; }
|
||||||
|
|
||||||
-keepclassmembernames class pl.szczodrzynski.fslogin.realm.RealmData { *; }
|
-keepclassmembernames class pl.szczodrzynski.fslogin.realm.RealmData { *; }
|
||||||
-keepclassmembernames class pl.szczodrzynski.fslogin.realm.RealmData$Type { *; }
|
-keepclassmembernames class pl.szczodrzynski.fslogin.realm.RealmData$Type { *; }
|
||||||
|
2320
app/schemas/pl.szczodrzynski.edziennik.data.db.AppDb/100.json
Normal file
2348
app/schemas/pl.szczodrzynski.edziennik.data.db.AppDb/101.json
Normal file
2293
app/schemas/pl.szczodrzynski.edziennik.data.db.AppDb/97.json
Normal file
2314
app/schemas/pl.szczodrzynski.edziennik.data.db.AppDb/98.json
Normal file
2314
app/schemas/pl.szczodrzynski.edziennik.data.db.AppDb/99.json
Normal file
BIN
app/src/debug/res/mipmap-hdpi/ic_launcher_v1.webp
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
app/src/debug/res/mipmap-hdpi/ic_launcher_v1_foreground.webp
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
app/src/debug/res/mipmap-hdpi/ic_launcher_v3.webp
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
app/src/debug/res/mipmap-hdpi/ic_launcher_v3_foreground.webp
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
app/src/debug/res/mipmap-hdpi/ic_launcher_v4.webp
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
app/src/debug/res/mipmap-hdpi/ic_launcher_v4_foreground.webp
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
app/src/debug/res/mipmap-hdpi/ic_launcher_v5.webp
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
app/src/debug/res/mipmap-hdpi/ic_launcher_v5_foreground.webp
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
app/src/debug/res/mipmap-hdpi/ic_launcher_v5_monochrome.webp
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
app/src/debug/res/mipmap-hdpi/ic_splash_v1.webp
Normal file
After Width: | Height: | Size: 8.3 KiB |
BIN
app/src/debug/res/mipmap-hdpi/ic_splash_v3.webp
Normal file
After Width: | Height: | Size: 9.6 KiB |
BIN
app/src/debug/res/mipmap-hdpi/ic_splash_v4.webp
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
app/src/debug/res/mipmap-hdpi/ic_splash_v5.webp
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
app/src/debug/res/mipmap-mdpi/ic_launcher_v1.webp
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
app/src/debug/res/mipmap-mdpi/ic_launcher_v1_foreground.webp
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
app/src/debug/res/mipmap-mdpi/ic_launcher_v3.webp
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
app/src/debug/res/mipmap-mdpi/ic_launcher_v3_foreground.webp
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
app/src/debug/res/mipmap-mdpi/ic_launcher_v4.webp
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
app/src/debug/res/mipmap-mdpi/ic_launcher_v4_foreground.webp
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
app/src/debug/res/mipmap-mdpi/ic_launcher_v5.webp
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
app/src/debug/res/mipmap-mdpi/ic_launcher_v5_foreground.webp
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
app/src/debug/res/mipmap-mdpi/ic_launcher_v5_monochrome.webp
Normal file
After Width: | Height: | Size: 874 B |
BIN
app/src/debug/res/mipmap-mdpi/ic_splash_v1.webp
Normal file
After Width: | Height: | Size: 5.5 KiB |
BIN
app/src/debug/res/mipmap-mdpi/ic_splash_v3.webp
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
app/src/debug/res/mipmap-mdpi/ic_splash_v4.webp
Normal file
After Width: | Height: | Size: 6.4 KiB |
BIN
app/src/debug/res/mipmap-mdpi/ic_splash_v5.webp
Normal file
After Width: | Height: | Size: 6.7 KiB |
BIN
app/src/debug/res/mipmap-xhdpi/ic_launcher_v1.webp
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
app/src/debug/res/mipmap-xhdpi/ic_launcher_v1_foreground.webp
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
app/src/debug/res/mipmap-xhdpi/ic_launcher_v3.webp
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
app/src/debug/res/mipmap-xhdpi/ic_launcher_v3_foreground.webp
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
app/src/debug/res/mipmap-xhdpi/ic_launcher_v4.webp
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
app/src/debug/res/mipmap-xhdpi/ic_launcher_v4_foreground.webp
Normal file
After Width: | Height: | Size: 4.9 KiB |
BIN
app/src/debug/res/mipmap-xhdpi/ic_launcher_v5.webp
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
app/src/debug/res/mipmap-xhdpi/ic_launcher_v5_foreground.webp
Normal file
After Width: | Height: | Size: 5.1 KiB |
BIN
app/src/debug/res/mipmap-xhdpi/ic_launcher_v5_monochrome.webp
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
app/src/debug/res/mipmap-xhdpi/ic_splash_v1.webp
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
app/src/debug/res/mipmap-xhdpi/ic_splash_v3.webp
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
app/src/debug/res/mipmap-xhdpi/ic_splash_v4.webp
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
app/src/debug/res/mipmap-xhdpi/ic_splash_v5.webp
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
app/src/debug/res/mipmap-xxhdpi/ic_launcher_v1.webp
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
app/src/debug/res/mipmap-xxhdpi/ic_launcher_v1_foreground.webp
Normal file
After Width: | Height: | Size: 4.5 KiB |
BIN
app/src/debug/res/mipmap-xxhdpi/ic_launcher_v3.webp
Normal file
After Width: | Height: | Size: 4.6 KiB |
BIN
app/src/debug/res/mipmap-xxhdpi/ic_launcher_v3_foreground.webp
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
app/src/debug/res/mipmap-xxhdpi/ic_launcher_v4.webp
Normal file
After Width: | Height: | Size: 4.7 KiB |
BIN
app/src/debug/res/mipmap-xxhdpi/ic_launcher_v4_foreground.webp
Normal file
After Width: | Height: | Size: 6.9 KiB |
BIN
app/src/debug/res/mipmap-xxhdpi/ic_launcher_v5.webp
Normal file
After Width: | Height: | Size: 4.9 KiB |
BIN
app/src/debug/res/mipmap-xxhdpi/ic_launcher_v5_foreground.webp
Normal file
After Width: | Height: | Size: 7.0 KiB |
BIN
app/src/debug/res/mipmap-xxhdpi/ic_launcher_v5_monochrome.webp
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
app/src/debug/res/mipmap-xxhdpi/ic_splash_v1.webp
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
app/src/debug/res/mipmap-xxhdpi/ic_splash_v3.webp
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
app/src/debug/res/mipmap-xxhdpi/ic_splash_v4.webp
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
app/src/debug/res/mipmap-xxhdpi/ic_splash_v5.webp
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
app/src/debug/res/mipmap-xxxhdpi/ic_launcher_v1.webp
Normal file
After Width: | Height: | Size: 5.5 KiB |
BIN
app/src/debug/res/mipmap-xxxhdpi/ic_launcher_v1_foreground.webp
Normal file
After Width: | Height: | Size: 5.8 KiB |
BIN
app/src/debug/res/mipmap-xxxhdpi/ic_launcher_v3.webp
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
app/src/debug/res/mipmap-xxxhdpi/ic_launcher_v3_foreground.webp
Normal file
After Width: | Height: | Size: 7.3 KiB |
BIN
app/src/debug/res/mipmap-xxxhdpi/ic_launcher_v4.webp
Normal file
After Width: | Height: | Size: 6.4 KiB |
BIN
app/src/debug/res/mipmap-xxxhdpi/ic_launcher_v4_foreground.webp
Normal file
After Width: | Height: | Size: 9.2 KiB |
BIN
app/src/debug/res/mipmap-xxxhdpi/ic_launcher_v5.webp
Normal file
After Width: | Height: | Size: 6.7 KiB |
BIN
app/src/debug/res/mipmap-xxxhdpi/ic_launcher_v5_foreground.webp
Normal file
After Width: | Height: | Size: 9.4 KiB |
BIN
app/src/debug/res/mipmap-xxxhdpi/ic_launcher_v5_monochrome.webp
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
app/src/debug/res/mipmap-xxxhdpi/ic_splash_v1.webp
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
app/src/debug/res/mipmap-xxxhdpi/ic_splash_v3.webp
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
app/src/debug/res/mipmap-xxxhdpi/ic_splash_v4.webp
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
app/src/debug/res/mipmap-xxxhdpi/ic_splash_v5.webp
Normal file
After Width: | Height: | Size: 24 KiB |
@ -1,9 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools">
|
||||||
package="pl.szczodrzynski.edziennik">
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||||
@ -13,19 +11,21 @@
|
|||||||
<uses-permission android:name="android.permission.VIBRATE" />
|
<uses-permission android:name="android.permission.VIBRATE" />
|
||||||
<uses-permission android:name="android.permission.CAMERA" />
|
<uses-permission android:name="android.permission.CAMERA" />
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||||
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||||
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
|
||||||
<!-- PowerPermission uses minSdk 21, it's safe to override as it is used only in >= 23 -->
|
<!-- PowerPermission uses minSdk 21, it's safe to override as it is used only in >= 23 -->
|
||||||
<uses-sdk tools:overrideLibrary="com.qifan.powerpermission.coroutines, com.qifan.powerpermission.core" />
|
<uses-sdk
|
||||||
|
tools:overrideLibrary="com.qifan.powerpermission.coroutines, com.qifan.powerpermission.core, com.mikepenz:materialdrawer, com.mikepenz.iconics.typeface.library.navlibfont, androidx.appcompat.resources, androidx.appcompat, com.google.android.gms.wearable, com.google.android.gms.base, com.google.firebase.crashlytics, com.google.firebase.sessions, com.google.firebase.ktx, com.google.firebase, com.google.android.gms.tasks, com.google.android.gms.common, com.google.firebase.components" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".App"
|
android:name=".App"
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
android:fullBackupContent="@xml/backup_descriptor"
|
android:fullBackupContent="@xml/backup_descriptor"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher_v5"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:networkSecurityConfig="@xml/network_security_config"
|
android:networkSecurityConfig="@xml/network_security_config"
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/AppTheme.Dark"
|
android:theme="@style/AppTheme.M3.Blue"
|
||||||
android:usesCleartextTraffic="true"
|
android:usesCleartextTraffic="true"
|
||||||
tools:ignore="UnusedAttribute">
|
tools:ignore="UnusedAttribute">
|
||||||
|
|
||||||
@ -41,8 +41,8 @@
|
|||||||
|___/ -->
|
|___/ -->
|
||||||
<activity android:name=".MainActivity"
|
<activity android:name=".MainActivity"
|
||||||
android:configChanges="orientation|screenSize"
|
android:configChanges="orientation|screenSize"
|
||||||
android:label="@string/app_name"
|
|
||||||
android:launchMode="singleTop"
|
android:launchMode="singleTop"
|
||||||
|
android:exported="true"
|
||||||
android:theme="@style/SplashTheme">
|
android:theme="@style/SplashTheme">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
@ -66,14 +66,16 @@
|
|||||||
android:configChanges="orientation|keyboardHidden"
|
android:configChanges="orientation|keyboardHidden"
|
||||||
android:excludeFromRecents="true"
|
android:excludeFromRecents="true"
|
||||||
android:noHistory="true"
|
android:noHistory="true"
|
||||||
android:theme="@style/AppTheme.Dark.NoDisplay">
|
android:exported="true"
|
||||||
|
android:theme="@style/AppTheme.M3.NoDisplay">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
|
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
<!-- TIMETABLE -->
|
<!-- TIMETABLE -->
|
||||||
<receiver android:name=".ui.widgets.timetable.WidgetTimetableProvider"
|
<receiver android:name=".ui.widgets.timetable.WidgetTimetableProvider"
|
||||||
android:label="@string/widget_timetable_title">
|
android:label="@string/widget_timetable_title"
|
||||||
|
android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
@ -82,16 +84,18 @@
|
|||||||
android:resource="@xml/widget_timetable_info" />
|
android:resource="@xml/widget_timetable_info" />
|
||||||
</receiver>
|
</receiver>
|
||||||
<service android:name=".ui.widgets.timetable.WidgetTimetableService"
|
<service android:name=".ui.widgets.timetable.WidgetTimetableService"
|
||||||
android:permission="android.permission.BIND_REMOTEVIEWS" />
|
android:permission="android.permission.BIND_REMOTEVIEWS" android:foregroundServiceType="dataSync"/>
|
||||||
<activity android:name=".ui.widgets.LessonDialogActivity"
|
<activity android:name=".ui.widgets.LessonDialogActivity"
|
||||||
android:label=""
|
android:label=""
|
||||||
android:configChanges="orientation|keyboardHidden"
|
android:configChanges="orientation|keyboardHidden"
|
||||||
android:excludeFromRecents="true"
|
android:excludeFromRecents="true"
|
||||||
android:noHistory="true"
|
android:noHistory="true"
|
||||||
android:theme="@style/AppTheme.Dark.NoDisplay" />
|
android:exported="true"
|
||||||
|
android:theme="@style/AppTheme.M3.NoDisplay" />
|
||||||
<!-- NOTIFICATIONS -->
|
<!-- NOTIFICATIONS -->
|
||||||
<receiver android:name=".ui.widgets.notifications.WidgetNotificationsProvider"
|
<receiver android:name=".ui.widgets.notifications.WidgetNotificationsProvider"
|
||||||
android:label="@string/widget_notifications_title">
|
android:label="@string/widget_notifications_title"
|
||||||
|
android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
@ -101,10 +105,11 @@
|
|||||||
android:resource="@xml/widget_notifications_info" />
|
android:resource="@xml/widget_notifications_info" />
|
||||||
</receiver>
|
</receiver>
|
||||||
<service android:name=".ui.widgets.notifications.WidgetNotificationsService"
|
<service android:name=".ui.widgets.notifications.WidgetNotificationsService"
|
||||||
android:permission="android.permission.BIND_REMOTEVIEWS" />
|
android:permission="android.permission.BIND_REMOTEVIEWS" android:foregroundServiceType="dataSync"/>
|
||||||
<!-- LUCKY NUMBER -->
|
<!-- LUCKY NUMBER -->
|
||||||
<receiver android:name=".ui.widgets.luckynumber.WidgetLuckyNumberProvider"
|
<receiver android:name=".ui.widgets.luckynumber.WidgetLuckyNumberProvider"
|
||||||
android:label="@string/widget_lucky_number_title">
|
android:label="@string/widget_lucky_number_title"
|
||||||
|
android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
@ -121,31 +126,44 @@
|
|||||||
/ ____ \ (__| |_| |\ V /| | |_| | __/\__ \
|
/ ____ \ (__| |_| |\ V /| | |_| | __/\__ \
|
||||||
/_/ \_\___|\__|_| \_/ |_|\__|_|\___||___/
|
/_/ \_\___|\__|_| \_/ |_|\__|_|\___||___/
|
||||||
-->
|
-->
|
||||||
<activity android:name=".ui.modules.base.CrashActivity"
|
<activity android:name=".ui.main.CrashActivity"
|
||||||
android:configChanges="orientation|screenSize|keyboardHidden"
|
android:configChanges="orientation|screenSize|keyboardHidden"
|
||||||
android:process=":error_activity"
|
android:process=":error_activity"
|
||||||
|
android:exported="false"
|
||||||
android:theme="@style/DeadTheme" />
|
android:theme="@style/DeadTheme" />
|
||||||
<activity android:name=".ui.modules.intro.ChangelogIntroActivity"
|
<activity android:name=".ui.intro.ChangelogIntroActivity"
|
||||||
android:configChanges="orientation|keyboardHidden"
|
android:configChanges="orientation|keyboardHidden"
|
||||||
android:label="@string/app_name"
|
android:exported="false"
|
||||||
android:theme="@style/Theme.Intro" />
|
android:theme="@style/Theme.Intro" />
|
||||||
<activity android:name=".ui.modules.login.LoginActivity"
|
<activity android:name=".ui.login.LoginActivity"
|
||||||
android:configChanges="orientation|screenSize"
|
android:configChanges="orientation|screenSize"
|
||||||
android:launchMode="singleTop"
|
android:launchMode="singleTop"
|
||||||
android:theme="@style/AppTheme.Light" />
|
android:exported="false"
|
||||||
<activity android:name=".ui.modules.home.CounterActivity"
|
android:theme="@style/AppTheme.M3" />
|
||||||
android:theme="@style/AppTheme.Black" />
|
<activity android:name=".ui.home.CounterActivity"
|
||||||
<activity android:name=".ui.modules.feedback.FeedbackActivity"
|
android:exported="false"
|
||||||
|
android:theme="@style/AppTheme.M3" />
|
||||||
|
<activity android:name=".ui.feedback.FeedbackActivity"
|
||||||
android:configChanges="orientation|screenSize|keyboardHidden"
|
android:configChanges="orientation|screenSize|keyboardHidden"
|
||||||
android:label="@string/app_name"
|
android:exported="false"
|
||||||
android:theme="@style/AppTheme" />
|
android:theme="@style/AppTheme.M3" />
|
||||||
<activity android:name=".ui.modules.settings.SettingsLicenseActivity"
|
<activity android:name=".ui.settings.SettingsLicenseActivity"
|
||||||
android:configChanges="orientation|keyboardHidden"
|
android:configChanges="orientation|keyboardHidden"
|
||||||
android:theme="@style/AppTheme" />
|
android:exported="false"
|
||||||
|
android:theme="@style/AppTheme.M3" />
|
||||||
<activity android:name="com.canhub.cropper.CropImageActivity"
|
<activity android:name="com.canhub.cropper.CropImageActivity"
|
||||||
android:configChanges="orientation|keyboardHidden"
|
android:configChanges="orientation|keyboardHidden"
|
||||||
|
android:exported="false"
|
||||||
android:theme="@style/Base.Theme.AppCompat" />
|
android:theme="@style/Base.Theme.AppCompat" />
|
||||||
<activity android:name=".ui.modules.base.BuildInvalidActivity" />
|
<activity android:name=".ui.login.oauth.OAuthLoginActivity"
|
||||||
|
android:configChanges="orientation|keyboardHidden"
|
||||||
|
android:exported="false"
|
||||||
|
android:theme="@style/Theme.MaterialComponents.Light.DarkActionBar" />
|
||||||
|
<activity android:name=".ui.login.recaptcha.RecaptchaActivity"
|
||||||
|
android:configChanges="orientation|keyboardHidden"
|
||||||
|
android:exported="false"
|
||||||
|
android:theme="@style/Theme.MaterialComponents.Light.DarkActionBar" />
|
||||||
|
<activity android:name=".ui.main.BuildInvalidActivity" android:exported="false" />
|
||||||
|
|
||||||
<!-- _____ _
|
<!-- _____ _
|
||||||
| __ \ (_)
|
| __ \ (_)
|
||||||
@ -154,18 +172,20 @@
|
|||||||
| | \ \ __/ (_| __/ |\ V / __/ | \__ \
|
| | \ \ __/ (_| __/ |\ V / __/ | \__ \
|
||||||
|_| \_\___|\___\___|_| \_/ \___|_| |___/
|
|_| \_\___|\___\___|_| \_/ \___|_| |___/
|
||||||
-->
|
-->
|
||||||
<receiver android:name=".receivers.UserPresentReceiver"
|
<receiver android:name=".core.receiver.UserPresentReceiver"
|
||||||
android:enabled="true">
|
android:enabled="true"
|
||||||
|
android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.USER_PRESENT" />
|
<action android:name="android.intent.action.USER_PRESENT" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
<receiver android:name=".sync.UpdateDownloaderService$DownloadProgressReceiver">
|
<receiver android:name=".sync.UpdateDownloaderService$DownloadProgressReceiver"
|
||||||
|
android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
|
<action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
<receiver android:name=".receivers.SzkolnyReceiver"
|
<receiver android:name=".core.receiver.SzkolnyReceiver"
|
||||||
android:exported="true">
|
android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="pl.szczodrzynski.edziennik.SZKOLNY_MAIN" />
|
<action android:name="pl.szczodrzynski.edziennik.SZKOLNY_MAIN" />
|
||||||
@ -179,15 +199,15 @@
|
|||||||
____) | __/ | \ V /| | (_| __/\__ \
|
____) | __/ | \ V /| | (_| __/\__ \
|
||||||
|_____/ \___|_| \_/ |_|\___\___||___/
|
|_____/ \___|_| \_/ |_|\___\___||___/
|
||||||
-->
|
-->
|
||||||
<service android:name=".data.api.ApiService" />
|
<service android:name=".data.api.ApiService" android:foregroundServiceType="dataSync"/>
|
||||||
<service android:name=".data.firebase.MyFirebaseService"
|
<service android:name=".core.firebase.MyFirebaseService"
|
||||||
android:exported="false">
|
android:exported="false" android:foregroundServiceType="dataSync">
|
||||||
<intent-filter android:priority="10000000">
|
<intent-filter android:priority="10000000">
|
||||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||||
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
|
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</service>
|
</service>
|
||||||
<service android:name=".sync.UpdateDownloaderService" />
|
<service android:name=".sync.UpdateDownloaderService" android:foregroundServiceType="dataSync"/>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
_____ _ _
|
_____ _ _
|
||||||
|
@ -1,15 +1,11 @@
|
|||||||
<h3>Wersja 4.7-rc.2, 2021-04-05</h3>
|
<h3>Wersja 4.14, 2025-02-02</h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li><u>Szkolny.eu jest teraz open source!</u> Zapraszamy na stronę <a href="https://szkolny.eu/">https://szkolny.eu/</a> po więcej ważnych informacji.</li>
|
<li>USOS: <b>dodano obsługę ocen</b>.</li>
|
||||||
<li>Poprawiono wybieranie obrazków (tła nagłówka, tła aplikacji oraz profilu) z dowolnego źródła.</li>
|
<li>USOS: obliczanie średniej za studia oraz punktów ECTS.</li>
|
||||||
<li>Zaktualizowano tłumaczenie na język angielski. @MarcinK50</li>
|
<li>USOS: poprawiono brak planu zajęć po rozpoczęciu roku.</li>
|
||||||
<li>Dodano ekran informacji o kompilacji w Ustawieniach.</li>
|
<li>Wyłączono archiwizator profili.</li>
|
||||||
<li>Zaktualizowano ekran licencji open source.</li>
|
|
||||||
<li>Naprawiono zatrzymanie aplikacji na Androidzie 4.4 i starszych.</li>
|
|
||||||
<li>Naprawiono problemy z połączeniem internetowym na Androidzie 4.4 i starszych.</li>
|
|
||||||
<li>Zoptymalizowano wielkość aplikacji.</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
Dzięki za korzystanie ze Szkolnego!<br>
|
Dzięki za korzystanie ze Szkolnego!<br>
|
||||||
<i>© [Kuba Szczodrzyński](@kuba2k2), [Kacper Ziubryniewicz](@kapi2289) 2021</i>
|
<i>© [Kuba Szczodrzyński](@kuba2k2) 2025</i>
|
||||||
|