27 Commits
Author SHA1 Message Date
odweta c38ed048ef made new release 2.6.1 2025-10-04 19:00:04 +02:00
odweta f2de4585fb made new release 2.6.1 2025-10-04 18:54:29 +02:00
odweta d8d5b3bbb2 made new release 2.6.1 2025-10-04 09:36:26 +02:00
odweta d3d7ce552d made new release 2.6.1 2025-10-03 21:03:07 +02:00
odweta 5151258278 update the icon to version 3.0
it is also themeable now as per Androi 13 standards
2025-10-03 20:44:39 +02:00
odweta 23963e295c made new release 2.6.0 2025-10-02 20:37:32 +02:00
odweta dd921c6e78 made new release 2025-10-02 20:28:33 +02:00
odweta 0c27450560 made new release 2025-10-02 20:24:59 +02:00
odweta 4084c3b2cb update gitignore 2025-10-02 20:06:53 +02:00
odweta f52cddd311 ellipsising the subject name text in the MarksSubjectScreen 2025-10-02 20:00:13 +02:00
odweta 156342e379 fixed some padding around time time and teachers 2025-10-02 19:53:14 +02:00
odweta 06e7efe55e fixed the free lecture time showing wrong (i removed it) 2025-10-02 19:45:02 +02:00
odweta d3d96d0130 made the padding between the lecture number and lecture name uniform with the padding on the right of the lecture time 2025-10-02 18:50:55 +02:00
Odweta 2ee1df0d7f made new release 2.5.2 2025-02-08 10:02:28 +01:00
Odweta 647fcc8ba6 made new release 2.5.2 2025-02-08 10:01:51 +01:00
Odweta 57cc25ba9a made new release 2.5.2 2025-02-08 10:00:17 +01:00
Odweta 06f9d7521b made new release 2.5.1 2025-02-06 15:09:25 +01:00
Odweta 12d891a0e4 made new release 2.5 2025-02-04 19:20:48 +01:00
Odweta 3bac016a8b made google play demo account; removed quickdays; removed lecturenotes; fixed settings not applying right away bug 2025-02-04 19:15:56 +01:00
Odweta 81e875bea8 added a deploy script for google play usable from a Termux environment 2025-01-29 19:28:09 +01:00
odweta aed00c0694 added quick naviagation for days at the top of the timetable 2025-01-17 19:32:25 +01:00
odweta 6cbe12fb10 made new release 2.4.1 2025-01-16 14:51:28 +01:00
odweta 992c0b4a34 made new release 2.4.1 2025-01-16 13:29:30 +01:00
odweta d8bda87b38 made new release 2.4.1 2025-01-16 13:28:47 +01:00
odweta cca561f11b update README with release 2.4.1 2025-01-15 21:31:11 +01:00
odweta 7907429aea made new release 2.4.1 2025-01-15 21:29:06 +01:00
odweta 4cb07126e2 fixed network timeout and started working on final marks 2025-01-15 11:32:16 +01:00
68 changed files with 1230 additions and 118 deletions
+10 -3
View File
@@ -1,6 +1,13 @@
![solon-logo](solon_logo.png) ![solon-logo](solon_logo.png)
# Zorientujte se rychleji v této odlehčené verzi Školy OnLine # Zorientujte se rychleji v této odlehčené verzi Školy OnLine
# Odkaz na stažení aplikace pro Android [zde](https://gitlab.com/Odweta/solon/-/releases/2.4/downloads/app-release.apk) (verze 2.4) # Odkaz na stažení aplikace pro Android [zde](https://gitlab.com/Odweta/solon/-/releases/2.5.2/downloads/app-release.apk) (verze 2.5.2)
<hr>
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" [<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png"
alt="Nyní na F-Droidu" alt="Nyní na F-Droidu"
height="80">](https://f-droid.org/packages/com.odweta.solon/) height="80">](https://f-droid.org/packages/com.odweta.solon/)
[<img src='https://play.google.com/intl/en_us/badges/static/images/badges/cs_badge_web_generic.png'
alt='Nyní na Google Play'
height="80">](https://play.google.com/store/apps/details?id=com.odweta.solon)
+1 -1
View File
@@ -28,7 +28,7 @@ echo
echo echo
echo "[signing]" echo "[signing]"
echo echo
~/Android/Sdk/build-tools/35.0.0/apksigner sign --alignment-preserved --ks ~/Documents/android-keystore.jks --ks-pass pass:$ks_pass app/build/outputs/apk/release/com.odweta.solon_$ver.apk apksigner sign --alignment-preserved --ks ~/docs/android-keystore.jks --ks-pass pass:$ks_pass app/build/outputs/apk/release/com.odweta.solon_$ver.apk
# create the tag # create the tag
echo echo
+24
View File
@@ -0,0 +1,24 @@
#!/data/data/com.termux/files/usr/bin/bash
cd mobile
INTERNAL_STORAGE=/data/data/com.termux/files/home/storage/downloads/..
echo -n 'keystore key for signing: '
read kskey
echo 'building the release bundle'
gradle bundleRelease
mkdir -p $INTERNAL_STORAGE/solon-bin/
cp $SOLON/mobile/app/build/outputs/bundle/release/app-release.aab $INTERNAL_STORAGE/solon-bin/
echo 'app-bundle.aab copied to \$INTERNAL_STORAGE/solon-bin'
apksigner sign --ks $INTERNAL_STORAGE/Documents/android-keystore.jks --ks-pass pass:$kskey --min-sdk-version=28 $INTERNAL_STORAGE/solon-bin/app-release.aab
echo 'aab signed with default android keystore'
cd ..
+2
View File
@@ -1,3 +1,5 @@
# Default ignored files # Default ignored files
/shelf/ /shelf/
/workspace.xml /workspace.xml
/AndroidProjectSystem.xml
/deviceManager.xml
+30 -3
View File
@@ -79,6 +79,7 @@
<PersistentState> <PersistentState>
<option name="values"> <option name="values">
<map> <map>
<entry key="color" value="000000" />
<entry key="imagePath" value="/tmp/ic_android_black_24dp.xml" /> <entry key="imagePath" value="/tmp/ic_android_black_24dp.xml" />
</map> </map>
</option> </option>
@@ -91,8 +92,9 @@
<option name="values"> <option name="values">
<map> <map>
<entry key="color" value="000000" /> <entry key="color" value="000000" />
<entry key="imagePath" value="$PROJECT_DIR$/app/src/main/res/drawable/solon_500_yellow.png" /> <entry key="imagePath" value="$PROJECT_DIR$/app/src/main/res/drawable/solon_logo_3_0_foreground_monochrome.png" />
<entry key="scalingPercent" value="70" /> <entry key="scalingPercent" value="80" />
<entry key="trimmed" value="true" />
</map> </map>
</option> </option>
</PersistentState> </PersistentState>
@@ -124,7 +126,9 @@
</option> </option>
<option name="values"> <option name="values">
<map> <map>
<entry key="outputName" value="launcher" /> <entry key="backgroundAssetType" value="COLOR" />
<entry key="backgroundColor" value="000000" />
<entry key="outputName" value="launcher_monochrome" />
</map> </map>
</option> </option>
</PersistentState> </PersistentState>
@@ -303,6 +307,29 @@
</PersistentState> </PersistentState>
</value> </value>
</entry> </entry>
<entry key="vectorWizard">
<value>
<PersistentState>
<option name="children">
<map>
<entry key="vectorAssetStep">
<value>
<PersistentState>
<option name="values">
<map>
<entry key="assetSourceType" value="FILE" />
<entry key="outputName" value="black" />
<entry key="sourceFile" value="$PROJECT_DIR$/app/src/main/res/drawable/black.svg" />
</map>
</option>
</PersistentState>
</value>
</entry>
</map>
</option>
</PersistentState>
</value>
</entry>
</map> </map>
</option> </option>
</component> </component>
+873
View File
@@ -0,0 +1,873 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DeviceStreaming">
<option name="deviceSelectionList">
<list>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="Sony" />
<option name="codename" value="A402SO" />
<option name="id" value="A402SO" />
<option name="labId" value="google" />
<option name="manufacturer" value="Sony" />
<option name="name" value="Xperia 10" />
<option name="screenDensity" value="450" />
<option name="screenX" value="1080" />
<option name="screenY" value="2520" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="27" />
<option name="brand" value="DOCOMO" />
<option name="codename" value="F01L" />
<option name="id" value="F01L" />
<option name="labId" value="google" />
<option name="manufacturer" value="FUJITSU" />
<option name="name" value="F-01L" />
<option name="screenDensity" value="360" />
<option name="screenX" value="720" />
<option name="screenY" value="1280" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="OnePlus" />
<option name="codename" value="OP535DL1" />
<option name="id" value="OP535DL1" />
<option name="labId" value="google" />
<option name="manufacturer" value="OnePlus" />
<option name="name" value="CPH2409" />
<option name="screenDensity" value="401" />
<option name="screenX" value="1080" />
<option name="screenY" value="2412" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="OnePlus" />
<option name="codename" value="OP5552L1" />
<option name="id" value="OP5552L1" />
<option name="labId" value="google" />
<option name="manufacturer" value="OnePlus" />
<option name="name" value="CPH2415" />
<option name="screenDensity" value="480" />
<option name="screenX" value="1080" />
<option name="screenY" value="2412" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="35" />
<option name="brand" value="OnePlus" />
<option name="codename" value="OP5552L1" />
<option name="id" value="OP5552L1" />
<option name="labId" value="google" />
<option name="manufacturer" value="OnePlus" />
<option name="name" value="CPH2415" />
<option name="screenDensity" value="480" />
<option name="screenX" value="1080" />
<option name="screenY" value="2412" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="OPPO" />
<option name="codename" value="OP573DL1" />
<option name="id" value="OP573DL1" />
<option name="labId" value="google" />
<option name="manufacturer" value="OPPO" />
<option name="name" value="CPH2557" />
<option name="screenDensity" value="480" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="28" />
<option name="brand" value="DOCOMO" />
<option name="codename" value="SH-01L" />
<option name="id" value="SH-01L" />
<option name="labId" value="google" />
<option name="manufacturer" value="SHARP" />
<option name="name" value="AQUOS sense2 SH-01L" />
<option name="screenDensity" value="480" />
<option name="screenX" value="1080" />
<option name="screenY" value="2160" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="35" />
<option name="brand" value="Lenovo" />
<option name="codename" value="TB330FU" />
<option name="formFactor" value="Tablet" />
<option name="id" value="TB330FU" />
<option name="labId" value="google" />
<option name="manufacturer" value="Lenovo" />
<option name="name" value="Tab M11" />
<option name="screenDensity" value="240" />
<option name="screenX" value="1200" />
<option name="screenY" value="1920" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="a14m" />
<option name="id" value="a14m" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="SM-A145R" />
<option name="screenDensity" value="450" />
<option name="screenX" value="1080" />
<option name="screenY" value="2408" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="a15" />
<option name="id" value="a15" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="A15" />
<option name="screenDensity" value="450" />
<option name="screenX" value="1080" />
<option name="screenY" value="2340" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="a15x" />
<option name="id" value="a15x" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="A15 5G" />
<option name="screenDensity" value="450" />
<option name="screenX" value="1080" />
<option name="screenY" value="2340" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="a16x" />
<option name="id" value="a16x" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="A16 5G" />
<option name="screenDensity" value="450" />
<option name="screenX" value="1080" />
<option name="screenY" value="2340" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="a35x" />
<option name="id" value="a35x" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="A35" />
<option name="screenDensity" value="450" />
<option name="screenX" value="1080" />
<option name="screenY" value="2340" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="akita" />
<option name="id" value="akita" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 8a" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="35" />
<option name="brand" value="google" />
<option name="codename" value="akita" />
<option name="id" value="akita" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 8a" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="motorola" />
<option name="codename" value="arcfox" />
<option name="id" value="arcfox" />
<option name="labId" value="google" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="razr plus 2024" />
<option name="screenDensity" value="360" />
<option name="screenX" value="1080" />
<option name="screenY" value="1272" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="motorola" />
<option name="codename" value="austin" />
<option name="id" value="austin" />
<option name="labId" value="google" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="moto g 5G (2022)" />
<option name="screenDensity" value="280" />
<option name="screenX" value="720" />
<option name="screenY" value="1600" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="samsung" />
<option name="codename" value="b0q" />
<option name="id" value="b0q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S22 Ultra" />
<option name="screenDensity" value="600" />
<option name="screenX" value="1440" />
<option name="screenY" value="3088" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="b6q" />
<option name="id" value="b6q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Flip 6" />
<option name="screenDensity" value="340" />
<option name="screenX" value="1080" />
<option name="screenY" value="2640" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="32" />
<option name="brand" value="google" />
<option name="codename" value="bluejay" />
<option name="id" value="bluejay" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 6a" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="caiman" />
<option name="id" value="caiman" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 9 Pro" />
<option name="screenDensity" value="360" />
<option name="screenX" value="960" />
<option name="screenY" value="2142" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="35" />
<option name="brand" value="google" />
<option name="codename" value="caiman" />
<option name="id" value="caiman" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 9 Pro" />
<option name="screenDensity" value="360" />
<option name="screenX" value="960" />
<option name="screenY" value="2142" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="comet" />
<option name="default" value="true" />
<option name="id" value="comet" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 9 Pro Fold" />
<option name="screenDensity" value="390" />
<option name="screenX" value="2076" />
<option name="screenY" value="2152" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="35" />
<option name="brand" value="google" />
<option name="codename" value="comet" />
<option name="default" value="true" />
<option name="id" value="comet" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 9 Pro Fold" />
<option name="screenDensity" value="390" />
<option name="screenX" value="2076" />
<option name="screenY" value="2152" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="29" />
<option name="brand" value="samsung" />
<option name="codename" value="crownqlteue" />
<option name="id" value="crownqlteue" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Note9" />
<option name="screenDensity" value="420" />
<option name="screenX" value="2220" />
<option name="screenY" value="1080" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="dm2q" />
<option name="id" value="dm2q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="S23 Plus" />
<option name="screenDensity" value="450" />
<option name="screenX" value="1080" />
<option name="screenY" value="2340" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="dm3q" />
<option name="id" value="dm3q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S23 Ultra" />
<option name="screenDensity" value="600" />
<option name="screenX" value="1440" />
<option name="screenY" value="3088" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="motorola" />
<option name="codename" value="dubai" />
<option name="id" value="dubai" />
<option name="labId" value="google" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="edge 30" />
<option name="screenDensity" value="405" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="e1q" />
<option name="default" value="true" />
<option name="id" value="e1q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S24" />
<option name="screenDensity" value="480" />
<option name="screenX" value="1080" />
<option name="screenY" value="2340" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="e3q" />
<option name="id" value="e3q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S24 Ultra" />
<option name="screenDensity" value="450" />
<option name="screenX" value="1440" />
<option name="screenY" value="3120" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="eos" />
<option name="id" value="eos" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Eos" />
<option name="screenDensity" value="320" />
<option name="screenX" value="384" />
<option name="screenY" value="384" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="felix" />
<option name="id" value="felix" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Fold" />
<option name="screenDensity" value="420" />
<option name="screenX" value="2208" />
<option name="screenY" value="1840" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="felix" />
<option name="id" value="felix" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Fold" />
<option name="screenDensity" value="420" />
<option name="screenX" value="2208" />
<option name="screenY" value="1840" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="felix_camera" />
<option name="id" value="felix_camera" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Fold (Camera-enabled)" />
<option name="screenDensity" value="420" />
<option name="screenX" value="2208" />
<option name="screenY" value="1840" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="motorola" />
<option name="codename" value="fogona" />
<option name="id" value="fogona" />
<option name="labId" value="google" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="moto g play - 2024" />
<option name="screenDensity" value="280" />
<option name="screenX" value="720" />
<option name="screenY" value="1600" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="motorola" />
<option name="codename" value="fogos" />
<option name="id" value="fogos" />
<option name="labId" value="google" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="moto g34 5G" />
<option name="screenDensity" value="280" />
<option name="screenX" value="720" />
<option name="screenY" value="1600" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="g0q" />
<option name="id" value="g0q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="SM-S906U1" />
<option name="screenDensity" value="450" />
<option name="screenX" value="1080" />
<option name="screenY" value="2340" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="gta9pwifi" />
<option name="id" value="gta9pwifi" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="SM-X210" />
<option name="screenDensity" value="240" />
<option name="screenX" value="1200" />
<option name="screenY" value="1920" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="samsung" />
<option name="codename" value="gts7lwifi" />
<option name="id" value="gts7lwifi" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="SM-T870" />
<option name="screenDensity" value="340" />
<option name="screenX" value="1600" />
<option name="screenY" value="2560" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="gts7xllite" />
<option name="id" value="gts7xllite" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="SM-T738U" />
<option name="screenDensity" value="340" />
<option name="screenX" value="1600" />
<option name="screenY" value="2560" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="samsung" />
<option name="codename" value="gts8uwifi" />
<option name="formFactor" value="Tablet" />
<option name="id" value="gts8uwifi" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Tab S8 Ultra" />
<option name="screenDensity" value="320" />
<option name="screenX" value="1848" />
<option name="screenY" value="2960" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="gts8wifi" />
<option name="formFactor" value="Tablet" />
<option name="id" value="gts8wifi" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Tab S8" />
<option name="screenDensity" value="274" />
<option name="screenX" value="1600" />
<option name="screenY" value="2560" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="gts9fe" />
<option name="id" value="gts9fe" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Tab S9 FE 5G" />
<option name="screenDensity" value="280" />
<option name="screenX" value="1440" />
<option name="screenY" value="2304" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="gts9wifi" />
<option name="id" value="gts9wifi" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="SM-X710" />
<option name="screenDensity" value="340" />
<option name="screenX" value="1600" />
<option name="screenY" value="2560" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="husky" />
<option name="id" value="husky" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 8 Pro" />
<option name="screenDensity" value="390" />
<option name="screenX" value="1008" />
<option name="screenY" value="2244" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="30" />
<option name="brand" value="motorola" />
<option name="codename" value="java" />
<option name="id" value="java" />
<option name="labId" value="google" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="G20" />
<option name="screenDensity" value="280" />
<option name="screenX" value="720" />
<option name="screenY" value="1600" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="35" />
<option name="brand" value="motorola" />
<option name="codename" value="kansas" />
<option name="id" value="kansas" />
<option name="labId" value="google" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="moto g - 2025" />
<option name="screenDensity" value="280" />
<option name="screenX" value="720" />
<option name="screenY" value="1604" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="komodo" />
<option name="id" value="komodo" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 9 Pro XL" />
<option name="screenDensity" value="360" />
<option name="screenX" value="1008" />
<option name="screenY" value="2244" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="35" />
<option name="brand" value="google" />
<option name="codename" value="komodo" />
<option name="id" value="komodo" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 9 Pro XL" />
<option name="screenDensity" value="360" />
<option name="screenX" value="1008" />
<option name="screenY" value="2244" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="motorola" />
<option name="codename" value="lion" />
<option name="id" value="lion" />
<option name="labId" value="google" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="moto g04" />
<option name="screenDensity" value="280" />
<option name="screenX" value="720" />
<option name="screenY" value="1612" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="lynx" />
<option name="id" value="lynx" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 7a" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="motorola" />
<option name="codename" value="lyriq" />
<option name="id" value="lyriq" />
<option name="labId" value="google" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="edge 40" />
<option name="screenDensity" value="400" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="motorola" />
<option name="codename" value="manaus" />
<option name="id" value="manaus" />
<option name="labId" value="google" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="edge 40 neo" />
<option name="screenDensity" value="400" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="motorola" />
<option name="codename" value="maui" />
<option name="id" value="maui" />
<option name="labId" value="google" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="moto g play - 2023" />
<option name="screenDensity" value="280" />
<option name="screenX" value="720" />
<option name="screenY" value="1600" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="o1q" />
<option name="id" value="o1q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S21" />
<option name="screenDensity" value="421" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="31" />
<option name="brand" value="google" />
<option name="codename" value="oriole" />
<option name="id" value="oriole" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 6" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="35" />
<option name="brand" value="samsung" />
<option name="codename" value="pa3q" />
<option name="id" value="pa3q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S25 Ultra" />
<option name="screenDensity" value="600" />
<option name="screenX" value="1440" />
<option name="screenY" value="3120" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="panther" />
<option name="id" value="panther" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 7" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="q5q" />
<option name="id" value="q5q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Z Fold5" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1812" />
<option name="screenY" value="2176" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="q6q" />
<option name="id" value="q6q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Z Fold6" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1856" />
<option name="screenY" value="2160" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="30" />
<option name="brand" value="google" />
<option name="codename" value="r11" />
<option name="formFactor" value="Wear OS" />
<option name="id" value="r11" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Watch" />
<option name="screenDensity" value="320" />
<option name="screenX" value="384" />
<option name="screenY" value="384" />
<option name="type" value="WEAR_OS" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="r11q" />
<option name="id" value="r11q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="SM-S711U" />
<option name="screenDensity" value="450" />
<option name="screenX" value="1080" />
<option name="screenY" value="2340" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="30" />
<option name="brand" value="google" />
<option name="codename" value="redfin" />
<option name="id" value="redfin" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 5" />
<option name="screenDensity" value="440" />
<option name="screenX" value="1080" />
<option name="screenY" value="2340" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="shiba" />
<option name="id" value="shiba" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 8" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="t2q" />
<option name="id" value="t2q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S21 Plus" />
<option name="screenDensity" value="394" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="tangorpro" />
<option name="formFactor" value="Tablet" />
<option name="id" value="tangorpro" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Tablet" />
<option name="screenDensity" value="320" />
<option name="screenX" value="1600" />
<option name="screenY" value="2560" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="35" />
<option name="brand" value="google" />
<option name="codename" value="tegu" />
<option name="id" value="tegu" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 9a" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2424" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="tokay" />
<option name="default" value="true" />
<option name="id" value="tokay" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 9" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2424" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="35" />
<option name="brand" value="google" />
<option name="codename" value="tokay" />
<option name="default" value="true" />
<option name="id" value="tokay" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 9" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2424" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="36" />
<option name="brand" value="google" />
<option name="codename" value="tokay" />
<option name="default" value="true" />
<option name="id" value="tokay" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 9" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2424" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="xcover7" />
<option name="id" value="xcover7" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="SM-G556B" />
<option name="screenDensity" value="450" />
<option name="screenX" value="1080" />
<option name="screenY" value="2408" />
</PersistentDeviceSelectionData>
</list>
</option>
</component>
</project>
-4
View File
@@ -6,10 +6,6 @@
<component name="Kotlin2JvmCompilerArguments"> <component name="Kotlin2JvmCompilerArguments">
<option name="jvmTarget" value="1.8" /> <option name="jvmTarget" value="1.8" />
</component> </component>
<component name="KotlinCommonCompilerArguments">
<option name="apiVersion" value="2.0" />
<option name="languageVersion" value="2.0" />
</component>
<component name="KotlinJpsPluginSettings"> <component name="KotlinJpsPluginSettings">
<option name="version" value="2.0.0" /> <option name="version" value="2.0.0" />
</component> </component>
+2 -2
View File
@@ -32,8 +32,8 @@ android {
applicationId = "com.odweta.solon" applicationId = "com.odweta.solon"
minSdk = 28 minSdk = 28
targetSdk = 34 targetSdk = 34
versionCode = 211 versionCode = 217
versionName = "2.4" versionName = "2.6.1"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
} }
@@ -56,7 +56,7 @@ fun AboutScreen() {
horizontalAlignment = Alignment.CenterHorizontally horizontalAlignment = Alignment.CenterHorizontally
) { ) {
Image( Image(
painter = painterResource(R.drawable.solon_just_yellow), painter = painterResource(R.drawable.solon_logo_3_0),
contentDescription = "Solon logo", contentDescription = "Solon logo",
modifier = Modifier.size(200.dp) modifier = Modifier.size(200.dp)
) )
@@ -193,14 +193,17 @@ enum class ScreenElement {
FinalMarks, FinalMarks,
Menu, Menu,
About, About,
SignOut SignOut,
Temp
} }
class Global { class Global {
lateinit var timetableJSON: JSONObject lateinit var timetableJSON: JSONObject
lateinit var marksJSON: JSONObject lateinit var marksJSON: JSONObject
lateinit var finalMarksJSON: JSONObject
lateinit var marks: MutableMap<String, MutableList<Mark>> lateinit var marks: MutableMap<String, MutableList<Mark>>
lateinit var newMarks: MutableMap<String, MutableList<Mark>> lateinit var newMarks: MutableMap<String, MutableList<Mark>>
lateinit var finalMarks: Map<String, Int>
lateinit var settings: SettingsData lateinit var settings: SettingsData
lateinit var fileDir: File lateinit var fileDir: File
@@ -223,6 +226,7 @@ class Global {
var currentLectureNumber: Int = 0 var currentLectureNumber: Int = 0
var tempScreen by mutableStateOf(Screen.Settings) var tempScreen by mutableStateOf(Screen.Settings)
var tempScreenElement by mutableStateOf(ScreenElement.Timetable)
var currentScreen by mutableStateOf(Screen.Main) var currentScreen by mutableStateOf(Screen.Main)
var currentScreenElement by mutableStateOf(ScreenElement.Timetable) var currentScreenElement by mutableStateOf(ScreenElement.Timetable)
@@ -237,6 +241,8 @@ class Global {
var subjectToShow by mutableStateOf("") var subjectToShow by mutableStateOf("")
var markToShow by mutableStateOf(Mark()) var markToShow by mutableStateOf(Mark())
var demoMode: Boolean = false
inner class FilePaths { inner class FilePaths {
val accountData: String = "account_data.txt" val accountData: String = "account_data.txt"
val timetable: String = "timetable.json" val timetable: String = "timetable.json"
@@ -244,6 +250,7 @@ class Global {
val marks: String = "marks.json" val marks: String = "marks.json"
val settings: String = "settings.txt" val settings: String = "settings.txt"
val lectureNotes: String = "lecture_notes.csv" val lectureNotes: String = "lecture_notes.csv"
val finalMarks: String = "final_marks.txt"
} }
val filePaths = FilePaths() val filePaths = FilePaths()
@@ -253,6 +260,7 @@ class Global {
val userData = "$apiBase/v1/user" val userData = "$apiBase/v1/user"
val timetable = "$apiBase/v1/timeTable" val timetable = "$apiBase/v1/timeTable"
var marks: String = "$apiBase/v1/students/<student id>/marks/list" var marks: String = "$apiBase/v1/students/<student id>/marks/list"
var finalMarks: String ="$apiBase/v1/students/<student id>/marks/final"
} }
val apiEndPoints = APIEndPoints() val apiEndPoints = APIEndPoints()
@@ -34,15 +34,18 @@ fun remoteLoad(ctx: Context) {
// fetch remote data // fetch remote data
global.timetableJSON = networkRequestFactory.perform(NetworkRequestType.Timetable) global.timetableJSON = networkRequestFactory.perform(NetworkRequestType.Timetable)
global.marksJSON = networkRequestFactory.perform(NetworkRequestType.Marks) global.marksJSON = networkRequestFactory.perform(NetworkRequestType.Marks)
global.finalMarksJSON = networkRequestFactory.perform(NetworkRequestType.FinalMarks)
// save to local for later local load // save to local for later local load
Util.saveStringToFile(global.filePaths.timetable, global.timetableJSON.toString()) Util.saveStringToFile(global.filePaths.timetable, global.timetableJSON.toString())
Util.saveStringToFile(global.filePaths.marks, global.marksJSON.toString()) Util.saveStringToFile(global.filePaths.marks, global.marksJSON.toString())
Util.saveStringToFile(global.filePaths.finalMarks, global.finalMarksJSON.toString())
launchContinue( launchContinue(
ctx, ctx,
global.timetableJSON, global.timetableJSON,
global.marksJSON global.marksJSON,
global.finalMarksJSON
) )
} }
} else { } else {
@@ -50,7 +53,8 @@ fun remoteLoad(ctx: Context) {
launchContinue( launchContinue(
ctx, ctx,
networkRequestFactory.perform(NetworkRequestType.Timetable), networkRequestFactory.perform(NetworkRequestType.Timetable),
networkRequestFactory.perform(NetworkRequestType.Marks) networkRequestFactory.perform(NetworkRequestType.Marks),
networkRequestFactory.perform(NetworkRequestType.FinalMarks)
) )
} }
} }
@@ -61,39 +65,43 @@ fun localLoad(ctx: Context) {
global.studentId = Parsing.getStudentId() global.studentId = Parsing.getStudentId()
global.studentClass = Parsing.getStudentClass() global.studentClass = Parsing.getStudentClass()
global.apiEndPoints.marks = "${global.apiEndPoints.apiBase}/v1/students/${global.studentId}/marks/list" global.apiEndPoints.marks = "${global.apiEndPoints.apiBase}/v1/students/${global.studentId}/marks/list"
global.apiEndPoints.finalMarks = "${global.apiEndPoints.apiBase}/v1/students/${global.studentId}/marks/final"
val localTimetable = JSONObject(Util.fileToString(global.filePaths.timetable)) val localTimetable = JSONObject(Util.fileToString(global.filePaths.timetable))
val localMarks = JSONObject(Util.fileToString(global.filePaths.marks)) val localMarks = JSONObject(Util.fileToString(global.filePaths.marks))
val localFinalMarks = JSONObject(Util.fileToString(global.filePaths.finalMarks))
launchContinue( launchContinue(
ctx, ctx,
localTimetable, localTimetable,
localMarks localMarks,
localFinalMarks
) )
} }
fun launchContinue( fun launchContinue(
ctx: Context, ctx: Context,
timetable: JSONObject, timetable: JSONObject,
marks: JSONObject marks: JSONObject,
finalMarks: JSONObject
) { ) {
// parse timetable and marks // parse timetable and marks
val parsedTimetable = Parsing.parseTimetable(timetable) global.timetable = Parsing.parseTimetable(timetable)
global.timetable = parsedTimetable global.marks = Parsing.parseMarks(marks)
val parsedMarks = Parsing.parseMarks(marks)
global.marks = parsedMarks
global.newMarks = Parsing.parseNewMarks(marks) global.newMarks = Parsing.parseNewMarks(marks)
global.finalMarks = Parsing.parseFinalMarks(finalMarks)
// // load the settings
// global.settings = Util.fileToString(global.filePaths.settings).toSettingsData()
// load the lecture notes // load the lecture notes
Util.loadLectureNotes() //Util.loadLectureNotes()
Util.csvToLectureNotes() //Util.csvToLectureNotes()
// load the settings
settings = Util.fileToString(global.filePaths.settings).toSettingsData()
// listen for internet availability in case of disconnection // listen for internet availability in case of disconnection
if (!global.internetAwaitListenerRunning) if (!global.internetAwaitListenerRunning)
setOnInternetAvailListener(ctx) setOnInternetAvailListener(ctx)
// FIXME maybe? causes IndexOutOfBoundsException????? prob not tho
if (!global.launched) { if (!global.launched) {
// show the default (main) screen // show the default (main) screen
global.currentScreen = Screen.Main global.currentScreen = Screen.Main
@@ -106,6 +114,8 @@ fun launchContinue(
global.refreshed = true global.refreshed = true
refreshButtonContentColor.value = Color.White refreshButtonContentColor.value = Color.White
showTempScreen(Screen.Main)
// show the full name of the user in the toolbar as a status // show the full name of the user in the toolbar as a status
if (Util.internetAvail(ctx)) { if (Util.internetAvail(ctx)) {
statusFactory.show(StatusType.NameRole) statusFactory.show(StatusType.NameRole)
@@ -134,4 +144,4 @@ private fun setOnInternetAvailListener(ctx: Context) {
delay(1000) // Check for internet availability every second delay(1000) // Check for internet availability every second
} }
} }
} }
@@ -80,6 +80,7 @@ fun MainScreen() {
ScreenElement.Menu -> MenuScreen() ScreenElement.Menu -> MenuScreen()
ScreenElement.About -> AboutScreen() ScreenElement.About -> AboutScreen()
ScreenElement.SignOut -> SignOutScreen() ScreenElement.SignOut -> SignOutScreen()
ScreenElement.Temp -> {}
} }
} }
} }
@@ -91,4 +92,4 @@ fun MainScreen() {
NavbarScreen() NavbarScreen()
} }
} }
} }
@@ -1,5 +1,7 @@
package com.odweta.solon package com.odweta.solon
import android.util.Log
import androidx.compose.ui.text.style.TextOverflow
import androidx.activity.compose.BackHandler import androidx.activity.compose.BackHandler
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.border import androidx.compose.foundation.border
@@ -25,6 +27,7 @@ import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
@@ -121,7 +124,8 @@ fun NewMarksScreen() {
modifier = Modifier.verticalScroll(ss) modifier = Modifier.verticalScroll(ss)
) { ) {
for ((k, v) in global.newMarks) { for ((k, v) in global.newMarks) {
if (v.size > 0) { if (v.filter { it.grade in "0123456789" }.size == 0) continue
if (v.isNotEmpty()) {
Column( Column(
modifier = Modifier modifier = Modifier
.padding(horizontal = 10.dp) .padding(horizontal = 10.dp)
@@ -242,14 +246,16 @@ fun FinalMarksScreen() {
Column( Column(
modifier = Modifier.verticalScroll(ss) modifier = Modifier.verticalScroll(ss)
) { ) {
Text("test", color = Color.White) Text(Util.fileToString(global.filePaths.finalMarks), color = Color.White)
Text("test", color = Color.White) for ((subject, mark) in global.finalMarks) {
Text("test", color = Color.White) // LaunchedEffect(Unit) {
Text("test", color = Color.White) // Log.d("debug", networkRequestFactory.perform(NetworkRequestType.Apologies).body.string?.toString())
Text("test", color = Color.White) //}
Text("test", color = Color.White) Row {
Text("test", color = Color.White) Text(subject, color = Color.White)
Text("test", color = Color.White) Text(mark.toString(), color = Color.White, modifier = Modifier.padding(10.dp))
}
}
} }
} }
} }
@@ -302,6 +308,7 @@ fun MarksAll() {
.verticalScroll(scrollState) .verticalScroll(scrollState)
) { ) {
for ((subject, markList) in global.marks) { for ((subject, markList) in global.marks) {
if (markList.filter { it.grade in "0123456789" }.size == 0) continue
val amoledModifier = if (settings.useAmoledMode.checked.value == true) { val amoledModifier = if (settings.useAmoledMode.checked.value == true) {
Modifier Modifier
.width(150.dp) .width(150.dp)
@@ -337,8 +344,10 @@ fun MarksAll() {
shape = RoundedCornerShape(global.dimens.roundedCorner) shape = RoundedCornerShape(global.dimens.roundedCorner)
) )
.clickable { .clickable {
global.marksDepthLevel = MarksDepthLevel.Subject if (markList[0].grade != "0") {
global.subjectToShow = subject global.marksDepthLevel = MarksDepthLevel.Subject
global.subjectToShow = subject
} // else { isInDemo == true }
} }
} else { } else {
Modifier Modifier
@@ -349,8 +358,10 @@ fun MarksAll() {
shape = RoundedCornerShape(global.dimens.roundedCorner) shape = RoundedCornerShape(global.dimens.roundedCorner)
) )
.clickable { .clickable {
global.marksDepthLevel = MarksDepthLevel.Subject if (markList[0].grade != "0") {
global.subjectToShow = subject global.marksDepthLevel = MarksDepthLevel.Subject
global.subjectToShow = subject
} // else { isInDemo == true }
} }
} }
@@ -366,13 +377,7 @@ fun MarksAll() {
.background(Color.Black) .background(Color.Black)
} }
var marksString = "" var marksString = markList.filter { it.grade in "0123456789" }.joinToString(separator = ",") { it.grade }
for (m in 0 until markList.size-1) {
if (markList[m].grade in "0123456789") {
marksString += markList[m].grade + ", "
}
}
marksString += markList[markList.size-1].grade
if (global.marks.keys.indexOf(subject) > 0) { if (global.marks.keys.indexOf(subject) > 0) {
Box(modifier = Modifier.height(10.dp)) Box(modifier = Modifier.height(10.dp))
@@ -463,7 +468,7 @@ fun MarksAll() {
) )
} }
FloatingActionButton( /*FloatingActionButton(
onClick = { global.currentScreenElement = ScreenElement.FinalMarks }, onClick = { global.currentScreenElement = ScreenElement.FinalMarks },
modifier = Modifier modifier = Modifier
.padding(10.dp) .padding(10.dp)
@@ -479,7 +484,7 @@ fun MarksAll() {
contentDescription = "Final marks", contentDescription = "Final marks",
tint = PastelYellow // You can customize the icon color tint = PastelYellow // You can customize the icon color
) )
} }*/
} }
} }
} }
@@ -551,6 +556,8 @@ fun MarksSubject() {
color = Color.White, color = Color.White,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
fontSize = 30.sp, fontSize = 30.sp,
maxLines = 1,
overflow = TextOverflow.Ellipsis, // more elegant i think
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.border( .border(
@@ -804,4 +811,4 @@ fun MarksDetail() {
} }
} // date } // date
} }
} }
@@ -43,6 +43,7 @@ fun NavbarScreen() {
Button( Button(
onClick = { onClick = {
if (Util.internetAvail(ctx)) { if (Util.internetAvail(ctx)) {
global.refreshed = false;
remoteLoad(ctx) remoteLoad(ctx)
statusFactory.show(StatusType.Loading) statusFactory.show(StatusType.Loading)
refreshButtonContentColor.value = PastelYellow refreshButtonContentColor.value = PastelYellow
@@ -125,4 +126,4 @@ fun NavbarScreen() {
) )
} }
} }
} }
@@ -32,6 +32,7 @@ fun setupAPI() {
global.studentId = Parsing.getStudentId() global.studentId = Parsing.getStudentId()
global.apiEndPoints.marks = "${global.apiEndPoints.apiBase}/v1/students/${global.studentId}/marks/list" global.apiEndPoints.marks = "${global.apiEndPoints.apiBase}/v1/students/${global.studentId}/marks/list"
global.apiEndPoints.finalMarks = "${global.apiEndPoints.apiBase}/v1/students/${global.studentId}/marks/final"
global.isAPISetUp = true global.isAPISetUp = true
} }
@@ -40,6 +41,7 @@ enum class NetworkRequestType {
Token, Token,
Timetable, Timetable,
Marks, Marks,
FinalMarks,
UserData UserData
} }
@@ -71,6 +73,7 @@ object NetworkRequestFactory: NetworkRequestInterface {
} }
NetworkRequestType.Timetable -> return getAPI(global.apiEndPoints.timetable) NetworkRequestType.Timetable -> return getAPI(global.apiEndPoints.timetable)
NetworkRequestType.Marks -> return getAPI(global.apiEndPoints.marks) NetworkRequestType.Marks -> return getAPI(global.apiEndPoints.marks)
NetworkRequestType.FinalMarks -> return getAPI(global.apiEndPoints.finalMarks)
NetworkRequestType.UserData -> return getAPI(global.apiEndPoints.userData) NetworkRequestType.UserData -> return getAPI(global.apiEndPoints.userData)
} }
} }
@@ -82,7 +85,13 @@ object NetworkRequestFactory: NetworkRequestInterface {
.get() .get()
.build() .build()
return client.newCall(request).execute() return try {
client.newCall(request).execute()
} catch (e: Exception) {
Response.Builder()
.code(500)
.build()
}
} }
private fun post(url: String, headers: Headers, body: FormBody): Response { private fun post(url: String, headers: Headers, body: FormBody): Response {
@@ -92,7 +101,13 @@ object NetworkRequestFactory: NetworkRequestInterface {
.post(body) .post(body)
.build() .build()
return client.newCall(request).execute() return try {
client.newCall(request).execute()
} catch (e: Exception) {
Response.Builder()
.code(500)
.build()
}
} }
private fun getAPI(url: String): JSONObject { private fun getAPI(url: String): JSONObject {
@@ -267,9 +267,6 @@ class Parsing {
) )
n -= 1 n -= 1
} }
val finalSubjects: MutableList<Subject> = mutableListOf()
finalSubjects.addAll(newSubjects.reversed())
finalSubjects.addAll(auxSubjects)
for ((i, s) in auxSubjects.withIndex()) { for ((i, s) in auxSubjects.withIndex()) {
if (s.free) { if (s.free) {
@@ -278,6 +275,10 @@ class Parsing {
} }
} }
val finalSubjects: MutableList<Subject> = mutableListOf()
finalSubjects.addAll(newSubjects.reversed())
finalSubjects.addAll(auxSubjects)
val day = Day() val day = Day()
day.name = name day.name = name
day.date = date day.date = date
@@ -386,16 +387,6 @@ class Parsing {
for (i in 0..<marksJSONArray.length()) { for (i in 0..<marksJSONArray.length()) {
marksList.add(marksJSONArray.getJSONObject(i)) marksList.add(marksJSONArray.getJSONObject(i))
marksList.add(marksJSONArray.getJSONObject(i))
marksList.add(marksJSONArray.getJSONObject(i))
marksList.add(marksJSONArray.getJSONObject(i))
marksList.add(marksJSONArray.getJSONObject(i))
marksList.add(marksJSONArray.getJSONObject(i))
marksList.add(marksJSONArray.getJSONObject(i))
marksList.add(marksJSONArray.getJSONObject(i))
marksList.add(marksJSONArray.getJSONObject(i))
marksList.add(marksJSONArray.getJSONObject(i))
marksList.add(marksJSONArray.getJSONObject(i))
} }
for (subj in subjectMap.values) { for (subj in subjectMap.values) {
@@ -416,6 +407,14 @@ class Parsing {
return marks return marks
} }
fun parseFinalMarks(json: JSONObject): Map<String, Int> {
return mapOf(
"AJ" to 1,
"B" to 5,
"Pr" to 1
)
}
fun getStudentClass(): String { fun getStudentClass(): String {
return if (!userIsParent()) { return if (!userIsParent()) {
global.userData global.userData
@@ -45,7 +45,9 @@ fun SettingsScreen() {
// load the settings dat every time the settings screen is opened, // load the settings dat every time the settings screen is opened,
// maybe i can add a flag that determines if the settings are up to date? // maybe i can add a flag that determines if the settings are up to date?
settings = Util.fileToString(global.filePaths.settings).toSettingsData() if (!global.demoMode) {
settings = Util.fileToString(global.filePaths.settings).toSettingsData()
}
val scrollState = rememberScrollState() val scrollState = rememberScrollState()
@@ -60,7 +62,9 @@ fun SettingsScreen() {
SettingsTableRow(settings.useAmoledMode) SettingsTableRow(settings.useAmoledMode)
SettingsTableRow(settings.showRefreshButton) if (!global.demoMode) {
SettingsTableRow(settings.showRefreshButton)
}
SettingsTableRow(settings.useAnimations) SettingsTableRow(settings.useAnimations)
} }
@@ -89,26 +89,55 @@ fun signInButtonCallback(ctx: Context, usernameText: String, passwordText: Strin
} }
CoroutineScope(Dispatchers.IO).launch { CoroutineScope(Dispatchers.IO).launch {
val valid = Account.isValid(acc) if (global.username == "demo" && global.password == "Demo1234") {
// start the demo
checked = true launchDemo(ctx)
if (valid) {
Account.save(acc)
global.currentScreen = Screen.Splash
launchStart(ctx)
} else { } else {
withContext(Dispatchers.Main) { val valid = Account.isValid(acc)
Toast.makeText(
ctx, checked = true
"Neplatné přihlašovací údaje nebo nejste připojeni k internetu, zkuste to znovu.",
Toast.LENGTH_LONG if (valid) {
).show() Account.save(acc)
global.currentScreen = Screen.Splash
launchStart(ctx)
} else {
withContext(Dispatchers.Main) {
Toast.makeText(
ctx,
"Neplatné přihlašovací údaje nebo nejste připojeni k internetu, zkuste to znovu.",
Toast.LENGTH_LONG
).show()
}
} }
} }
} }
} }
fun launchDemo(ctx: Context) {
global.demoMode = true
settings = Util.fileToString(global.filePaths.settings).toSettingsData()
settings.showRefreshButton.checked.value = false
val d = Day()
d.name = "demoday"
d.date = "1. 1."
d.subjects = listOf(Subject.empty())
global.timetable = listOf(d)
global.marks = mutableMapOf("demomarks" to mutableListOf(Mark().none()))
global.newMarks = global.marks
global.status = "demo"
global.launched = true
global.refreshed = true
global.currentScreen = Screen.Main
global.currentScreenElement = ScreenElement.Timetable
}
@Composable @Composable
fun SignInScreen() { fun SignInScreen() {
// handle the back gesture (back swipe form side or back button on bottom android navbar) // handle the back gesture (back swipe form side or back button on bottom android navbar)
@@ -136,7 +165,7 @@ fun SignInScreen() {
horizontalAlignment = Alignment.CenterHorizontally horizontalAlignment = Alignment.CenterHorizontally
) { ) {
Image( Image(
painter = painterResource(R.drawable.solon_just_yellow), painter = painterResource(R.drawable.solon_logo_3_0),
contentDescription = "Solon logo", contentDescription = "Solon logo",
modifier = Modifier.size(200.dp) modifier = Modifier.size(200.dp)
) )
@@ -33,7 +33,7 @@ fun SplashScreen() {
horizontalAlignment = Alignment.CenterHorizontally horizontalAlignment = Alignment.CenterHorizontally
) { ) {
Image( Image(
painter = painterResource(R.drawable.solon_just_yellow), painter = painterResource(R.drawable.solon_logo_3_0),
contentDescription = "Solon logo", contentDescription = "Solon logo",
modifier = Modifier.size(200.dp) modifier = Modifier.size(200.dp)
) )
@@ -19,4 +19,23 @@ fun showTempScreen(screen: Screen) {
global.returnToTempScreen = true global.returnToTempScreen = true
global.tempScreen = screen global.tempScreen = screen
global.currentScreen = Screen.Temp global.currentScreen = Screen.Temp
} }
@Composable
fun TempScreenElement() {
when (global.tempScreenElement) {
ScreenElement.Timetable -> {}
ScreenElement.Marks -> {}
ScreenElement.NewMarks -> {}
ScreenElement.FinalMarks -> {}
ScreenElement.Menu -> {}
ScreenElement.About -> {}
ScreenElement.SignOut -> {}
ScreenElement.Temp -> {}
}
}
fun showTempScreenElement(element: ScreenElement) {
global.tempScreenElement = element
global.currentScreenElement = ScreenElement.Temp
}
@@ -19,6 +19,7 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.PagerState
import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
@@ -65,8 +66,11 @@ import com.odweta.solon.ui.theme.PastelRed
import com.odweta.solon.ui.theme.PastelRedTransparent import com.odweta.solon.ui.theme.PastelRedTransparent
import com.odweta.solon.ui.theme.PastelYellow import com.odweta.solon.ui.theme.PastelYellow
import com.odweta.solon.ui.theme.PastelYellowTransparent import com.odweta.solon.ui.theme.PastelYellowTransparent
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.time.LocalDate import java.time.LocalDate
import java.time.LocalDateTime import java.time.LocalDateTime
import java.time.LocalTime import java.time.LocalTime
@@ -74,14 +78,63 @@ import java.time.format.DateTimeFormatter
var showDetailDialog by mutableStateOf(false) var showDetailDialog by mutableStateOf(false)
@OptIn(ExperimentalFoundationApi::class)
@Composable @Composable
fun TimetableScreen() { fun TimetableScreen() {
Box( val pagerState = rememberPagerState(pageCount = { if (global.timetable.isNotEmpty()) global.timetable.size else 6 }) // FIXME
modifier = Modifier.fillMaxSize(), Column {
contentAlignment = Alignment.BottomCenter //QuickDays(pagerState)
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.BottomCenter
) {
DayPager(pagerState)
if (showDetailDialog) DetailDialog()
}
}
}
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun QuickDays(pagerState: PagerState) {
@Composable
fun QuickDay(day: Day, modifier: Modifier, idx: Int) {
val scope = rememberCoroutineScope()
Column(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
modifier = modifier.padding(5.dp).background(
shape = RoundedCornerShape(global.dimens.roundedCorner),
color = PastelYellowTransparent
).clickable(onClick = {
scope.launch {
withContext(Dispatchers.Main) {
pagerState.animateScrollToPage(idx)
}
}
})
) {
Text(
text = "${day.name[0]}${day.name[1]}",
color = Color.White,
textAlign = TextAlign.Center,
fontWeight = FontWeight.Bold
)
Spacer(Modifier.height(5.dp))
Text(
text = day.date,
color = Color.White,
textAlign = TextAlign.Center
)
}
}
Row(
Modifier.fillMaxWidth().padding(bottom = 15.dp).padding(horizontal = 5.dp)
) { ) {
DayPager() for ((idx, day) in global.timetable.withIndex()) {
if (showDetailDialog) DetailDialog() QuickDay(day, Modifier.weight(1f), idx)
}
} }
} }
@@ -227,13 +280,28 @@ fun DetailDialog() {
@OptIn(ExperimentalFoundationApi::class) @OptIn(ExperimentalFoundationApi::class)
@Composable @Composable
fun DayPager() { fun DayPager(pagerState: PagerState) {
val pagerState = rememberPagerState(pageCount = { if (global.timetable.isNotEmpty()) global.timetable.size else 6 }) // FIXME
HorizontalPager( HorizontalPager(
state = pagerState, state = pagerState,
modifier = Modifier.fillMaxSize() modifier = Modifier.fillMaxSize()
) { pageIndex -> ) { pageIndex ->
DayScreen(global.timetable[pageIndex]) if (global.timetable.isNotEmpty()) {
DayScreen(global.timetable[pageIndex])
} else {
NoDayScreen()
}
}
}
@Composable
fun NoDayScreen() {
Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
Text(
"Zatím žádný rozvrh.",
color = Color.White,
fontSize = 30.sp,
fontStyle = FontStyle.Italic
)
} }
} }
@@ -258,6 +326,7 @@ private fun getSubjectColor(s: Subject, transparent: Boolean): Color {
} }
} }
} }
fun isTimeBetweenT(givenTime: LocalTime, startTime: LocalTime, endTime: LocalTime): Boolean { fun isTimeBetweenT(givenTime: LocalTime, startTime: LocalTime, endTime: LocalTime): Boolean {
// Check if the given time is between startTime and endTime // Check if the given time is between startTime and endTime
return givenTime.isAfter(startTime) && givenTime.isBefore(endTime) return givenTime.isAfter(startTime) && givenTime.isBefore(endTime)
@@ -423,7 +492,7 @@ private fun DayScreen(day: Day) {
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxHeight() .fillMaxHeight()
.padding(start = 20.dp), .padding(start = 10.dp), // same as on the right
verticalArrangement = Arrangement.Center, verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.Start horizontalAlignment = Alignment.Start
) { ) {
@@ -507,25 +576,22 @@ private fun DayScreen(day: Day) {
verticalArrangement = Arrangement.Center, verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.End horizontalAlignment = Alignment.End
) { ) {
// show only for non prepended free lectures // show only for non free lectures
if ((subject.free && subject.start != "00:00" && subject.end != "00:00") || !subject.free) { if (!subject.free) {
Text( Text(
text = "${subject.start}${subject.end}", text = "${subject.start}${subject.end}",
color = Color.White, color = Color.White,
fontSize = 21.sp fontSize = 23.sp
) )
} }
if (!subject.free) { if (!subject.free) {
Box ( Text(
contentAlignment = Alignment.BottomEnd text = subject.teacher,
) { color = Color.White,
Text( fontSize = 14.sp,
text = subject.teacher, lineHeight = 1.sp // to achieve uniform padding
color = Color.White, )
fontSize = 12.sp
)
}
} }
} }
} }
@@ -534,10 +600,10 @@ private fun DayScreen(day: Day) {
Box(modifier = Modifier Box(modifier = Modifier
.fillMaxSize() .fillMaxSize()
.zIndex(99f) .zIndex(99f)
.clickable { /*.clickable {
global.selectedLecture = lectureId global.selectedLecture = lectureId
showDetailDialog = true showDetailDialog = true
}) }*/)
if ( if (
(global.lectureNotes[global.selectedLecture] != null && (global.lectureNotes[global.selectedLecture] != null &&
Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

@@ -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="@mipmap/launcher_background"/> <background android:drawable="@color/launcher_background"/>
<foreground android:drawable="@mipmap/launcher_foreground"/> <foreground android:drawable="@mipmap/launcher_foreground"/>
<monochrome android:drawable="@mipmap/launcher_monochrome_foreground"/>
</adaptive-icon> </adaptive-icon>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/launcher_monochrome_background"/>
<foreground android:drawable="@mipmap/launcher_monochrome_foreground"/>
</adaptive-icon>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/launcher_monochrome_background"/>
<foreground android:drawable="@mipmap/launcher_monochrome_foreground"/>
</adaptive-icon>
@@ -1,5 +1,5 @@
<?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="@mipmap/launcher_background"/> <background android:drawable="@color/launcher_background"/>
<foreground android:drawable="@mipmap/launcher_foreground"/> <foreground android:drawable="@mipmap/launcher_foreground"/>
</adaptive-icon> </adaptive-icon>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 746 B

After

Width:  |  Height:  |  Size: 924 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 650 B

After

Width:  |  Height:  |  Size: 966 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 724 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 910 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 590 B

After

Width:  |  Height:  |  Size: 676 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 464 B

After

Width:  |  Height:  |  Size: 664 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 514 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 804 B

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 922 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="launcher_background">#000000</color>
</resources>
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="launcher_monochrome_background">#000000</color>
</resources>
+4 -4
View File
@@ -1,6 +1,6 @@
[versions] [versions]
accompanistCoil = "0.30.1" accompanistCoil = "0.30.1"
agp = "8.7.2" agp = "8.13.0"
coilCompose = "2.4.0" coilCompose = "2.4.0"
glide = "4.16.0" glide = "4.16.0"
kotlin = "2.0.0" kotlin = "2.0.0"
@@ -36,7 +36,7 @@ androidx-material3 = { group = "androidx.compose.material3", name = "material3"
okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" } okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" }
[plugins] [plugins]
android-application = { id = "com.android.application", version.ref = "agp" } android-application = { id = "com.android.application" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-android = { id = "org.jetbrains.kotlin.android" }
kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose" }
+1 -1
View File
@@ -1,6 +1,6 @@
#Thu Oct 17 19:11:18 CEST 2024 #Thu Oct 17 19:11:18 CEST 2024
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
+5
View File
@@ -1,4 +1,9 @@
pluginManagement { pluginManagement {
plugins {
id("com.android.application") version "8.11.1"
id("org.jetbrains.kotlin.android") version "2.0.0"
id("org.jetbrains.kotlin.plugin.compose") version "2.0.0"
}
repositories { repositories {
google { google {
content { content {