Compare commits
26 Commits
81267d54e3
...
dd787effbc
| Author | SHA1 | Date | |
|---|---|---|---|
| dd787effbc | |||
|
|
7eac57b94d | ||
|
|
ee0ba71c8f | ||
|
|
ab64faeadb | ||
|
|
1460f2aa4e | ||
|
|
8925b3a5f8 | ||
|
|
eb0308cbed | ||
|
|
c90e01737c | ||
|
|
05c406657a | ||
|
|
fc402eef16 | ||
|
|
e9cfc7bbfc | ||
|
|
7e711d64e8 | ||
|
|
80008d8f00 | ||
|
|
0dc921c603 | ||
|
|
4e23b745f3 | ||
|
|
ce91b47ad1 | ||
|
|
250ed2f105 | ||
|
|
4cde28cd72 | ||
|
|
df63c258b3 | ||
|
|
1b6992132e | ||
|
|
55350b0e5d | ||
|
|
8d532a442d | ||
|
|
cc4091e165 | ||
|
|
1f05f1d091 | ||
|
|
cc04293ead | ||
|
|
2ac948539c |
2
.gitmodules
vendored
@@ -1,3 +1,3 @@
|
||||
[submodule "naplo-plus"]
|
||||
path = refilc_plus
|
||||
url = git@github.com:refilc/naplo-plus.git
|
||||
url = https://git.qwit.cloud/refilc/student-plus.git
|
||||
|
||||
1286
.idea/libraries/Dart_Packages.xml
generated
41
.idea/libraries/Dart_SDK.xml
generated
@@ -1,25 +1,28 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Dart SDK">
|
||||
<CLASSES>
|
||||
<root url="file:///opt/flutter/bin/cache/dart-sdk/lib/async" />
|
||||
<root url="file:///opt/flutter/bin/cache/dart-sdk/lib/cli" />
|
||||
<root url="file:///opt/flutter/bin/cache/dart-sdk/lib/collection" />
|
||||
<root url="file:///opt/flutter/bin/cache/dart-sdk/lib/convert" />
|
||||
<root url="file:///opt/flutter/bin/cache/dart-sdk/lib/core" />
|
||||
<root url="file:///opt/flutter/bin/cache/dart-sdk/lib/developer" />
|
||||
<root url="file:///opt/flutter/bin/cache/dart-sdk/lib/ffi" />
|
||||
<root url="file:///opt/flutter/bin/cache/dart-sdk/lib/html" />
|
||||
<root url="file:///opt/flutter/bin/cache/dart-sdk/lib/indexed_db" />
|
||||
<root url="file:///opt/flutter/bin/cache/dart-sdk/lib/io" />
|
||||
<root url="file:///opt/flutter/bin/cache/dart-sdk/lib/isolate" />
|
||||
<root url="file:///opt/flutter/bin/cache/dart-sdk/lib/js" />
|
||||
<root url="file:///opt/flutter/bin/cache/dart-sdk/lib/js_util" />
|
||||
<root url="file:///opt/flutter/bin/cache/dart-sdk/lib/math" />
|
||||
<root url="file:///opt/flutter/bin/cache/dart-sdk/lib/mirrors" />
|
||||
<root url="file:///opt/flutter/bin/cache/dart-sdk/lib/svg" />
|
||||
<root url="file:///opt/flutter/bin/cache/dart-sdk/lib/typed_data" />
|
||||
<root url="file:///opt/flutter/bin/cache/dart-sdk/lib/web_audio" />
|
||||
<root url="file:///opt/flutter/bin/cache/dart-sdk/lib/web_gl" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/async" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/cli" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/collection" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/concurrent" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/convert" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/core" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/developer" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/ffi" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/html" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/indexed_db" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/io" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/isolate" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/js" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/js_interop" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/js_interop_unsafe" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/js_util" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/math" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/mirrors" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/svg" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/typed_data" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/web_audio" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/web_gl" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
|
||||
1
.idea/misc.xml
generated
@@ -1,4 +1,3 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Android API 33, extension level 3 Platform" project-jdk-type="Android SDK" />
|
||||
</project>
|
||||
13
.idea/naplo.iml
generated
@@ -60,8 +60,21 @@
|
||||
<excludeFolder url="file://$MODULE_DIR$/filcnaplo/linux/flutter/ephemeral/.plugin_symlinks/flutter_acrylic/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/filcnaplo/linux/flutter/ephemeral/.plugin_symlinks/flutter_acrylic/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/filcnaplo/linux/flutter/ephemeral/.plugin_symlinks/flutter_acrylic/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/refilc/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/refilc/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/refilc/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/refilc_kreta_api/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/refilc_kreta_api/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/refilc_kreta_api/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/refilc_mobile_ui/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/refilc_mobile_ui/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/refilc_mobile_ui/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/refilc_plus/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/refilc_plus/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/refilc_plus/build" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="Dart SDK" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
5
.idea/vcs.xml
generated
@@ -2,9 +2,6 @@
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/filcnaplo_desktop_ui" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/filcnaplo_kreta_api" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/filcnaplo_mobile_ui" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/filcnaplo_premium" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/refilc_plus" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -14,7 +14,7 @@
|
||||
*Az építhéshez szükséged lesz a refilc_plus repora is, amit itt találsz: [student-plus](https://git.qwit.cloud/refilc/student-plus)*
|
||||
|
||||
```sh
|
||||
git clone --branch dev https://git.qwit.cloud/refilc/student-legacy.git --recursive
|
||||
git clone https://git.qwit.cloud/refilc/student-legacy.git --recursive
|
||||
cd naplo
|
||||
# ha ez nem töltött le refilc plus repoba értelmes dolgokat futtasd a többi parancsot is
|
||||
rm -rf refilc_plus
|
||||
|
||||
1
refilc/android/app/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.jks
|
||||
@@ -120,7 +120,13 @@ android {
|
||||
|
||||
release {
|
||||
signingConfig signingConfigs.release
|
||||
shrinkResources false
|
||||
shrinkResources true
|
||||
minifyEnabled true
|
||||
debuggable false
|
||||
jniDebuggable false
|
||||
renderscriptDebuggable false
|
||||
pseudoLocalesEnabled false
|
||||
zipAlignEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
|
||||
4
refilc/android/app/proguard-rules.pro
vendored
@@ -11,4 +11,6 @@
|
||||
-dontwarn com.stripe.android.pushProvisioning.PushProvisioningEphemeralKeyProvider
|
||||
|
||||
-dontwarn org.joda.convert.FromString
|
||||
-dontwarn org.joda.convert.ToString
|
||||
-dontwarn org.joda.convert.ToString
|
||||
|
||||
#-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
|
||||
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 190 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 69 B After Width: | Height: | Size: 69 B |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 190 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 190 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 69 B After Width: | Height: | Size: 69 B |
@@ -1,5 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<foreground>
|
||||
<inset
|
||||
android:drawable="@drawable/ic_launcher_foreground"
|
||||
android:inset="16%" />
|
||||
</foreground>
|
||||
</adaptive-icon>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 642 B After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 9.1 KiB |
@@ -6,7 +6,7 @@
|
||||
<item name="android:windowFullscreen">false</item>
|
||||
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
|
||||
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||
<item name="android:windowSplashScreenBackground">#03112D</item>
|
||||
<item name="android:windowSplashScreenBackground">#7CA021</item>
|
||||
<item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
|
||||
</style>
|
||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<item name="android:windowFullscreen">false</item>
|
||||
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
|
||||
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||
<item name="android:windowSplashScreenBackground">#03112D</item>
|
||||
<item name="android:windowSplashScreenBackground">#7CA021</item>
|
||||
<item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
|
||||
</style>
|
||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#03112D</color>
|
||||
<color name="ic_launcher_background">#7CA021</color>
|
||||
|
||||
<color name="purple_200">#FFBB86FC</color>
|
||||
<color name="purple_500">#FF6200EE</color>
|
||||
@@ -66,4 +66,4 @@
|
||||
<color name="pink_shade300">#FFF06292</color>
|
||||
<color name="purple_shade300">#FFBA68C8</color>
|
||||
<color name="teal_shade300">#FF22AC9B</color>
|
||||
</resources>
|
||||
</resources>
|
||||
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 87 KiB |
@@ -1,3 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
flutter build apk --release --dart-define=APPVER=$(cat pubspec.yaml | grep version: | cut -d' ' -f2 | cut -d+ -f1) --no-tree-shake-icons
|
||||
flutter build apk --release --tree-shake-icons --split-debug-info=debug-info --split-per-abi --target-platform android-arm,android-arm64 --obfuscate
|
||||
|
||||
|
Before Width: | Height: | Size: 69 B After Width: | Height: | Size: 69 B |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 84 KiB |
@@ -38,7 +38,7 @@
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="LaunchImage" width="1700" height="1700"/>
|
||||
<image name="LaunchImage" width="2700" height="2700"/>
|
||||
<image name="LaunchBackground" width="1" height="1"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
||||
@@ -1,138 +1,138 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>BGTaskSchedulerPermittedIdentifiers</key>
|
||||
<array>
|
||||
<string>com.transistorsoft.refilcnotification</string>
|
||||
<string>com.transistorsoft.refilcliveactivity</string>
|
||||
</array>
|
||||
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true/>
|
||||
<key>CFBundleAlternateIcons</key>
|
||||
<dict>
|
||||
<key>refilc_concept</key>
|
||||
<key>BGTaskSchedulerPermittedIdentifiers</key>
|
||||
<array>
|
||||
<string>com.transistorsoft.refilcnotification</string>
|
||||
<string>com.transistorsoft.refilcliveactivity</string>
|
||||
</array>
|
||||
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true/>
|
||||
<key>CFBundleAlternateIcons</key>
|
||||
<dict>
|
||||
<key>CFBundleIconFiles</key>
|
||||
<array>
|
||||
<string>refilc_concept</string>
|
||||
</array>
|
||||
<key>UIPrerenderedIcon</key>
|
||||
<false/>
|
||||
<key>refilc_concept</key>
|
||||
<dict>
|
||||
<key>CFBundleIconFiles</key>
|
||||
<array>
|
||||
<string>refilc_concept</string>
|
||||
</array>
|
||||
<key>UIPrerenderedIcon</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>refilc_default</key>
|
||||
<dict>
|
||||
<key>CFBundleIconFiles</key>
|
||||
<array>
|
||||
<string>refilc_default</string>
|
||||
</array>
|
||||
<key>UIPrerenderedIcon</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>refilc_overcomplicated</key>
|
||||
<dict>
|
||||
<key>CFBundleIconFiles</key>
|
||||
<array>
|
||||
<string>refilc_overcomplicated</string>
|
||||
</array>
|
||||
<key>UIPrerenderedIcon</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>refilc_pride</key>
|
||||
<dict>
|
||||
<key>CFBundleIconFiles</key>
|
||||
<array>
|
||||
<string>refilc_pride</string>
|
||||
</array>
|
||||
<key>UIPrerenderedIcon</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>refilc_default</key>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIcons</key>
|
||||
<dict>
|
||||
<key>CFBundleIconFiles</key>
|
||||
<array>
|
||||
<string>refilc_default</string>
|
||||
</array>
|
||||
<key>UIPrerenderedIcon</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>refilc_overcomplicated</key>
|
||||
<dict>
|
||||
<key>CFBundleIconFiles</key>
|
||||
<array>
|
||||
<string>refilc_overcomplicated</string>
|
||||
</array>
|
||||
<key>UIPrerenderedIcon</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>refilc_pride</key>
|
||||
<dict>
|
||||
<key>CFBundleIconFiles</key>
|
||||
<array>
|
||||
<string>refilc_pride</string>
|
||||
</array>
|
||||
<key>UIPrerenderedIcon</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIcons</key>
|
||||
<dict>
|
||||
<key>CFBundlePrimaryIcon</key>
|
||||
<dict>
|
||||
<key>CFBundleIconFiles</key>
|
||||
<array>
|
||||
<key>CFBundlePrimaryIcon</key>
|
||||
<dict>
|
||||
<key>CFBundleIconFiles</key>
|
||||
<array>
|
||||
<string></string>
|
||||
</array>
|
||||
<key>CFBundleIconName</key>
|
||||
<string></string>
|
||||
</array>
|
||||
<key>CFBundleIconName</key>
|
||||
<string></string>
|
||||
<key>UIPrerenderedIcon</key>
|
||||
<false/>
|
||||
<key>UIPrerenderedIcon</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>reFilc</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>$(FLUTTER_BUILD_NAME)</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>CFBundleURLSchemes</key>
|
||||
<array>
|
||||
<string>refilcapp</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSApplicationQueriesSchemes</key>
|
||||
<array>
|
||||
<string>https</string>
|
||||
<string>http</string>
|
||||
</array>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>NSCameraUsageDescription</key>
|
||||
<string>The app requires the camera access to set a custom profile picture.</string>
|
||||
<key>NSPhotoLibraryUsageDescription</key>
|
||||
<string>The app requires the photo library to set a custom profile picture.</string>
|
||||
<key>NSSupportsLiveActivities</key>
|
||||
<true/>
|
||||
<key>UIApplicationSupportsIndirectInputEvents</key>
|
||||
<true/>
|
||||
<key>UIBackgroundModes</key>
|
||||
<array>
|
||||
<string>fetch</string>
|
||||
<string>processing</string>
|
||||
</array>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
<string>Main</string>
|
||||
<key>UIStatusBarHidden</key>
|
||||
<false/>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>reFilc</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>$(FLUTTER_BUILD_NAME)</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>CFBundleURLSchemes</key>
|
||||
<array>
|
||||
<string>refilcapp</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSApplicationQueriesSchemes</key>
|
||||
<array>
|
||||
<string>https</string>
|
||||
<string>http</string>
|
||||
</array>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>NSCameraUsageDescription</key>
|
||||
<string>The app requires the camera access to set a custom profile picture.</string>
|
||||
<key>NSPhotoLibraryUsageDescription</key>
|
||||
<string>The app requires the photo library to set a custom profile picture.</string>
|
||||
<key>NSSupportsLiveActivities</key>
|
||||
<true/>
|
||||
<key>UIApplicationSupportsIndirectInputEvents</key>
|
||||
<true/>
|
||||
<key>UIBackgroundModes</key>
|
||||
<array>
|
||||
<string>fetch</string>
|
||||
<string>processing</string>
|
||||
</array>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
<string>Main</string>
|
||||
<key>UIStatusBarHidden</key>
|
||||
<false/>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -21,46 +21,48 @@ class FilcAPI {
|
||||
static const baseUrl = "https://api.refilcapp.hu";
|
||||
|
||||
// Public API
|
||||
static const schoolList = "$baseUrl/v3/public/school-list";
|
||||
static const news = "0.0.0.0/v4/public/news";
|
||||
static const supporters = "$baseUrl/v3/public/supporters";
|
||||
static const schoolList = "https://api.refilcapp.hu/v3/public/school-list";
|
||||
static const news = "https://staticrf-api.pages.dev/news/index.json";
|
||||
static const supporters = "0.0.0.0";
|
||||
|
||||
// Private API
|
||||
static const ads = "0.0.0.0/v3/private/ads";
|
||||
static const ads = "0.0.0.0";
|
||||
static const config = "$baseUrl/v3/private/config";
|
||||
static const reportApi = "$baseUrl/v3/private/crash-report";
|
||||
static const rfPlus = "0.0.0.0/v3/rf-plus";
|
||||
static const plusAuthLogin = "0.0.0.0/auth/login";
|
||||
static const plusAuthCallback = "0.0.0.0/auth/callback";
|
||||
static const plusActivation = "0.0.0.0/activate";
|
||||
static const plusScopes = "0.0.0.0/scopes";
|
||||
static const rfPlus = "0.0.0.0";
|
||||
static const plusAuthLogin = "0.0.0.0";
|
||||
static const plusAuthCallback = "0.0.0.0";
|
||||
static const plusActivation = "0.0.0.0";
|
||||
static const plusScopes = "0.0.0.0/";
|
||||
|
||||
// Updates
|
||||
static const repo = "refilc/naplo";
|
||||
static const releases = "https://api.github.com/repos/$repo/releases";
|
||||
|
||||
// Share API
|
||||
static const themeShare = "$baseUrl/v3/shared/theme/add";
|
||||
static const themeGet = "$baseUrl/v3/shared/theme/get";
|
||||
static const themeShare = "https://api.refilcapp.hu/v3/shared/theme/add";
|
||||
static const themeGet = "https://api.refilcapp.hu/v3/shared/theme/get";
|
||||
static const allThemes = "$themeGet/all";
|
||||
static const themeByID = "$themeGet/";
|
||||
|
||||
static const gradeColorsShare = "$baseUrl/v3/shared/grade-colors/add";
|
||||
static const gradeColorsGet = "$baseUrl/v3/shared/grade-colors/get";
|
||||
static const gradeColorsShare = "https://api.refilcapp.hu/v3/shared/grade-colors/add";
|
||||
static const gradeColorsGet = "https://api.refilcapp.hu/v3/shared/grade-colors/get";
|
||||
static const allGradeColors = "$gradeColorsGet/all";
|
||||
static const gradeColorsByID = "$gradeColorsGet/";
|
||||
|
||||
// Payment API
|
||||
static const payment = "0.0.0.0/v4/payment";
|
||||
static const stripeSheet = "0.0.0.0/stripe-sheet";
|
||||
static const payment = "0.0.0.0";
|
||||
static const stripeSheet = "0.0.0.0";
|
||||
|
||||
// Cloud Sync
|
||||
// cloud sync? for what reason
|
||||
static const cloudSyncApi = "0.0.0.0/v4/me/cloud-sync";
|
||||
static const cloudSyncApi = "0.0.0.0";
|
||||
|
||||
static Future<bool> checkConnectivity() async =>
|
||||
(await Connectivity().checkConnectivity())[0] != ConnectivityResult.none;
|
||||
|
||||
|
||||
// nem tudom nem vazar-e senkit se, de mar ertelmetlen ez
|
||||
static Future<List<School>?> getSchools() async {
|
||||
try {
|
||||
http.Response res = await http.get(Uri.parse(schoolList));
|
||||
@@ -70,16 +72,6 @@ class FilcAPI {
|
||||
.cast<Map>()
|
||||
.map((json) => School.fromJson(json))
|
||||
.toList();
|
||||
schools.add(School(
|
||||
city: "Stockholm",
|
||||
instituteCode: "refilc-test-sweden",
|
||||
name: "reFilc Test SE - Leo Ekström High School",
|
||||
));
|
||||
schools.add(School(
|
||||
city: "Madrid",
|
||||
instituteCode: "refilc-test-spain",
|
||||
name: "reFilc Test ES - Emilio Obrero University",
|
||||
));
|
||||
return schools;
|
||||
} else {
|
||||
throw "HTTP ${res.statusCode}: ${res.body}";
|
||||
@@ -102,9 +94,7 @@ class FilcAPI {
|
||||
"rf-platform-version": settings.analyticsEnabled
|
||||
? Platform.operatingSystemVersion
|
||||
: "unknown",
|
||||
"rf-app-version": settings.analyticsEnabled
|
||||
? const String.fromEnvironment("APPVER", defaultValue: "?")
|
||||
: "unknown",
|
||||
"rf-app-version": const String.fromEnvironment("APPVER", defaultValue: "?"),
|
||||
"rf-uinid": settings.xFilcId,
|
||||
};
|
||||
|
||||
@@ -135,7 +125,8 @@ class FilcAPI {
|
||||
http.Response res = await http.get(Uri.parse(news));
|
||||
|
||||
if (res.statusCode == 200) {
|
||||
return (jsonDecode(res.body) as List)
|
||||
String utf8Body = utf8.decode(res.bodyBytes);
|
||||
return (jsonDecode(utf8Body) as List)
|
||||
.cast<Map>()
|
||||
.map((e) => News.fromJson(e))
|
||||
.toList();
|
||||
@@ -397,27 +388,6 @@ class FilcAPI {
|
||||
|
||||
// cloud sync
|
||||
static Future<Map?> cloudSync(Map<String, String> data, String token) async {
|
||||
try {
|
||||
var client = http.Client();
|
||||
|
||||
http.Response res = await client.post(
|
||||
Uri.parse(cloudSyncApi),
|
||||
body: data,
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
'Authorization': 'Bearer $token',
|
||||
},
|
||||
);
|
||||
|
||||
if (res.statusCode != 200) {
|
||||
throw "HTTP ${res.statusCode}: ${res.body}";
|
||||
}
|
||||
|
||||
return jsonDecode(res.body);
|
||||
} on Exception catch (error, stacktrace) {
|
||||
log("ERROR: FilcAPI.cloudSync: $error $stacktrace");
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ class AdProvider extends ChangeNotifier {
|
||||
}
|
||||
|
||||
Future<void> fetch() async {
|
||||
_ads = await FilcAPI.getAds() ?? [];
|
||||
_ads = [];
|
||||
_ads.sort((a, b) => -a.date.compareTo(b.date));
|
||||
|
||||
// check for new ads
|
||||
|
||||
@@ -90,11 +90,11 @@ Future<void> syncAll(BuildContext context) async {
|
||||
'';
|
||||
if (authRes != 'success') {
|
||||
if (kDebugMode) print('ERROR: failed to refresh login');
|
||||
lock = false;
|
||||
return Future.value();
|
||||
} else {
|
||||
if (kDebugMode) print('INFO: access token refreshed');
|
||||
}
|
||||
/ lock = false;
|
||||
/ return Future.value();
|
||||
/ } else {
|
||||
/ if (kDebugMode) print('INFO: access token refreshed');
|
||||
/ }
|
||||
} else {
|
||||
if (kDebugMode) print('INFO: access token is not expired');
|
||||
}
|
||||
|
||||
@@ -470,7 +470,7 @@ class SettingsProvider extends ChangeNotifier {
|
||||
notificationsMessagesEnabled: true,
|
||||
notificationsLessonsEnabled: true,
|
||||
notificationsBitfield: 255,
|
||||
developerMode: false,
|
||||
developerMode: true,
|
||||
notificationPollInterval: 1,
|
||||
vibrate: VibrationStrength.medium,
|
||||
abWeeks: false,
|
||||
@@ -478,7 +478,7 @@ class SettingsProvider extends ChangeNotifier {
|
||||
updateChannel: UpdateChannel.stable,
|
||||
config: Config.fromJson({}),
|
||||
xFilcId: const Uuid().v4(),
|
||||
analyticsEnabled: true,
|
||||
analyticsEnabled: false,
|
||||
graphClassAvg: false,
|
||||
goodStudent: false,
|
||||
presentationMode: false,
|
||||
@@ -506,7 +506,7 @@ class SettingsProvider extends ChangeNotifier {
|
||||
currentThemeId: '',
|
||||
currentThemeDisplayName: '',
|
||||
currentThemeCreator: 'reFilc',
|
||||
showBreaks: true,
|
||||
showBreaks: false,
|
||||
pinSetGeneral: '',
|
||||
pinSetPersonalize: '',
|
||||
pinSetNotify: '',
|
||||
|
||||
@@ -3,7 +3,7 @@ description: "Egy nem hivatalos e-KRÉTA kliens, diákoktól diákoknak."
|
||||
homepage: https://refilc.hu
|
||||
publish_to: "none"
|
||||
|
||||
version: 5.1.1+283
|
||||
version: 5.1.2+286
|
||||
|
||||
environment:
|
||||
sdk: ^3.6.0
|
||||
@@ -29,11 +29,11 @@ dependencies:
|
||||
sqflite: ^2.2.0+2
|
||||
intl: ^0.19.0
|
||||
provider: ^6.1.1
|
||||
http: ^1.1.2
|
||||
http: ^1.2.0
|
||||
uuid: ^4.2.1
|
||||
html: ^0.15.0
|
||||
open_filex: ^4.3.4
|
||||
path_provider: ^2.0.2
|
||||
path_provider: ^2.1.3
|
||||
permission_handler: ^11.0.1
|
||||
share_plus: ^10.0.3
|
||||
connectivity_plus: ^6.0.3
|
||||
@@ -45,7 +45,6 @@ dependencies:
|
||||
crypto: ^3.0.2
|
||||
elegant_notification: ^2.2.0
|
||||
flutter_feather_icons: ^2.0.0+1
|
||||
# live_activities: ^1.7.4
|
||||
animated_flip_counter: ^0.3.4
|
||||
lottie: ^3.1.0
|
||||
rive: ^0.12.4
|
||||
@@ -53,7 +52,7 @@ dependencies:
|
||||
dropdown_button2: ^2.3.9
|
||||
home_widget: ^0.7.0+1
|
||||
flutter_expandable_fab: ^2.0.0
|
||||
url_launcher: ^6.1.6
|
||||
url_launcher: ^6.2.5
|
||||
flutter_svg: ^2.0.10+1
|
||||
image_picker: ^1.0.7
|
||||
animations: ^2.0.1
|
||||
@@ -79,6 +78,7 @@ dev_dependencies:
|
||||
flutter_launcher_icons: ^0.14.2
|
||||
flutter_native_splash: "^2.3.10"
|
||||
sqflite_common_ffi: ^2.0.0+3
|
||||
dependency_validator: ^5.0.2
|
||||
|
||||
dependency_overrides:
|
||||
webview_flutter_wkwebview: 3.17.0
|
||||
@@ -175,13 +175,13 @@ flutter:
|
||||
flutter_launcher_icons:
|
||||
image_path: assets/icons/ic_android.png
|
||||
android: true
|
||||
adaptive_icon_background: "#03112D"
|
||||
adaptive_icon_foreground: assets/icons/ic_android.png
|
||||
adaptive_icon_background: "#7CA021"
|
||||
adaptive_icon_foreground: assets/icons/ic_launcher_foreground.png
|
||||
ios: false
|
||||
remove_alpha_ios: false
|
||||
|
||||
flutter_native_splash:
|
||||
color: "#03112D"
|
||||
color: "#7CA021"
|
||||
image: assets/icons/ic_splash.png
|
||||
android_12:
|
||||
image: assets/icons/ic_splash.png
|
||||
|
||||
@@ -91,7 +91,7 @@ class KretaClient {
|
||||
headerMap.remove("authorization");
|
||||
print("DEBUG: 401 error, refreshing login");
|
||||
print("DEBUG: 401 error, URL: $url");
|
||||
// await refreshLogin();
|
||||
//await refreshLogin();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
@@ -160,7 +160,7 @@ class KretaClient {
|
||||
|
||||
res = await client.post(Uri.parse(url), headers: headerMap, body: body);
|
||||
if (res.statusCode == 401) {
|
||||
// await refreshLogin();
|
||||
//await refreshLogin();
|
||||
headerMap.remove("authorization");
|
||||
} else {
|
||||
break;
|
||||
@@ -234,7 +234,7 @@ class KretaClient {
|
||||
|
||||
if (res.statusCode == 401) {
|
||||
headerMap.remove("authorization");
|
||||
// await refreshLogin();
|
||||
//await refreshLogin();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
@@ -277,6 +277,13 @@ class KretaClient {
|
||||
print("REFRESH TOKEN BELOW");
|
||||
print(refreshToken);
|
||||
|
||||
print(loginUser.accessTokenExpire);
|
||||
print(DateTime.now().toIso8601String());
|
||||
|
||||
if (!DateTime.now().isAfter(loginUser.accessTokenExpire)) {
|
||||
return 'success';
|
||||
}
|
||||
|
||||
if (refreshToken != null) {
|
||||
// print("REFRESHING LOGIN");
|
||||
Map? res = await postAPI(KretaAPI.login,
|
||||
|
||||
@@ -98,8 +98,6 @@ class LessonViewableState extends State<LessonViewable> {
|
||||
|
||||
if (!Provider.of<PlusProvider>(context, listen: false)
|
||||
.hasScope(PremiumScopes.timetableNotes)) {
|
||||
PlusLockedFeaturePopup.show(
|
||||
context: context, feature: PremiumFeature.timetableNotes);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -746,8 +746,6 @@ class GradesPageState extends State<GradesPage> {
|
||||
|
||||
if (!Provider.of<PlusProvider>(context, listen: false)
|
||||
.hasScope(PremiumScopes.gradeExporting)) {
|
||||
PlusLockedFeaturePopup.show(
|
||||
context: context, feature: PremiumFeature.gradeExporting);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -308,9 +308,7 @@ class NotesPageState extends State<NotesPage> with TickerProviderStateMixin {
|
||||
if (!Provider.of<PlusProvider>(context, listen: false)
|
||||
.hasScope(PremiumScopes.unlimitedSelfNotes) &&
|
||||
noteTiles.length > 10) {
|
||||
return PlusLockedFeaturePopup.show(
|
||||
context: context,
|
||||
feature: PremiumFeature.selfNotes);
|
||||
return;
|
||||
}
|
||||
|
||||
showCreationModal(context);
|
||||
|
||||
@@ -219,8 +219,7 @@ class NotesScreenState extends State<NotesScreen> {
|
||||
if (!Provider.of<PlusProvider>(context, listen: false)
|
||||
.hasScope(PremiumScopes.unlimitedSelfNotes) &&
|
||||
noteTiles.length > 10) {
|
||||
return PlusLockedFeaturePopup.show(
|
||||
context: context, feature: PremiumFeature.selfNotes);
|
||||
return;
|
||||
}
|
||||
|
||||
Navigator.of(context, rootNavigator: true).push(
|
||||
|
||||
@@ -925,10 +925,6 @@ class _LiveActivityColorSettingState extends State<LiveActivityColorSetting> {
|
||||
onMainColorChange: (k) {
|
||||
if (!Provider.of<PlusProvider>(context, listen: false)
|
||||
.hasScope(PremiumScopes.liveActivityColor)) {
|
||||
PlusLockedFeaturePopup.show(
|
||||
context: context,
|
||||
feature: PremiumFeature.liveActivity,
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ import 'package:refilc_kreta_api/providers/note_provider.dart';
|
||||
import 'package:refilc_kreta_api/providers/timetable_provider.dart';
|
||||
import 'package:refilc/api/providers/user_provider.dart';
|
||||
import 'package:refilc/api/providers/database_provider.dart';
|
||||
|
||||
// import 'package:refilc/utils/format.dart';
|
||||
import 'package:refilc/models/settings.dart';
|
||||
import 'package:refilc/models/user.dart';
|
||||
@@ -23,20 +24,25 @@ import 'package:refilc/theme/colors/colors.dart';
|
||||
import 'package:refilc_kreta_api/client/client.dart';
|
||||
import 'package:refilc_mobile_ui/common/action_button.dart';
|
||||
import 'package:refilc_mobile_ui/common/bottom_sheet_menu/bottom_sheet_menu.dart';
|
||||
|
||||
// import 'package:refilc_mobile_ui/common/bottom_sheet_menu/bottom_sheet_menu_item.dart';
|
||||
import 'package:refilc_mobile_ui/common/panel/panel.dart';
|
||||
import 'package:refilc_mobile_ui/common/panel/panel_button.dart';
|
||||
import 'package:refilc_mobile_ui/common/profile_image/profile_image.dart';
|
||||
import 'package:refilc_mobile_ui/common/soon_alert/soon_alert.dart';
|
||||
|
||||
// import 'package:refilc_mobile_ui/common/soon_alert/soon_alert.dart';
|
||||
import 'package:refilc_mobile_ui/common/splitted_panel/splitted_panel.dart';
|
||||
import 'package:refilc_mobile_ui/common/system_chrome.dart';
|
||||
|
||||
// import 'package:refilc_mobile_ui/common/system_chrome.dart';
|
||||
import 'package:refilc_mobile_ui/common/widgets/update/updates_view.dart';
|
||||
import 'package:refilc_mobile_ui/screens/news/news_screen.dart';
|
||||
|
||||
// import 'package:refilc_mobile_ui/screens/notes/notes_screen.dart';
|
||||
import 'package:refilc_mobile_ui/screens/settings/accounts/account_tile.dart';
|
||||
import 'package:refilc_mobile_ui/screens/settings/accounts/account_view.dart';
|
||||
|
||||
// import 'package:refilc_mobile_ui/screens/settings/debug/subject_icon_gallery.dart';
|
||||
// import 'package:refilc_mobile_ui/screens/settings/modify_subject_names.dart';
|
||||
import 'package:refilc_mobile_ui/screens/settings/notifications_screen.dart';
|
||||
@@ -46,11 +52,14 @@ import 'package:refilc_mobile_ui/screens/settings/submenu/code_scanner.dart';
|
||||
import 'package:refilc_mobile_ui/screens/settings/submenu/extras_screen.dart';
|
||||
import 'package:refilc_mobile_ui/screens/settings/submenu/personalize_screen.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
// import 'package:refilc_plus/models/premium_scopes.dart';
|
||||
import 'package:refilc_plus/providers/plus_provider.dart';
|
||||
|
||||
// import 'package:refilc_plus/ui/mobile/plus/upsell.dart';
|
||||
// import 'package:refilc_plus/ui/mobile/settings/app_icon_screen.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
// import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_custom_tabs/flutter_custom_tabs.dart' as tabs;
|
||||
@@ -64,6 +73,7 @@ import 'settings_screen.i18n.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:refilc_mobile_ui/screens/settings/user/nickname.dart';
|
||||
import 'package:refilc_mobile_ui/screens/settings/user/profile_pic.dart';
|
||||
|
||||
// import 'package:refilc_plus/ui/mobile/settings/modify_teacher_names.dart';
|
||||
// import 'package:refilc_plus/ui/mobile/settings/welcome_message.dart';
|
||||
// import 'package:refilc_mobile_ui/screens/error_screen.dart';
|
||||
@@ -82,7 +92,6 @@ class SettingsScreen extends StatefulWidget {
|
||||
class SettingsScreenState extends State<SettingsScreen>
|
||||
with SingleTickerProviderStateMixin {
|
||||
int devmodeCountdown = 5;
|
||||
bool __ss = false; // secret settings
|
||||
|
||||
Future<Map>? futureRelease;
|
||||
|
||||
@@ -391,7 +400,6 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
padding: const EdgeInsets.only(top: 4.0, bottom: 12.0),
|
||||
child: GestureDetector(
|
||||
onTap: () => _showBottomSheet(user.getUser(user.id ?? "")),
|
||||
onDoubleTap: () => setState(() => __ss = true),
|
||||
child: Text(
|
||||
!settings.presentationMode
|
||||
? (user.displayName ?? "?")
|
||||
@@ -429,13 +437,6 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
borderRadius: const BorderRadius.vertical(
|
||||
top: Radius.circular(12.0), bottom: Radius.circular(4.0)),
|
||||
),
|
||||
// cloud-sync
|
||||
const MenuCloudSyncSettings(
|
||||
borderRadius: BorderRadius.vertical(
|
||||
top: Radius.circular(4.0),
|
||||
bottom: Radius.circular(4.0),
|
||||
),
|
||||
),
|
||||
// open dcs (digital collaboration space)
|
||||
PanelButton(
|
||||
onPressed: () => _openDKT(user.user!),
|
||||
@@ -638,257 +639,56 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
// child: ActiveSponsorCard(),
|
||||
// ),
|
||||
|
||||
// secret settings
|
||||
if (__ss)
|
||||
SplittedPanel(
|
||||
isSeparated: true,
|
||||
isTransparent: true,
|
||||
hasShadow: false,
|
||||
children: [
|
||||
SplittedPanel(
|
||||
title: Text("secret".i18n),
|
||||
cardPadding: const EdgeInsets.all(4.0),
|
||||
padding: EdgeInsets.zero,
|
||||
children: [
|
||||
// good student mode
|
||||
Material(
|
||||
type: MaterialType.transparency,
|
||||
child: SwitchListTile(
|
||||
contentPadding:
|
||||
const EdgeInsets.only(left: 12.0, right: 6.0),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0)),
|
||||
title: Text("goodstudent".i18n,
|
||||
style:
|
||||
const TextStyle(fontWeight: FontWeight.w500)),
|
||||
onChanged: (v) {
|
||||
if (v) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => WillPopScope(
|
||||
onWillPop: () async => false,
|
||||
child: AlertDialog(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius:
|
||||
BorderRadius.circular(12.0)),
|
||||
title: Text("attention".i18n),
|
||||
content:
|
||||
Text("goodstudent_disclaimer".i18n),
|
||||
actions: [
|
||||
ActionButton(
|
||||
label: "understand".i18n,
|
||||
onTap: () {
|
||||
Navigator.of(context).pop();
|
||||
settings.update(goodStudent: v);
|
||||
Provider.of<GradeProvider>(context,
|
||||
listen: false)
|
||||
.convertBySettings();
|
||||
})
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
} else {
|
||||
settings.update(goodStudent: v);
|
||||
Provider.of<GradeProvider>(context, listen: false)
|
||||
.convertBySettings();
|
||||
}
|
||||
},
|
||||
value: settings.goodStudent,
|
||||
activeColor: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SplittedPanel(
|
||||
cardPadding: const EdgeInsets.all(4.0),
|
||||
padding: EdgeInsets.zero,
|
||||
children: [
|
||||
// presentation mode
|
||||
Material(
|
||||
type: MaterialType.transparency,
|
||||
child: SwitchListTile(
|
||||
contentPadding:
|
||||
const EdgeInsets.only(left: 12.0, right: 6.0),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0)),
|
||||
title: Text("presentation".i18n,
|
||||
style:
|
||||
const TextStyle(fontWeight: FontWeight.w500)),
|
||||
onChanged: (v) =>
|
||||
settings.update(presentationMode: v),
|
||||
value: settings.presentationMode,
|
||||
activeColor: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
|
||||
// UwU-fied mode (why????)
|
||||
// Material(
|
||||
// type: MaterialType.transparency,
|
||||
// child: SwitchListTile(
|
||||
// contentPadding: const EdgeInsets.only(left: 12.0),
|
||||
// shape: RoundedRectangleBorder(
|
||||
// borderRadius: BorderRadius.circular(12.0)),
|
||||
// title: Text("uwufymode".i18n,
|
||||
// style:
|
||||
// const TextStyle(fontWeight: FontWeight.w500)),
|
||||
// onChanged: (v) {
|
||||
// SettingsHelper.uwuMode(context, v);
|
||||
// setState(() {});
|
||||
// },
|
||||
// value: settings.presentationMode,
|
||||
// activeColor: Theme.of(context).colorScheme.secondary,
|
||||
// ),
|
||||
// ),
|
||||
],
|
||||
),
|
||||
// uwu mode
|
||||
SplittedPanel(
|
||||
cardPadding: const EdgeInsets.all(4.0),
|
||||
padding: EdgeInsets.zero,
|
||||
children: [
|
||||
// uwu mode
|
||||
Material(
|
||||
type: MaterialType.transparency,
|
||||
child: SwitchListTile(
|
||||
contentPadding:
|
||||
const EdgeInsets.only(left: 12.0, right: 6.0),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0)),
|
||||
title: Text("uwufymode".i18n,
|
||||
style:
|
||||
const TextStyle(fontWeight: FontWeight.w500)),
|
||||
onChanged: (v) => settings.update(uwuMode: v),
|
||||
value: settings.uwuMode,
|
||||
activeColor: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
if ((user.gradeStreak ?? 0) > 1)
|
||||
SplittedPanel(
|
||||
padding: const EdgeInsets.only(
|
||||
bottom: 12.0, left: 24.0, right: 24.0),
|
||||
children: [
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
SoonAlert.show(context: context);
|
||||
},
|
||||
child: ListTile(
|
||||
title: Text(
|
||||
"grade_streak".i18n,
|
||||
style: TextStyle(
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
ListTile(
|
||||
title: Text(
|
||||
"grade_streak".i18n,
|
||||
style: TextStyle(
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
subtitle: Text(
|
||||
"grade_streak_subtitle".i18n,
|
||||
style: TextStyle(
|
||||
color: AppColors.of(context).text.withOpacity(0.75),
|
||||
),
|
||||
),
|
||||
subtitle: Text(
|
||||
"grade_streak_subtitle".i18n,
|
||||
style: TextStyle(
|
||||
color: AppColors.of(context).text.withOpacity(0.75),
|
||||
),
|
||||
leading: Image.asset(
|
||||
'assets/images/apple_fire_emoji.png',
|
||||
width: 24.0,
|
||||
),
|
||||
// leading: const Text(
|
||||
// "🔥",
|
||||
// style: TextStyle(fontSize: 22.0),
|
||||
// ),
|
||||
trailing: Text(
|
||||
"${user.gradeStreak}",
|
||||
style: TextStyle(
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
fontWeight: FontWeight.w500,
|
||||
fontSize: 18.0,
|
||||
),
|
||||
),
|
||||
leading: Image.asset(
|
||||
'assets/images/apple_fire_emoji.png',
|
||||
width: 24.0,
|
||||
),
|
||||
// leading: const Text(
|
||||
// "🔥",
|
||||
// style: TextStyle(fontSize: 22.0),
|
||||
// ),
|
||||
trailing: Text(
|
||||
"${user.gradeStreak}",
|
||||
style: TextStyle(
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
fontWeight: FontWeight.w500,
|
||||
fontSize: 18.0,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
// plus subscribe inline
|
||||
const PlusSettingsInline(),
|
||||
|
||||
// const SizedBox(
|
||||
// height: 16.0,
|
||||
// ),
|
||||
|
||||
// Panel(
|
||||
// hasShadow: false,
|
||||
// padding: const EdgeInsets.only(left: 24.0, right: 24.0),
|
||||
// title: Padding(
|
||||
// padding: const EdgeInsets.only(left: 24.0),
|
||||
// child: Text('account_link'.i18n),
|
||||
// ),
|
||||
// isTransparent: true,
|
||||
// child: Column(
|
||||
// children: [
|
||||
// // QwID account linking
|
||||
// PanelButton(
|
||||
// onPressed: () {
|
||||
// launchUrl(
|
||||
// Uri.parse(
|
||||
// 'https://qwid.qwit.dev/oauth2/authorize?client_id=refilc&response_type=code&scope=*'),
|
||||
// mode: LaunchMode.externalApplication,
|
||||
// );
|
||||
// },
|
||||
// title: Text("QwID fiók-összekapcsolás".i18n),
|
||||
// leading: Icon(
|
||||
// FeatherIcons.link,
|
||||
// size: 22.0,
|
||||
// color: AppColors.of(context).text.withOpacity(0.95),
|
||||
// ),
|
||||
// trailing: GestureDetector(
|
||||
// onTap: () {
|
||||
// showDialog(
|
||||
// context: context,
|
||||
// builder: (BuildContext context) {
|
||||
// return AlertDialog(
|
||||
// title: const Text("QwID?!"),
|
||||
// content: const Text(
|
||||
// "A QwID egy olyan fiók, mellyel az összes QwIT szolgáltatásba beléphetsz és minden adatod egy helyen kezelheted. \"Miért jó ez nekem?\" A QwID fiókba való bejelentkezéssel rengeteg új funkcióhoz férhetsz hozzá, ami sajnos korábban lehetetlen volt egy szimpla e-KRÉTA fiókkal. Fiókhoz kötve megoszthatsz bármilyen adatot a barátaiddal, vagy ha szeretnéd nyilvánosságra is hozhatod jegyeid, reFilc témáid, és még rengeteg dolgot. A QwID fiók abban is segít, hogy egyszerűbben kezelhesd előfizetéseid, valamint fiókodnak köszönhetően rengeteg ajándékot kaphatsz reFilc+ előfizetésed mellé egyéb QwIT és reFilc szolgáltatásokban. \"Miért QwID?\" A név a reFilc mögött álló fejlesztői csapat, a QwIT nevéből, valamint az angol Identity szó rövidítéséből ered. \"Egyéb hasznos tudnivalók?\" A QwID fiókodat bármikor törölheted, ha úgy érzed, hogy nem szeretnéd tovább használni. Bővebb információt az adatkezelésről és az általános feltételekről megtalálsz a regisztrációs oldalon. Fiókod kezeléséhez látogass el a qwid.qwit.dev weboldalra.",
|
||||
// ),
|
||||
// actions: [
|
||||
// TextButton(
|
||||
// onPressed: () {
|
||||
// Navigator.of(context).pop();
|
||||
// },
|
||||
// child: const Text("Szuper!"),
|
||||
// ),
|
||||
// ],
|
||||
// );
|
||||
// },
|
||||
// );
|
||||
// },
|
||||
// child: Icon(
|
||||
// FeatherIcons.helpCircle,
|
||||
// size: 20.0,
|
||||
// color: AppColors.of(context).text.withOpacity(0.95),
|
||||
// ),
|
||||
// ),
|
||||
// borderRadius: const BorderRadius.vertical(
|
||||
// top: Radius.circular(12.0),
|
||||
// bottom: Radius.circular(4.0),
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
|
||||
// settings submenus
|
||||
const SizedBox(
|
||||
height: 16.0,
|
||||
),
|
||||
Panel(
|
||||
hasShadow: false,
|
||||
padding:
|
||||
const EdgeInsets.only(bottom: 20.0, left: 24.0, right: 24.0),
|
||||
padding: const EdgeInsets.only(bottom: 20.0, left: 24.0, right: 24.0),
|
||||
title: Padding(
|
||||
padding: const EdgeInsets.only(left: 24.0),
|
||||
child: Text('settings'.i18n),
|
||||
@@ -898,13 +698,13 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
children: [
|
||||
// general settings
|
||||
const SplittedPanel(
|
||||
padding: EdgeInsets.zero,
|
||||
padding: const EdgeInsets.only(top: 8.0),
|
||||
cardPadding: EdgeInsets.all(4.0),
|
||||
children: [
|
||||
MenuGeneralSettings(
|
||||
borderRadius: BorderRadius.vertical(
|
||||
top: Radius.circular(12.0),
|
||||
bottom: Radius.circular(12.0),
|
||||
bottom: Radius.circular(4.0),
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -917,7 +717,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
children: [
|
||||
const MenuPersonalizeSettings(
|
||||
borderRadius: BorderRadius.vertical(
|
||||
top: Radius.circular(12.0),
|
||||
top: Radius.circular(4.0),
|
||||
bottom: Radius.circular(4.0),
|
||||
),
|
||||
),
|
||||
@@ -938,25 +738,25 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
),
|
||||
borderRadius: const BorderRadius.vertical(
|
||||
top: Radius.circular(4.0),
|
||||
bottom: Radius.circular(12.0),
|
||||
bottom: Radius.circular(4.0),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
// notifications
|
||||
const SplittedPanel(
|
||||
padding: EdgeInsets.only(top: 8.0),
|
||||
cardPadding: EdgeInsets.all(4.0),
|
||||
children: [
|
||||
MenuNotifications(
|
||||
borderRadius: BorderRadius.vertical(
|
||||
top: Radius.circular(12.0),
|
||||
bottom: Radius.circular(12.0),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
//const SplittedPanel(
|
||||
// padding: EdgeInsets.only(top: 8.0),
|
||||
// cardPadding: EdgeInsets.all(4.0),
|
||||
// children: [
|
||||
// /*MenuNotifications(
|
||||
// borderRadius: BorderRadius.vertical(
|
||||
// top: Radius.circular(12.0),
|
||||
// bottom: Radius.circular(12.0),
|
||||
// ),
|
||||
// ),*/
|
||||
// ],
|
||||
//),
|
||||
|
||||
// extras
|
||||
const SplittedPanel(
|
||||
@@ -965,7 +765,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
children: [
|
||||
MenuExtrasSettings(
|
||||
borderRadius: BorderRadius.vertical(
|
||||
top: Radius.circular(12.0),
|
||||
top: Radius.circular(4.0),
|
||||
bottom: Radius.circular(12.0),
|
||||
),
|
||||
),
|
||||
@@ -1019,23 +819,6 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
title: Text("other".i18n),
|
||||
cardPadding: const EdgeInsets.all(4.0),
|
||||
children: [
|
||||
PanelButton(
|
||||
leading: Icon(
|
||||
Icons.qr_code,
|
||||
size: 22.0,
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
),
|
||||
title: Text("qr_scanner".i18n),
|
||||
onPressed: () => Navigator.of(context).push(
|
||||
MaterialPageRoute(
|
||||
builder: (context) => const CodeScannerScreen(),
|
||||
),
|
||||
),
|
||||
borderRadius: const BorderRadius.vertical(
|
||||
top: Radius.circular(12.0),
|
||||
bottom: Radius.circular(4.0),
|
||||
),
|
||||
),
|
||||
PanelButton(
|
||||
leading: Icon(
|
||||
FeatherIcons.mail,
|
||||
@@ -1057,7 +840,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
),
|
||||
title: Text("stickermap".i18n),
|
||||
onPressed: () => launchUrl(
|
||||
Uri.parse("https://stickermap.refilc.hu"),
|
||||
Uri.parse("https://map.qwit.cloud"),
|
||||
mode: LaunchMode.inAppBrowserView,
|
||||
),
|
||||
borderRadius: const BorderRadius.vertical(
|
||||
@@ -1107,9 +890,6 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
),
|
||||
title: Text("privacy".i18n),
|
||||
// onPressed: () => launchUrl(
|
||||
// Uri.parse("https://refilc.hu/privacy-policy"),
|
||||
// mode: LaunchMode.inAppWebView),
|
||||
onPressed: () => _openPrivacy(context),
|
||||
borderRadius: const BorderRadius.vertical(
|
||||
top: Radius.circular(12.0),
|
||||
@@ -1123,14 +903,15 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
),
|
||||
title: const Text("Discord"),
|
||||
onPressed: () => launchUrl(Uri.parse("https://dc.refilc.hu"),
|
||||
onPressed: () => launchUrl(
|
||||
Uri.parse("https://discord.gg/6DvjyPAw2T"),
|
||||
mode: LaunchMode.externalApplication),
|
||||
borderRadius: const BorderRadius.vertical(
|
||||
top: Radius.circular(4.0),
|
||||
bottom: Radius.circular(4.0),
|
||||
),
|
||||
),
|
||||
PanelButton(
|
||||
/*PanelButton(
|
||||
leading: Icon(
|
||||
FeatherIcons.globe,
|
||||
size: 22.0,
|
||||
@@ -1143,16 +924,16 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
top: Radius.circular(4.0),
|
||||
bottom: Radius.circular(4.0),
|
||||
),
|
||||
),
|
||||
),*/
|
||||
PanelButton(
|
||||
leading: Icon(
|
||||
FeatherIcons.github,
|
||||
size: 22.0,
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
),
|
||||
title: const Text("Github"),
|
||||
title: const Text("Gitea"),
|
||||
onPressed: () => launchUrl(
|
||||
Uri.parse("https://github.com/refilc"),
|
||||
Uri.parse("https://git.qwit.cloud/refilc/student-legacy"),
|
||||
mode: LaunchMode.externalApplication),
|
||||
borderRadius: const BorderRadius.vertical(
|
||||
top: Radius.circular(4.0),
|
||||
@@ -1291,7 +1072,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
],
|
||||
),
|
||||
// developer options
|
||||
if (settings.developerMode)
|
||||
if (true)
|
||||
SplittedPanel(
|
||||
title: Text("devsettings".i18n),
|
||||
cardPadding: const EdgeInsets.all(4.0),
|
||||
@@ -1378,34 +1159,24 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
child: FutureBuilder<Map>(
|
||||
future: futureRelease,
|
||||
builder: (context, release) {
|
||||
if (release.hasData) {
|
||||
return DefaultTextStyle(
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.titleMedium!
|
||||
.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: AppColors.of(context)
|
||||
.text
|
||||
.withOpacity(0.65)),
|
||||
child: Text("v${release.data!['version']}, módosítva a Filc csapat által"),
|
||||
);
|
||||
String versionText;
|
||||
if (release.hasData && release.data != null) {
|
||||
versionText =
|
||||
"v${release.data!['version']}, modosítva a Filc csapat által";
|
||||
} else {
|
||||
String envAppVer = const String.fromEnvironment(
|
||||
"APPVER",
|
||||
defaultValue: "?");
|
||||
return DefaultTextStyle(
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.titleMedium!
|
||||
.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: AppColors.of(context)
|
||||
.text
|
||||
.withOpacity(0.65)),
|
||||
child: Text("v$envAppVer"),
|
||||
);
|
||||
versionText = "reFilc, modosítva a Filc csapat által";
|
||||
}
|
||||
return DefaultTextStyle(
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.titleMedium!
|
||||
.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: AppColors.of(context)
|
||||
.text
|
||||
.withOpacity(0.65)),
|
||||
child: Text(versionText),
|
||||
);
|
||||
},
|
||||
),
|
||||
onTap: () {
|
||||
@@ -1439,9 +1210,12 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
void _openNews(BuildContext context) =>
|
||||
Navigator.of(context, rootNavigator: true)
|
||||
.push(CupertinoPageRoute(builder: (context) => const NewsScreen()));
|
||||
|
||||
void _openUpdates(BuildContext context) =>
|
||||
UpdateView.show(updateProvider.releases.first, context: context);
|
||||
|
||||
void _openPrivacy(BuildContext context) => PrivacyView.show(context);
|
||||
|
||||
// void _openNotes(BuildContext context, Map<String, bool> doneItems) async =>
|
||||
// Navigator.of(context, rootNavigator: true).push(CupertinoPageRoute(
|
||||
// builder: (context) => NotesScreen(
|
||||
@@ -1452,4 +1226,4 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
void openSubMenu(BuildContext context, StatefulWidget screen) =>
|
||||
Navigator.of(context)
|
||||
.push(CupertinoPageRoute(builder: (context) => screen));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,12 +51,8 @@ extension SettingsLocalization on String {
|
||||
"Analytics": "Analytics",
|
||||
"Anonymous Usage Analytics": "Anonymous Usage Analytics",
|
||||
"graph_class_avg": "Class average on graph",
|
||||
"goodstudent": "Good student mode",
|
||||
"attention": "Attention!",
|
||||
"goodstudent_disclaimer":
|
||||
"reFilc can not be held liable for the usage of this feature.\n\n(if your mother beats you up because you showed her fake grades, you can only blame yourself for it)",
|
||||
"understand": "I understand",
|
||||
"secret": "Secret Settings",
|
||||
"bell_delay": "Bell Delay",
|
||||
"delay": "Delay",
|
||||
"hurry": "Hurry",
|
||||
@@ -69,7 +65,7 @@ extension SettingsLocalization on String {
|
||||
"Background Color": "Background Color",
|
||||
"Highlight Color": "Highlight Color",
|
||||
"Adaptive Theme": "Adaptive Theme",
|
||||
"presentation": "Presentation Mode",
|
||||
|
||||
"uwufymode": "UwU-fied Mode",
|
||||
"devmoretaps": "You are %s taps away from Developer Mode.",
|
||||
"devactivated": "Developer Mode successfully activated.",
|
||||
@@ -185,12 +181,8 @@ extension SettingsLocalization on String {
|
||||
"Analytics": "Analitika",
|
||||
"Anonymous Usage Analytics": "Névtelen használati analitika",
|
||||
"graph_class_avg": "Osztályátlag a grafikonon",
|
||||
"goodstudent": "Jó tanuló mód",
|
||||
"attention": "Figyelem!",
|
||||
"goodstudent_disclaimer":
|
||||
"A reFilc minden felelősséget elhárít a funkció használatával kapcsolatban.\n\n(Értsd: ha az anyád megver, mert megtévesztő ábrákat mutattál neki, azért csakis magadat hibáztathatod.)",
|
||||
"understand": "Értem",
|
||||
"secret": "Titkos Beállítások",
|
||||
"bell_delay": "Csengő eltolódása",
|
||||
"delay": "Késleltetés",
|
||||
"hurry": "Siettetés",
|
||||
@@ -203,7 +195,7 @@ extension SettingsLocalization on String {
|
||||
"Background Color": "Háttér színe",
|
||||
"Highlight Color": "Panelek színe",
|
||||
"Adaptive Theme": "Adaptív téma",
|
||||
"presentation": "Bemutató mód",
|
||||
|
||||
"uwufymode": "UwU mód",
|
||||
"devmoretaps": "Még %s koppintásra vagy a Fejlesztői módtól.",
|
||||
"devactivated": "Fejlesztői mód sikeresen aktiválva.",
|
||||
@@ -319,12 +311,8 @@ extension SettingsLocalization on String {
|
||||
"Analytics": "Analytik",
|
||||
"Anonymous Usage Analytics": "Anonyme Nutzungsanalyse",
|
||||
"graph_class_avg": "Klassendurchschnitt in der Grafik",
|
||||
"goodstudent": "Guter Student Modus",
|
||||
"attention": "Achtung!",
|
||||
"goodstudent_disclaimer":
|
||||
"reFilc kann nicht für die Nutzung dieser Funktion haftbar gemacht werden.\n\n(Wenn deine Mutter dich verprügelt, weil du ihr falsche Noten gezeigt hast, kannst du dir nur die Schuld dafür geben)",
|
||||
"understand": "Ich verstehe",
|
||||
"secret": "Geheime Einstellungen",
|
||||
"bell_delay": "Klingelverzögerung",
|
||||
"delay": "Verzögern",
|
||||
"hurry": "Eile",
|
||||
@@ -337,7 +325,7 @@ extension SettingsLocalization on String {
|
||||
"Background Color": "Background Color",
|
||||
"Highlight Color": "Highlight Color",
|
||||
"Adaptive Theme": "Adaptive Theme",
|
||||
"presentation": "Präsentationsmodus",
|
||||
|
||||
"uwufymode": "UwU-Modus",
|
||||
"devmoretaps": "Sie sind %s Taps vom Entwicklermodus entfernt.",
|
||||
"devactivated": "Entwicklermodus erfolgreich aktiviert.",
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
// import 'package:refilc/models/settings.dart';
|
||||
import 'dart:ffi';
|
||||
|
||||
import 'package:refilc/api/providers/user_provider.dart';
|
||||
import 'package:refilc/models/settings.dart';
|
||||
import 'package:refilc/theme/colors/colors.dart';
|
||||
@@ -16,6 +18,10 @@ import 'package:refilc_plus/models/premium_scopes.dart';
|
||||
import 'package:refilc_plus/providers/plus_provider.dart';
|
||||
import 'package:refilc_plus/ui/mobile/plus/upsell.dart';
|
||||
import 'package:refilc_plus/ui/mobile/settings/welcome_message.dart';
|
||||
|
||||
import 'package:refilc_kreta_api/providers/grade_provider.dart';
|
||||
import 'package:refilc_mobile_ui/common/action_button.dart';
|
||||
|
||||
// import 'package:provider/provider.dart';
|
||||
import 'submenu_screen.i18n.dart';
|
||||
|
||||
@@ -23,7 +29,7 @@ class MenuExtrasSettings extends StatelessWidget {
|
||||
const MenuExtrasSettings({
|
||||
super.key,
|
||||
this.borderRadius = const BorderRadius.vertical(
|
||||
top: Radius.circular(4.0), bottom: Radius.circular(4.0)),
|
||||
top: Radius.circular(4.0), bottom: Radius.circular(12.0)),
|
||||
});
|
||||
|
||||
final BorderRadius borderRadius;
|
||||
@@ -100,9 +106,7 @@ class ExtrasSettingsScreenState extends State<ExtrasSettingsScreen> {
|
||||
onPressed: () async {
|
||||
if (!Provider.of<PlusProvider>(context, listen: false)
|
||||
.hasScope(PremiumScopes.customGradeRarities)) {
|
||||
return PlusLockedFeaturePopup.show(
|
||||
context: context,
|
||||
feature: PremiumFeature.gradeRarities);
|
||||
return;
|
||||
}
|
||||
|
||||
// settingsProvider.update(
|
||||
@@ -181,6 +185,146 @@ class ExtrasSettingsScreenState extends State<ExtrasSettingsScreen> {
|
||||
),
|
||||
],
|
||||
),
|
||||
SplittedPanel(
|
||||
padding: const EdgeInsets.only(top: 9.0),
|
||||
cardPadding: const EdgeInsets.all(4.0),
|
||||
isSeparated: true,
|
||||
children: [
|
||||
PanelButton(
|
||||
padding: const EdgeInsets.only(left: 14.0, right: 6.0),
|
||||
onPressed: () async {
|
||||
if (!settingsProvider.goodStudent) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => WillPopScope(
|
||||
onWillPop: () async => false,
|
||||
child: AlertDialog(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0)),
|
||||
title: Text("attention".i18n),
|
||||
content: Text("goodstudent_disclaimer".i18n),
|
||||
actions: [
|
||||
ActionButton(
|
||||
label: "understand".i18n,
|
||||
onTap: () {
|
||||
Navigator.of(context).pop();
|
||||
settingsProvider.update(
|
||||
goodStudent: true);
|
||||
Provider.of<GradeProvider>(context,
|
||||
listen: false)
|
||||
.convertBySettings();
|
||||
setState(() {});
|
||||
})
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
} else {
|
||||
settingsProvider.update(goodStudent: false);
|
||||
Provider.of<GradeProvider>(context, listen: false)
|
||||
.convertBySettings();
|
||||
setState(() {});
|
||||
}
|
||||
},
|
||||
title: Text(
|
||||
"goodstudent".i18n,
|
||||
style: TextStyle(
|
||||
color: AppColors.of(context).text.withValues(
|
||||
alpha: settingsProvider.goodStudent ? .95 : .25),
|
||||
),
|
||||
),
|
||||
leading: Icon(
|
||||
FeatherIcons.userCheck,
|
||||
size: 22.0,
|
||||
color: AppColors.of(context).text.withValues(
|
||||
alpha: settingsProvider.goodStudent ? .95 : .25),
|
||||
),
|
||||
trailing: Switch(
|
||||
onChanged: (v) async {
|
||||
if (v) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => WillPopScope(
|
||||
onWillPop: () async => false,
|
||||
child: AlertDialog(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0)),
|
||||
title: Text("attention".i18n),
|
||||
content: Text("goodstudent_disclaimer".i18n),
|
||||
actions: [
|
||||
ActionButton(
|
||||
label: "understand".i18n,
|
||||
onTap: () {
|
||||
Navigator.of(context).pop();
|
||||
settingsProvider.update(
|
||||
goodStudent: true);
|
||||
Provider.of<GradeProvider>(context,
|
||||
listen: false)
|
||||
.convertBySettings();
|
||||
setState(() {});
|
||||
})
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
} else {
|
||||
settingsProvider.update(goodStudent: false);
|
||||
Provider.of<GradeProvider>(context, listen: false)
|
||||
.convertBySettings();
|
||||
setState(() {});
|
||||
}
|
||||
},
|
||||
value: settingsProvider.goodStudent,
|
||||
activeColor: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
borderRadius: const BorderRadius.vertical(
|
||||
top: Radius.circular(12.0),
|
||||
bottom: Radius.circular(12.0),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SplittedPanel(
|
||||
padding: const EdgeInsets.only(top: 9.0),
|
||||
cardPadding: const EdgeInsets.all(4.0),
|
||||
isSeparated: true,
|
||||
children: [
|
||||
PanelButton(
|
||||
padding: const EdgeInsets.only(left: 14.0, right: 6.0),
|
||||
onPressed: () async {
|
||||
settingsProvider.update(
|
||||
presentationMode: !settingsProvider.presentationMode);
|
||||
setState(() {});
|
||||
},
|
||||
title: Text(
|
||||
"presentation".i18n,
|
||||
style: TextStyle(
|
||||
color: AppColors.of(context).text.withValues(
|
||||
alpha:
|
||||
settingsProvider.presentationMode ? .95 : .25),
|
||||
),
|
||||
),
|
||||
leading: Icon(
|
||||
FeatherIcons.tv,
|
||||
size: 22.0,
|
||||
color: AppColors.of(context).text.withValues(
|
||||
alpha: settingsProvider.presentationMode ? .95 : .25),
|
||||
),
|
||||
trailing: Switch(
|
||||
onChanged: (v) async {
|
||||
settingsProvider.update(presentationMode: v);
|
||||
setState(() {});
|
||||
},
|
||||
value: settingsProvider.presentationMode,
|
||||
activeColor: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
borderRadius: const BorderRadius.vertical(
|
||||
top: Radius.circular(12.0),
|
||||
bottom: Radius.circular(12.0),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
@@ -15,7 +15,7 @@ class MenuGeneralSettings extends StatelessWidget {
|
||||
const MenuGeneralSettings({
|
||||
super.key,
|
||||
this.borderRadius = const BorderRadius.vertical(
|
||||
top: Radius.circular(4.0), bottom: Radius.circular(4.0)),
|
||||
top: Radius.circular(12.0), bottom: Radius.circular(4.0)),
|
||||
});
|
||||
|
||||
final BorderRadius borderRadius;
|
||||
|
||||
@@ -1065,9 +1065,6 @@ class PersonalizeSettingsScreenState extends State<PersonalizeSettingsScreen>
|
||||
onPressed: () async {
|
||||
if (!Provider.of<PlusProvider>(context, listen: false)
|
||||
.hasScope(PremiumScopes.customFont)) {
|
||||
PlusLockedFeaturePopup.show(
|
||||
context: context,
|
||||
feature: PremiumFeature.fontChange);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1098,9 +1095,6 @@ class PersonalizeSettingsScreenState extends State<PersonalizeSettingsScreen>
|
||||
if (!Provider.of<PlusProvider>(context,
|
||||
listen: false)
|
||||
.hasScope(PremiumScopes.customFont)) {
|
||||
PlusLockedFeaturePopup.show(
|
||||
context: context,
|
||||
feature: PremiumFeature.fontChange);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -34,6 +34,11 @@ extension SettingsLocalization on String {
|
||||
"theme_share_ratelimit": "You can only share 1 theme per minute.",
|
||||
// cloud sync
|
||||
"cloud_sync": "Cloud Sync",
|
||||
"secret": "Secret Settings",
|
||||
"goodstudent": "Good student mode",
|
||||
"presentation": "Presentation Mode",
|
||||
"goodstudent_disclaimer":
|
||||
"reFilc can not be held liable for the usage of this feature.\n\n(if your mother beats you up because you showed her fake grades, you can only blame yourself for it)",
|
||||
},
|
||||
"hu_hu": {
|
||||
"general": "Általános",
|
||||
@@ -66,6 +71,11 @@ extension SettingsLocalization on String {
|
||||
"theme_share_ratelimit": "Csak 1 témát oszthatsz meg percenként.",
|
||||
// cloud sync
|
||||
"cloud_sync": "Felhő szinkronizálás",
|
||||
"secret": "Titkos Beállítások",
|
||||
"goodstudent": "Jó tanuló mód",
|
||||
"presentation": "Bemutató mód",
|
||||
"goodstudent_disclaimer":
|
||||
"A reFilc minden felelősséget elhárít a funkció használatával kapcsolatban.\n\n(Értsd: ha az anyád megver, mert megtévesztő ábrákat mutattál neki, azért csakis magadat hibáztathatod.)",
|
||||
},
|
||||
"de_de": {
|
||||
"general": "Allgemeine",
|
||||
@@ -99,6 +109,11 @@ extension SettingsLocalization on String {
|
||||
"theme_share_ratelimit": "Sie können nur 1 Thema pro Minute teilen.",
|
||||
// cloud sync
|
||||
"cloud_sync": "Cloud-Synchronisierung",
|
||||
"secret": "Geheime Einstellungen",
|
||||
"presentation": "Präsentationsmodus",
|
||||
"goodstudent": "Guter Student Modus",
|
||||
"goodstudent_disclaimer":
|
||||
"reFilc kann nicht für die Nutzung dieser Funktion haftbar gemacht werden.\n\n(Wenn deine Mutter dich verprügelt, weil du ihr falsche Noten gezeigt hast, kannst du dir nur die Schuld dafür geben)",
|
||||
},
|
||||
};
|
||||
|
||||
|
||||