Compare commits
542 Commits
Author | SHA1 | Date | |
---|---|---|---|
f893170dec | |||
cff08d6322 | |||
9dee7f01f6 | |||
8324a9cac3 | |||
5316e3e1bf | |||
81e80181f2 | |||
6ee38e9259 | |||
40df80371c | |||
a3596c35b8 | |||
66b7ea4cb4 | |||
770749e158 | |||
0aa83b020e | |||
4d1218d1d3 | |||
0ea6cbc8ed | |||
eb31f9578f | |||
f69d50d2c1 | |||
8a424ee6a4 | |||
7dfa48bbe3 | |||
d811cdb919 | |||
e2f2e21081 | |||
c812310497 | |||
7f6475cf35 | |||
a2a7d2ebb2 | |||
a5bc45c5da | |||
5646befbd7 | |||
75f496b5d2 | |||
23d989d22a | |||
9e013f7cd9 | |||
c63a7c03f1 | |||
5ceee84f0e | |||
7f4539fd27 | |||
71ebf1260b | |||
784ee58384 | |||
eceef3f582 | |||
0d950fbd86 | |||
003d63b516 | |||
b4c0440a8e | |||
137c305295 | |||
2c40c221c3 | |||
e82ac78d4a | |||
59d46ce956 | |||
17caa8ecbd | |||
e9540b4012 | |||
643ad60455 | |||
01f892ce5c | |||
f61b6a5e78 | |||
650cf7484e | |||
037cbb0b19 | |||
e49835e89e | |||
c64be2fab0 | |||
ce9cb35172 | |||
7fa9219c7b | |||
1fe1618220 | |||
d9bab2af78 | |||
06b6d88dd1 | |||
3bf27baed5 | |||
6802d74002 | |||
3fd2683df7 | |||
b708c70ea2 | |||
aba08e6aa9 | |||
124b6dfd79 | |||
1dbaa8bfdc | |||
25ac171298 | |||
387ff1cba7 | |||
eef3464d0b | |||
61297a01c7 | |||
762d4b1393 | |||
2e86b67eec | |||
6071b7571b | |||
fcea2218b5 | |||
a4a191700e | |||
3d76d41b55 | |||
0e1c20a952 | |||
5d14ee7f4e | |||
83527d91f3 | |||
9d62410530 | |||
5dffbdadfa | |||
516922d5aa | |||
9098e74065 | |||
2f5577cc54 | |||
3272c38356 | |||
bcd305bef3 | |||
fc5ad16cb7 | |||
c8332a0642 | |||
3212efe21e | |||
693ce8217d | |||
2cdd322ed4 | |||
c04b3e40d2 | |||
d1d665bbdf | |||
d70568c446 | |||
1d8378e136 | |||
4a2bf539f0 | |||
4d085f8266 | |||
fca69e7234 | |||
711de0f77f | |||
58d5196ac9 | |||
26a95ecb99 | |||
1835446468 | |||
4d3b16ec80 | |||
95b4d53fac | |||
0fa197d520 | |||
646b4a149d | |||
afd0c8513a | |||
c4a3da93ca | |||
ff2aa6f195 | |||
1d8d71709f | |||
aabd7345c1 | |||
09d16cf6d8 | |||
81d8f7ea48 | |||
05a804832b | |||
db02f0c1e1 | |||
0a40237809 | |||
017d46e5db | |||
8478b8b7ed | |||
8cc69728aa | |||
c82e6ae95b | |||
50a177d18c | |||
a77b3d4cd7 | |||
aff56a8311 | |||
5238e4d187 | |||
10f9812495 | |||
ab1de323d4 | |||
af346842a3 | |||
8f78324940 | |||
3dfc55c4d1 | |||
fbce9e58d0 | |||
2e2b13384a | |||
533157709b | |||
024ca89708 | |||
7d5a29d405 | |||
8fbe341607 | |||
e21c17ea99 | |||
c4396036ce | |||
722b4e5812 | |||
74820f9571 | |||
50326c7a48 | |||
0f129109ba | |||
fc2adff997 | |||
7f6a13a9ee | |||
64cc24ae60 | |||
91d7ee442e | |||
b296926423 | |||
398bc513fb | |||
5b2e2ffb34 | |||
e79c5d4d2b | |||
c0161f38c6 | |||
ef72218906 | |||
05741761a2 | |||
86c7de6595 | |||
88ea753fc6 | |||
d0819928f3 | |||
8564e12b01 | |||
29a36aaf6e | |||
dbe608f2dd | |||
bb79b33b6d | |||
6e7c12a118 | |||
03cd3aeab7 | |||
df8849639b | |||
8913b22a20 | |||
f20ffe44d5 | |||
2f749a690b | |||
ae1951bf58 | |||
391f38485d | |||
fecd5c707d | |||
fa44295d59 | |||
5306044173 | |||
c1b86674c2 | |||
fd482777e8 | |||
d4ae0d56d6 | |||
63487249b8 | |||
1bc0f2d214 | |||
41bde45731 | |||
556f42195b | |||
06fd7b0c36 | |||
db4e4d8cef | |||
48e4a9fec5 | |||
70333737cf | |||
3096fa1538 | |||
19ed121466 | |||
e7733bfa2a | |||
b9b464ea9b | |||
cc46b3b124 | |||
092e86b621 | |||
c170614461 | |||
6ce8e00ebf | |||
c40cdf88ad | |||
4c1fe233c7 | |||
aca88b57e0 | |||
a603c12625 | |||
5c440010e2 | |||
4920317573 | |||
9466482893 | |||
48bcf581cf | |||
8a7b7103eb | |||
ea312c3e12 | |||
5b0fe2c006 | |||
a06add070e | |||
dce491bffe | |||
adf418cc68 | |||
defcfec971 | |||
d08f195968 | |||
1e9a6a5c42 | |||
cc752ab0ad | |||
f2faa7e8b7 | |||
030fe8c218 | |||
c33b309cf0 | |||
a0af55825d | |||
cb8303f33d | |||
54fbd56b73 | |||
70f50cd51b | |||
88c38c4a8d | |||
b8ac72c247 | |||
cbef160ada | |||
e77894bf3e | |||
9697a39464 | |||
5a2622871f | |||
52218e800c | |||
3fdd47c221 | |||
d8f71f48f3 | |||
18dbbba328 | |||
d99c93ec05 | |||
f8431d7ad6 | |||
b195fda026 | |||
b1a5a77559 | |||
4be6663752 | |||
f7fa89638a | |||
4fedb74005 | |||
56d7e94946 | |||
b2af5ed57d | |||
b1d22843b5 | |||
623f0339e6 | |||
1f30cc1f90 | |||
de8b38dd9c | |||
e7054bb5b9 | |||
6978ad11eb | |||
327e61bbdd | |||
2c94347668 | |||
bce2c39ccc | |||
8752607433 | |||
c67d2d767d | |||
253e55f70e | |||
a7cf54897a | |||
cb914fe32b | |||
7aa65e98ce | |||
8d2d7922f9 | |||
bb7e927065 | |||
349307b6a3 | |||
9981f458d0 | |||
a1b9ae2826 | |||
9afb38d5e2 | |||
97a7b34b99 | |||
6398c9a097 | |||
597d1d763e | |||
2203956228 | |||
b3c6e2004b | |||
a2a31df98e | |||
060bab46e2 | |||
a350a167f3 | |||
cc2079f4c9 | |||
d778c99bbb | |||
c4672b8de9 | |||
1b40e339b7 | |||
ee5ac46493 | |||
ef398f7409 | |||
5331bf90cd | |||
9ce1ba75b2 | |||
fba86930fe | |||
a495fcbc5f | |||
f11354dd35 | |||
12a54278fc | |||
6ddaeb99da | |||
9ae2ffe7ae | |||
5b0e47b1c5 | |||
3e09a1dcee | |||
63bd5f95cb | |||
531c7592b2 | |||
3d28168749 | |||
0c2fd1d2db | |||
811f839949 | |||
ea26a6c1c9 | |||
ac446e4f91 | |||
78ae23df68 | |||
d21e4afad2 | |||
6f819bcb80 | |||
4d237d3672 | |||
af6d5c3063 | |||
87b8989dc8 | |||
2760318f3d | |||
6596f3226b | |||
22dd16d278 | |||
d1b198222d | |||
277c3c7f0b | |||
f7d12670e7 | |||
32d6b4a7a6 | |||
6df3f22c7d | |||
95cf521f63 | |||
ef9e4b7ad9 | |||
ac4a822930 | |||
89678c2276 | |||
e1bffabf10 | |||
af8bb53c17 | |||
0306e38130 | |||
84812fb048 | |||
2293e8c1e6 | |||
368028c6f4 | |||
13650b3e0d | |||
4bb1198735 | |||
3eb74da945 | |||
5161fdd543 | |||
377e0c3a0d | |||
1c9860091a | |||
a383f7409d | |||
9a8fb593c0 | |||
f4c6e0ad1b | |||
b30b7c3318 | |||
897eac050a | |||
83974b6550 | |||
7efd106658 | |||
9cedab979c | |||
510e2d5b88 | |||
63d6a0b325 | |||
da0943b319 | |||
67875b1a9a | |||
aa3d7e37fc | |||
ede5914d70 | |||
09c968f273 | |||
345b580601 | |||
61240777cf | |||
7588345b6d | |||
2fa26c37a9 | |||
c34c63c128 | |||
a26dadb224 | |||
277ffd22be | |||
f1479d489b | |||
fba4e85311 | |||
4a5991ade4 | |||
a735c378f1 | |||
217ebfc549 | |||
df5155f1c7 | |||
b93c0222a2 | |||
083ca34f1b | |||
5d5dfd4eb4 | |||
429fdfa4a0 | |||
302d723cfb | |||
8f50ee82b3 | |||
9dc1220496 | |||
ae39bd94e5 | |||
85ce23845f | |||
890d60811b | |||
49e68f5c8b | |||
1df4679db8 | |||
e03aae2d56 | |||
9c60ce688b | |||
fdce2cf477 | |||
650cbd5a10 | |||
b160367744 | |||
6c115fb915 | |||
7a408899df | |||
4bce35f810 | |||
2d83218f61 | |||
d3e276d6fc | |||
51a1097bb4 | |||
db4f172fb8 | |||
4d49e956b8 | |||
b8296ac02f | |||
d6385e8cdd | |||
885319a885 | |||
fded5007c1 | |||
66ff14f719 | |||
1257dc63d3 | |||
50b6d380b6 | |||
62b7d42a73 | |||
21fe209246 | |||
02cd4e4e06 | |||
86fe2b61cb | |||
4113bd9b53 | |||
d924902dac | |||
b269360ecb | |||
ffd5addadb | |||
c5e2b18695 | |||
515a3973b7 | |||
7bee10d5ce | |||
22a4f509dc | |||
3925a6261b | |||
49b383fbe5 | |||
4a484dc2ce | |||
a14c4b489b | |||
e91cd18804 | |||
4c24363599 | |||
e20c232f8f | |||
1f11eea9b5 | |||
42f9a00e8c | |||
ad487e680c | |||
3f431022a5 | |||
cd037f0ce0 | |||
37f7f21a03 | |||
c653039590 | |||
95a90a7a79 | |||
4dc80595ac | |||
8114a2376e | |||
a523850216 | |||
354f51dd70 | |||
b271c12ebc | |||
8ca41b5ba3 | |||
edbe45332a | |||
1bbd249275 | |||
5148ff291b | |||
a1dc00af42 | |||
f1db993fee | |||
4f0519552e | |||
3625c5c518 | |||
afbfb9761f | |||
a5c636853a | |||
d5d45ed1ba | |||
d3f869c6c2 | |||
46c29c438e | |||
73a7255d3a | |||
c7af85e0e1 | |||
afc16e3d17 | |||
59f6f5c212 | |||
86f8763e69 | |||
157becb017 | |||
83ca9a7060 | |||
1033be4503 | |||
e67066f3ae | |||
bc22808b0e | |||
e05abb3539 | |||
6153c7b97d | |||
e574e5e2ec | |||
e6571a1dfc | |||
d566de0282 | |||
558db061f5 | |||
190f40ede8 | |||
4b795d6ef5 | |||
d139bd5b14 | |||
bf34cb0c1e | |||
eed091aad2 | |||
535206056d | |||
f2cb3b4f9e | |||
54372e0a55 | |||
5c17c38d1d | |||
f68a8e4215 | |||
70c2cb7dbf | |||
7f6fd60821 | |||
62c04fb205 | |||
10c36f19bf | |||
37d756b8fe | |||
de1bc4809f | |||
3d6ec93cde | |||
c293c76398 | |||
09e07a1713 | |||
71f1a55437 | |||
d9e22af5ef | |||
bc0689a30d | |||
9d47127921 | |||
08a3bd77bd | |||
9fe1151a04 | |||
793952cb44 | |||
d64a21b50c | |||
274f9dde07 | |||
5a884a4c56 | |||
c55fd98179 | |||
ffc0cd840b | |||
96067946d0 | |||
9339e7d916 | |||
b4117aa62e | |||
dc3a941e24 | |||
b67ecbba4b | |||
1175740ba2 | |||
378ed0100f | |||
cf87339ac4 | |||
c23a90f104 | |||
d337be0f40 | |||
cf7c6f78ea | |||
efa68f5044 | |||
b9be85d99c | |||
dfc4553fc6 | |||
08c9539abe | |||
fd18583df2 | |||
7c4f1c7b22 | |||
bdb6c962ea | |||
f1c217b087 | |||
4b6277abf5 | |||
344e0d55ff | |||
89a6a98bbf | |||
fcc7dc0913 | |||
1b74bffc06 | |||
0f11f14c3e | |||
e70fe6f097 | |||
b70649f136 | |||
7b13684137 | |||
c4689fcbb3 | |||
d8f644c5b4 | |||
c808bf2e61 | |||
0fb55bd6c6 | |||
c5dfea788c | |||
120e5c9171 | |||
a97039a727 | |||
e9ba65f8f6 | |||
a264abf814 | |||
0a2eb07844 | |||
bfab265ccf | |||
cd59166efb | |||
06ed5f6079 | |||
6b70583573 | |||
c3cbaa6ac2 | |||
f61d820d6f | |||
03ad5527f8 | |||
cce736410b | |||
8c515bd03f | |||
8dcb3ed45d | |||
4f3f24ac10 | |||
d074e5c9b3 | |||
d2d1d1dba7 | |||
891e241d1a | |||
5c4a3d578b | |||
fcf0adfd80 | |||
c42a47ac48 | |||
fa48b033af | |||
808927a58a | |||
dc717c9fb5 | |||
a2804d813a | |||
847ab6149a | |||
dc74d2877b | |||
6534176685 | |||
9542b9f231 | |||
dbba61a99f | |||
c2496a15b8 | |||
facf84d9a8 | |||
459c8330f9 | |||
0c8e2632a2 | |||
b17e9deca0 | |||
c296e72c30 | |||
637125e1fc | |||
445bfda801 | |||
ebde42328a | |||
a0bf14b576 | |||
2e7caabde3 | |||
bb052fd4c9 | |||
28ef8c6761 | |||
15e8e096ed | |||
6007de017f |
25
.github/workflows/deploy-store.yml
vendored
25
.github/workflows/deploy-store.yml
vendored
@ -1,4 +1,4 @@
|
|||||||
name: Deploy to app stores
|
name: Deploy release
|
||||||
|
|
||||||
on:
|
on:
|
||||||
release:
|
release:
|
||||||
@ -7,16 +7,17 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
deploy-google-play:
|
deploy-google-play:
|
||||||
name: Deploy to google play
|
name: Google Play
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
environment: google-play
|
environment: google-play
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- uses: actions/setup-java@v1
|
- uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
java-version: 11
|
distribution: 'zulu'
|
||||||
- uses: actions/cache@v2
|
java-version: 17
|
||||||
|
- uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
~/.gradle/caches
|
~/.gradle/caches
|
||||||
@ -37,20 +38,22 @@ jobs:
|
|||||||
ANDROID_PUBLISHER_CREDENTIALS: ${{ secrets.ANDROID_PUBLISHER_CREDENTIALS }}
|
ANDROID_PUBLISHER_CREDENTIALS: ${{ secrets.ANDROID_PUBLISHER_CREDENTIALS }}
|
||||||
ADMOB_PROJECT_ID: ${{ secrets.ADMOB_PROJECT_ID }}
|
ADMOB_PROJECT_ID: ${{ secrets.ADMOB_PROJECT_ID }}
|
||||||
SINGLE_SUPPORT_AD_ID: ${{ secrets.SINGLE_SUPPORT_AD_ID }}
|
SINGLE_SUPPORT_AD_ID: ${{ secrets.SINGLE_SUPPORT_AD_ID }}
|
||||||
|
DASHBOARD_TILE_AD_ID: ${{ secrets.DASHBOARD_TILE_AD_ID }}
|
||||||
SET_BUILD_TIMESTAMP: ${{ secrets.SET_BUILD_TIMESTAMP }}
|
SET_BUILD_TIMESTAMP: ${{ secrets.SET_BUILD_TIMESTAMP }}
|
||||||
run: ./gradlew publishPlayReleaseApps -PenableFirebase --stacktrace;
|
run: ./gradlew publishPlayReleaseApps -PenableFirebase --stacktrace;
|
||||||
|
|
||||||
deploy-app-gallery:
|
deploy-app-gallery:
|
||||||
name: Deploy to AppGallery
|
name: AppGallery
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
environment: app-gallery
|
environment: app-gallery
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- uses: actions/setup-java@v1
|
- uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
java-version: 11
|
distribution: 'zulu'
|
||||||
- uses: actions/cache@v2
|
java-version: 17
|
||||||
|
- uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
~/.gradle/caches
|
~/.gradle/caches
|
||||||
|
24
.github/workflows/deploy-test.yml
vendored
24
.github/workflows/deploy-test.yml
vendored
@ -1,4 +1,4 @@
|
|||||||
name: Deploy to app tests
|
name: Deploy DEV
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@ -18,11 +18,12 @@ jobs:
|
|||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
environment: app-center
|
environment: app-center
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- uses: actions/setup-java@v1
|
- uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
java-version: 11
|
distribution: 'zulu'
|
||||||
- uses: actions/cache@v2
|
java-version: 17
|
||||||
|
- uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
~/.gradle/caches
|
~/.gradle/caches
|
||||||
@ -66,7 +67,7 @@ jobs:
|
|||||||
BITRISE_KEY_PASSWORD: ${{ secrets.BITRISE_KEY_PASSWORD }}
|
BITRISE_KEY_PASSWORD: ${{ secrets.BITRISE_KEY_PASSWORD }}
|
||||||
run: ./gradlew assembleFdroidDebug --stacktrace
|
run: ./gradlew assembleFdroidDebug --stacktrace
|
||||||
- name: Upload apk to github artifacts
|
- name: Upload apk to github artifacts
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: wulkanowyDEV-${{ env.RUN_NUMBER }}.apk
|
name: wulkanowyDEV-${{ env.RUN_NUMBER }}.apk
|
||||||
path: app/build/outputs/apk/fdroid/debug/app-fdroid-debug.apk
|
path: app/build/outputs/apk/fdroid/debug/app-fdroid-debug.apk
|
||||||
@ -87,11 +88,12 @@ jobs:
|
|||||||
environment: app-distribution
|
environment: app-distribution
|
||||||
if: github.event_name != 'pull_request_target'
|
if: github.event_name != 'pull_request_target'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- uses: actions/setup-java@v1
|
- uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
java-version: 11
|
distribution: 'zulu'
|
||||||
- uses: actions/cache@v2
|
java-version: 17
|
||||||
|
- uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
~/.gradle/caches
|
~/.gradle/caches
|
||||||
@ -131,7 +133,7 @@ jobs:
|
|||||||
BITRISE_KEY_PASSWORD: ${{ secrets.BITRISE_KEY_PASSWORD }}
|
BITRISE_KEY_PASSWORD: ${{ secrets.BITRISE_KEY_PASSWORD }}
|
||||||
run: ./gradlew assemblePlayDebug -PenableFirebase --stacktrace
|
run: ./gradlew assemblePlayDebug -PenableFirebase --stacktrace
|
||||||
- name: Upload apk to github artifacts
|
- name: Upload apk to github artifacts
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: wulkanowyDEV-${{ env.RUN_NUMBER }}-dev.apk
|
name: wulkanowyDEV-${{ env.RUN_NUMBER }}-dev.apk
|
||||||
path: app/build/outputs/apk/play/debug/app-play-debug.apk
|
path: app/build/outputs/apk/play/debug/app-play-debug.apk
|
||||||
|
74
.github/workflows/test.yml
vendored
74
.github/workflows/test.yml
vendored
@ -2,24 +2,28 @@ name: Tests
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ master, develop ]
|
branches:
|
||||||
|
- master
|
||||||
|
- develop
|
||||||
|
- 'hotfix/**'
|
||||||
tags: [ '*' ]
|
tags: [ '*' ]
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ master, develop ]
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
unit-tests:
|
|
||||||
name: Unit tests
|
tests-fdroid:
|
||||||
|
name: F-Droid
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
steps:
|
steps:
|
||||||
- uses: fkirc/skip-duplicate-actions@master
|
- uses: fkirc/skip-duplicate-actions@master
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- uses: gradle/wrapper-validation-action@v1
|
- uses: gradle/wrapper-validation-action@v1
|
||||||
- uses: actions/setup-java@v1
|
- uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
java-version: 11
|
distribution: 'zulu'
|
||||||
- uses: actions/cache@v2
|
java-version: 17
|
||||||
|
- uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
~/.gradle/caches
|
~/.gradle/caches
|
||||||
@ -29,6 +33,58 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
./gradlew testFdroidDebugUnitTest --stacktrace
|
./gradlew testFdroidDebugUnitTest --stacktrace
|
||||||
./gradlew jacocoTestReport --stacktrace
|
./gradlew jacocoTestReport --stacktrace
|
||||||
- uses: codecov/codecov-action@v1
|
- uses: codecov/codecov-action@v3
|
||||||
|
with:
|
||||||
|
flags: unit
|
||||||
|
|
||||||
|
tests-play:
|
||||||
|
name: Play
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 10
|
||||||
|
steps:
|
||||||
|
- uses: fkirc/skip-duplicate-actions@master
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: gradle/wrapper-validation-action@v1
|
||||||
|
- uses: actions/setup-java@v3
|
||||||
|
with:
|
||||||
|
distribution: 'zulu'
|
||||||
|
java-version: 17
|
||||||
|
- uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.gradle/caches
|
||||||
|
~/.gradle/wrapper
|
||||||
|
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*') }}
|
||||||
|
- name: Unit tests
|
||||||
|
run: |
|
||||||
|
./gradlew testPlayDebugUnitTest --stacktrace
|
||||||
|
./gradlew jacocoTestReport --stacktrace
|
||||||
|
- uses: codecov/codecov-action@v3
|
||||||
|
with:
|
||||||
|
flags: unit
|
||||||
|
|
||||||
|
tests-hms:
|
||||||
|
name: HMS
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 10
|
||||||
|
steps:
|
||||||
|
- uses: fkirc/skip-duplicate-actions@master
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: gradle/wrapper-validation-action@v1
|
||||||
|
- uses: actions/setup-java@v3
|
||||||
|
with:
|
||||||
|
distribution: 'zulu'
|
||||||
|
java-version: 17
|
||||||
|
- uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.gradle/caches
|
||||||
|
~/.gradle/wrapper
|
||||||
|
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*') }}
|
||||||
|
- name: Unit tests
|
||||||
|
run: |
|
||||||
|
./gradlew testHmsDebugUnitTest --stacktrace
|
||||||
|
./gradlew jacocoTestReport --stacktrace
|
||||||
|
- uses: codecov/codecov-action@v3
|
||||||
with:
|
with:
|
||||||
flags: unit
|
flags: unit
|
||||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -119,3 +119,4 @@ Thumbs.db
|
|||||||
app/src/release/agconnect-services.json
|
app/src/release/agconnect-services.json
|
||||||
app/src/release/agconnect-credentials.json
|
app/src/release/agconnect-credentials.json
|
||||||
.idea/deploymentTargetDropDown.xml
|
.idea/deploymentTargetDropDown.xml
|
||||||
|
.idea/kotlinc.xml
|
||||||
|
10
.idea/migrations.xml
generated
Normal file
10
.idea/migrations.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectMigrations">
|
||||||
|
<option name="MigrateToGradleLocalJavaHome">
|
||||||
|
<set>
|
||||||
|
<option value="$PROJECT_DIR$" />
|
||||||
|
</set>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
2
LICENSE
2
LICENSE
@ -186,7 +186,7 @@
|
|||||||
same "printed page" as the copyright notice for easier
|
same "printed page" as the copyright notice for easier
|
||||||
identification within third-party archives.
|
identification within third-party archives.
|
||||||
|
|
||||||
Copyright 2022 Wulkanowy
|
Copyright 2023 Wulkanowy
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
15
README.cs.md
15
README.cs.md
@ -1,18 +1,13 @@
|
|||||||
[English version of README](README.en.md)
|
Česká verze / [Deutsche Version](README.de.md) / [English version](README.en.md) / [Polska wersja](README.md) / [Slovenská verzia](README.sk.md)
|
||||||
|
|
||||||
[Deutsche Version von README](README.de.md)
|
|
||||||
|
|
||||||
[Polska wersja README](README.md)
|
|
||||||
|
|
||||||
[Slovenská verzia README](README.sk.md)
|
|
||||||
|
|
||||||
# Wulkanowy
|
# Wulkanowy
|
||||||
|
|
||||||
[](https://github.com/wulkanowy/wulkanowy/actions)
|
[](https://github.com/wulkanowy/wulkanowy/actions)
|
||||||
[](https://codecov.io/gh/wulkanowy/wulkanowy)
|
[](https://codecov.io/gh/wulkanowy/wulkanowy)
|
||||||
[](https://discord.gg/vccAQBr)
|
[](https://discord.gg/vccAQBr)
|
||||||
[](https://f-droid.org/packages/io.github.wulkanowy/)
|
[](https://f-droid.org/packages/io.github.wulkanowy/)
|
||||||
[](https://github.com/wulkanowy/wulkanowy/releases)
|
[](https://github.com/wulkanowy/wulkanowy/releases)
|
||||||
|
[](https://translate.wulkanowy.net.pl)
|
||||||
|
|
||||||
Neoficiální klient deníku VULCAN UONET+ pro žáka a rodiče
|
Neoficiální klient deníku VULCAN UONET+ pro žáka a rodiče
|
||||||
|
|
||||||
@ -39,7 +34,7 @@ Neoficiální klient deníku VULCAN UONET+ pro žáka a rodiče
|
|||||||
* podpora více účtů s možností přejmenování žáků
|
* podpora více účtů s možností přejmenování žáků
|
||||||
* tmavý a černý (AMOLED) motiv
|
* tmavý a černý (AMOLED) motiv
|
||||||
* offline režim
|
* offline režim
|
||||||
* žádné reklamy
|
* volitelné reklamy na podporu projektu
|
||||||
|
|
||||||
## Stáhnout
|
## Stáhnout
|
||||||
|
|
||||||
@ -57,7 +52,7 @@ Aktuální verzi si můžete stáhnout z Google Play, F-Droid nebo Huawei AppGal
|
|||||||
|
|
||||||
Můžete si také stáhnout [vývojovou verzi](https://wulkanowy.github.io/#download), která zahrnuje nové funkce připravované pro příští vydání
|
Můžete si také stáhnout [vývojovou verzi](https://wulkanowy.github.io/#download), která zahrnuje nové funkce připravované pro příští vydání
|
||||||
|
|
||||||
## Postaveno s
|
## Postaveno s pomocí
|
||||||
|
|
||||||
|
|
||||||
* [Wulkanowy SDK](https://github.com/wulkanowy/sdk)
|
* [Wulkanowy SDK](https://github.com/wulkanowy/sdk)
|
||||||
|
13
README.de.md
13
README.de.md
@ -1,14 +1,13 @@
|
|||||||
[Polska wersja README](README.md)
|
[Česká verze](README.cs.md) / Deutsche Version / [English version](README.en.md) / [Polska wersja](README.md) / [Slovenská verzia](README.sk.md)
|
||||||
|
|
||||||
[English version of README](README.en.md)
|
|
||||||
|
|
||||||
# Wulkanowy
|
# Wulkanowy
|
||||||
|
|
||||||
[](https://github.com/wulkanowy/wulkanowy/actions)
|
[](https://github.com/wulkanowy/wulkanowy/actions)
|
||||||
[](https://codecov.io/gh/wulkanowy/wulkanowy)
|
[](https://codecov.io/gh/wulkanowy/wulkanowy)
|
||||||
[](https://discord.gg/vccAQBr)
|
[](https://discord.gg/vccAQBr)
|
||||||
[](https://f-droid.org/packages/io.github.wulkanowy/)
|
[](https://f-droid.org/packages/io.github.wulkanowy/)
|
||||||
[](https://github.com/wulkanowy/wulkanowy/releases)
|
[](https://github.com/wulkanowy/wulkanowy/releases)
|
||||||
|
[](https://translate.wulkanowy.net.pl)
|
||||||
|
|
||||||
Inoffizieller Android VULCAN UONET+ Registrierungsclient für Schüler und ihre Eltern
|
Inoffizieller Android VULCAN UONET+ Registrierungsclient für Schüler und ihre Eltern
|
||||||
|
|
||||||
@ -22,7 +21,7 @@ Inoffizieller Android VULCAN UONET+ Registrierungsclient für Schüler und ihre
|
|||||||
* Prozentsatz der Anwesenheit
|
* Prozentsatz der Anwesenheit
|
||||||
* Prüfungen
|
* Prüfungen
|
||||||
* Stundenplan
|
* Stundenplan
|
||||||
* Unterricht abgeschlossen
|
* abgeschlossene Unterrichtsstunden
|
||||||
* Nachrichten
|
* Nachrichten
|
||||||
* Hausaufgaben
|
* Hausaufgaben
|
||||||
* Anmerkungen
|
* Anmerkungen
|
||||||
@ -35,7 +34,7 @@ Inoffizieller Android VULCAN UONET+ Registrierungsclient für Schüler und ihre
|
|||||||
* Unterstützung für mehrere Konten mit der Möglichkeit, den Namen des Schülers zu ändern
|
* Unterstützung für mehrere Konten mit der Möglichkeit, den Namen des Schülers zu ändern
|
||||||
* dunkles und schwarzes (AMOLED) Thema
|
* dunkles und schwarzes (AMOLED) Thema
|
||||||
* Offline-Modus
|
* Offline-Modus
|
||||||
* keine Werbung
|
* optionale Werbungen, die es uns ermöglichen das Projekt zu unterstützen
|
||||||
|
|
||||||
## Herunterladen
|
## Herunterladen
|
||||||
|
|
||||||
@ -51,7 +50,7 @@ Die aktuelle Version können Sie von der Google Play, F-Droid oder Huawei AppGal
|
|||||||
alt="Explore it on AppGallery"
|
alt="Explore it on AppGallery"
|
||||||
height="80">](https://appgallery.cloud.huawei.com/ag/n/app/C101440411?channelId=Badge&id=1b3f7fbb700849a9be0dba6b520b2282&s=EB1D3BF9ED9D1564D869B7B94B18016D3CABFCA5AEFB8E29F675FA04E0DC131D&detailType=0&v=)
|
height="80">](https://appgallery.cloud.huawei.com/ag/n/app/C101440411?channelId=Badge&id=1b3f7fbb700849a9be0dba6b520b2282&s=EB1D3BF9ED9D1564D869B7B94B18016D3CABFCA5AEFB8E29F675FA04E0DC131D&detailType=0&v=)
|
||||||
|
|
||||||
Sie können auch ein [Entwicklungsversion herunterladen](https://wulkanowy.github.io/#download) das beinhaltet neue Funktionen, die für die nächste Version vorbereitet werden
|
Sie können auch eine [Entwicklungsversion herunterladen](https://wulkanowy.github.io/#download) die beinhaltet neue Funktionen, die für die nächste Version vorbereitet werden
|
||||||
|
|
||||||
## Gebaut mit
|
## Gebaut mit
|
||||||
|
|
||||||
|
13
README.en.md
13
README.en.md
@ -1,18 +1,13 @@
|
|||||||
[Polska wersja README](README.md)
|
[Česká verze](README.cs.md) / [Deutsche Version](README.de.md) / English version / [Polska wersja](README.md) / [Slovenská verzia](README.sk.md)
|
||||||
|
|
||||||
[Deutsche Version von README](README.de.md)
|
|
||||||
|
|
||||||
[Česká verze README](README.cs.md)
|
|
||||||
|
|
||||||
[Slovenská verzia README](README.sk.md)
|
|
||||||
|
|
||||||
# Wulkanowy
|
# Wulkanowy
|
||||||
|
|
||||||
[](https://github.com/wulkanowy/wulkanowy/actions)
|
[](https://github.com/wulkanowy/wulkanowy/actions)
|
||||||
[](https://codecov.io/gh/wulkanowy/wulkanowy)
|
[](https://codecov.io/gh/wulkanowy/wulkanowy)
|
||||||
[](https://discord.gg/vccAQBr)
|
[](https://discord.gg/vccAQBr)
|
||||||
[](https://f-droid.org/packages/io.github.wulkanowy/)
|
[](https://f-droid.org/packages/io.github.wulkanowy/)
|
||||||
[](https://github.com/wulkanowy/wulkanowy/releases)
|
[](https://github.com/wulkanowy/wulkanowy/releases)
|
||||||
|
[](https://translate.wulkanowy.net.pl)
|
||||||
|
|
||||||
Unofficial android VULCAN UONET+ register client for both students and their parents
|
Unofficial android VULCAN UONET+ register client for both students and their parents
|
||||||
|
|
||||||
@ -39,7 +34,7 @@ Unofficial android VULCAN UONET+ register client for both students and their par
|
|||||||
* support for multiple accounts with the ability to rename students
|
* support for multiple accounts with the ability to rename students
|
||||||
* dark and black (AMOLED) theme
|
* dark and black (AMOLED) theme
|
||||||
* offline mode
|
* offline mode
|
||||||
* no ads
|
* optional ads which allow to support the project
|
||||||
|
|
||||||
## Download
|
## Download
|
||||||
|
|
||||||
|
13
README.md
13
README.md
@ -1,18 +1,13 @@
|
|||||||
[English version of README](README.en.md)
|
[Česká verze](README.cs.md) / [Deutsche Version](README.de.md) / [English version](README.en.md) / Polska wersja / [Slovenská verzia](README.sk.md)
|
||||||
|
|
||||||
[Deutsche Version von README](README.de.md)
|
|
||||||
|
|
||||||
[Česká verze README](README.cs.md)
|
|
||||||
|
|
||||||
[Slovenská verzia README](README.sk.md)
|
|
||||||
|
|
||||||
# Wulkanowy
|
# Wulkanowy
|
||||||
|
|
||||||
[](https://github.com/wulkanowy/wulkanowy/actions)
|
[](https://github.com/wulkanowy/wulkanowy/actions)
|
||||||
[](https://codecov.io/gh/wulkanowy/wulkanowy)
|
[](https://codecov.io/gh/wulkanowy/wulkanowy)
|
||||||
[](https://discord.gg/vccAQBr)
|
[](https://discord.gg/vccAQBr)
|
||||||
[](https://f-droid.org/packages/io.github.wulkanowy/)
|
[](https://f-droid.org/packages/io.github.wulkanowy/)
|
||||||
[](https://github.com/wulkanowy/wulkanowy/releases)
|
[](https://github.com/wulkanowy/wulkanowy/releases)
|
||||||
|
[](https://translate.wulkanowy.net.pl)
|
||||||
|
|
||||||
Nieoficjalny klient dziennika VULCAN UONET+ dla ucznia i rodzica
|
Nieoficjalny klient dziennika VULCAN UONET+ dla ucznia i rodzica
|
||||||
|
|
||||||
@ -39,7 +34,7 @@ Nieoficjalny klient dziennika VULCAN UONET+ dla ucznia i rodzica
|
|||||||
* obsługa wielu kont wraz z możliwością zmiany nazwy ucznia
|
* obsługa wielu kont wraz z możliwością zmiany nazwy ucznia
|
||||||
* ciemny i czarny (AMOLED) motyw
|
* ciemny i czarny (AMOLED) motyw
|
||||||
* tryb offline
|
* tryb offline
|
||||||
* brak reklam
|
* opcjonalne reklamy umożliwiające wsparcie projektu
|
||||||
|
|
||||||
## Pobierz
|
## Pobierz
|
||||||
|
|
||||||
|
15
README.sk.md
15
README.sk.md
@ -1,18 +1,13 @@
|
|||||||
[English version of README](README.en.md)
|
[Česká verze](README.cs.md) / [Deutsche Version](README.de.md) / [English version](README.en.md) / [Polska wersja](README.md) / Slovenská verzia
|
||||||
|
|
||||||
[Deutsche Version von README](README.de.md)
|
|
||||||
|
|
||||||
[Polska wersja README](README.md)
|
|
||||||
|
|
||||||
[Česká verze README](README.cs.md)
|
|
||||||
|
|
||||||
# Wulkanowy
|
# Wulkanowy
|
||||||
|
|
||||||
[](https://github.com/wulkanowy/wulkanowy/actions)
|
[](https://github.com/wulkanowy/wulkanowy/actions)
|
||||||
[](https://codecov.io/gh/wulkanowy/wulkanowy)
|
[](https://codecov.io/gh/wulkanowy/wulkanowy)
|
||||||
[](https://discord.gg/vccAQBr)
|
[](https://discord.gg/vccAQBr)
|
||||||
[](https://f-droid.org/packages/io.github.wulkanowy/)
|
[](https://f-droid.org/packages/io.github.wulkanowy/)
|
||||||
[](https://github.com/wulkanowy/wulkanowy/releases)
|
[](https://github.com/wulkanowy/wulkanowy/releases)
|
||||||
|
[](https://translate.wulkanowy.net.pl)
|
||||||
|
|
||||||
Neoficiálny klient denníka VULCAN UONET+ pre žiaka a rodičov
|
Neoficiálny klient denníka VULCAN UONET+ pre žiaka a rodičov
|
||||||
|
|
||||||
@ -39,7 +34,7 @@ Neoficiálny klient denníka VULCAN UONET+ pre žiaka a rodičov
|
|||||||
* podpora viacerých účtov s možnosťou premenovania žiakov
|
* podpora viacerých účtov s možnosťou premenovania žiakov
|
||||||
* tmavý a čierny (AMOLED) motív
|
* tmavý a čierny (AMOLED) motív
|
||||||
* offline režim
|
* offline režim
|
||||||
* žiadne reklamy
|
* voliteľné reklamy na podporu projektu
|
||||||
|
|
||||||
## Stiahnuť
|
## Stiahnuť
|
||||||
|
|
||||||
@ -57,7 +52,7 @@ Aktuálnu verziu si môžete stiahnuť z Google Play, F-Droid alebo Huawei AppGa
|
|||||||
|
|
||||||
Môžete si tiež stiahnuť [vývojovú verziu](https://wulkanowy.github.io/#download), ktorá zahrňuje nové funkcie pripravované pre budúce vydanie
|
Môžete si tiež stiahnuť [vývojovú verziu](https://wulkanowy.github.io/#download), ktorá zahrňuje nové funkcie pripravované pre budúce vydanie
|
||||||
|
|
||||||
## Postavené s
|
## Postavené s pomocou
|
||||||
|
|
||||||
|
|
||||||
* [Wulkanowy SDK](https://github.com/wulkanowy/sdk)
|
* [Wulkanowy SDK](https://github.com/wulkanowy/sdk)
|
||||||
|
178
app/build.gradle
178
app/build.gradle
@ -1,8 +1,11 @@
|
|||||||
|
import com.github.triplet.gradle.androidpublisher.ReleaseStatus
|
||||||
|
import ru.cian.huawei.publish.ReleaseNote
|
||||||
|
|
||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
apply plugin: 'kotlin-android'
|
apply plugin: 'kotlin-android'
|
||||||
apply plugin: 'kotlinx-serialization'
|
apply plugin: 'kotlinx-serialization'
|
||||||
apply plugin: 'kotlin-parcelize'
|
apply plugin: 'kotlin-parcelize'
|
||||||
apply plugin: 'kotlin-kapt'
|
apply plugin: 'com.google.devtools.ksp'
|
||||||
apply plugin: 'dagger.hilt.android.plugin'
|
apply plugin: 'dagger.hilt.android.plugin'
|
||||||
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'
|
||||||
@ -10,38 +13,32 @@ apply plugin: 'com.github.triplet.play'
|
|||||||
apply plugin: 'ru.cian.huawei-publish'
|
apply plugin: 'ru.cian.huawei-publish'
|
||||||
apply plugin: 'com.mikepenz.aboutlibraries.plugin'
|
apply plugin: 'com.mikepenz.aboutlibraries.plugin'
|
||||||
apply plugin: 'com.huawei.agconnect'
|
apply plugin: 'com.huawei.agconnect'
|
||||||
|
apply plugin: 'kotlin-kapt'
|
||||||
apply from: 'jacoco.gradle'
|
apply from: 'jacoco.gradle'
|
||||||
apply from: 'sonarqube.gradle'
|
apply from: 'sonarqube.gradle'
|
||||||
apply from: 'hooks.gradle'
|
apply from: 'hooks.gradle'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 31
|
namespace 'io.github.wulkanowy'
|
||||||
|
compileSdk 34
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "io.github.wulkanowy"
|
applicationId "io.github.wulkanowy"
|
||||||
testApplicationId "io.github.tests.wulkanowy"
|
testApplicationId "io.github.tests.wulkanowy"
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 31
|
targetSdkVersion 34
|
||||||
versionCode 107
|
versionCode 142
|
||||||
versionName "1.6.3"
|
versionName "2.3.2"
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
resValue "string", "app_name", "Wulkanowy"
|
resValue "string", "app_name", "Wulkanowy"
|
||||||
|
|
||||||
manifestPlaceholders = [
|
manifestPlaceholders = [
|
||||||
firebase_enabled: project.hasProperty("enableFirebase"),
|
firebase_enabled: project.hasProperty("enableFirebase"),
|
||||||
admob_project_id: ""
|
admob_project_id: ""
|
||||||
]
|
]
|
||||||
javaCompileOptions {
|
|
||||||
annotationProcessorOptions {
|
|
||||||
arguments += [
|
|
||||||
"room.schemaLocation": "$projectDir/schemas".toString(),
|
|
||||||
"room.incremental" : "true"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
buildConfigField "String", "SINGLE_SUPPORT_AD_ID", "null"
|
buildConfigField "String", "SINGLE_SUPPORT_AD_ID", "null"
|
||||||
|
buildConfigField "String", "DASHBOARD_TILE_AD_ID", "null"
|
||||||
|
|
||||||
if (System.env.SET_BUILD_TIMESTAMP) {
|
if (System.env.SET_BUILD_TIMESTAMP) {
|
||||||
buildConfigField "long", "BUILD_TIMESTAMP", String.valueOf(System.currentTimeMillis())
|
buildConfigField "long", "BUILD_TIMESTAMP", String.valueOf(System.currentTimeMillis())
|
||||||
@ -71,6 +68,7 @@ android {
|
|||||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||||
signingConfig signingConfigs.release
|
signingConfig signingConfigs.release
|
||||||
buildConfigField "String", "MESSAGES_BASE_URL", "\"https://messages.wulkanowy.net.pl\""
|
buildConfigField "String", "MESSAGES_BASE_URL", "\"https://messages.wulkanowy.net.pl\""
|
||||||
|
buildConfigField "String", "SCHOOLS_BASE_URL", '"https://schools.wulkanowy.net.pl"'
|
||||||
}
|
}
|
||||||
debug {
|
debug {
|
||||||
minifyEnabled false
|
minifyEnabled false
|
||||||
@ -80,10 +78,11 @@ android {
|
|||||||
versionNameSuffix "-dev"
|
versionNameSuffix "-dev"
|
||||||
ext.enableCrashlytics = project.hasProperty("enableFirebase")
|
ext.enableCrashlytics = project.hasProperty("enableFirebase")
|
||||||
buildConfigField "String", "MESSAGES_BASE_URL", "\"https://messages.wulkanowy.net.pl\""
|
buildConfigField "String", "MESSAGES_BASE_URL", "\"https://messages.wulkanowy.net.pl\""
|
||||||
|
buildConfigField "String", "SCHOOLS_BASE_URL", '"https://schools.wulkanowy.net.pl"'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
flavorDimensions "platform"
|
flavorDimensions += "platform"
|
||||||
|
|
||||||
productFlavors {
|
productFlavors {
|
||||||
hms {
|
hms {
|
||||||
@ -94,10 +93,12 @@ android {
|
|||||||
play {
|
play {
|
||||||
dimension "platform"
|
dimension "platform"
|
||||||
manifestPlaceholders = [
|
manifestPlaceholders = [
|
||||||
install_channel : "Google Play",
|
install_channel : "Google Play",
|
||||||
admob_project_id: System.getenv("ADMOB_PROJECT_ID") ?: "ca-app-pub-3940256099942544~3347511713"
|
admob_project_id: System.getenv("ADMOB_PROJECT_ID") ?: "ca-app-pub-3940256099942544~3347511713"
|
||||||
]
|
]
|
||||||
buildConfigField "String", "SINGLE_SUPPORT_AD_ID", "\"${System.getenv("SINGLE_SUPPORT_AD_ID") ?: "ca-app-pub-3940256099942544/5354046379"}\""
|
buildConfigField "String", "SINGLE_SUPPORT_AD_ID", "\"${System.getenv("SINGLE_SUPPORT_AD_ID") ?: "ca-app-pub-3940256099942544/5354046379"}\""
|
||||||
|
buildConfigField "String", "DASHBOARD_TILE_AD_ID", "\"${System.getenv("DASHBOARD_TILE_AD_ID") ?: "ca-app-pub-3940256099942544/6300978111"}\""
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fdroid {
|
fdroid {
|
||||||
@ -112,6 +113,7 @@ android {
|
|||||||
|
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
viewBinding true
|
viewBinding true
|
||||||
|
buildConfig true
|
||||||
}
|
}
|
||||||
|
|
||||||
bundle {
|
bundle {
|
||||||
@ -120,24 +122,28 @@ android {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
testOptions.unitTests {
|
testOptions {
|
||||||
includeAndroidResources = true
|
unitTests.includeAndroidResources = true
|
||||||
|
// workaround HMS test errors https://github.com/robolectric/robolectric/issues/2750
|
||||||
|
unitTests.all { jvmArgs '-noverify' }
|
||||||
}
|
}
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
coreLibraryDesugaringEnabled true
|
coreLibraryDesugaringEnabled true
|
||||||
sourceCompatibility JavaVersion.VERSION_11
|
sourceCompatibility JavaVersion.VERSION_17
|
||||||
targetCompatibility JavaVersion.VERSION_11
|
targetCompatibility JavaVersion.VERSION_17
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
jvmTarget = "11"
|
jvmTarget = "17"
|
||||||
freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn", "-Xjvm-default=all"]
|
freeCompilerArgs += ["-opt-in=kotlin.RequiresOptIn", "-Xjvm-default=all"]
|
||||||
}
|
}
|
||||||
|
|
||||||
packagingOptions {
|
packagingOptions {
|
||||||
exclude 'META-INF/library_release.kotlin_module'
|
resources {
|
||||||
exclude 'META-INF/library-core_release.kotlin_module'
|
excludes += ['META-INF/library_release.kotlin_module',
|
||||||
|
'META-INF/library-core_release.kotlin_module']
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
aboutLibraries {
|
aboutLibraries {
|
||||||
@ -148,13 +154,16 @@ android {
|
|||||||
kapt {
|
kapt {
|
||||||
correctErrorTypes true
|
correctErrorTypes true
|
||||||
}
|
}
|
||||||
|
ksp {
|
||||||
|
arg("room.schemaLocation", "$projectDir/schemas".toString())
|
||||||
|
}
|
||||||
|
|
||||||
play {
|
play {
|
||||||
defaultToAppBundles = false
|
defaultToAppBundles = false
|
||||||
track = 'production'
|
track = 'production'
|
||||||
releaseStatus = com.github.triplet.gradle.androidpublisher.ReleaseStatus.IN_PROGRESS
|
releaseStatus = ReleaseStatus.IN_PROGRESS
|
||||||
userFraction = 0.50d
|
userFraction = 0.99d
|
||||||
updatePriority = 1
|
updatePriority = 3
|
||||||
enabled.set(false)
|
enabled.set(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,54 +172,60 @@ huaweiPublish {
|
|||||||
hmsRelease {
|
hmsRelease {
|
||||||
credentialsPath = "$rootDir/app/src/release/agconnect-credentials.json"
|
credentialsPath = "$rootDir/app/src/release/agconnect-credentials.json"
|
||||||
buildFormat = "aab"
|
buildFormat = "aab"
|
||||||
deployType = "draft"
|
deployType = "publish"
|
||||||
|
releaseNotes = [
|
||||||
|
new ReleaseNote(
|
||||||
|
"pl-PL",
|
||||||
|
"$projectDir/src/main/play/release-notes/pl-PL/default.txt"
|
||||||
|
)
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ext {
|
ext {
|
||||||
work_manager = "2.7.1"
|
work_manager = "2.9.0"
|
||||||
android_hilt = "1.0.0"
|
android_hilt = "1.1.0"
|
||||||
room = "2.4.2"
|
room = "2.6.1"
|
||||||
chucker = "3.5.2"
|
chucker = "4.0.0"
|
||||||
mockk = "1.12.2"
|
mockk = "1.13.9"
|
||||||
coroutines = "1.6.1"
|
coroutines = "1.7.3"
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation "io.github.wulkanowy:sdk:1.6.0"
|
implementation 'io.github.wulkanowy:sdk:2.3.4'
|
||||||
|
|
||||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
|
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
|
||||||
|
|
||||||
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2"
|
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2"
|
||||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines"
|
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines"
|
||||||
|
|
||||||
implementation "androidx.core:core-ktx:1.7.0"
|
implementation 'androidx.core:core-ktx:1.12.0'
|
||||||
implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
|
implementation 'androidx.core:core-splashscreen:1.0.1'
|
||||||
implementation "androidx.activity:activity-ktx:1.4.0"
|
implementation "androidx.activity:activity-ktx:1.8.2"
|
||||||
implementation "androidx.appcompat:appcompat:1.4.1"
|
implementation "androidx.appcompat:appcompat:1.6.1"
|
||||||
implementation "androidx.fragment:fragment-ktx:1.4.1"
|
implementation "androidx.fragment:fragment-ktx:1.6.2"
|
||||||
implementation "androidx.annotation:annotation:1.3.0"
|
implementation "androidx.annotation:annotation:1.7.1"
|
||||||
|
|
||||||
implementation "androidx.preference:preference-ktx:1.2.0"
|
implementation "androidx.preference:preference-ktx:1.2.1"
|
||||||
implementation "androidx.recyclerview:recyclerview:1.2.1"
|
implementation "androidx.recyclerview:recyclerview:1.3.2"
|
||||||
implementation "androidx.viewpager2:viewpager2:1.1.0-beta01"
|
implementation "androidx.viewpager2:viewpager2:1.1.0-beta02"
|
||||||
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
|
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
|
||||||
implementation "androidx.constraintlayout:constraintlayout:2.1.3"
|
implementation "androidx.constraintlayout:constraintlayout:2.1.4"
|
||||||
implementation "androidx.coordinatorlayout:coordinatorlayout:1.2.0"
|
implementation "androidx.coordinatorlayout:coordinatorlayout:1.2.0"
|
||||||
implementation "com.google.android.material:material:1.5.0"
|
implementation "com.google.android.material:material:1.10.0"
|
||||||
implementation "com.github.wulkanowy:material-chips-input:2.3.1"
|
implementation "com.github.wulkanowy:material-chips-input:2.3.1"
|
||||||
implementation "com.github.PhilJay:MPAndroidChart:v3.1.0"
|
implementation "com.github.PhilJay:MPAndroidChart:v3.1.0"
|
||||||
implementation 'com.github.lopspower:CircularImageView:4.2.0'
|
implementation 'com.github.lopspower:CircularImageView:4.3.0'
|
||||||
|
|
||||||
implementation "androidx.work:work-runtime-ktx:$work_manager"
|
implementation "androidx.work:work-runtime:$work_manager"
|
||||||
playImplementation "androidx.work:work-gcm:$work_manager"
|
playImplementation "androidx.work:work-gcm:$work_manager"
|
||||||
|
|
||||||
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1"
|
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.6.2"
|
||||||
|
|
||||||
implementation "androidx.room:room-runtime:$room"
|
implementation "androidx.room:room-runtime:$room"
|
||||||
implementation "androidx.room:room-ktx:$room"
|
implementation "androidx.room:room-ktx:$room"
|
||||||
kapt "androidx.room:room-compiler:$room"
|
ksp "androidx.room:room-compiler:$room"
|
||||||
|
|
||||||
implementation "com.google.dagger:hilt-android:$hilt_version"
|
implementation "com.google.dagger:hilt-android:$hilt_version"
|
||||||
kapt "com.google.dagger:hilt-android-compiler:$hilt_version"
|
kapt "com.google.dagger:hilt-android-compiler:$hilt_version"
|
||||||
@ -221,32 +236,37 @@ dependencies {
|
|||||||
implementation "com.github.YarikSOffice:lingver:1.3.0"
|
implementation "com.github.YarikSOffice:lingver:1.3.0"
|
||||||
|
|
||||||
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
|
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
|
||||||
implementation "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0"
|
implementation "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:1.0.0"
|
||||||
implementation "com.squareup.okhttp3:logging-interceptor:4.9.3"
|
implementation "com.squareup.okhttp3:logging-interceptor:4.12.0"
|
||||||
|
|
||||||
implementation "com.jakewharton.timber:timber:5.0.1"
|
implementation "com.jakewharton.timber:timber:5.0.1"
|
||||||
implementation "at.favre.lib:slf4j-timber:1.0.1"
|
implementation 'com.github.Faierbel:slf4j-timber:2.0'
|
||||||
implementation 'com.github.bastienpaulfr:Treessence:1.0.5'
|
implementation 'com.github.bastienpaulfr:Treessence:1.1.2'
|
||||||
implementation "com.mikepenz:aboutlibraries-core:$about_libraries"
|
implementation "com.mikepenz:aboutlibraries-core:$about_libraries"
|
||||||
implementation "io.coil-kt:coil:1.4.0"
|
implementation 'io.coil-kt:coil:2.5.0'
|
||||||
implementation "io.github.wulkanowy:AppKillerManager:3.0.0"
|
implementation "io.github.wulkanowy:AppKillerManager:3.0.1"
|
||||||
implementation 'me.xdrop:fuzzywuzzy:1.4.0'
|
implementation 'me.xdrop:fuzzywuzzy:1.4.0'
|
||||||
implementation 'com.fredporciuncula:flow-preferences:1.6.0'
|
implementation 'com.fredporciuncula:flow-preferences:1.9.1'
|
||||||
|
implementation 'org.apache.commons:commons-text:1.11.0'
|
||||||
|
|
||||||
playImplementation platform('com.google.firebase:firebase-bom:29.3.1')
|
playImplementation platform('com.google.firebase:firebase-bom:32.7.0')
|
||||||
playImplementation 'com.google.firebase:firebase-analytics-ktx'
|
playImplementation 'com.google.firebase:firebase-analytics'
|
||||||
playImplementation 'com.google.firebase:firebase-messaging:'
|
playImplementation 'com.google.firebase:firebase-messaging'
|
||||||
playImplementation 'com.google.firebase:firebase-crashlytics:'
|
playImplementation 'com.google.firebase:firebase-crashlytics:'
|
||||||
playImplementation 'com.google.android.play:core:1.10.3'
|
playImplementation 'com.google.firebase:firebase-config'
|
||||||
playImplementation 'com.google.android.play:core-ktx:1.8.1'
|
|
||||||
playImplementation 'com.google.android.gms:play-services-ads:20.6.0'
|
|
||||||
|
|
||||||
hmsImplementation 'com.huawei.hms:hianalytics:6.4.1.302'
|
playImplementation 'com.google.android.gms:play-services-ads:22.6.0'
|
||||||
hmsImplementation 'com.huawei.agconnect:agconnect-crash:1.6.5.300'
|
playImplementation "com.google.android.play:integrity:1.3.0"
|
||||||
|
playImplementation 'com.google.android.play:app-update-ktx:2.1.0'
|
||||||
|
playImplementation 'com.google.android.play:review-ktx:2.0.1'
|
||||||
|
playImplementation "com.google.android.ump:user-messaging-platform:2.1.0"
|
||||||
|
|
||||||
releaseImplementation "com.github.ChuckerTeam.Chucker:library-no-op:$chucker"
|
hmsImplementation 'com.huawei.hms:hianalytics:6.12.0.300'
|
||||||
|
hmsImplementation 'com.huawei.agconnect:agconnect-crash:1.9.1.303'
|
||||||
|
|
||||||
debugImplementation "com.github.ChuckerTeam.Chucker:library:$chucker"
|
releaseImplementation "com.github.chuckerteam.chucker:library-no-op:$chucker"
|
||||||
|
|
||||||
|
debugImplementation "com.github.chuckerteam.chucker:library:$chucker"
|
||||||
debugImplementation 'com.github.amitshekhariitbhu.Android-Debug-Database:debug-db:1.0.6'
|
debugImplementation 'com.github.amitshekhariitbhu.Android-Debug-Database:debug-db:1.0.6'
|
||||||
debugImplementation 'com.github.haroldadmin:WhatTheStack:1.0.0-alpha04'
|
debugImplementation 'com.github.haroldadmin:WhatTheStack:1.0.0-alpha04'
|
||||||
|
|
||||||
@ -255,17 +275,17 @@ dependencies {
|
|||||||
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines"
|
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines"
|
||||||
testImplementation "org.jetbrains.kotlin:kotlin-test:$kotlin_version"
|
testImplementation "org.jetbrains.kotlin:kotlin-test:$kotlin_version"
|
||||||
|
|
||||||
testImplementation 'org.robolectric:robolectric:4.7.3'
|
testImplementation 'org.robolectric:robolectric:4.11.1'
|
||||||
testImplementation "androidx.test:runner:1.4.0"
|
testImplementation "androidx.test:runner:1.5.2"
|
||||||
testImplementation "androidx.test.ext:junit:1.1.3"
|
testImplementation "androidx.test.ext:junit:1.1.5"
|
||||||
testImplementation "androidx.test:core:1.4.0"
|
testImplementation "androidx.test:core:1.5.0"
|
||||||
testImplementation "androidx.room:room-testing:$room"
|
testImplementation "androidx.room:room-testing:$room"
|
||||||
testImplementation "com.google.dagger:hilt-android-testing:$hilt_version"
|
testImplementation "com.google.dagger:hilt-android-testing:$hilt_version"
|
||||||
kaptTest "com.google.dagger:hilt-android-compiler:$hilt_version"
|
kaptTest "com.google.dagger:hilt-android-compiler:$hilt_version"
|
||||||
|
|
||||||
androidTestImplementation "androidx.test:core:1.4.0"
|
androidTestImplementation "androidx.test:core:1.5.0"
|
||||||
androidTestImplementation "androidx.test:runner:1.4.0"
|
androidTestImplementation "androidx.test:runner:1.5.2"
|
||||||
androidTestImplementation "androidx.test.ext:junit:1.1.3"
|
androidTestImplementation "androidx.test.ext:junit:1.1.5"
|
||||||
androidTestImplementation "io.mockk:mockk-android:$mockk"
|
androidTestImplementation "io.mockk:mockk-android:$mockk"
|
||||||
androidTestImplementation "org.jetbrains.kotlin:kotlin-test:$kotlin_version"
|
androidTestImplementation "org.jetbrains.kotlin:kotlin-test:$kotlin_version"
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
apply plugin: "jacoco"
|
apply plugin: "jacoco"
|
||||||
|
|
||||||
jacoco {
|
jacoco {
|
||||||
toolVersion "0.8.7"
|
toolVersion "0.8.11"
|
||||||
reportsDirectory.set(file("$buildDir/reports"))
|
reportsDirectory.set(file("$buildDir/reports"))
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType(Test) {
|
tasks.withType(Test).configureEach {
|
||||||
jacoco.includeNoLocationClasses = true
|
jacoco.includeNoLocationClasses = true
|
||||||
jacoco.excludes = ['jdk.internal.*']
|
jacoco.excludes = ['jdk.internal.*']
|
||||||
}
|
}
|
||||||
|
|
||||||
task jacocoTestReport(type: JacocoReport) {
|
tasks.register('jacocoTestReport', JacocoReport) {
|
||||||
|
|
||||||
group = "Reporting"
|
group = "Reporting"
|
||||||
description = "Generate Jacoco coverage reports"
|
description = "Generate Jacoco coverage reports"
|
||||||
@ -33,19 +33,19 @@ task jacocoTestReport(type: JacocoReport) {
|
|||||||
'**/*_Factory.*']
|
'**/*_Factory.*']
|
||||||
|
|
||||||
classDirectories.setFrom(fileTree(
|
classDirectories.setFrom(fileTree(
|
||||||
dir: "$buildDir/intermediates/classes/debug",
|
dir: "$buildDir/intermediates/classes/debug",
|
||||||
excludes: excludes
|
excludes: excludes
|
||||||
) + fileTree(
|
) + fileTree(
|
||||||
dir: "$buildDir/tmp/kotlin-classes/fdroidDebug",
|
dir: "$buildDir/tmp/kotlin-classes/fdroidDebug",
|
||||||
excludes: excludes
|
excludes: excludes
|
||||||
))
|
))
|
||||||
|
|
||||||
sourceDirectories.setFrom(files([
|
sourceDirectories.setFrom(files([
|
||||||
"src/main/java",
|
"src/main/java",
|
||||||
"src/fdroid/java"
|
"src/fdroid/java"
|
||||||
]))
|
]))
|
||||||
executionData.setFrom(fileTree(
|
executionData.setFrom(fileTree(
|
||||||
dir: project.projectDir,
|
dir: project.projectDir,
|
||||||
includes: ["**/*.exec", "**/*.ec"]
|
includes: ["**/*.exec", "**/*.ec"]
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
16
app/proguard-rules.pro
vendored
16
app/proguard-rules.pro
vendored
@ -1,5 +1,6 @@
|
|||||||
# General
|
# General
|
||||||
-dontobfuscate
|
-dontobfuscate
|
||||||
|
-ignorewarnings
|
||||||
|
|
||||||
|
|
||||||
#Config for wulkanowy
|
#Config for wulkanowy
|
||||||
@ -24,3 +25,18 @@
|
|||||||
|
|
||||||
#Config for Material Components
|
#Config for Material Components
|
||||||
-keep class com.google.android.material.tabs.** { *; }
|
-keep class com.google.android.material.tabs.** { *; }
|
||||||
|
|
||||||
|
|
||||||
|
#Config for HMS SDK
|
||||||
|
-keepattributes *Annotation*
|
||||||
|
-keepattributes Exceptions
|
||||||
|
-keepattributes InnerClasses
|
||||||
|
-keepattributes Signature
|
||||||
|
-keep class com.huawei.agconnect.**{*;}
|
||||||
|
-keep class com.huawei.hianalytics.**{*;}
|
||||||
|
-keep class com.huawei.updatesdk.**{*;}
|
||||||
|
-keep class com.huawei.hms.**{*;}
|
||||||
|
|
||||||
|
|
||||||
|
#Config for Wulkanowy SDK
|
||||||
|
-keep,allowobfuscation,allowshrinking class retrofit2.Response
|
||||||
|
2445
app/schemas/io.github.wulkanowy.data.db.AppDatabase/49.json
Normal file
2445
app/schemas/io.github.wulkanowy.data.db.AppDatabase/49.json
Normal file
File diff suppressed because it is too large
Load Diff
2445
app/schemas/io.github.wulkanowy.data.db.AppDatabase/50.json
Normal file
2445
app/schemas/io.github.wulkanowy.data.db.AppDatabase/50.json
Normal file
File diff suppressed because it is too large
Load Diff
2409
app/schemas/io.github.wulkanowy.data.db.AppDatabase/51.json
Normal file
2409
app/schemas/io.github.wulkanowy.data.db.AppDatabase/51.json
Normal file
File diff suppressed because it is too large
Load Diff
2421
app/schemas/io.github.wulkanowy.data.db.AppDatabase/52.json
Normal file
2421
app/schemas/io.github.wulkanowy.data.db.AppDatabase/52.json
Normal file
File diff suppressed because it is too large
Load Diff
2439
app/schemas/io.github.wulkanowy.data.db.AppDatabase/53.json
Normal file
2439
app/schemas/io.github.wulkanowy.data.db.AppDatabase/53.json
Normal file
File diff suppressed because it is too large
Load Diff
2439
app/schemas/io.github.wulkanowy.data.db.AppDatabase/54.json
Normal file
2439
app/schemas/io.github.wulkanowy.data.db.AppDatabase/54.json
Normal file
File diff suppressed because it is too large
Load Diff
2435
app/schemas/io.github.wulkanowy.data.db.AppDatabase/55.json
Normal file
2435
app/schemas/io.github.wulkanowy.data.db.AppDatabase/55.json
Normal file
File diff suppressed because it is too large
Load Diff
2442
app/schemas/io.github.wulkanowy.data.db.AppDatabase/56.json
Normal file
2442
app/schemas/io.github.wulkanowy.data.db.AppDatabase/56.json
Normal file
File diff suppressed because it is too large
Load Diff
2443
app/schemas/io.github.wulkanowy.data.db.AppDatabase/57.json
Normal file
2443
app/schemas/io.github.wulkanowy.data.db.AppDatabase/57.json
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,33 +1,92 @@
|
|||||||
{
|
{
|
||||||
"agcgw":{
|
"agcgw": {
|
||||||
"backurl":"connect-dre.dbankcloud.cn",
|
"backurl": "connect-dre.hispace.hicloud.com",
|
||||||
"url":"connect-dre.hispace.hicloud.com"
|
"url": "connect-dre.dbankcloud.cn",
|
||||||
},
|
"websocketbackurl": "connect-ws-dre.hispace.dbankcloud.com",
|
||||||
"client":{
|
"websocketurl": "connect-ws-dre.hispace.dbankcloud.cn"
|
||||||
"cp_id":"890048000024105546",
|
},
|
||||||
"product_id":"",
|
"agcgw_all": {
|
||||||
"client_id":"",
|
"CN": "connect-drcn.dbankcloud.cn",
|
||||||
"client_secret":"",
|
"CN_back": "connect-drcn.hispace.hicloud.com",
|
||||||
"app_id":"101440411",
|
"DE": "connect-dre.dbankcloud.cn",
|
||||||
"package_name":"io.github.wulkanowy.dev",
|
"DE_back": "connect-dre.hispace.hicloud.com",
|
||||||
"api_key":""
|
"RU": "connect-drru.hispace.dbankcloud.ru",
|
||||||
},
|
"RU_back": "connect-drru.hispace.dbankcloud.cn",
|
||||||
"service":{
|
"SG": "connect-dra.dbankcloud.cn",
|
||||||
"analytics":{
|
"SG_back": "connect-dra.hispace.hicloud.com"
|
||||||
"collector_url":"datacollector-dre.dt.hicloud.com,datacollector-dre.dt.dbankcloud.cn",
|
},
|
||||||
"resource_id":"p1",
|
"websocketgw_all": {
|
||||||
"channel_id":""
|
"CN": "connect-ws-drcn.hispace.dbankcloud.cn",
|
||||||
},
|
"CN_back": "connect-ws-drcn.hispace.dbankcloud.com",
|
||||||
|
"DE": "connect-ws-dre.hispace.dbankcloud.cn",
|
||||||
|
"DE_back": "connect-ws-dre.hispace.dbankcloud.com",
|
||||||
|
"RU": "connect-ws-drru.hispace.dbankcloud.ru",
|
||||||
|
"RU_back": "connect-ws-drru.hispace.dbankcloud.cn",
|
||||||
|
"SG": "connect-ws-dra.hispace.dbankcloud.cn",
|
||||||
|
"SG_back": "connect-ws-dra.hispace.dbankcloud.com"
|
||||||
|
},
|
||||||
|
"client": {
|
||||||
|
"cp_id": "890048000024105546",
|
||||||
|
"product_id": "736430079244736562",
|
||||||
|
"client_id": "514530959291319360",
|
||||||
|
"client_secret": "C42522DBF17D3D4BBE9D9C1783A54484B7E6844B388B7A67502D36A633A4186B",
|
||||||
|
"project_id": "736430079244736562",
|
||||||
|
"app_id": "106552551",
|
||||||
|
"api_key": "CgB6e3x9BUNiq+r8ebCHNojjjYsMT4pJSjjNDOkm9owtBb6rVI6LjnASoZBRxbjjhObcrV5gANo99fI/eKZDTbWS",
|
||||||
|
"package_name": "io.github.wulkanowy.dev"
|
||||||
|
},
|
||||||
|
"oauth_client": {
|
||||||
|
"client_id": "106552551",
|
||||||
|
"client_type": 1
|
||||||
|
},
|
||||||
|
"app_info": {
|
||||||
|
"app_id": "106552551",
|
||||||
|
"package_name": "io.github.wulkanowy.dev"
|
||||||
|
},
|
||||||
|
"service": {
|
||||||
|
"analytics": {
|
||||||
|
"collector_url": "datacollector-dre.dt.hicloud.com,datacollector-dre.dt.dbankcloud.cn",
|
||||||
|
"collector_url_ru": "datacollector-drru.dt.dbankcloud.ru,datacollector-drru.dt.hicloud.com",
|
||||||
|
"collector_url_sg": "datacollector-dra.dt.hicloud.com,datacollector-dra.dt.dbankcloud.cn",
|
||||||
|
"collector_url_de": "datacollector-dre.dt.hicloud.com,datacollector-dre.dt.dbankcloud.cn",
|
||||||
|
"collector_url_cn": "datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn",
|
||||||
|
"resource_id": "p1",
|
||||||
|
"channel_id": ""
|
||||||
|
},
|
||||||
"search":{
|
"search":{
|
||||||
"url":"https://search-dre.cloud.huawei.com"
|
"url":"https://search-dre.cloud.huawei.com"
|
||||||
},
|
},
|
||||||
"cloudstorage":{
|
"cloudstorage": {
|
||||||
"storage_url":"https://ops-dre.agcstorage.link"
|
"storage_url_sg_back": "https://agc-storage-dra.cloud.huawei.asia",
|
||||||
},
|
"storage_url_ru_back": "https://agc-storage-drru.cloud.huawei.ru",
|
||||||
"ml":{
|
"storage_url_ru": "https://agc-storage-drru.cloud.huawei.ru",
|
||||||
"mlservice_url":"ml-api-dre.ai.dbankcloud.com,ml-api-dre.ai.dbankcloud.cn"
|
"storage_url_de_back": "https://agc-storage-dre.cloud.huawei.eu",
|
||||||
}
|
"storage_url_de": "https://ops-dre.agcstorage.link",
|
||||||
},
|
"storage_url": "https://agc-storage-drcn.platform.dbankcloud.cn",
|
||||||
"region":"DE",
|
"storage_url_sg": "https://ops-dra.agcstorage.link",
|
||||||
"configuration_version":"1.0"
|
"storage_url_cn_back": "https://agc-storage-drcn.cloud.huawei.com.cn",
|
||||||
|
"storage_url_cn": "https://agc-storage-drcn.platform.dbankcloud.cn"
|
||||||
|
},
|
||||||
|
"ml": {
|
||||||
|
"mlservice_url": "ml-api-dre.ai.dbankcloud.com,ml-api-dre.ai.dbankcloud.cn"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"region": "DE",
|
||||||
|
"configuration_version": "3.0",
|
||||||
|
"appInfos": [
|
||||||
|
{
|
||||||
|
"package_name": "io.github.wulkanowy.dev",
|
||||||
|
"client": {
|
||||||
|
"app_id": "106552551"
|
||||||
|
},
|
||||||
|
"app_info": {
|
||||||
|
"package_name": "io.github.wulkanowy.dev",
|
||||||
|
"app_id": "106552551"
|
||||||
|
},
|
||||||
|
"oauth_client": {
|
||||||
|
"client_type": 1,
|
||||||
|
"client_id": "106552551"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<background android:drawable="@color/colorPrimary" />
|
<background android:drawable="@color/colorIcon" />
|
||||||
<foreground android:drawable="@drawable/ic_launcher_foreground_dev" />
|
<foreground android:drawable="@drawable/ic_launcher_foreground_dev" />
|
||||||
</adaptive-icon>
|
<monochrome android:drawable="@drawable/ic_launcher_foreground_dev_mono" />
|
||||||
|
</adaptive-icon>
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<background android:drawable="@color/colorPrimary" />
|
|
||||||
<foreground android:drawable="@drawable/ic_launcher_foreground_dev" />
|
|
||||||
</adaptive-icon>
|
|
Binary file not shown.
Before Width: | Height: | Size: 4.3 KiB |
Binary file not shown.
Before Width: | Height: | Size: 2.7 KiB |
Binary file not shown.
Before Width: | Height: | Size: 6.0 KiB |
Binary file not shown.
Before Width: | Height: | Size: 9.4 KiB |
Binary file not shown.
Before Width: | Height: | Size: 13 KiB |
31
app/src/fdroid/java/io/github/wulkanowy/utils/AdsHelper.kt
Normal file
31
app/src/fdroid/java/io/github/wulkanowy/utils/AdsHelper.kt
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package io.github.wulkanowy.utils
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.view.View
|
||||||
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
|
import io.github.wulkanowy.data.repositories.PreferencesRepository
|
||||||
|
import io.github.wulkanowy.ui.modules.dashboard.DashboardItem
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@Suppress("unused")
|
||||||
|
class AdsHelper @Inject constructor(
|
||||||
|
@ApplicationContext private val context: Context,
|
||||||
|
private val preferencesRepository: PreferencesRepository
|
||||||
|
) {
|
||||||
|
|
||||||
|
val isMobileAdsSdkInitialized = MutableStateFlow(false)
|
||||||
|
val canShowAd = false
|
||||||
|
|
||||||
|
fun initialize() {
|
||||||
|
preferencesRepository.isAdsEnabled = false
|
||||||
|
preferencesRepository.selectedDashboardTiles -= DashboardItem.Tile.ADS
|
||||||
|
}
|
||||||
|
|
||||||
|
@Suppress("RedundantSuspendModifier", "UNUSED_PARAMETER")
|
||||||
|
suspend fun getDashboardTileAdBanner(width: Int): AdBanner {
|
||||||
|
throw IllegalStateException("Can't get ad banner (F-droid)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data class AdBanner(val view: View)
|
@ -8,15 +8,7 @@ import javax.inject.Singleton
|
|||||||
@Suppress("UNUSED_PARAMETER")
|
@Suppress("UNUSED_PARAMETER")
|
||||||
class AnalyticsHelper @Inject constructor() {
|
class AnalyticsHelper @Inject constructor() {
|
||||||
|
|
||||||
fun logEvent(name: String, vararg params: Pair<String, Any?>) {
|
fun logEvent(name: String, vararg params: Pair<String, Any?>) = Unit
|
||||||
// do nothing
|
fun setCurrentScreen(activity: Activity, name: String?) = Unit
|
||||||
}
|
fun popCurrentScreen(name: String?) = Unit
|
||||||
|
|
||||||
fun setCurrentScreen(activity: Activity, name: String?) {
|
|
||||||
// do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
fun popCurrentScreen(name: String?) {
|
|
||||||
// do nothing
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,13 @@
|
|||||||
|
package io.github.wulkanowy.utils
|
||||||
|
|
||||||
|
import android.view.View
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class InAppUpdateHelper @Inject constructor() {
|
||||||
|
|
||||||
|
lateinit var messageContainer: View
|
||||||
|
|
||||||
|
fun checkAndInstallUpdates() {}
|
||||||
|
|
||||||
|
fun onResume() {}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
package io.github.wulkanowy.utils
|
||||||
|
|
||||||
|
import javax.inject.Inject
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
class IntegrityHelper @Inject constructor() {
|
||||||
|
|
||||||
|
@Suppress("UNUSED_PARAMETER")
|
||||||
|
fun getIntegrityToken(requestId: String): String? = null
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
package io.github.wulkanowy.utils
|
||||||
|
|
||||||
|
import javax.inject.Inject
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
class RemoteConfigHelper @Inject constructor() : BaseRemoteConfigHelper()
|
@ -1,17 +0,0 @@
|
|||||||
package io.github.wulkanowy.utils
|
|
||||||
|
|
||||||
import android.app.Activity
|
|
||||||
import android.view.View
|
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
@Suppress("UNUSED_PARAMETER")
|
|
||||||
class UpdateHelper @Inject constructor() {
|
|
||||||
|
|
||||||
lateinit var messageContainer: View
|
|
||||||
|
|
||||||
fun checkAndInstallUpdates(activity: Activity) {}
|
|
||||||
|
|
||||||
fun onActivityResult(requestCode: Int, resultCode: Int) {}
|
|
||||||
|
|
||||||
fun onResume(activity: Activity) {}
|
|
||||||
}
|
|
30
app/src/hms/java/io/github/wulkanowy/utils/AdsHelper.kt
Normal file
30
app/src/hms/java/io/github/wulkanowy/utils/AdsHelper.kt
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
package io.github.wulkanowy.utils
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.view.View
|
||||||
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
|
import io.github.wulkanowy.data.repositories.PreferencesRepository
|
||||||
|
import io.github.wulkanowy.ui.modules.dashboard.DashboardItem
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@Suppress("unused")
|
||||||
|
class AdsHelper @Inject constructor(
|
||||||
|
@ApplicationContext private val context: Context,
|
||||||
|
private val preferencesRepository: PreferencesRepository
|
||||||
|
) {
|
||||||
|
val isMobileAdsSdkInitialized = MutableStateFlow(false)
|
||||||
|
val canShowAd = false
|
||||||
|
|
||||||
|
fun initialize() {
|
||||||
|
preferencesRepository.isAdsEnabled = false
|
||||||
|
preferencesRepository.selectedDashboardTiles -= DashboardItem.Tile.ADS
|
||||||
|
}
|
||||||
|
|
||||||
|
@Suppress("RedundantSuspendModifier", "UNUSED_PARAMETER")
|
||||||
|
suspend fun getDashboardTileAdBanner(width: Int): AdBanner {
|
||||||
|
throw IllegalStateException("Can't get ad banner (HMS)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data class AdBanner(val view: View)
|
@ -3,26 +3,38 @@ package io.github.wulkanowy.utils
|
|||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import com.huawei.agconnect.crash.AGConnectCrash
|
||||||
import com.huawei.hms.analytics.HiAnalytics
|
import com.huawei.hms.analytics.HiAnalytics
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
|
import io.github.wulkanowy.data.repositories.PreferencesRepository
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
class AnalyticsHelper @Inject constructor(
|
class AnalyticsHelper @Inject constructor(
|
||||||
@ApplicationContext private val context: Context
|
@ApplicationContext private val context: Context,
|
||||||
|
preferencesRepository: PreferencesRepository,
|
||||||
|
appInfo: AppInfo,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private val analytics by lazy { HiAnalytics.getInstance(context) }
|
private val analytics by lazy { HiAnalytics.getInstance(context) }
|
||||||
|
|
||||||
|
private val connectCrash by lazy { AGConnectCrash.getInstance() }
|
||||||
|
|
||||||
|
init {
|
||||||
|
if (!appInfo.isDebug) {
|
||||||
|
connectCrash.setUserId(preferencesRepository.installationId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun logEvent(name: String, vararg params: Pair<String, Any?>) {
|
fun logEvent(name: String, vararg params: Pair<String, Any?>) {
|
||||||
Bundle().apply {
|
Bundle().apply {
|
||||||
params.forEach {
|
params.forEach { (key, value) ->
|
||||||
if (it.second == null) return@forEach
|
if (value == null) return@forEach
|
||||||
when (it.second) {
|
when (value) {
|
||||||
is String, is String? -> putString(it.first, it.second as String)
|
is String -> putString(key, value)
|
||||||
is Int, is Int? -> putInt(it.first, it.second as Int)
|
is Int -> putInt(key, value)
|
||||||
is Boolean, is Boolean? -> putBoolean(it.first, it.second as Boolean)
|
is Boolean -> putBoolean(key, value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
analytics.onEvent(name, this)
|
analytics.onEvent(name, this)
|
||||||
|
@ -2,7 +2,8 @@ package io.github.wulkanowy.utils
|
|||||||
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import com.huawei.agconnect.crash.AGConnectCrash
|
import com.huawei.agconnect.crash.AGConnectCrash
|
||||||
import fr.bipi.tressence.base.FormatterPriorityTree
|
import fr.bipi.treessence.base.FormatterPriorityTree
|
||||||
|
import fr.bipi.treessence.common.StackTraceRecorder
|
||||||
|
|
||||||
class CrashLogTree : FormatterPriorityTree(Log.VERBOSE) {
|
class CrashLogTree : FormatterPriorityTree(Log.VERBOSE) {
|
||||||
|
|
||||||
@ -22,16 +23,10 @@ class CrashLogExceptionTree : FormatterPriorityTree(Log.ERROR, ExceptionFilter)
|
|||||||
override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
|
override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
|
||||||
if (skipLog(priority, tag, message, t)) return
|
if (skipLog(priority, tag, message, t)) return
|
||||||
|
|
||||||
// Disabled due to a bug in the Huawei library
|
|
||||||
|
|
||||||
/*connectCrash.setCustomKey("priority", priority)
|
|
||||||
connectCrash.setCustomKey("tag", tag.orEmpty())
|
|
||||||
connectCrash.setCustomKey("message", message)
|
|
||||||
|
|
||||||
if (t != null) {
|
if (t != null) {
|
||||||
connectCrash.recordException(t)
|
connectCrash.recordException(t)
|
||||||
} else {
|
} else {
|
||||||
connectCrash.recordException(StackTraceRecorder(format(priority, tag, message)))
|
connectCrash.recordException(StackTraceRecorder(format(priority, tag, message)))
|
||||||
}*/
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import javax.inject.Inject
|
|||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
|
@Suppress("UNUSED_PARAMETER", "unused")
|
||||||
class InAppReviewHelper @Inject constructor(
|
class InAppReviewHelper @Inject constructor(
|
||||||
@ApplicationContext private val context: Context
|
@ApplicationContext private val context: Context
|
||||||
) {
|
) {
|
||||||
@ -14,4 +15,4 @@ class InAppReviewHelper @Inject constructor(
|
|||||||
fun showInAppReview(activity: MainActivity) {
|
fun showInAppReview(activity: MainActivity) {
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,13 @@
|
|||||||
|
package io.github.wulkanowy.utils
|
||||||
|
|
||||||
|
import android.view.View
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class InAppUpdateHelper @Inject constructor() {
|
||||||
|
|
||||||
|
lateinit var messageContainer: View
|
||||||
|
|
||||||
|
fun checkAndInstallUpdates() {}
|
||||||
|
|
||||||
|
fun onResume() {}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
package io.github.wulkanowy.utils
|
||||||
|
|
||||||
|
import javax.inject.Inject
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
class IntegrityHelper @Inject constructor() {
|
||||||
|
|
||||||
|
@Suppress("UNUSED_PARAMETER")
|
||||||
|
fun getIntegrityToken(requestId: String): String? = null
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
package io.github.wulkanowy.utils
|
||||||
|
|
||||||
|
import javax.inject.Inject
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
class RemoteConfigHelper @Inject constructor() : BaseRemoteConfigHelper()
|
@ -1,17 +0,0 @@
|
|||||||
package io.github.wulkanowy.utils
|
|
||||||
|
|
||||||
import android.app.Activity
|
|
||||||
import android.view.View
|
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
@Suppress("UNUSED_PARAMETER")
|
|
||||||
class UpdateHelper @Inject constructor() {
|
|
||||||
|
|
||||||
lateinit var messageContainer: View
|
|
||||||
|
|
||||||
fun checkAndInstallUpdates(activity: Activity) {}
|
|
||||||
|
|
||||||
fun onActivityResult(requestCode: Int, resultCode: Int) {}
|
|
||||||
|
|
||||||
fun onResume(activity: Activity) {}
|
|
||||||
}
|
|
@ -1,7 +1,6 @@
|
|||||||
<?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="io.github.wulkanowy"
|
|
||||||
android:installLocation="internalOnly">
|
android:installLocation="internalOnly">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
@ -9,7 +8,8 @@
|
|||||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||||
<uses-permission android:name="android.permission.VIBRATE" />
|
<uses-permission android:name="android.permission.VIBRATE" />
|
||||||
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
|
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
|
||||||
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||||
|
|
||||||
<queries>
|
<queries>
|
||||||
<intent>
|
<intent>
|
||||||
@ -37,13 +37,14 @@
|
|||||||
<application
|
<application
|
||||||
android:name=".WulkanowyApp"
|
android:name=".WulkanowyApp"
|
||||||
android:allowBackup="false"
|
android:allowBackup="false"
|
||||||
|
android:dataExtractionRules="@xml/data_extraction_rules"
|
||||||
|
android:enableOnBackInvokedCallback="true"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:networkSecurityConfig="@xml/network_security_config"
|
android:networkSecurityConfig="@xml/network_security_config"
|
||||||
android:roundIcon="@mipmap/ic_launcher_round"
|
|
||||||
android:supportsRtl="false"
|
android:supportsRtl="false"
|
||||||
android:theme="@style/WulkanowyTheme"
|
android:theme="@style/WulkanowyTheme"
|
||||||
tools:ignore="GoogleAppIndexingWarning,UnusedAttribute">
|
tools:ignore="DataExtractionRules,UnusedAttribute">
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.modules.splash.SplashActivity"
|
android:name=".ui.modules.splash.SplashActivity"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
@ -71,7 +72,7 @@
|
|||||||
android:name=".ui.modules.message.send.SendMessageActivity"
|
android:name=".ui.modules.message.send.SendMessageActivity"
|
||||||
android:configChanges="orientation|screenSize"
|
android:configChanges="orientation|screenSize"
|
||||||
android:label="@string/send_message_title"
|
android:label="@string/send_message_title"
|
||||||
android:theme="@style/WulkanowyTheme.MessageSend"
|
android:theme="@style/WulkanowyTheme.NoActionBar"
|
||||||
android:windowSoftInputMode="adjustResize" />
|
android:windowSoftInputMode="adjustResize" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.modules.timetablewidget.TimetableWidgetConfigureActivity"
|
android:name=".ui.modules.timetablewidget.TimetableWidgetConfigureActivity"
|
||||||
|
@ -50,5 +50,9 @@
|
|||||||
{
|
{
|
||||||
"displayName": "Tomasz F.",
|
"displayName": "Tomasz F.",
|
||||||
"githubUsername": "Pengwius"
|
"githubUsername": "Pengwius"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"displayName": "Antoni Paduch",
|
||||||
|
"githubUsername": "janAte1"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -1,24 +1,29 @@
|
|||||||
package io.github.wulkanowy
|
package io.github.wulkanowy
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.util.Log.*
|
import android.util.Log.DEBUG
|
||||||
|
import android.util.Log.INFO
|
||||||
|
import android.util.Log.VERBOSE
|
||||||
import androidx.hilt.work.HiltWorkerFactory
|
import androidx.hilt.work.HiltWorkerFactory
|
||||||
import androidx.work.Configuration
|
import androidx.work.Configuration
|
||||||
import com.yariksoffice.lingver.Lingver
|
import com.yariksoffice.lingver.Lingver
|
||||||
import dagger.hilt.android.HiltAndroidApp
|
import dagger.hilt.android.HiltAndroidApp
|
||||||
import fr.bipi.tressence.file.FileLoggerTree
|
import fr.bipi.treessence.file.FileLoggerTree
|
||||||
import io.github.wulkanowy.data.repositories.PreferencesRepository
|
import io.github.wulkanowy.data.repositories.PreferencesRepository
|
||||||
import io.github.wulkanowy.ui.base.ThemeManager
|
import io.github.wulkanowy.ui.base.ThemeManager
|
||||||
import io.github.wulkanowy.utils.*
|
import io.github.wulkanowy.utils.ActivityLifecycleLogger
|
||||||
|
import io.github.wulkanowy.utils.AnalyticsHelper
|
||||||
|
import io.github.wulkanowy.utils.AppInfo
|
||||||
|
import io.github.wulkanowy.utils.CrashLogExceptionTree
|
||||||
|
import io.github.wulkanowy.utils.CrashLogTree
|
||||||
|
import io.github.wulkanowy.utils.DebugLogTree
|
||||||
|
import io.github.wulkanowy.utils.RemoteConfigHelper
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@HiltAndroidApp
|
@HiltAndroidApp
|
||||||
class WulkanowyApp : Application(), Configuration.Provider {
|
class WulkanowyApp : Application(), Configuration.Provider {
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var workerFactory: HiltWorkerFactory
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var themeManager: ThemeManager
|
lateinit var themeManager: ThemeManager
|
||||||
|
|
||||||
@ -31,10 +36,23 @@ class WulkanowyApp : Application(), Configuration.Provider {
|
|||||||
@Inject
|
@Inject
|
||||||
lateinit var analyticsHelper: AnalyticsHelper
|
lateinit var analyticsHelper: AnalyticsHelper
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
lateinit var remoteConfigHelper: RemoteConfigHelper
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
lateinit var workerFactory: HiltWorkerFactory
|
||||||
|
|
||||||
|
override val workManagerConfiguration: Configuration
|
||||||
|
get() = Configuration.Builder()
|
||||||
|
.setWorkerFactory(workerFactory)
|
||||||
|
.setMinimumLoggingLevel(if (appInfo.isDebug) VERBOSE else INFO)
|
||||||
|
.build()
|
||||||
|
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
initializeAppLanguage()
|
initializeAppLanguage()
|
||||||
themeManager.applyDefaultTheme()
|
themeManager.applyDefaultTheme()
|
||||||
|
remoteConfigHelper.initialize()
|
||||||
initLogging()
|
initLogging()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,9 +84,4 @@ class WulkanowyApp : Application(), Configuration.Provider {
|
|||||||
analyticsHelper.logEvent("language", "startup" to preferencesRepository.appLanguage)
|
analyticsHelper.logEvent("language", "startup" to preferencesRepository.appLanguage)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getWorkManagerConfiguration() = Configuration.Builder()
|
|
||||||
.setWorkerFactory(workerFactory)
|
|
||||||
.setMinimumLoggingLevel(if (appInfo.isDebug) VERBOSE else INFO)
|
|
||||||
.build()
|
|
||||||
}
|
}
|
||||||
|
@ -14,13 +14,13 @@ import dagger.hilt.InstallIn
|
|||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import dagger.hilt.components.SingletonComponent
|
import dagger.hilt.components.SingletonComponent
|
||||||
import io.github.wulkanowy.data.api.AdminMessageService
|
import io.github.wulkanowy.data.api.AdminMessageService
|
||||||
|
import io.github.wulkanowy.data.api.SchoolsService
|
||||||
import io.github.wulkanowy.data.db.AppDatabase
|
import io.github.wulkanowy.data.db.AppDatabase
|
||||||
import io.github.wulkanowy.data.db.SharedPrefProvider
|
import io.github.wulkanowy.data.db.SharedPrefProvider
|
||||||
import io.github.wulkanowy.data.repositories.PreferencesRepository
|
import io.github.wulkanowy.data.repositories.PreferencesRepository
|
||||||
import io.github.wulkanowy.sdk.Sdk
|
import io.github.wulkanowy.sdk.Sdk
|
||||||
import io.github.wulkanowy.utils.AppInfo
|
import io.github.wulkanowy.utils.AppInfo
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import io.github.wulkanowy.utils.RemoteConfigHelper
|
||||||
import kotlinx.serialization.ExperimentalSerializationApi
|
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
import okhttp3.MediaType.Companion.toMediaType
|
import okhttp3.MediaType.Companion.toMediaType
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
@ -37,10 +37,11 @@ internal class DataModule {
|
|||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
@Provides
|
@Provides
|
||||||
fun provideSdk(chuckerInterceptor: ChuckerInterceptor) =
|
fun provideSdk(chuckerInterceptor: ChuckerInterceptor, remoteConfig: RemoteConfigHelper) =
|
||||||
Sdk().apply {
|
Sdk().apply {
|
||||||
androidVersion = android.os.Build.VERSION.RELEASE
|
androidVersion = android.os.Build.VERSION.RELEASE
|
||||||
buildTag = android.os.Build.MODEL
|
buildTag = android.os.Build.MODEL
|
||||||
|
userAgentTemplate = remoteConfig.userAgentTemplate
|
||||||
setSimpleHttpLogger { Timber.d(it) }
|
setSimpleHttpLogger { Timber.d(it) }
|
||||||
|
|
||||||
// for debug only
|
// for debug only
|
||||||
@ -80,22 +81,31 @@ internal class DataModule {
|
|||||||
.readTimeout(30, TimeUnit.SECONDS)
|
.readTimeout(30, TimeUnit.SECONDS)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
@OptIn(ExperimentalSerializationApi::class)
|
|
||||||
@Singleton
|
@Singleton
|
||||||
@Provides
|
@Provides
|
||||||
fun provideRetrofit(
|
fun provideAdminMessageService(
|
||||||
okHttpClient: OkHttpClient,
|
okHttpClient: OkHttpClient,
|
||||||
json: Json,
|
json: Json,
|
||||||
appInfo: AppInfo
|
appInfo: AppInfo
|
||||||
): Retrofit = Retrofit.Builder()
|
): AdminMessageService = Retrofit.Builder()
|
||||||
.baseUrl(appInfo.messagesBaseUrl)
|
.baseUrl(appInfo.messagesBaseUrl)
|
||||||
.client(okHttpClient)
|
.client(okHttpClient)
|
||||||
.addConverterFactory(json.asConverterFactory("application/json".toMediaType()))
|
.addConverterFactory(json.asConverterFactory("application/json".toMediaType()))
|
||||||
.build()
|
.build()
|
||||||
|
.create()
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
@Provides
|
@Provides
|
||||||
fun provideAdminMessageService(retrofit: Retrofit): AdminMessageService = retrofit.create()
|
fun provideSchoolsService(
|
||||||
|
okHttpClient: OkHttpClient,
|
||||||
|
json: Json,
|
||||||
|
appInfo: AppInfo,
|
||||||
|
): SchoolsService = Retrofit.Builder()
|
||||||
|
.baseUrl(appInfo.schoolsBaseUrl)
|
||||||
|
.client(okHttpClient)
|
||||||
|
.addConverterFactory(json.asConverterFactory("application/json".toMediaType()))
|
||||||
|
.build()
|
||||||
|
.create()
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
@Provides
|
@Provides
|
||||||
@ -110,7 +120,6 @@ internal class DataModule {
|
|||||||
fun provideSharedPref(@ApplicationContext context: Context): SharedPreferences =
|
fun provideSharedPref(@ApplicationContext context: Context): SharedPreferences =
|
||||||
PreferenceManager.getDefaultSharedPreferences(context)
|
PreferenceManager.getDefaultSharedPreferences(context)
|
||||||
|
|
||||||
@OptIn(ExperimentalCoroutinesApi::class)
|
|
||||||
@Singleton
|
@Singleton
|
||||||
@Provides
|
@Provides
|
||||||
fun provideFlowSharedPref(sharedPreferences: SharedPreferences) =
|
fun provideFlowSharedPref(sharedPreferences: SharedPreferences) =
|
||||||
@ -197,7 +206,7 @@ internal class DataModule {
|
|||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
@Provides
|
@Provides
|
||||||
fun provideReportingUnitDao(database: AppDatabase) = database.reportingUnitDao
|
fun provideMailboxesDao(database: AppDatabase) = database.mailboxDao
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
@Provides
|
@Provides
|
||||||
|
@ -49,8 +49,8 @@ fun <T, U> Resource<T>.mapData(block: (T) -> U) = when (this) {
|
|||||||
|
|
||||||
fun <T> Flow<Resource<T>>.logResourceStatus(name: String, showData: Boolean = false) = onEach {
|
fun <T> Flow<Resource<T>>.logResourceStatus(name: String, showData: Boolean = false) = onEach {
|
||||||
val description = when (it) {
|
val description = when (it) {
|
||||||
is Resource.Loading -> "started"
|
|
||||||
is Resource.Intermediate -> "intermediate data received" + if (showData) " (data: `${it.data}`)" else ""
|
is Resource.Intermediate -> "intermediate data received" + if (showData) " (data: `${it.data}`)" else ""
|
||||||
|
is Resource.Loading -> "started"
|
||||||
is Resource.Success -> "success" + if (showData) " (data: `${it.data}`)" else ""
|
is Resource.Success -> "success" + if (showData) " (data: `${it.data}`)" else ""
|
||||||
is Resource.Error -> "exception occurred: ${it.error}"
|
is Resource.Error -> "exception occurred: ${it.error}"
|
||||||
}
|
}
|
||||||
@ -148,7 +148,7 @@ inline fun <ResultType, RequestType, T> networkBoundResource(
|
|||||||
crossinline saveFetchResult: suspend (old: ResultType, new: RequestType) -> Unit,
|
crossinline saveFetchResult: suspend (old: ResultType, new: RequestType) -> Unit,
|
||||||
crossinline onFetchFailed: (Throwable) -> Unit = { },
|
crossinline onFetchFailed: (Throwable) -> Unit = { },
|
||||||
crossinline shouldFetch: (ResultType) -> Boolean = { true },
|
crossinline shouldFetch: (ResultType) -> Boolean = { true },
|
||||||
crossinline mapResult: (ResultType) -> T
|
crossinline mapResult: (ResultType) -> T,
|
||||||
) = flow {
|
) = flow {
|
||||||
emit(Resource.Loading())
|
emit(Resource.Loading())
|
||||||
|
|
||||||
|
@ -0,0 +1,14 @@
|
|||||||
|
package io.github.wulkanowy.data.api
|
||||||
|
|
||||||
|
import io.github.wulkanowy.data.pojos.IntegrityRequest
|
||||||
|
import io.github.wulkanowy.data.pojos.LoginEvent
|
||||||
|
import retrofit2.http.Body
|
||||||
|
import retrofit2.http.POST
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
interface SchoolsService {
|
||||||
|
|
||||||
|
@POST("/log/loginEvent")
|
||||||
|
suspend fun logLoginEvent(@Body request: IntegrityRequest<LoginEvent>)
|
||||||
|
}
|
@ -30,7 +30,7 @@ import javax.inject.Singleton
|
|||||||
Subject::class,
|
Subject::class,
|
||||||
LuckyNumber::class,
|
LuckyNumber::class,
|
||||||
CompletedLesson::class,
|
CompletedLesson::class,
|
||||||
ReportingUnit::class,
|
Mailbox::class,
|
||||||
Recipient::class,
|
Recipient::class,
|
||||||
MobileDevice::class,
|
MobileDevice::class,
|
||||||
Teacher::class,
|
Teacher::class,
|
||||||
@ -47,6 +47,10 @@ import javax.inject.Singleton
|
|||||||
AutoMigration(from = 44, to = 45),
|
AutoMigration(from = 44, to = 45),
|
||||||
AutoMigration(from = 46, to = 47),
|
AutoMigration(from = 46, to = 47),
|
||||||
AutoMigration(from = 47, to = 48),
|
AutoMigration(from = 47, to = 48),
|
||||||
|
AutoMigration(from = 51, to = 52),
|
||||||
|
AutoMigration(from = 54, to = 55, spec = Migration55::class),
|
||||||
|
AutoMigration(from = 55, to = 56),
|
||||||
|
AutoMigration(from = 56, to = 57, spec = Migration57::class),
|
||||||
],
|
],
|
||||||
version = AppDatabase.VERSION_SCHEMA,
|
version = AppDatabase.VERSION_SCHEMA,
|
||||||
exportSchema = true
|
exportSchema = true
|
||||||
@ -55,7 +59,7 @@ import javax.inject.Singleton
|
|||||||
abstract class AppDatabase : RoomDatabase() {
|
abstract class AppDatabase : RoomDatabase() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val VERSION_SCHEMA = 48
|
const val VERSION_SCHEMA = 57
|
||||||
|
|
||||||
fun getMigrations(sharedPrefProvider: SharedPrefProvider, appInfo: AppInfo) = arrayOf(
|
fun getMigrations(sharedPrefProvider: SharedPrefProvider, appInfo: AppInfo) = arrayOf(
|
||||||
Migration2(),
|
Migration2(),
|
||||||
@ -102,6 +106,11 @@ abstract class AppDatabase : RoomDatabase() {
|
|||||||
Migration43(),
|
Migration43(),
|
||||||
Migration44(),
|
Migration44(),
|
||||||
Migration46(),
|
Migration46(),
|
||||||
|
Migration49(),
|
||||||
|
Migration50(),
|
||||||
|
Migration51(),
|
||||||
|
Migration53(),
|
||||||
|
Migration54(),
|
||||||
)
|
)
|
||||||
|
|
||||||
fun newInstance(
|
fun newInstance(
|
||||||
@ -152,7 +161,7 @@ abstract class AppDatabase : RoomDatabase() {
|
|||||||
|
|
||||||
abstract val completedLessonsDao: CompletedLessonsDao
|
abstract val completedLessonsDao: CompletedLessonsDao
|
||||||
|
|
||||||
abstract val reportingUnitDao: ReportingUnitDao
|
abstract val mailboxDao: MailboxDao
|
||||||
|
|
||||||
abstract val recipientDao: RecipientDao
|
abstract val recipientDao: RecipientDao
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package io.github.wulkanowy.data.db
|
package io.github.wulkanowy.data.db
|
||||||
|
|
||||||
import androidx.room.TypeConverter
|
import androidx.room.TypeConverter
|
||||||
|
import io.github.wulkanowy.data.enums.MessageType
|
||||||
import io.github.wulkanowy.ui.modules.Destination
|
import io.github.wulkanowy.ui.modules.Destination
|
||||||
import io.github.wulkanowy.utils.toTimestamp
|
import io.github.wulkanowy.utils.toTimestamp
|
||||||
import kotlinx.serialization.SerializationException
|
import kotlinx.serialization.SerializationException
|
||||||
@ -68,4 +69,9 @@ class Converters {
|
|||||||
@TypeConverter
|
@TypeConverter
|
||||||
fun stringToDestination(destination: String): Destination = json.decodeFromString(destination)
|
fun stringToDestination(destination: String): Destination = json.decodeFromString(destination)
|
||||||
|
|
||||||
|
@TypeConverter
|
||||||
|
fun messageTypesToString(types: List<MessageType>): String = json.encodeToString(types)
|
||||||
|
|
||||||
|
@TypeConverter
|
||||||
|
fun stringToMessageTypes(text: String): List<MessageType> = json.decodeFromString(text)
|
||||||
}
|
}
|
||||||
|
@ -22,4 +22,4 @@ abstract class AdminMessageDao : BaseDao<AdminMessage> {
|
|||||||
deleteAll(oldMessages)
|
deleteAll(oldMessages)
|
||||||
insertAll(newMessages)
|
insertAll(newMessages)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,11 +2,12 @@ package io.github.wulkanowy.data.db.dao
|
|||||||
|
|
||||||
import androidx.room.Delete
|
import androidx.room.Delete
|
||||||
import androidx.room.Insert
|
import androidx.room.Insert
|
||||||
|
import androidx.room.OnConflictStrategy
|
||||||
import androidx.room.Update
|
import androidx.room.Update
|
||||||
|
|
||||||
interface BaseDao<T> {
|
interface BaseDao<T> {
|
||||||
|
|
||||||
@Insert
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
suspend fun insertAll(items: List<T>): List<Long>
|
suspend fun insertAll(items: List<T>): List<Long>
|
||||||
|
|
||||||
@Update
|
@Update
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
package io.github.wulkanowy.data.db.dao
|
||||||
|
|
||||||
|
import androidx.room.Dao
|
||||||
|
import androidx.room.Query
|
||||||
|
import io.github.wulkanowy.data.db.entities.Mailbox
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
@Dao
|
||||||
|
interface MailboxDao : BaseDao<Mailbox> {
|
||||||
|
|
||||||
|
@Query("SELECT * FROM Mailboxes WHERE email = :email")
|
||||||
|
suspend fun loadAll(email: String): List<Mailbox>
|
||||||
|
|
||||||
|
@Query("SELECT * FROM Mailboxes WHERE email = :email AND symbol = :symbol AND schoolId = :schoolId")
|
||||||
|
fun loadAll(email: String, symbol: String, schoolId: String): Flow<List<Mailbox>>
|
||||||
|
}
|
@ -11,9 +11,12 @@ import kotlinx.coroutines.flow.Flow
|
|||||||
interface MessagesDao : BaseDao<Message> {
|
interface MessagesDao : BaseDao<Message> {
|
||||||
|
|
||||||
@Transaction
|
@Transaction
|
||||||
@Query("SELECT * FROM Messages WHERE student_id = :studentId AND message_id = :messageId")
|
@Query("SELECT * FROM Messages WHERE message_global_key = :messageGlobalKey")
|
||||||
fun loadMessageWithAttachment(studentId: Int, messageId: Int): Flow<MessageWithAttachment?>
|
fun loadMessageWithAttachment(messageGlobalKey: String): Flow<MessageWithAttachment?>
|
||||||
|
|
||||||
@Query("SELECT * FROM Messages WHERE student_id = :studentId AND folder_id = :folder ORDER BY date DESC")
|
@Query("SELECT * FROM Messages WHERE mailbox_key = :mailboxKey AND folder_id = :folder ORDER BY date DESC")
|
||||||
fun loadAll(studentId: Int, folder: Int): Flow<List<Message>>
|
fun loadAll(mailboxKey: String, folder: Int): Flow<List<Message>>
|
||||||
|
|
||||||
|
@Query("SELECT * FROM Messages WHERE email = :email AND folder_id = :folder ORDER BY date DESC")
|
||||||
|
fun loadAll(folder: Int, email: String): Flow<List<Message>>
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,6 @@ import kotlinx.coroutines.flow.Flow
|
|||||||
@Dao
|
@Dao
|
||||||
interface MobileDeviceDao : BaseDao<MobileDevice> {
|
interface MobileDeviceDao : BaseDao<MobileDevice> {
|
||||||
|
|
||||||
@Query("SELECT * FROM MobileDevices WHERE student_id = :userLoginId ORDER BY date DESC")
|
@Query("SELECT * FROM MobileDevices WHERE user_login_id = :userLoginId ORDER BY date DESC")
|
||||||
fun loadAll(userLoginId: Int): Flow<List<MobileDevice>>
|
fun loadAll(userLoginId: Int): Flow<List<MobileDevice>>
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package io.github.wulkanowy.data.db.dao
|
|||||||
|
|
||||||
import androidx.room.Dao
|
import androidx.room.Dao
|
||||||
import androidx.room.Query
|
import androidx.room.Query
|
||||||
|
import io.github.wulkanowy.data.db.entities.MailboxType
|
||||||
import io.github.wulkanowy.data.db.entities.Recipient
|
import io.github.wulkanowy.data.db.entities.Recipient
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@ -9,6 +10,6 @@ import javax.inject.Singleton
|
|||||||
@Dao
|
@Dao
|
||||||
interface RecipientDao : BaseDao<Recipient> {
|
interface RecipientDao : BaseDao<Recipient> {
|
||||||
|
|
||||||
@Query("SELECT * FROM Recipients WHERE student_id = :studentId AND unit_id = :unitId AND role = :role")
|
@Query("SELECT * FROM Recipients WHERE type = :type AND studentMailboxGlobalKey = :studentMailboxGlobalKey")
|
||||||
suspend fun loadAll(studentId: Int, unitId: Int, role: Int): List<Recipient>
|
suspend fun loadAll(type: MailboxType, studentMailboxGlobalKey: String): List<Recipient>
|
||||||
}
|
}
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
package io.github.wulkanowy.data.db.dao
|
|
||||||
|
|
||||||
import androidx.room.Dao
|
|
||||||
import androidx.room.Query
|
|
||||||
import io.github.wulkanowy.data.db.entities.ReportingUnit
|
|
||||||
import javax.inject.Singleton
|
|
||||||
|
|
||||||
@Singleton
|
|
||||||
@Dao
|
|
||||||
interface ReportingUnitDao : BaseDao<ReportingUnit> {
|
|
||||||
|
|
||||||
@Query("SELECT * FROM ReportingUnits WHERE student_id = :studentId")
|
|
||||||
suspend fun load(studentId: Int): List<ReportingUnit>
|
|
||||||
|
|
||||||
@Query("SELECT * FROM ReportingUnits WHERE student_id = :studentId AND real_id = :unitId")
|
|
||||||
suspend fun loadOne(studentId: Int, unitId: Int): ReportingUnit?
|
|
||||||
}
|
|
@ -10,6 +10,6 @@ import javax.inject.Singleton
|
|||||||
@Singleton
|
@Singleton
|
||||||
interface SchoolAnnouncementDao : BaseDao<SchoolAnnouncement> {
|
interface SchoolAnnouncementDao : BaseDao<SchoolAnnouncement> {
|
||||||
|
|
||||||
@Query("SELECT * FROM SchoolAnnouncements WHERE student_id = :studentId ORDER BY date DESC")
|
@Query("SELECT * FROM SchoolAnnouncements WHERE user_login_id = :userLoginId ORDER BY date DESC")
|
||||||
fun loadAll(studentId: Int): Flow<List<SchoolAnnouncement>>
|
fun loadAll(userLoginId: Int): Flow<List<SchoolAnnouncement>>
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,23 @@
|
|||||||
package io.github.wulkanowy.data.db.dao
|
package io.github.wulkanowy.data.db.dao
|
||||||
|
|
||||||
import androidx.room.*
|
import androidx.room.Dao
|
||||||
import androidx.room.OnConflictStrategy.ABORT
|
import androidx.room.Delete
|
||||||
|
import androidx.room.Insert
|
||||||
|
import androidx.room.OnConflictStrategy
|
||||||
|
import androidx.room.Query
|
||||||
|
import androidx.room.Transaction
|
||||||
|
import androidx.room.Update
|
||||||
|
import io.github.wulkanowy.data.db.entities.Semester
|
||||||
import io.github.wulkanowy.data.db.entities.Student
|
import io.github.wulkanowy.data.db.entities.Student
|
||||||
|
import io.github.wulkanowy.data.db.entities.StudentName
|
||||||
import io.github.wulkanowy.data.db.entities.StudentNickAndAvatar
|
import io.github.wulkanowy.data.db.entities.StudentNickAndAvatar
|
||||||
import io.github.wulkanowy.data.db.entities.StudentWithSemesters
|
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
@Dao
|
@Dao
|
||||||
abstract class StudentDao {
|
abstract class StudentDao {
|
||||||
|
|
||||||
@Insert(onConflict = ABORT)
|
@Insert(onConflict = OnConflictStrategy.ABORT)
|
||||||
abstract suspend fun insertAll(student: List<Student>): List<Long>
|
abstract suspend fun insertAll(student: List<Student>): List<Long>
|
||||||
|
|
||||||
@Delete
|
@Delete
|
||||||
@ -20,6 +26,9 @@ abstract class StudentDao {
|
|||||||
@Update(entity = Student::class)
|
@Update(entity = Student::class)
|
||||||
abstract suspend fun update(studentNickAndAvatar: StudentNickAndAvatar)
|
abstract suspend fun update(studentNickAndAvatar: StudentNickAndAvatar)
|
||||||
|
|
||||||
|
@Update(entity = Student::class)
|
||||||
|
abstract suspend fun update(studentName: StudentName)
|
||||||
|
|
||||||
@Query("SELECT * FROM Students WHERE is_current = 1")
|
@Query("SELECT * FROM Students WHERE is_current = 1")
|
||||||
abstract suspend fun loadCurrent(): Student?
|
abstract suspend fun loadCurrent(): Student?
|
||||||
|
|
||||||
@ -30,12 +39,12 @@ abstract class StudentDao {
|
|||||||
abstract suspend fun loadAll(): List<Student>
|
abstract suspend fun loadAll(): List<Student>
|
||||||
|
|
||||||
@Transaction
|
@Transaction
|
||||||
@Query("SELECT * FROM Students")
|
@Query("SELECT * FROM Students JOIN Semesters ON Students.student_id = Semesters.student_id AND Students.class_id = Semesters.class_id")
|
||||||
abstract suspend fun loadStudentsWithSemesters(): List<StudentWithSemesters>
|
abstract suspend fun loadStudentsWithSemesters(): Map<Student, List<Semester>>
|
||||||
|
|
||||||
@Transaction
|
@Transaction
|
||||||
@Query("SELECT * FROM Students WHERE id = :id")
|
@Query("SELECT * FROM Students JOIN Semesters ON Students.student_id = Semesters.student_id AND Students.class_id = Semesters.class_id WHERE Students.id = :id")
|
||||||
abstract suspend fun loadStudentWithSemestersById(id: Long): StudentWithSemesters?
|
abstract suspend fun loadStudentWithSemestersById(id: Long): Map<Student, List<Semester>>
|
||||||
|
|
||||||
@Query("UPDATE Students SET is_current = 1 WHERE id = :id")
|
@Query("UPDATE Students SET is_current = 1 WHERE id = :id")
|
||||||
abstract suspend fun updateCurrent(id: Long)
|
abstract suspend fun updateCurrent(id: Long)
|
||||||
@ -43,6 +52,9 @@ abstract class StudentDao {
|
|||||||
@Query("UPDATE Students SET is_current = 0")
|
@Query("UPDATE Students SET is_current = 0")
|
||||||
abstract suspend fun resetCurrent()
|
abstract suspend fun resetCurrent()
|
||||||
|
|
||||||
|
@Query("DELETE FROM Students WHERE email = :email AND user_name = :userName")
|
||||||
|
abstract suspend fun deleteByEmailAndUserName(email: String, userName: String)
|
||||||
|
|
||||||
@Transaction
|
@Transaction
|
||||||
open suspend fun switchCurrent(id: Long) {
|
open suspend fun switchCurrent(id: Long) {
|
||||||
resetCurrent()
|
resetCurrent()
|
||||||
|
@ -13,4 +13,7 @@ interface TimetableDao : BaseDao<Timetable> {
|
|||||||
|
|
||||||
@Query("SELECT * FROM Timetable WHERE diary_id = :diaryId AND student_id = :studentId AND date >= :from AND date <= :end")
|
@Query("SELECT * FROM Timetable WHERE diary_id = :diaryId AND student_id = :studentId AND date >= :from AND date <= :end")
|
||||||
fun loadAll(diaryId: Int, studentId: Int, from: LocalDate, end: LocalDate): Flow<List<Timetable>>
|
fun loadAll(diaryId: Int, studentId: Int, from: LocalDate, end: LocalDate): Flow<List<Timetable>>
|
||||||
|
|
||||||
|
@Query("SELECT * FROM Timetable WHERE diary_id = :diaryId AND student_id = :studentId AND date >= :from AND date <= :end")
|
||||||
|
fun load(diaryId: Int, studentId: Int, from: LocalDate, end: LocalDate): List<Timetable>
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package io.github.wulkanowy.data.db.entities
|
|||||||
import androidx.room.ColumnInfo
|
import androidx.room.ColumnInfo
|
||||||
import androidx.room.Entity
|
import androidx.room.Entity
|
||||||
import androidx.room.PrimaryKey
|
import androidx.room.PrimaryKey
|
||||||
|
import io.github.wulkanowy.data.enums.MessageType
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
@ -33,7 +34,8 @@ data class AdminMessage(
|
|||||||
|
|
||||||
val priority: String,
|
val priority: String,
|
||||||
|
|
||||||
val type: String,
|
@ColumnInfo(name = "types", defaultValue = "[]")
|
||||||
|
val types: List<MessageType> = emptyList(),
|
||||||
|
|
||||||
@ColumnInfo(name = "is_dismissible")
|
@ColumnInfo(name = "is_dismissible")
|
||||||
val isDismissible: Boolean = false
|
val isDismissible: Boolean = false
|
||||||
|
@ -22,6 +22,7 @@ data class Exam(
|
|||||||
|
|
||||||
val subject: String,
|
val subject: String,
|
||||||
|
|
||||||
|
@Deprecated("not available anymore")
|
||||||
val group: String,
|
val group: String,
|
||||||
|
|
||||||
val type: String,
|
val type: String,
|
||||||
|
@ -0,0 +1,32 @@
|
|||||||
|
package io.github.wulkanowy.data.db.entities
|
||||||
|
|
||||||
|
import android.os.Parcelable
|
||||||
|
import androidx.room.Entity
|
||||||
|
import androidx.room.PrimaryKey
|
||||||
|
import kotlinx.parcelize.Parcelize
|
||||||
|
|
||||||
|
@Parcelize
|
||||||
|
@Entity(tableName = "Mailboxes")
|
||||||
|
data class Mailbox(
|
||||||
|
|
||||||
|
@PrimaryKey
|
||||||
|
val globalKey: String,
|
||||||
|
|
||||||
|
val email: String,
|
||||||
|
val symbol: String,
|
||||||
|
val schoolId: String,
|
||||||
|
|
||||||
|
val fullName: String,
|
||||||
|
val userName: String,
|
||||||
|
val studentName: String,
|
||||||
|
val schoolNameShort: String,
|
||||||
|
val type: MailboxType,
|
||||||
|
) : java.io.Serializable, Parcelable
|
||||||
|
|
||||||
|
enum class MailboxType {
|
||||||
|
STUDENT,
|
||||||
|
PARENT,
|
||||||
|
GUARDIAN,
|
||||||
|
EMPLOYEE,
|
||||||
|
UNKNOWN,
|
||||||
|
}
|
@ -9,23 +9,19 @@ import java.time.Instant
|
|||||||
@Entity(tableName = "Messages")
|
@Entity(tableName = "Messages")
|
||||||
data class Message(
|
data class Message(
|
||||||
|
|
||||||
@ColumnInfo(name = "student_id")
|
@ColumnInfo(name = "email")
|
||||||
val studentId: Long,
|
val email: String,
|
||||||
|
|
||||||
@ColumnInfo(name = "real_id")
|
@ColumnInfo(name = "message_global_key")
|
||||||
val realId: Int,
|
val messageGlobalKey: String,
|
||||||
|
|
||||||
|
@ColumnInfo(name = "mailbox_key")
|
||||||
|
val mailboxKey: String,
|
||||||
|
|
||||||
@ColumnInfo(name = "message_id")
|
@ColumnInfo(name = "message_id")
|
||||||
val messageId: Int,
|
val messageId: Int,
|
||||||
|
|
||||||
@ColumnInfo(name = "sender_name")
|
val correspondents: String,
|
||||||
val sender: String,
|
|
||||||
|
|
||||||
@ColumnInfo(name = "sender_id")
|
|
||||||
val senderId: Int,
|
|
||||||
|
|
||||||
@ColumnInfo(name = "recipient_name")
|
|
||||||
val recipient: String,
|
|
||||||
|
|
||||||
val subject: String,
|
val subject: String,
|
||||||
|
|
||||||
@ -36,7 +32,11 @@ data class Message(
|
|||||||
|
|
||||||
var unread: Boolean,
|
var unread: Boolean,
|
||||||
|
|
||||||
val removed: Boolean,
|
@ColumnInfo(name = "read_by")
|
||||||
|
val readBy: Int?,
|
||||||
|
|
||||||
|
@ColumnInfo(name = "unread_by")
|
||||||
|
val unreadBy: Int?,
|
||||||
|
|
||||||
@ColumnInfo(name = "has_attachments")
|
@ColumnInfo(name = "has_attachments")
|
||||||
val hasAttachments: Boolean
|
val hasAttachments: Boolean
|
||||||
@ -48,11 +48,7 @@ data class Message(
|
|||||||
@ColumnInfo(name = "is_notified")
|
@ColumnInfo(name = "is_notified")
|
||||||
var isNotified: Boolean = true
|
var isNotified: Boolean = true
|
||||||
|
|
||||||
@ColumnInfo(name = "unread_by")
|
|
||||||
var unreadBy: Int = 0
|
|
||||||
|
|
||||||
@ColumnInfo(name = "read_by")
|
|
||||||
var readBy: Int = 0
|
|
||||||
|
|
||||||
var content: String = ""
|
var content: String = ""
|
||||||
|
var sender: String? = null
|
||||||
|
var recipients: String? = null
|
||||||
}
|
}
|
||||||
|
@ -2,21 +2,16 @@ package io.github.wulkanowy.data.db.entities
|
|||||||
|
|
||||||
import androidx.room.ColumnInfo
|
import androidx.room.ColumnInfo
|
||||||
import androidx.room.Entity
|
import androidx.room.Entity
|
||||||
import androidx.room.PrimaryKey
|
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
||||||
@Entity(tableName = "MessageAttachments")
|
@Entity(
|
||||||
|
tableName = "MessageAttachments",
|
||||||
|
primaryKeys = ["message_global_key", "url", "filename"],
|
||||||
|
)
|
||||||
data class MessageAttachment(
|
data class MessageAttachment(
|
||||||
|
|
||||||
@PrimaryKey
|
@ColumnInfo(name = "message_global_key")
|
||||||
@ColumnInfo(name = "real_id")
|
val messageGlobalKey: String,
|
||||||
val realId: Int,
|
|
||||||
|
|
||||||
@ColumnInfo(name = "message_id")
|
|
||||||
val messageId: Int,
|
|
||||||
|
|
||||||
@ColumnInfo(name = "one_drive_id")
|
|
||||||
val oneDriveId: String,
|
|
||||||
|
|
||||||
@ColumnInfo(name = "url")
|
@ColumnInfo(name = "url")
|
||||||
val url: String,
|
val url: String,
|
||||||
|
@ -7,6 +7,6 @@ data class MessageWithAttachment(
|
|||||||
@Embedded
|
@Embedded
|
||||||
val message: Message,
|
val message: Message,
|
||||||
|
|
||||||
@Relation(parentColumn = "message_id", entityColumn = "message_id")
|
@Relation(parentColumn = "message_global_key", entityColumn = "message_global_key")
|
||||||
val attachments: List<MessageAttachment>
|
val attachments: List<MessageAttachment>
|
||||||
)
|
)
|
||||||
|
@ -9,7 +9,7 @@ import java.time.Instant
|
|||||||
@Entity(tableName = "MobileDevices")
|
@Entity(tableName = "MobileDevices")
|
||||||
data class MobileDevice(
|
data class MobileDevice(
|
||||||
|
|
||||||
@ColumnInfo(name = "student_id")
|
@ColumnInfo(name = "user_login_id")
|
||||||
val userLoginId: Int,
|
val userLoginId: Int,
|
||||||
|
|
||||||
@ColumnInfo(name = "device_id")
|
@ColumnInfo(name = "device_id")
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package io.github.wulkanowy.data.db.entities
|
package io.github.wulkanowy.data.db.entities
|
||||||
|
|
||||||
import androidx.room.ColumnInfo
|
|
||||||
import androidx.room.Entity
|
import androidx.room.Entity
|
||||||
import androidx.room.PrimaryKey
|
import androidx.room.PrimaryKey
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
@ -8,32 +7,16 @@ import java.io.Serializable
|
|||||||
@kotlinx.serialization.Serializable
|
@kotlinx.serialization.Serializable
|
||||||
@Entity(tableName = "Recipients")
|
@Entity(tableName = "Recipients")
|
||||||
data class Recipient(
|
data class Recipient(
|
||||||
|
val mailboxGlobalKey: String,
|
||||||
@ColumnInfo(name = "student_id")
|
val studentMailboxGlobalKey: String,
|
||||||
val studentId: Int,
|
val fullName: String,
|
||||||
|
val userName: String,
|
||||||
@ColumnInfo(name = "real_id")
|
val schoolShortName: String,
|
||||||
val realId: String,
|
val type: MailboxType,
|
||||||
|
|
||||||
val name: String,
|
|
||||||
|
|
||||||
@ColumnInfo(name = "real_name")
|
|
||||||
val realName: String,
|
|
||||||
|
|
||||||
@ColumnInfo(name = "login_id")
|
|
||||||
val loginId: Int,
|
|
||||||
|
|
||||||
@ColumnInfo(name = "unit_id")
|
|
||||||
val unitId: Int,
|
|
||||||
|
|
||||||
val role: Int,
|
|
||||||
|
|
||||||
val hash: String
|
|
||||||
|
|
||||||
) : Serializable {
|
) : Serializable {
|
||||||
|
|
||||||
@PrimaryKey(autoGenerate = true)
|
@PrimaryKey(autoGenerate = true)
|
||||||
var id: Long = 0
|
var id: Long = 0
|
||||||
|
|
||||||
override fun toString() = name
|
override fun toString() = userName
|
||||||
}
|
}
|
||||||
|
@ -1,32 +0,0 @@
|
|||||||
package io.github.wulkanowy.data.db.entities
|
|
||||||
|
|
||||||
import androidx.room.ColumnInfo
|
|
||||||
import androidx.room.Entity
|
|
||||||
import androidx.room.PrimaryKey
|
|
||||||
import java.io.Serializable
|
|
||||||
|
|
||||||
@Entity(tableName = "ReportingUnits")
|
|
||||||
data class ReportingUnit(
|
|
||||||
|
|
||||||
@ColumnInfo(name = "student_id")
|
|
||||||
val studentId: Int,
|
|
||||||
|
|
||||||
@ColumnInfo(name = "real_id")
|
|
||||||
val unitId: Int,
|
|
||||||
|
|
||||||
@ColumnInfo(name = "short")
|
|
||||||
val shortName: String,
|
|
||||||
|
|
||||||
@ColumnInfo(name = "sender_id")
|
|
||||||
val senderId: Int,
|
|
||||||
|
|
||||||
@ColumnInfo(name = "sender_name")
|
|
||||||
val senderName: String,
|
|
||||||
|
|
||||||
val roles: List<Int>
|
|
||||||
|
|
||||||
) : Serializable {
|
|
||||||
|
|
||||||
@PrimaryKey(autoGenerate = true)
|
|
||||||
var id: Long = 0
|
|
||||||
}
|
|
@ -9,8 +9,8 @@ import java.time.LocalDate
|
|||||||
@Entity(tableName = "SchoolAnnouncements")
|
@Entity(tableName = "SchoolAnnouncements")
|
||||||
data class SchoolAnnouncement(
|
data class SchoolAnnouncement(
|
||||||
|
|
||||||
@ColumnInfo(name = "student_id")
|
@ColumnInfo(name = "user_login_id")
|
||||||
val studentId: Int,
|
val userLoginId: Int,
|
||||||
|
|
||||||
val date: LocalDate,
|
val date: LocalDate,
|
||||||
|
|
||||||
|
@ -19,6 +19,9 @@ data class Student(
|
|||||||
@ColumnInfo(name = "scrapper_base_url")
|
@ColumnInfo(name = "scrapper_base_url")
|
||||||
val scrapperBaseUrl: String,
|
val scrapperBaseUrl: String,
|
||||||
|
|
||||||
|
@ColumnInfo(name = "scrapper_domain_suffix", defaultValue = "")
|
||||||
|
val scrapperDomainSuffix: String,
|
||||||
|
|
||||||
@ColumnInfo(name = "mobile_base_url")
|
@ColumnInfo(name = "mobile_base_url")
|
||||||
val mobileBaseUrl: String,
|
val mobileBaseUrl: String,
|
||||||
|
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
package io.github.wulkanowy.data.db.entities
|
||||||
|
|
||||||
|
import androidx.room.ColumnInfo
|
||||||
|
import androidx.room.Entity
|
||||||
|
import androidx.room.PrimaryKey
|
||||||
|
import java.io.Serializable
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
data class StudentName(
|
||||||
|
|
||||||
|
@ColumnInfo(name = "student_name")
|
||||||
|
val studentName: String
|
||||||
|
|
||||||
|
) : Serializable {
|
||||||
|
|
||||||
|
@PrimaryKey
|
||||||
|
var id: Long = 0
|
||||||
|
}
|
@ -1,13 +1,8 @@
|
|||||||
package io.github.wulkanowy.data.db.entities
|
package io.github.wulkanowy.data.db.entities
|
||||||
|
|
||||||
import androidx.room.Embedded
|
|
||||||
import androidx.room.Relation
|
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
||||||
data class StudentWithSemesters(
|
data class StudentWithSemesters(
|
||||||
@Embedded
|
|
||||||
val student: Student,
|
val student: Student,
|
||||||
|
|
||||||
@Relation(parentColumn = "student_id", entityColumn = "student_id")
|
|
||||||
val semesters: List<Semester>
|
val semesters: List<Semester>
|
||||||
) : Serializable
|
) : Serializable
|
||||||
|
@ -5,7 +5,7 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration10 : Migration(9, 10) {
|
class Migration10 : Migration(9, 10) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("ALTER TABLE Grades_Summary RENAME TO GradesSummary")
|
db.execSQL("ALTER TABLE Grades_Summary RENAME TO GradesSummary")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,8 +5,9 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration11 : Migration(10, 11) {
|
class Migration11 : Migration(10, 11) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("""
|
db.execSQL(
|
||||||
|
"""
|
||||||
CREATE TABLE IF NOT EXISTS Grades_temp (
|
CREATE TABLE IF NOT EXISTS Grades_temp (
|
||||||
id INTEGER PRIMARY KEY NOT NULL,
|
id INTEGER PRIMARY KEY NOT NULL,
|
||||||
is_read INTEGER NOT NULL,
|
is_read INTEGER NOT NULL,
|
||||||
@ -26,9 +27,10 @@ class Migration11 : Migration(10, 11) {
|
|||||||
date INTEGER NOT NULL,
|
date INTEGER NOT NULL,
|
||||||
teacher TEXT NOT NULL
|
teacher TEXT NOT NULL
|
||||||
)
|
)
|
||||||
""")
|
"""
|
||||||
database.execSQL("INSERT INTO Grades_temp SELECT * FROM Grades")
|
)
|
||||||
database.execSQL("DROP TABLE Grades")
|
db.execSQL("INSERT INTO Grades_temp SELECT * FROM Grades")
|
||||||
database.execSQL("ALTER TABLE Grades_temp RENAME TO Grades")
|
db.execSQL("DROP TABLE Grades")
|
||||||
|
db.execSQL("ALTER TABLE Grades_temp RENAME TO Grades")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,16 +5,17 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration12 : Migration(11, 12) {
|
class Migration12 : Migration(11, 12) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
createTempStudentsTable(database)
|
createTempStudentsTable(db)
|
||||||
replaceStudentTable(database)
|
replaceStudentTable(db)
|
||||||
updateStudentsWithClassId(database, getStudentsIds(database))
|
updateStudentsWithClassId(db, getStudentsIds(db))
|
||||||
removeStudentsWithNoClassId(database)
|
removeStudentsWithNoClassId(db)
|
||||||
ensureThereIsOnlyOneCurrentStudent(database)
|
ensureThereIsOnlyOneCurrentStudent(db)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createTempStudentsTable(database: SupportSQLiteDatabase) {
|
private fun createTempStudentsTable(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("""
|
db.execSQL(
|
||||||
|
"""
|
||||||
CREATE TABLE IF NOT EXISTS Students_tmp (
|
CREATE TABLE IF NOT EXISTS Students_tmp (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
endpoint TEXT NOT NULL,
|
endpoint TEXT NOT NULL,
|
||||||
@ -30,15 +31,16 @@ class Migration12 : Migration(11, 12) {
|
|||||||
registration_date INTEGER NOT NULL,
|
registration_date INTEGER NOT NULL,
|
||||||
class_id INTEGER NOT NULL
|
class_id INTEGER NOT NULL
|
||||||
)
|
)
|
||||||
""")
|
"""
|
||||||
database.execSQL("CREATE UNIQUE INDEX index_Students_email_symbol_student_id_school_id_class_id ON Students_tmp (email, symbol, student_id, school_id, class_id)")
|
)
|
||||||
|
db.execSQL("CREATE UNIQUE INDEX index_Students_email_symbol_student_id_school_id_class_id ON Students_tmp (email, symbol, student_id, school_id, class_id)")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun replaceStudentTable(database: SupportSQLiteDatabase) {
|
private fun replaceStudentTable(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("ALTER TABLE Students ADD COLUMN class_id INTEGER DEFAULT 0 NOT NULL")
|
db.execSQL("ALTER TABLE Students ADD COLUMN class_id INTEGER DEFAULT 0 NOT NULL")
|
||||||
database.execSQL("INSERT INTO Students_tmp SELECT * FROM Students")
|
db.execSQL("INSERT INTO Students_tmp SELECT * FROM Students")
|
||||||
database.execSQL("DROP TABLE Students")
|
db.execSQL("DROP TABLE Students")
|
||||||
database.execSQL("ALTER TABLE Students_tmp RENAME TO Students")
|
db.execSQL("ALTER TABLE Students_tmp RENAME TO Students")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getStudentsIds(database: SupportSQLiteDatabase): List<Int> {
|
private fun getStudentsIds(database: SupportSQLiteDatabase): List<Int> {
|
||||||
@ -54,18 +56,18 @@ class Migration12 : Migration(11, 12) {
|
|||||||
return students
|
return students
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateStudentsWithClassId(database: SupportSQLiteDatabase, students: List<Int>) {
|
private fun updateStudentsWithClassId(db: SupportSQLiteDatabase, students: List<Int>) {
|
||||||
students.forEach {
|
students.forEach {
|
||||||
database.execSQL("UPDATE Students SET class_id = IFNULL((SELECT class_id FROM Semesters WHERE student_id = $it), 0) WHERE student_id = $it")
|
db.execSQL("UPDATE Students SET class_id = IFNULL((SELECT class_id FROM Semesters WHERE student_id = $it), 0) WHERE student_id = $it")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun removeStudentsWithNoClassId(database: SupportSQLiteDatabase) {
|
private fun removeStudentsWithNoClassId(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("DELETE FROM Students WHERE class_id = 0")
|
db.execSQL("DELETE FROM Students WHERE class_id = 0")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ensureThereIsOnlyOneCurrentStudent(database: SupportSQLiteDatabase) {
|
private fun ensureThereIsOnlyOneCurrentStudent(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("UPDATE Students SET is_current = 0")
|
db.execSQL("UPDATE Students SET is_current = 0")
|
||||||
database.execSQL("UPDATE Students SET is_current = 1 WHERE id = (SELECT MAX(id) FROM Students)")
|
db.execSQL("UPDATE Students SET is_current = 1 WHERE id = (SELECT MAX(id) FROM Students)")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,27 +5,30 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration13 : Migration(12, 13) {
|
class Migration13 : Migration(12, 13) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
addClassNameToStudents(database, getStudentsIds(database))
|
addClassNameToStudents(db, getStudentsIds(db))
|
||||||
updateSemestersTable(database)
|
updateSemestersTable(db)
|
||||||
markAtLeastAndOnlyOneSemesterAtCurrent(database, getStudentsAndClassIds(database))
|
markAtLeastAndOnlyOneSemesterAtCurrent(db, getStudentsAndClassIds(db))
|
||||||
clearMessagesTable(database)
|
clearMessagesTable(db)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addClassNameToStudents(database: SupportSQLiteDatabase, students: List<Pair<Int, String>>) {
|
private fun addClassNameToStudents(
|
||||||
database.execSQL("ALTER TABLE Students ADD COLUMN class_name TEXT DEFAULT \"\" NOT NULL")
|
db: SupportSQLiteDatabase,
|
||||||
|
students: List<Pair<Int, String>>
|
||||||
|
) {
|
||||||
|
db.execSQL("ALTER TABLE Students ADD COLUMN class_name TEXT DEFAULT \"\" NOT NULL")
|
||||||
|
|
||||||
students.forEach { (id, name) ->
|
students.forEach { (id, name) ->
|
||||||
val schoolName = name.substringAfter(" - ")
|
val schoolName = name.substringAfter(" - ")
|
||||||
val className = name.substringBefore(" - ", "").replace("Klasa ", "")
|
val className = name.substringBefore(" - ", "").replace("Klasa ", "")
|
||||||
database.execSQL("UPDATE Students SET class_name = '$className' WHERE id = '$id'")
|
db.execSQL("UPDATE Students SET class_name = '$className' WHERE id = '$id'")
|
||||||
database.execSQL("UPDATE Students SET school_name = '$schoolName' WHERE id = '$id'")
|
db.execSQL("UPDATE Students SET school_name = '$schoolName' WHERE id = '$id'")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getStudentsIds(database: SupportSQLiteDatabase): MutableList<Pair<Int, String>> {
|
private fun getStudentsIds(db: SupportSQLiteDatabase): MutableList<Pair<Int, String>> {
|
||||||
val students = mutableListOf<Pair<Int, String>>()
|
val students = mutableListOf<Pair<Int, String>>()
|
||||||
database.query("SELECT id, school_name FROM Students").use {
|
db.query("SELECT id, school_name FROM Students").use {
|
||||||
if (it.moveToFirst()) {
|
if (it.moveToFirst()) {
|
||||||
do {
|
do {
|
||||||
students.add(it.getInt(0) to it.getString(1))
|
students.add(it.getInt(0) to it.getString(1))
|
||||||
@ -36,15 +39,15 @@ class Migration13 : Migration(12, 13) {
|
|||||||
return students
|
return students
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateSemestersTable(database: SupportSQLiteDatabase) {
|
private fun updateSemestersTable(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("ALTER TABLE Semesters ADD COLUMN school_year INTEGER DEFAULT 1970 NOT NULL")
|
db.execSQL("ALTER TABLE Semesters ADD COLUMN school_year INTEGER DEFAULT 1970 NOT NULL")
|
||||||
database.execSQL("ALTER TABLE Semesters ADD COLUMN start INTEGER DEFAULT 0 NOT NULL")
|
db.execSQL("ALTER TABLE Semesters ADD COLUMN start INTEGER DEFAULT 0 NOT NULL")
|
||||||
database.execSQL("ALTER TABLE Semesters ADD COLUMN `end` INTEGER DEFAULT 0 NOT NULL")
|
db.execSQL("ALTER TABLE Semesters ADD COLUMN `end` INTEGER DEFAULT 0 NOT NULL")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getStudentsAndClassIds(database: SupportSQLiteDatabase): List<Pair<Int, Int>> {
|
private fun getStudentsAndClassIds(db: SupportSQLiteDatabase): List<Pair<Int, Int>> {
|
||||||
val students = mutableListOf<Pair<Int, Int>>()
|
val students = mutableListOf<Pair<Int, Int>>()
|
||||||
database.query("SELECT student_id, class_id FROM Students").use {
|
db.query("SELECT student_id, class_id FROM Students").use {
|
||||||
if (it.moveToFirst()) {
|
if (it.moveToFirst()) {
|
||||||
do {
|
do {
|
||||||
students.add(it.getInt(0) to it.getInt(1))
|
students.add(it.getInt(0) to it.getInt(1))
|
||||||
@ -55,14 +58,17 @@ class Migration13 : Migration(12, 13) {
|
|||||||
return students
|
return students
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun markAtLeastAndOnlyOneSemesterAtCurrent(database: SupportSQLiteDatabase, students: List<Pair<Int, Int>>) {
|
private fun markAtLeastAndOnlyOneSemesterAtCurrent(
|
||||||
|
db: SupportSQLiteDatabase,
|
||||||
|
students: List<Pair<Int, Int>>
|
||||||
|
) {
|
||||||
students.forEach { (studentId, classId) ->
|
students.forEach { (studentId, classId) ->
|
||||||
database.execSQL("UPDATE Semesters SET is_current = 0 WHERE student_id = '$studentId' AND class_id = '$classId'")
|
db.execSQL("UPDATE Semesters SET is_current = 0 WHERE student_id = '$studentId' AND class_id = '$classId'")
|
||||||
database.execSQL("UPDATE Semesters SET is_current = 1 WHERE id = (SELECT id FROM Semesters WHERE student_id = '$studentId' AND class_id = '$classId' ORDER BY semester_id DESC)")
|
db.execSQL("UPDATE Semesters SET is_current = 1 WHERE id = (SELECT id FROM Semesters WHERE student_id = '$studentId' AND class_id = '$classId' ORDER BY semester_id DESC)")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun clearMessagesTable(database: SupportSQLiteDatabase) {
|
private fun clearMessagesTable(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("DELETE FROM Messages")
|
db.execSQL("DELETE FROM Messages")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,9 +5,10 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration14 : Migration(13, 14) {
|
class Migration14 : Migration(13, 14) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("DROP TABLE IF EXISTS GradesSummary")
|
db.execSQL("DROP TABLE IF EXISTS GradesSummary")
|
||||||
database.execSQL("""
|
db.execSQL(
|
||||||
|
"""
|
||||||
CREATE TABLE IF NOT EXISTS GradesSummary (
|
CREATE TABLE IF NOT EXISTS GradesSummary (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
semester_id INTEGER NOT NULL,
|
semester_id INTEGER NOT NULL,
|
||||||
|
@ -5,8 +5,9 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration15 : Migration(14, 15) {
|
class Migration15 : Migration(14, 15) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("""
|
db.execSQL(
|
||||||
|
"""
|
||||||
CREATE TABLE IF NOT EXISTS MobileDevices (
|
CREATE TABLE IF NOT EXISTS MobileDevices (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
student_id INTEGER NOT NULL,
|
student_id INTEGER NOT NULL,
|
||||||
@ -14,6 +15,7 @@ class Migration15 : Migration(14, 15) {
|
|||||||
name TEXT NOT NULL,
|
name TEXT NOT NULL,
|
||||||
date INTEGER NOT NULL
|
date INTEGER NOT NULL
|
||||||
)
|
)
|
||||||
""")
|
"""
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,8 +5,9 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration16 : Migration(15, 16) {
|
class Migration16 : Migration(15, 16) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("""
|
db.execSQL(
|
||||||
|
"""
|
||||||
CREATE TABLE IF NOT EXISTS Teachers (
|
CREATE TABLE IF NOT EXISTS Teachers (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
student_id INTEGER NOT NULL,
|
student_id INTEGER NOT NULL,
|
||||||
@ -15,6 +16,7 @@ class Migration16 : Migration(15, 16) {
|
|||||||
name TEXT NOT NULL,
|
name TEXT NOT NULL,
|
||||||
short_name TEXT NOT NULL
|
short_name TEXT NOT NULL
|
||||||
)
|
)
|
||||||
""")
|
"""
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,13 +5,14 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration17 : Migration(16, 17) {
|
class Migration17 : Migration(16, 17) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
createGradesPointsStatisticsTable(database)
|
createGradesPointsStatisticsTable(db)
|
||||||
truncateSemestersTable(database)
|
truncateSemestersTable(db)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createGradesPointsStatisticsTable(database: SupportSQLiteDatabase) {
|
private fun createGradesPointsStatisticsTable(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("""
|
db.execSQL(
|
||||||
|
"""
|
||||||
CREATE TABLE IF NOT EXISTS GradesPointsStatistics(
|
CREATE TABLE IF NOT EXISTS GradesPointsStatistics(
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
student_id INTEGER NOT NULL,
|
student_id INTEGER NOT NULL,
|
||||||
@ -20,10 +21,11 @@ class Migration17 : Migration(16, 17) {
|
|||||||
others REAL NOT NULL,
|
others REAL NOT NULL,
|
||||||
student REAL NOT NULL
|
student REAL NOT NULL
|
||||||
)
|
)
|
||||||
""")
|
"""
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun truncateSemestersTable(database: SupportSQLiteDatabase) {
|
private fun truncateSemestersTable(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("DELETE FROM Semesters")
|
db.execSQL("DELETE FROM Semesters")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,8 +5,9 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration18 : Migration(17, 18) {
|
class Migration18 : Migration(17, 18) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("""
|
db.execSQL(
|
||||||
|
"""
|
||||||
CREATE TABLE IF NOT EXISTS School (
|
CREATE TABLE IF NOT EXISTS School (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
student_id INTEGER NOT NULL,
|
student_id INTEGER NOT NULL,
|
||||||
|
@ -6,16 +6,17 @@ import io.github.wulkanowy.data.db.SharedPrefProvider
|
|||||||
|
|
||||||
class Migration19(private val sharedPrefProvider: SharedPrefProvider) : Migration(18, 19) {
|
class Migration19(private val sharedPrefProvider: SharedPrefProvider) : Migration(18, 19) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
migrateMessages(database)
|
migrateMessages(db)
|
||||||
migrateGrades(database)
|
migrateGrades(db)
|
||||||
migrateStudents(database)
|
migrateStudents(db)
|
||||||
migrateSharedPreferences()
|
migrateSharedPreferences()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun migrateMessages(database: SupportSQLiteDatabase) {
|
private fun migrateMessages(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("DROP TABLE Messages")
|
db.execSQL("DROP TABLE Messages")
|
||||||
database.execSQL("""
|
db.execSQL(
|
||||||
|
"""
|
||||||
CREATE TABLE IF NOT EXISTS Messages (
|
CREATE TABLE IF NOT EXISTS Messages (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
is_notified INTEGER NOT NULL,
|
is_notified INTEGER NOT NULL,
|
||||||
@ -34,12 +35,14 @@ class Migration19(private val sharedPrefProvider: SharedPrefProvider) : Migratio
|
|||||||
read_by INTEGER NOT NULL,
|
read_by INTEGER NOT NULL,
|
||||||
removed INTEGER NOT NULL
|
removed INTEGER NOT NULL
|
||||||
)
|
)
|
||||||
""")
|
"""
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun migrateGrades(database: SupportSQLiteDatabase) {
|
private fun migrateGrades(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("DROP TABLE Grades")
|
db.execSQL("DROP TABLE Grades")
|
||||||
database.execSQL("""
|
db.execSQL(
|
||||||
|
"""
|
||||||
CREATE TABLE IF NOT EXISTS Grades (
|
CREATE TABLE IF NOT EXISTS Grades (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
is_read INTEGER NOT NULL,
|
is_read INTEGER NOT NULL,
|
||||||
@ -59,11 +62,13 @@ class Migration19(private val sharedPrefProvider: SharedPrefProvider) : Migratio
|
|||||||
date INTEGER NOT NULL,
|
date INTEGER NOT NULL,
|
||||||
teacher TEXT NOT NULL
|
teacher TEXT NOT NULL
|
||||||
)
|
)
|
||||||
""")
|
"""
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun migrateStudents(database: SupportSQLiteDatabase) {
|
private fun migrateStudents(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("""
|
db.execSQL(
|
||||||
|
"""
|
||||||
CREATE TABLE IF NOT EXISTS Students_tmp (
|
CREATE TABLE IF NOT EXISTS Students_tmp (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
scrapper_base_url TEXT NOT NULL,
|
scrapper_base_url TEXT NOT NULL,
|
||||||
@ -86,26 +91,29 @@ class Migration19(private val sharedPrefProvider: SharedPrefProvider) : Migratio
|
|||||||
is_current INTEGER NOT NULL,
|
is_current INTEGER NOT NULL,
|
||||||
registration_date INTEGER NOT NULL
|
registration_date INTEGER NOT NULL
|
||||||
)
|
)
|
||||||
""")
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
database.execSQL("ALTER TABLE Students ADD COLUMN scrapperBaseUrl TEXT NOT NULL DEFAULT \"\";")
|
db.execSQL("ALTER TABLE Students ADD COLUMN scrapperBaseUrl TEXT NOT NULL DEFAULT \"\";")
|
||||||
database.execSQL("ALTER TABLE Students ADD COLUMN apiBaseUrl TEXT NOT NULL DEFAULT \"\";")
|
db.execSQL("ALTER TABLE Students ADD COLUMN apiBaseUrl TEXT NOT NULL DEFAULT \"\";")
|
||||||
database.execSQL("ALTER TABLE Students ADD COLUMN is_parent INT NOT NULL DEFAULT 0;")
|
db.execSQL("ALTER TABLE Students ADD COLUMN is_parent INT NOT NULL DEFAULT 0;")
|
||||||
database.execSQL("ALTER TABLE Students ADD COLUMN loginMode TEXT NOT NULL DEFAULT \"\";")
|
db.execSQL("ALTER TABLE Students ADD COLUMN loginMode TEXT NOT NULL DEFAULT \"\";")
|
||||||
database.execSQL("ALTER TABLE Students ADD COLUMN certificateKey TEXT NOT NULL DEFAULT \"\";")
|
db.execSQL("ALTER TABLE Students ADD COLUMN certificateKey TEXT NOT NULL DEFAULT \"\";")
|
||||||
database.execSQL("ALTER TABLE Students ADD COLUMN privateKey TEXT NOT NULL DEFAULT \"\";")
|
db.execSQL("ALTER TABLE Students ADD COLUMN privateKey TEXT NOT NULL DEFAULT \"\";")
|
||||||
database.execSQL("ALTER TABLE Students ADD COLUMN user_login_id INTEGER NOT NULL DEFAULT 0;")
|
db.execSQL("ALTER TABLE Students ADD COLUMN user_login_id INTEGER NOT NULL DEFAULT 0;")
|
||||||
|
|
||||||
database.execSQL("""
|
db.execSQL(
|
||||||
|
"""
|
||||||
INSERT INTO Students_tmp(
|
INSERT INTO Students_tmp(
|
||||||
id, scrapper_base_url, mobile_base_url, is_parent, login_type, login_mode, certificate_key, private_key, email, password, symbol, student_id, user_login_id, student_name, school_id, school_name, school_id, school_name, class_name, class_id, is_current, registration_date)
|
id, scrapper_base_url, mobile_base_url, is_parent, login_type, login_mode, certificate_key, private_key, email, password, symbol, student_id, user_login_id, student_name, school_id, school_name, school_id, school_name, class_name, class_id, is_current, registration_date)
|
||||||
SELECT
|
SELECT
|
||||||
id, endpoint, apiBaseUrl, is_parent, loginType, "SCRAPPER", certificateKey, privateKey, email, password, symbol, student_id, user_login_id, student_name, school_id, school_name, school_id, school_name, class_name, class_id, is_current, registration_date
|
id, endpoint, apiBaseUrl, is_parent, loginType, "SCRAPPER", certificateKey, privateKey, email, password, symbol, student_id, user_login_id, student_name, school_id, school_name, school_id, school_name, class_name, class_id, is_current, registration_date
|
||||||
FROM Students
|
FROM Students
|
||||||
""")
|
"""
|
||||||
database.execSQL("DROP TABLE Students")
|
)
|
||||||
database.execSQL("ALTER TABLE Students_tmp RENAME TO Students")
|
db.execSQL("DROP TABLE Students")
|
||||||
database.execSQL("CREATE UNIQUE INDEX index_Students_email_symbol_student_id_school_id_class_id ON Students (email, symbol, student_id, school_id, class_id)")
|
db.execSQL("ALTER TABLE Students_tmp RENAME TO Students")
|
||||||
|
db.execSQL("CREATE UNIQUE INDEX index_Students_email_symbol_student_id_school_id_class_id ON Students (email, symbol, student_id, school_id, class_id)")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun migrateSharedPreferences() {
|
private fun migrateSharedPreferences() {
|
||||||
|
@ -5,14 +5,16 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration2 : Migration(1, 2) {
|
class Migration2 : Migration(1, 2) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("""
|
db.execSQL(
|
||||||
|
"""
|
||||||
CREATE TABLE IF NOT EXISTS LuckyNumbers (
|
CREATE TABLE IF NOT EXISTS LuckyNumbers (
|
||||||
id INTEGER PRIMARY KEY NOT NULL,
|
id INTEGER PRIMARY KEY NOT NULL,
|
||||||
is_notified INTEGER NOT NULL,
|
is_notified INTEGER NOT NULL,
|
||||||
student_id INTEGER NOT NULL,
|
student_id INTEGER NOT NULL,
|
||||||
date INTEGER NOT NULL,
|
date INTEGER NOT NULL,
|
||||||
lucky_number INTEGER NOT NULL)
|
lucky_number INTEGER NOT NULL)
|
||||||
""")
|
"""
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,14 +5,15 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration20 : Migration(19, 20) {
|
class Migration20 : Migration(19, 20) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
migrateTimetable(database)
|
migrateTimetable(db)
|
||||||
truncateSubjects(database)
|
truncateSubjects(db)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun migrateTimetable(database: SupportSQLiteDatabase) {
|
private fun migrateTimetable(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("DROP TABLE Timetable")
|
db.execSQL("DROP TABLE Timetable")
|
||||||
database.execSQL("""
|
db.execSQL(
|
||||||
|
"""
|
||||||
CREATE TABLE IF NOT EXISTS `Timetable` (
|
CREATE TABLE IF NOT EXISTS `Timetable` (
|
||||||
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
`student_id` INTEGER NOT NULL,
|
`student_id` INTEGER NOT NULL,
|
||||||
@ -33,10 +34,11 @@ class Migration20 : Migration(19, 20) {
|
|||||||
`changes` INTEGER NOT NULL,
|
`changes` INTEGER NOT NULL,
|
||||||
`canceled` INTEGER NOT NULL
|
`canceled` INTEGER NOT NULL
|
||||||
)
|
)
|
||||||
""")
|
"""
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun truncateSubjects(database: SupportSQLiteDatabase) {
|
private fun truncateSubjects(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("DELETE FROM Subjects")
|
db.execSQL("DELETE FROM Subjects")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,11 +5,11 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration21 : Migration(20, 21) {
|
class Migration21 : Migration(20, 21) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("ALTER TABLE Attendance ADD COLUMN excusable INTEGER NOT NULL DEFAULT 0")
|
db.execSQL("ALTER TABLE Attendance ADD COLUMN excusable INTEGER NOT NULL DEFAULT 0")
|
||||||
database.execSQL("ALTER TABLE Attendance ADD COLUMN time_id INTEGER NOT NULL DEFAULT 0")
|
db.execSQL("ALTER TABLE Attendance ADD COLUMN time_id INTEGER NOT NULL DEFAULT 0")
|
||||||
database.execSQL("ALTER TABLE Attendance ADD COLUMN excuse_status TEXT DEFAULT NULL")
|
db.execSQL("ALTER TABLE Attendance ADD COLUMN excuse_status TEXT DEFAULT NULL")
|
||||||
|
|
||||||
database.execSQL("DELETE FROM Semesters")
|
db.execSQL("DELETE FROM Semesters")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration22 : Migration(21, 22) {
|
class Migration22 : Migration(21, 22) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("ALTER TABLE Students ADD COLUMN school_short TEXT NOT NULL DEFAULT ''")
|
db.execSQL("ALTER TABLE Students ADD COLUMN school_short TEXT NOT NULL DEFAULT ''")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,10 +5,10 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration23 : Migration(22, 23) {
|
class Migration23 : Migration(22, 23) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("ALTER TABLE Notes ADD COLUMN teacher_symbol TEXT NOT NULL DEFAULT ''")
|
db.execSQL("ALTER TABLE Notes ADD COLUMN teacher_symbol TEXT NOT NULL DEFAULT ''")
|
||||||
database.execSQL("ALTER TABLE Notes ADD COLUMN category_type INTEGER NOT NULL DEFAULT 0")
|
db.execSQL("ALTER TABLE Notes ADD COLUMN category_type INTEGER NOT NULL DEFAULT 0")
|
||||||
database.execSQL("ALTER TABLE Notes ADD COLUMN is_points_show INTEGER NOT NULL DEFAULT 0")
|
db.execSQL("ALTER TABLE Notes ADD COLUMN is_points_show INTEGER NOT NULL DEFAULT 0")
|
||||||
database.execSQL("ALTER TABLE Notes ADD COLUMN points INTEGER NOT NULL DEFAULT 0")
|
db.execSQL("ALTER TABLE Notes ADD COLUMN points INTEGER NOT NULL DEFAULT 0")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,9 +5,10 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration24 : Migration(23, 24) {
|
class Migration24 : Migration(23, 24) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("ALTER TABLE Messages ADD COLUMN has_attachments INTEGER NOT NULL DEFAULT 0")
|
db.execSQL("ALTER TABLE Messages ADD COLUMN has_attachments INTEGER NOT NULL DEFAULT 0")
|
||||||
database.execSQL("""
|
db.execSQL(
|
||||||
|
"""
|
||||||
CREATE TABLE IF NOT EXISTS MessageAttachments (
|
CREATE TABLE IF NOT EXISTS MessageAttachments (
|
||||||
real_id INTEGER NOT NULL,
|
real_id INTEGER NOT NULL,
|
||||||
message_id INTEGER NOT NULL,
|
message_id INTEGER NOT NULL,
|
||||||
@ -16,6 +17,7 @@ class Migration24 : Migration(23, 24) {
|
|||||||
filename TEXT NOT NULL,
|
filename TEXT NOT NULL,
|
||||||
PRIMARY KEY(real_id)
|
PRIMARY KEY(real_id)
|
||||||
)
|
)
|
||||||
""")
|
"""
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,8 +5,8 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration25 : Migration(24, 25) {
|
class Migration25 : Migration(24, 25) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("ALTER TABLE Homework ADD COLUMN is_done INTEGER NOT NULL DEFAULT 0")
|
db.execSQL("ALTER TABLE Homework ADD COLUMN is_done INTEGER NOT NULL DEFAULT 0")
|
||||||
database.execSQL("ALTER TABLE Homework ADD COLUMN attachments TEXT NOT NULL DEFAULT \"[]\"")
|
db.execSQL("ALTER TABLE Homework ADD COLUMN attachments TEXT NOT NULL DEFAULT \"[]\"")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,10 +5,10 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration26 : Migration(25, 26) {
|
class Migration26 : Migration(25, 26) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("ALTER TABLE GradesSummary ADD COLUMN is_predicted_grade_notified INTEGER NOT NULL DEFAULT 1")
|
db.execSQL("ALTER TABLE GradesSummary ADD COLUMN is_predicted_grade_notified INTEGER NOT NULL DEFAULT 1")
|
||||||
database.execSQL("ALTER TABLE GradesSummary ADD COLUMN is_final_grade_notified INTEGER NOT NULL DEFAULT 1")
|
db.execSQL("ALTER TABLE GradesSummary ADD COLUMN is_final_grade_notified INTEGER NOT NULL DEFAULT 1")
|
||||||
database.execSQL("ALTER TABLE GradesSummary ADD COLUMN predicted_grade_last_change INTEGER NOT NULL DEFAULT 0")
|
db.execSQL("ALTER TABLE GradesSummary ADD COLUMN predicted_grade_last_change INTEGER NOT NULL DEFAULT 0")
|
||||||
database.execSQL("ALTER TABLE GradesSummary ADD COLUMN final_grade_last_change INTEGER NOT NULL DEFAULT 0")
|
db.execSQL("ALTER TABLE GradesSummary ADD COLUMN final_grade_last_change INTEGER NOT NULL DEFAULT 0")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,24 +5,25 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration27 : Migration(26, 27) {
|
class Migration27 : Migration(26, 27) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("ALTER TABLE Students ADD COLUMN user_name TEXT NOT NULL DEFAULT \"\"")
|
db.execSQL("ALTER TABLE Students ADD COLUMN user_name TEXT NOT NULL DEFAULT \"\"")
|
||||||
|
|
||||||
val students = getStudentsIdsAndNames(database)
|
val students = getStudentsIdsAndNames(db)
|
||||||
val units = getReportingUnits(database)
|
val units = getReportingUnits(db)
|
||||||
|
|
||||||
students.forEach { (id, userLoginId, studentName) ->
|
students.forEach { (id, userLoginId, studentName) ->
|
||||||
val userNameFromUnits = units.singleOrNull { (senderId, _) -> senderId == userLoginId }?.second
|
val userNameFromUnits =
|
||||||
|
units.singleOrNull { (senderId, _) -> senderId == userLoginId }?.second
|
||||||
val normalizedStudentName = studentName.split(" ").asReversed().joinToString(" ")
|
val normalizedStudentName = studentName.split(" ").asReversed().joinToString(" ")
|
||||||
|
|
||||||
val userName = userNameFromUnits ?: normalizedStudentName
|
val userName = userNameFromUnits ?: normalizedStudentName
|
||||||
database.execSQL("UPDATE Students SET user_name = '$userName' WHERE id = '$id'")
|
db.execSQL("UPDATE Students SET user_name = '$userName' WHERE id = '$id'")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getStudentsIdsAndNames(database: SupportSQLiteDatabase): MutableList<Triple<Long, Int, String>> {
|
private fun getStudentsIdsAndNames(db: SupportSQLiteDatabase): MutableList<Triple<Long, Int, String>> {
|
||||||
val students = mutableListOf<Triple<Long, Int, String>>()
|
val students = mutableListOf<Triple<Long, Int, String>>()
|
||||||
database.query("SELECT id, user_login_id, student_name FROM Students").use {
|
db.query("SELECT id, user_login_id, student_name FROM Students").use {
|
||||||
if (it.moveToFirst()) {
|
if (it.moveToFirst()) {
|
||||||
do {
|
do {
|
||||||
students.add(Triple(it.getLong(0), it.getInt(1), it.getString(2)))
|
students.add(Triple(it.getLong(0), it.getInt(1), it.getString(2)))
|
||||||
@ -33,9 +34,9 @@ class Migration27 : Migration(26, 27) {
|
|||||||
return students
|
return students
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getReportingUnits(database: SupportSQLiteDatabase): MutableList<Pair<Int, String>> {
|
private fun getReportingUnits(db: SupportSQLiteDatabase): MutableList<Pair<Int, String>> {
|
||||||
val units = mutableListOf<Pair<Int, String>>()
|
val units = mutableListOf<Pair<Int, String>>()
|
||||||
database.query("SELECT sender_id, sender_name FROM ReportingUnits").use {
|
db.query("SELECT sender_id, sender_name FROM ReportingUnits").use {
|
||||||
if (it.moveToFirst()) {
|
if (it.moveToFirst()) {
|
||||||
do {
|
do {
|
||||||
units.add(it.getInt(0) to it.getString(1))
|
units.add(it.getInt(0) to it.getString(1))
|
||||||
|
@ -5,8 +5,9 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration28 : Migration(27, 28) {
|
class Migration28 : Migration(27, 28) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("""
|
db.execSQL(
|
||||||
|
"""
|
||||||
CREATE TABLE IF NOT EXISTS Conferences (
|
CREATE TABLE IF NOT EXISTS Conferences (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
student_id INTEGER NOT NULL,
|
student_id INTEGER NOT NULL,
|
||||||
|
@ -5,9 +5,10 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration29 : Migration(28, 29) {
|
class Migration29 : Migration(28, 29) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("DROP TABLE IF EXISTS GradesStatistics")
|
db.execSQL("DROP TABLE IF EXISTS GradesStatistics")
|
||||||
database.execSQL("""
|
db.execSQL(
|
||||||
|
"""
|
||||||
CREATE TABLE IF NOT EXISTS GradeSemesterStatistics (
|
CREATE TABLE IF NOT EXISTS GradeSemesterStatistics (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
student_id INTEGER NOT NULL,
|
student_id INTEGER NOT NULL,
|
||||||
@ -16,8 +17,10 @@ class Migration29 : Migration(28, 29) {
|
|||||||
amounts TEXT NOT NULL,
|
amounts TEXT NOT NULL,
|
||||||
student_grade INTEGER NOT NULL
|
student_grade INTEGER NOT NULL
|
||||||
)
|
)
|
||||||
""")
|
"""
|
||||||
database.execSQL("""
|
)
|
||||||
|
db.execSQL(
|
||||||
|
"""
|
||||||
CREATE TABLE IF NOT EXISTS GradePartialStatistics (
|
CREATE TABLE IF NOT EXISTS GradePartialStatistics (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
student_id INTEGER NOT NULL,
|
student_id INTEGER NOT NULL,
|
||||||
|
@ -5,8 +5,9 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration3 : Migration(2, 3) {
|
class Migration3 : Migration(2, 3) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("""
|
db.execSQL(
|
||||||
|
"""
|
||||||
CREATE TABLE IF NOT EXISTS CompletedLesson (
|
CREATE TABLE IF NOT EXISTS CompletedLesson (
|
||||||
id INTEGER PRIMARY KEY NOT NULL,
|
id INTEGER PRIMARY KEY NOT NULL,
|
||||||
student_id INTEGER NOT NULL,
|
student_id INTEGER NOT NULL,
|
||||||
|
@ -5,8 +5,9 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration30 : Migration(29, 30) {
|
class Migration30 : Migration(29, 30) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL("""
|
db.execSQL(
|
||||||
|
"""
|
||||||
CREATE TABLE TimetableAdditional (
|
CREATE TABLE TimetableAdditional (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
student_id INTEGER NOT NULL,
|
student_id INTEGER NOT NULL,
|
||||||
@ -16,6 +17,7 @@ class Migration30 : Migration(29, 30) {
|
|||||||
date INTEGER NOT NULL,
|
date INTEGER NOT NULL,
|
||||||
subject TEXT NOT NULL
|
subject TEXT NOT NULL
|
||||||
)
|
)
|
||||||
""")
|
"""
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,8 +5,8 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
|
|
||||||
class Migration31 : Migration(30, 31) {
|
class Migration31 : Migration(30, 31) {
|
||||||
|
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
database.execSQL(
|
db.execSQL(
|
||||||
"""CREATE TABLE IF NOT EXISTS StudentInfo (
|
"""CREATE TABLE IF NOT EXISTS StudentInfo (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
student_id INTEGER NOT NULL,
|
student_id INTEGER NOT NULL,
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user