Pull request 62: TRUST-146 change color scheme
Squashed commit of the following:
commit 562504c62272ded627e3d306ae9dc3f128d22487
Author: Konstantin Gorynin <k.goryinin@adguard.com>
Date: Thu Dec 11 22:23:33 2025 +0200
delay removed
commit 08edc921bd293db197884a36e8210ce4f87d4e5b
Author: Konstantin Gorynin <k.goryinin@adguard.com>
Date: Thu Dec 11 21:33:08 2025 +0200
pictures + lines fix
commit f0d6fadb3d8fece78de9016f1498fc427010f19f
Author: Konstantin Gorynin <k.goryinin@adguard.com>
Date: Thu Dec 11 20:23:56 2025 +0200
fixed by review
commit c0d54dd9a6d77d081aab1ce85af0e482323790b6
Author: Konstantin Gorynin <k.goryinin@adguard.com>
Date: Thu Dec 11 19:59:07 2025 +0200
package name rollback
commit dad2a5c44e40ceb8e9150c1a0ece3bc22820867f
Author: Konstantin Gorynin <k.goryinin@adguard.com>
Date: Thu Dec 11 19:58:08 2025 +0200
renamed app
commit 5cd648d89efb089e9cb32e8209d9a6134c124018
Author: Konstantin Gorynin <k.goryinin@adguard.com>
Date: Thu Dec 11 19:53:43 2025 +0200
ios icons update
commit aa41dae057aeee9864c4ee1d6aa0178d0a76cf13
Author: Konstantin Gorynin <k.goryinin@adguard.com>
Date: Thu Dec 11 19:26:57 2025 +0200
android icons implemented
commit 80aa0712b54ac8dbc5809e9f350a03772c5ab744
Author: Konstantin Gorynin <k.goryinin@adguard.com>
Date: Thu Dec 11 17:44:56 2025 +0200
remove this commit after tests
commit 2b57b400db33db399f988aa8143f9b9481042b75
Author: Konstantin Gorynin <k.goryinin@adguard.com>
Date: Thu Dec 11 17:35:00 2025 +0200
theme updated
commit ff4da7ebe6744a2b116d1ceeb49db86c86937cd9
Merge: 88abdfb c354f91
Author: Atlassian Bamboo <bamboo@example.com>
Date: Wed Dec 10 15:20:36 2025 +0300
[bamboo] Automated branch merge (from master:c354f91b55fee66d4349a5c99bc3685465aa6917)
commit 88abdfb0840d3d316948da9d2d6e02fe88643a11
Author: Konstantin Gorynin <k.goryinin@adguard.com>
Date: Wed Dec 10 14:05:20 2025 +0200
splash screen updated
commit 60a3451c1592ad7fa9ccfe761f539b6380b68fd7
Author: Konstantin Gorynin <k.goryinin@adguard.com>
Date: Wed Dec 10 13:22:33 2025 +0200
illustrations updated
@@ -1,6 +1,6 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<application
|
||||
android:label="vpn"
|
||||
android:label="TrustTunnel"
|
||||
android:name="${applicationName}"
|
||||
android:icon="@mipmap/ic_launcher">
|
||||
<activity
|
||||
|
||||
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 69 B |
@@ -1,12 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Modify this file to customize your launch splash screen -->
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="?android:colorBackground" />
|
||||
|
||||
<!-- You can insert your own image assets here -->
|
||||
<!-- <item>
|
||||
<bitmap
|
||||
android:gravity="center"
|
||||
android:src="@mipmap/launch_image" />
|
||||
</item> -->
|
||||
<item>
|
||||
<bitmap android:gravity="fill" android:src="@drawable/background"/>
|
||||
</item>
|
||||
<item>
|
||||
<bitmap android:gravity="center" android:src="@drawable/splash"/>
|
||||
</item>
|
||||
</layer-list>
|
||||
|
||||
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 69 B |
@@ -0,0 +1,21 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<group android:scaleX="0.5"
|
||||
android:scaleY="0.5"
|
||||
android:translateX="6"
|
||||
android:translateY="6">
|
||||
<path
|
||||
android:pathData="M8.645,6.29C5.998,7.845 4.831,10.954 5.619,13.778C5.633,13.828 5.648,13.879 5.663,13.929C5.863,14.814 5.101,15.845 4.088,16.65C5.285,16.157 6.556,15.993 7.232,16.599C7.269,16.637 7.305,16.674 7.343,16.711C9.426,18.774 12.71,19.266 15.357,17.711C18.003,16.155 19.171,13.046 18.383,10.223C18.369,10.172 18.354,10.122 18.339,10.071C18.139,9.186 18.9,8.156 19.913,7.35C18.717,7.843 17.446,8.007 16.77,7.402C16.733,7.364 16.696,7.326 16.659,7.29C14.576,5.227 11.292,4.735 8.645,6.29Z"
|
||||
android:fillColor="#F6F6F6"/>
|
||||
<path
|
||||
android:pathData="M6.911,3.34C10.925,0.981 15.907,1.727 19.066,4.855C19.123,4.911 19.179,4.968 19.234,5.025C20.26,5.944 22.187,5.695 24.002,4.947C22.466,6.169 21.31,7.733 21.613,9.075C21.637,9.151 21.659,9.228 21.681,9.305C22.876,13.587 21.105,18.302 17.091,20.661C13.077,23.02 8.095,22.274 4.936,19.146L4.768,18.975C3.742,18.057 1.815,18.305 0,19.053C1.536,17.831 2.692,16.268 2.389,14.926C2.365,14.849 2.343,14.773 2.321,14.696C1.126,10.414 2.897,5.699 6.911,3.34ZM16.656,7.29C14.573,5.228 11.289,4.735 8.643,6.29C5.996,7.845 4.828,10.954 5.616,13.777C5.63,13.828 5.646,13.879 5.661,13.93C5.861,14.815 5.099,15.845 4.086,16.65C5.282,16.157 6.553,15.993 7.229,16.599C7.266,16.636 7.303,16.674 7.34,16.711C9.423,18.774 12.708,19.266 15.354,17.711C18.001,16.156 19.168,13.046 18.38,10.223C18.366,10.172 18.351,10.122 18.336,10.071C18.136,9.186 18.898,8.156 19.911,7.351C18.715,7.843 17.444,8.007 16.768,7.402C16.731,7.364 16.694,7.327 16.656,7.29Z"
|
||||
android:fillColor="#315AEF"/>
|
||||
<path
|
||||
android:pathData="M14.94,9.875C15.242,10.212 15.242,10.757 14.939,11.094L12.626,13.659C11.833,14.621 11.333,14.621 10.509,13.659L9.061,12.052C8.758,11.716 8.757,11.171 9.059,10.833C9.361,10.496 9.851,10.495 10.155,10.831L11.567,12.398L13.845,9.873C14.148,9.536 14.638,9.537 14.94,9.875Z"
|
||||
android:fillColor="#315AEF"
|
||||
android:fillType="evenOdd"/>
|
||||
</group>
|
||||
</vector>
|
||||
@@ -1,12 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Modify this file to customize your launch splash screen -->
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@android:color/white" />
|
||||
|
||||
<!-- You can insert your own image assets here -->
|
||||
<!-- <item>
|
||||
<bitmap
|
||||
android:gravity="center"
|
||||
android:src="@mipmap/launch_image" />
|
||||
</item> -->
|
||||
<item>
|
||||
<bitmap android:gravity="fill" android:src="@drawable/background"/>
|
||||
</item>
|
||||
<item>
|
||||
<bitmap android:gravity="center" android:src="@drawable/splash"/>
|
||||
</item>
|
||||
</layer-list>
|
||||
|
||||
@@ -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/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_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/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
|
Before Width: | Height: | Size: 544 B |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 442 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 721 B |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
|
||||
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||
<item name="android:forceDarkAllowed">false</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
|
||||
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||
<item name="android:windowSplashScreenBackground">#E6EAEF</item>
|
||||
<item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
|
||||
</style>
|
||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||
This theme determines the color of the Android Window while your
|
||||
Flutter UI initializes, as well as behind your Flutter UI while its
|
||||
running.
|
||||
|
||||
This Theme is only used starting with V2 of Flutter's Android embedding. -->
|
||||
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||
<item name="android:windowBackground">?android:colorBackground</item>
|
||||
</style>
|
||||
</resources>
|
||||
@@ -5,6 +5,10 @@
|
||||
<!-- Show a splash screen on the activity. Automatically removed when
|
||||
the Flutter engine draws its first frame -->
|
||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
||||
<item name="android:forceDarkAllowed">false</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
|
||||
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||
</style>
|
||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||
This theme determines the color of the Android Window while your
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
|
||||
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
|
||||
<item name="android:forceDarkAllowed">false</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
|
||||
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||
<item name="android:windowSplashScreenBackground">#E6EAEF</item>
|
||||
<item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
|
||||
</style>
|
||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||
This theme determines the color of the Android Window while your
|
||||
Flutter UI initializes, as well as behind your Flutter UI while its
|
||||
running.
|
||||
|
||||
This Theme is only used starting with V2 of Flutter's Android embedding. -->
|
||||
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
|
||||
<item name="android:windowBackground">?android:colorBackground</item>
|
||||
</style>
|
||||
</resources>
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#FFFFFF</color>
|
||||
</resources>
|
||||
@@ -5,6 +5,10 @@
|
||||
<!-- Show a splash screen on the activity. Automatically removed when
|
||||
the Flutter engine draws its first frame -->
|
||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
||||
<item name="android:forceDarkAllowed">false</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
|
||||
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||
</style>
|
||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||
This theme determines the color of the Android Window while your
|
||||
|
||||
|
After Width: | Height: | Size: 117 KiB |
|
Before Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 146 KiB |
@@ -0,0 +1,7 @@
|
||||
flutter_native_splash:
|
||||
color: "#E6EAEF"
|
||||
image: assets/images/logo_white.png
|
||||
fullscreen: true
|
||||
android_12:
|
||||
color: "#E6EAEF"
|
||||
image: assets/images/logo_white.png
|
||||
@@ -614,6 +614,8 @@
|
||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = TrustTunnel;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
@@ -799,6 +801,8 @@
|
||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = TrustTunnel;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
@@ -825,6 +829,8 @@
|
||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = TrustTunnel;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
|
||||
@@ -1,122 +1,26 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-20x20@2x.png",
|
||||
"scale" : "2x"
|
||||
"filename" : "any.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"size" : "1024x1024"
|
||||
},
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-20x20@3x.png",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-29x29@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-29x29@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-29x29@3x.png",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-40x40@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-40x40@3x.png",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"size" : "60x60",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-60x60@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "60x60",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-60x60@3x.png",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-20x20@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-20x20@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-29x29@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-29x29@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-40x40@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-40x40@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "76x76",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-76x76@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "76x76",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-76x76@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "83.5x83.5",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-83.5x83.5@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "1024x1024",
|
||||
"idiom" : "ios-marketing",
|
||||
"filename" : "Icon-App-1024x1024@1x.png",
|
||||
"scale" : "1x"
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"filename" : "dark.png",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"size" : "1024x1024"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 295 B |
|
Before Width: | Height: | Size: 406 B |
|
Before Width: | Height: | Size: 450 B |
|
Before Width: | Height: | Size: 282 B |
|
Before Width: | Height: | Size: 462 B |
|
Before Width: | Height: | Size: 704 B |
|
Before Width: | Height: | Size: 406 B |
|
Before Width: | Height: | Size: 586 B |
|
Before Width: | Height: | Size: 862 B |
|
Before Width: | Height: | Size: 862 B |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 762 B |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 22 KiB |
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "background.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 69 B |
@@ -1,23 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "LaunchImage.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "LaunchImage@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "LaunchImage@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 17 KiB |
@@ -16,13 +16,19 @@
|
||||
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
|
||||
</imageView>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" image="LaunchBackground" translatesAutoresizingMaskIntoConstraints="NO" id="tWc-Dq-wcI"/>
|
||||
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4"></imageView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
|
||||
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
|
||||
<constraint firstItem="YRO-k0-Ey4" firstAttribute="leading" secondItem="Ze5-6b-2t3" secondAttribute="leading" id="3T2-ad-Qdv"/>
|
||||
<constraint firstItem="tWc-Dq-wcI" firstAttribute="bottom" secondItem="Ze5-6b-2t3" secondAttribute="bottom" id="RPx-PI-7Xg"/>
|
||||
<constraint firstItem="tWc-Dq-wcI" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="SdS-ul-q2q"/>
|
||||
<constraint firstAttribute="trailing" secondItem="tWc-Dq-wcI" secondAttribute="trailing" id="Swv-Gf-Rwn"/>
|
||||
<constraint firstAttribute="trailing" secondItem="YRO-k0-Ey4" secondAttribute="trailing" id="TQA-XW-tRk"/>
|
||||
<constraint firstItem="YRO-k0-Ey4" firstAttribute="bottom" secondItem="Ze5-6b-2t3" secondAttribute="bottom" id="duK-uY-Gun"/>
|
||||
<constraint firstItem="tWc-Dq-wcI" firstAttribute="leading" secondItem="Ze5-6b-2t3" secondAttribute="leading" id="kV7-tw-vXt"/>
|
||||
<constraint firstItem="YRO-k0-Ey4" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="xPn-NY-SIU"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</viewController>
|
||||
@@ -32,6 +38,7 @@
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="LaunchImage" width="168" height="185"/>
|
||||
<image name="LaunchImage" width="1200" height="1200"/>
|
||||
<image name="LaunchBackground" width="1" height="1"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
||||
@@ -1,53 +1,57 @@
|
||||
<?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>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>TrustTunnel</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>TrustTunnel</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>$(FLUTTER_BUILD_NAME)</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
<string>Main</string>
|
||||
<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>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true/>
|
||||
<key>UIApplicationSupportsIndirectInputEvents</key>
|
||||
<true/>
|
||||
<key>LSApplicationQueriesSchemes</key>
|
||||
<array>
|
||||
<string>https</string>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>TrustTunnel</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>TrustTunnel</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>$(FLUTTER_BUILD_NAME)</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
<string>Main</string>
|
||||
<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>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true/>
|
||||
<key>UIApplicationSupportsIndirectInputEvents</key>
|
||||
<true/>
|
||||
<key>LSApplicationQueriesSchemes</key>
|
||||
<array>
|
||||
<string>https</string>
|
||||
</array>
|
||||
<key>UIStatusBarHidden</key>
|
||||
<false/>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
abstract class AssetImages {
|
||||
static const dns = '${_path}dns.webp';
|
||||
static const server = '${_path}server.png';
|
||||
|
||||
static const about = '${_path}about.png';
|
||||
|
||||
static const privacy = '${_path}privacy.webp';
|
||||
static const _path = 'assets/images/';
|
||||
}
|
||||
|
||||
@@ -3,176 +3,234 @@ import 'dart:ui';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class CustomColors extends ThemeExtension<CustomColors> {
|
||||
final Color primary1;
|
||||
final Color primary2;
|
||||
final Color primary3;
|
||||
final Color primary4;
|
||||
final Color blend1;
|
||||
final Color blend2;
|
||||
final Color blend3;
|
||||
final Color orange1;
|
||||
final Color orange2;
|
||||
final Color orange3;
|
||||
final Color orange4;
|
||||
final Color red1;
|
||||
final Color red2;
|
||||
final Color red3;
|
||||
final Color red4;
|
||||
final Color background1;
|
||||
final Color background2;
|
||||
final Color background3;
|
||||
final Color gray1;
|
||||
final Color gray2;
|
||||
final Color gray3;
|
||||
final Color gray4;
|
||||
final Color contrast1;
|
||||
final Color contrast2;
|
||||
final Color contrast3;
|
||||
final Color contrast4;
|
||||
final Color staticBlack1;
|
||||
final Color staticBlack2;
|
||||
final Color staticBlack3;
|
||||
final Color staticWhite;
|
||||
final Color accent;
|
||||
final Color accentHover;
|
||||
final Color accentPressed;
|
||||
final Color accentDisabled;
|
||||
|
||||
final Color blend;
|
||||
final Color blendHover;
|
||||
final Color blendPressed;
|
||||
|
||||
final Color attention;
|
||||
final Color attentionHover;
|
||||
final Color attentionPressed;
|
||||
final Color attentionDisabled;
|
||||
|
||||
final Color error;
|
||||
final Color errorHover;
|
||||
final Color errorPressed;
|
||||
final Color errorDisabled;
|
||||
|
||||
final Color background;
|
||||
final Color backgroundAdditional;
|
||||
final Color backgroundElevated;
|
||||
|
||||
final Color backgroundSystem;
|
||||
final Color backgroundSystemHover;
|
||||
final Color backgroundSystemPressed;
|
||||
|
||||
final Color neutralLight;
|
||||
final Color neutralLightHover;
|
||||
final Color neutralLightPressed;
|
||||
|
||||
final Color neutralLightDisabled;
|
||||
final Color neutralDark;
|
||||
final Color neutralDarkHover;
|
||||
final Color neutralDarkPressed;
|
||||
|
||||
final Color neutralBlack;
|
||||
final Color neutralDarkDisabled;
|
||||
final Color neutralBlackHover;
|
||||
final Color neutralBlackPressed;
|
||||
|
||||
final Color neutralBlackDisabled;
|
||||
final Color specialStaticWhite;
|
||||
final Color specialStaticWhiteHover;
|
||||
final Color specialStaticWhitePressed;
|
||||
final Color specialStaticWhiteDisabled;
|
||||
|
||||
final Color staticTransparent;
|
||||
|
||||
const CustomColors({
|
||||
required this.primary1,
|
||||
required this.primary2,
|
||||
required this.primary3,
|
||||
required this.primary4,
|
||||
required this.blend1,
|
||||
required this.blend2,
|
||||
required this.blend3,
|
||||
required this.orange1,
|
||||
required this.orange2,
|
||||
required this.orange3,
|
||||
required this.orange4,
|
||||
required this.red1,
|
||||
required this.red2,
|
||||
required this.red3,
|
||||
required this.red4,
|
||||
required this.background1,
|
||||
required this.background2,
|
||||
required this.background3,
|
||||
required this.gray1,
|
||||
required this.gray2,
|
||||
required this.gray3,
|
||||
required this.gray4,
|
||||
required this.contrast1,
|
||||
required this.contrast2,
|
||||
required this.contrast3,
|
||||
required this.contrast4,
|
||||
required this.staticBlack1,
|
||||
required this.staticBlack2,
|
||||
required this.staticBlack3,
|
||||
required this.staticWhite,
|
||||
required this.accent,
|
||||
required this.accentHover,
|
||||
required this.accentPressed,
|
||||
required this.accentDisabled,
|
||||
required this.blend,
|
||||
required this.blendHover,
|
||||
required this.blendPressed,
|
||||
required this.attention,
|
||||
required this.attentionHover,
|
||||
required this.attentionPressed,
|
||||
required this.attentionDisabled,
|
||||
required this.error,
|
||||
required this.errorHover,
|
||||
required this.errorPressed,
|
||||
required this.errorDisabled,
|
||||
required this.background,
|
||||
required this.backgroundAdditional,
|
||||
required this.backgroundElevated,
|
||||
required this.backgroundSystem,
|
||||
required this.backgroundSystemHover,
|
||||
required this.backgroundSystemPressed,
|
||||
required this.neutralLight,
|
||||
required this.neutralLightHover,
|
||||
required this.neutralLightPressed,
|
||||
required this.neutralLightDisabled,
|
||||
required this.neutralDark,
|
||||
required this.neutralDarkHover,
|
||||
required this.neutralDarkPressed,
|
||||
required this.neutralDarkDisabled,
|
||||
required this.neutralBlack,
|
||||
required this.neutralBlackHover,
|
||||
required this.neutralBlackPressed,
|
||||
required this.neutralBlackDisabled,
|
||||
required this.specialStaticWhite,
|
||||
required this.specialStaticWhiteHover,
|
||||
required this.specialStaticWhitePressed,
|
||||
required this.specialStaticWhiteDisabled,
|
||||
required this.staticTransparent,
|
||||
});
|
||||
|
||||
@override
|
||||
CustomColors copyWith({
|
||||
Color? primary1,
|
||||
Color? primary2,
|
||||
Color? primary3,
|
||||
Color? primary4,
|
||||
Color? blend1,
|
||||
Color? blend2,
|
||||
Color? blend3,
|
||||
Color? orange1,
|
||||
Color? orange2,
|
||||
Color? orange3,
|
||||
Color? orange4,
|
||||
Color? red1,
|
||||
Color? red2,
|
||||
Color? red3,
|
||||
Color? red4,
|
||||
Color? background1,
|
||||
Color? background2,
|
||||
Color? background3,
|
||||
Color? gray1,
|
||||
Color? gray2,
|
||||
Color? gray3,
|
||||
Color? gray4,
|
||||
Color? contrast1,
|
||||
Color? contrast2,
|
||||
Color? contrast3,
|
||||
Color? contrast4,
|
||||
Color? staticBlack1,
|
||||
Color? staticBlack2,
|
||||
Color? staticBlack3,
|
||||
Color? staticWhite,
|
||||
Color? accent,
|
||||
Color? accentHover,
|
||||
Color? accentPressed,
|
||||
Color? accentDisabled,
|
||||
Color? blend,
|
||||
Color? blendHover,
|
||||
Color? blendPressed,
|
||||
Color? attention,
|
||||
Color? attentionHover,
|
||||
Color? attentionPressed,
|
||||
Color? attentionDisabled,
|
||||
Color? error,
|
||||
Color? errorHover,
|
||||
Color? errorPressed,
|
||||
Color? errorDisabled,
|
||||
Color? background,
|
||||
Color? backgroundAdditional,
|
||||
Color? backgroundElevated,
|
||||
Color? backgroundSystem,
|
||||
Color? backgroundSystemHover,
|
||||
Color? backgroundSystemPressed,
|
||||
Color? neutralLight,
|
||||
Color? neutralLightHover,
|
||||
Color? neutralLightPressed,
|
||||
Color? neutralLightDisabled,
|
||||
Color? neutralDark,
|
||||
Color? neutralDarkHover,
|
||||
Color? neutralDarkPressed,
|
||||
Color? neutralDarkDisabled,
|
||||
Color? neutralBlack,
|
||||
Color? neutralBlackHover,
|
||||
Color? neutralBlackPressed,
|
||||
Color? neutralBlackDisabled,
|
||||
Color? specialStaticWhite,
|
||||
Color? specialStaticWhiteHover,
|
||||
Color? specialStaticWhitePressed,
|
||||
Color? specialStaticWhiteDisabled,
|
||||
Color? staticTransparent,
|
||||
}) => CustomColors(
|
||||
primary1: primary1 ?? this.primary1,
|
||||
primary2: primary2 ?? this.primary2,
|
||||
primary3: primary3 ?? this.primary3,
|
||||
primary4: primary4 ?? this.primary4,
|
||||
blend1: blend1 ?? this.blend1,
|
||||
blend2: blend2 ?? this.blend2,
|
||||
blend3: blend3 ?? this.blend3,
|
||||
orange1: orange1 ?? this.orange1,
|
||||
orange2: orange2 ?? this.orange2,
|
||||
orange3: orange3 ?? this.orange3,
|
||||
orange4: orange4 ?? this.orange4,
|
||||
red1: red1 ?? this.red1,
|
||||
red2: red2 ?? this.red2,
|
||||
red3: red3 ?? this.red3,
|
||||
red4: red4 ?? this.red4,
|
||||
background1: background1 ?? this.background1,
|
||||
background2: background2 ?? this.background2,
|
||||
background3: background3 ?? this.background3,
|
||||
gray1: gray1 ?? this.gray1,
|
||||
gray2: gray2 ?? this.gray2,
|
||||
gray3: gray3 ?? this.gray3,
|
||||
gray4: gray4 ?? this.gray4,
|
||||
contrast1: contrast1 ?? this.contrast1,
|
||||
contrast2: contrast2 ?? this.contrast2,
|
||||
contrast3: contrast3 ?? this.contrast3,
|
||||
contrast4: contrast4 ?? this.contrast4,
|
||||
staticBlack1: staticBlack1 ?? this.staticBlack1,
|
||||
staticBlack2: staticBlack2 ?? this.staticBlack2,
|
||||
staticBlack3: staticBlack3 ?? this.staticBlack3,
|
||||
staticWhite: staticWhite ?? this.staticWhite,
|
||||
accent: accent ?? this.accent,
|
||||
accentHover: accentHover ?? this.accentHover,
|
||||
accentPressed: accentPressed ?? this.accentPressed,
|
||||
accentDisabled: accentDisabled ?? this.accentDisabled,
|
||||
blend: blend ?? this.blend,
|
||||
blendHover: blendHover ?? this.blendHover,
|
||||
blendPressed: blendPressed ?? this.blendPressed,
|
||||
attention: attention ?? this.attention,
|
||||
attentionHover: attentionHover ?? this.attentionHover,
|
||||
attentionPressed: attentionPressed ?? this.attentionPressed,
|
||||
attentionDisabled: attentionDisabled ?? this.attentionDisabled,
|
||||
error: error ?? this.error,
|
||||
errorHover: errorHover ?? this.errorHover,
|
||||
errorPressed: errorPressed ?? this.errorPressed,
|
||||
errorDisabled: errorDisabled ?? this.errorDisabled,
|
||||
background: background ?? this.background,
|
||||
backgroundAdditional: backgroundAdditional ?? this.backgroundAdditional,
|
||||
backgroundElevated: backgroundElevated ?? this.backgroundElevated,
|
||||
backgroundSystem: backgroundSystem ?? this.backgroundSystem,
|
||||
backgroundSystemHover: backgroundSystemHover ?? this.backgroundSystemHover,
|
||||
backgroundSystemPressed: backgroundSystemPressed ?? this.backgroundSystemPressed,
|
||||
neutralLight: neutralLight ?? this.neutralLight,
|
||||
neutralLightHover: neutralLightHover ?? this.neutralLightHover,
|
||||
neutralLightPressed: neutralLightPressed ?? this.neutralLightPressed,
|
||||
neutralLightDisabled: neutralLightDisabled ?? this.neutralLightDisabled,
|
||||
neutralDark: neutralDark ?? this.neutralDark,
|
||||
neutralDarkHover: neutralDarkHover ?? this.neutralDarkHover,
|
||||
neutralDarkPressed: neutralDarkPressed ?? this.neutralDarkPressed,
|
||||
neutralDarkDisabled: neutralDarkDisabled ?? this.neutralDarkDisabled,
|
||||
neutralBlack: neutralBlack ?? this.neutralBlack,
|
||||
neutralBlackHover: neutralBlackHover ?? this.neutralBlackHover,
|
||||
neutralBlackPressed: neutralBlackPressed ?? this.neutralBlackPressed,
|
||||
neutralBlackDisabled: neutralBlackDisabled ?? this.neutralBlackDisabled,
|
||||
specialStaticWhite: specialStaticWhite ?? this.specialStaticWhite,
|
||||
specialStaticWhiteHover: specialStaticWhiteHover ?? this.specialStaticWhiteHover,
|
||||
specialStaticWhitePressed: specialStaticWhitePressed ?? this.specialStaticWhitePressed,
|
||||
specialStaticWhiteDisabled: specialStaticWhiteDisabled ?? this.specialStaticWhiteDisabled,
|
||||
staticTransparent: staticTransparent ?? this.staticTransparent,
|
||||
);
|
||||
|
||||
@override
|
||||
ThemeExtension<CustomColors> lerp(covariant ThemeExtension<CustomColors>? other, double t) {
|
||||
if (other is! CustomColors) {
|
||||
return this;
|
||||
}
|
||||
ThemeExtension<CustomColors> lerp(
|
||||
covariant ThemeExtension<CustomColors>? other,
|
||||
double t,
|
||||
) {
|
||||
if (other is! CustomColors) return this;
|
||||
|
||||
return CustomColors(
|
||||
primary1: Color.lerp(primary1, other.primary1, t)!,
|
||||
primary2: Color.lerp(primary2, other.primary2, t)!,
|
||||
primary3: Color.lerp(primary3, other.primary3, t)!,
|
||||
primary4: Color.lerp(primary4, other.primary4, t)!,
|
||||
blend1: Color.lerp(blend1, other.blend1, t)!,
|
||||
blend2: Color.lerp(blend2, other.blend2, t)!,
|
||||
blend3: Color.lerp(blend3, other.blend3, t)!,
|
||||
orange1: Color.lerp(orange1, other.orange1, t)!,
|
||||
orange2: Color.lerp(orange2, other.orange2, t)!,
|
||||
orange3: Color.lerp(orange3, other.orange3, t)!,
|
||||
orange4: Color.lerp(orange4, other.orange4, t)!,
|
||||
red1: Color.lerp(red1, other.red1, t)!,
|
||||
red2: Color.lerp(red2, other.red2, t)!,
|
||||
red3: Color.lerp(red3, other.red3, t)!,
|
||||
red4: Color.lerp(red4, other.red4, t)!,
|
||||
background1: Color.lerp(background1, other.background1, t)!,
|
||||
background2: Color.lerp(background2, other.background2, t)!,
|
||||
background3: Color.lerp(background3, other.background3, t)!,
|
||||
gray1: Color.lerp(gray1, other.gray1, t)!,
|
||||
gray2: Color.lerp(gray2, other.gray2, t)!,
|
||||
gray3: Color.lerp(gray3, other.gray3, t)!,
|
||||
gray4: Color.lerp(gray4, other.gray4, t)!,
|
||||
contrast1: Color.lerp(contrast1, other.contrast1, t)!,
|
||||
contrast2: Color.lerp(contrast2, other.contrast2, t)!,
|
||||
contrast3: Color.lerp(contrast3, other.contrast3, t)!,
|
||||
contrast4: Color.lerp(contrast4, other.contrast4, t)!,
|
||||
staticBlack1: Color.lerp(staticBlack1, other.staticBlack1, t)!,
|
||||
staticBlack2: Color.lerp(staticBlack2, other.staticBlack2, t)!,
|
||||
staticBlack3: Color.lerp(staticBlack3, other.staticBlack3, t)!,
|
||||
staticWhite: Color.lerp(staticWhite, other.staticWhite, t)!,
|
||||
accent: Color.lerp(accent, other.accent, t)!,
|
||||
accentHover: Color.lerp(accentHover, other.accentHover, t)!,
|
||||
accentPressed: Color.lerp(accentPressed, other.accentPressed, t)!,
|
||||
accentDisabled: Color.lerp(accentDisabled, other.accentDisabled, t)!,
|
||||
blend: Color.lerp(blend, other.blend, t)!,
|
||||
blendHover: Color.lerp(blendHover, other.blendHover, t)!,
|
||||
blendPressed: Color.lerp(blendPressed, other.blendPressed, t)!,
|
||||
attention: Color.lerp(attention, other.attention, t)!,
|
||||
attentionHover: Color.lerp(attentionHover, other.attentionHover, t)!,
|
||||
attentionPressed: Color.lerp(attentionPressed, other.attentionPressed, t)!,
|
||||
attentionDisabled: Color.lerp(attentionDisabled, other.attentionDisabled, t)!,
|
||||
error: Color.lerp(error, other.error, t)!,
|
||||
errorHover: Color.lerp(errorHover, other.errorHover, t)!,
|
||||
errorPressed: Color.lerp(errorPressed, other.errorPressed, t)!,
|
||||
errorDisabled: Color.lerp(errorDisabled, other.errorDisabled, t)!,
|
||||
background: Color.lerp(background, other.background, t)!,
|
||||
backgroundAdditional: Color.lerp(backgroundAdditional, other.backgroundAdditional, t)!,
|
||||
backgroundElevated: Color.lerp(backgroundElevated, other.backgroundElevated, t)!,
|
||||
backgroundSystem: Color.lerp(backgroundSystem, other.backgroundSystem, t)!,
|
||||
backgroundSystemHover: Color.lerp(backgroundSystemHover, other.backgroundSystemHover, t)!,
|
||||
backgroundSystemPressed: Color.lerp(backgroundSystemPressed, other.backgroundSystemPressed, t)!,
|
||||
neutralLight: Color.lerp(neutralLight, other.neutralLight, t)!,
|
||||
neutralLightHover: Color.lerp(neutralLightHover, other.neutralLightHover, t)!,
|
||||
neutralLightPressed: Color.lerp(neutralLightPressed, other.neutralLightPressed, t)!,
|
||||
neutralLightDisabled: Color.lerp(neutralLightDisabled, other.neutralLightDisabled, t)!,
|
||||
neutralDark: Color.lerp(neutralDark, other.neutralDark, t)!,
|
||||
neutralDarkHover: Color.lerp(neutralDarkHover, other.neutralDarkHover, t)!,
|
||||
neutralDarkPressed: Color.lerp(neutralDarkPressed, other.neutralDarkPressed, t)!,
|
||||
neutralDarkDisabled: Color.lerp(neutralDarkDisabled, other.neutralDarkDisabled, t)!,
|
||||
neutralBlack: Color.lerp(neutralBlack, other.neutralBlack, t)!,
|
||||
neutralBlackHover: Color.lerp(neutralBlackHover, other.neutralBlackHover, t)!,
|
||||
neutralBlackPressed: Color.lerp(neutralBlackPressed, other.neutralBlackPressed, t)!,
|
||||
neutralBlackDisabled: Color.lerp(neutralBlackDisabled, other.neutralBlackDisabled, t)!,
|
||||
specialStaticWhite: Color.lerp(specialStaticWhite, other.specialStaticWhite, t)!,
|
||||
specialStaticWhiteHover: Color.lerp(
|
||||
specialStaticWhiteHover,
|
||||
other.specialStaticWhiteHover,
|
||||
t,
|
||||
)!,
|
||||
specialStaticWhitePressed: Color.lerp(
|
||||
specialStaticWhitePressed,
|
||||
other.specialStaticWhitePressed,
|
||||
t,
|
||||
)!,
|
||||
specialStaticWhiteDisabled: Color.lerp(
|
||||
specialStaticWhiteDisabled,
|
||||
other.specialStaticWhiteDisabled,
|
||||
t,
|
||||
)!,
|
||||
staticTransparent: Color.lerp(staticTransparent, other.staticTransparent, t)!,
|
||||
);
|
||||
}
|
||||
@@ -276,14 +334,12 @@ class CustomTextButtonTheme extends ThemeExtension<CustomTextButtonTheme> {
|
||||
final TextButtonThemeData attention;
|
||||
final TextButtonThemeData success;
|
||||
final TextButtonThemeData iconButton;
|
||||
final TextButtonThemeData inlineButton;
|
||||
|
||||
const CustomTextButtonTheme({
|
||||
required this.danger,
|
||||
required this.attention,
|
||||
required this.success,
|
||||
required this.iconButton,
|
||||
required this.inlineButton,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -292,13 +348,11 @@ class CustomTextButtonTheme extends ThemeExtension<CustomTextButtonTheme> {
|
||||
TextButtonThemeData? attention,
|
||||
TextButtonThemeData? success,
|
||||
TextButtonThemeData? iconButton,
|
||||
TextButtonThemeData? inlineButton,
|
||||
}) => CustomTextButtonTheme(
|
||||
danger: danger ?? this.danger,
|
||||
attention: attention ?? this.attention,
|
||||
success: success ?? this.success,
|
||||
iconButton: iconButton ?? this.iconButton,
|
||||
inlineButton: inlineButton ?? this.inlineButton,
|
||||
);
|
||||
|
||||
@override
|
||||
@@ -315,7 +369,6 @@ class CustomTextButtonTheme extends ThemeExtension<CustomTextButtonTheme> {
|
||||
attention: TextButtonThemeData.lerp(attention, other.attention, t)!,
|
||||
success: TextButtonThemeData.lerp(success, other.success, t)!,
|
||||
iconButton: TextButtonThemeData.lerp(iconButton, other.iconButton, t)!,
|
||||
inlineButton: TextButtonThemeData.lerp(inlineButton, other.inlineButton, t)!,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
"typeSomething": "Type something",
|
||||
"deleteServer": "Delete server",
|
||||
"deleteServerDialogTitle": "Delete server?",
|
||||
"deleteServerDescription": "{serverName} will be deleted",
|
||||
"deleteServerDescription": "Server <b>{serverName}</b> will be deleted",
|
||||
"@deleteServerDescription": {
|
||||
"placeholders": {
|
||||
"serverName": {
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
"typeSomething": "Type something",
|
||||
"deleteServer": "Delete server",
|
||||
"deleteServerDialogTitle": "Delete server?",
|
||||
"deleteServerDescription": "{serverName} will be deleted",
|
||||
"deleteServerDescription": "Server <b>{serverName}</b> will be deleted",
|
||||
"@deleteServerDescription": {
|
||||
"placeholders": {
|
||||
"serverName": {
|
||||
|
||||
@@ -2,6 +2,7 @@ import 'dart:ui';
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_native_splash/flutter_native_splash.dart';
|
||||
import 'package:vpn/di/common/initialization_result.dart';
|
||||
import 'package:vpn/di/factory/bloc_factory.dart';
|
||||
import 'package:vpn/di/factory/dependency_factory.dart';
|
||||
@@ -14,7 +15,8 @@ abstract class InitializationHelper {
|
||||
class InitializationHelperIo extends InitializationHelper {
|
||||
@override
|
||||
Future<InitializationResult> init() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
final bindings = WidgetsFlutterBinding.ensureInitialized();
|
||||
FlutterNativeSplash.preserve(widgetsBinding: bindings);
|
||||
await _updateDeviceOrientation();
|
||||
|
||||
final dependenciesFactory = DependencyFactoryImpl();
|
||||
@@ -29,6 +31,8 @@ class InitializationHelperIo extends InitializationHelper {
|
||||
|
||||
final initialVpnState = await repositoryFactory.vpnRepository.requestState();
|
||||
|
||||
FlutterNativeSplash.remove();
|
||||
|
||||
return InitializationResult(
|
||||
dependenciesFactory: dependenciesFactory,
|
||||
blocFactory: blocFactory,
|
||||
|
||||
@@ -27,7 +27,6 @@ abstract class NavigationScreenUtils {
|
||||
(e) => NavigationRailDestination(
|
||||
icon: CustomIcon.medium(
|
||||
icon: e['icon'] as IconData,
|
||||
color: context.colors.contrast1,
|
||||
),
|
||||
label: Text(
|
||||
e['label'].toString(),
|
||||
@@ -45,7 +44,6 @@ abstract class NavigationScreenUtils {
|
||||
(e) => NavigationDestination(
|
||||
icon: CustomIcon.medium(
|
||||
icon: e['icon'] as IconData,
|
||||
color: context.colors.contrast1,
|
||||
),
|
||||
label: e['label'].toString(),
|
||||
),
|
||||
|
||||
@@ -19,24 +19,26 @@ class _NavigationScreenState extends State<NavigationScreen> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => Scaffold(
|
||||
backgroundColor: context.colors.background2,
|
||||
backgroundColor: context.colors.backgroundSystem,
|
||||
body: context.isMobileBreakpoint
|
||||
? _getContent()
|
||||
: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
ValueListenableBuilder(
|
||||
valueListenable: _selectedTabNotifier,
|
||||
builder: (context, index, _) => CustomNavigationRail(
|
||||
selectedIndex: index,
|
||||
onDestinationSelected: _onDestinationSelected,
|
||||
destinations: NavigationScreenUtils.getNavigationRailDestinations(context),
|
||||
: SafeArea(
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
ValueListenableBuilder(
|
||||
valueListenable: _selectedTabNotifier,
|
||||
builder: (context, index, _) => CustomNavigationRail(
|
||||
selectedIndex: index,
|
||||
onDestinationSelected: _onDestinationSelected,
|
||||
destinations: NavigationScreenUtils.getNavigationRailDestinations(context),
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: _getContent(),
|
||||
),
|
||||
],
|
||||
Expanded(
|
||||
child: _getContent(),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
bottomNavigationBar: context.isMobileBreakpoint
|
||||
? ValueListenableBuilder(
|
||||
|
||||
@@ -59,13 +59,13 @@ class RoutingCard extends StatelessWidget {
|
||||
children: [
|
||||
CustomIcon.medium(
|
||||
icon: AssetIcons.delete,
|
||||
color: context.colors.red1,
|
||||
color: context.colors.error,
|
||||
),
|
||||
const SizedBox(width: 12),
|
||||
Text(
|
||||
context.ln.deleteProfile,
|
||||
style: context.textTheme.bodyLarge?.copyWith(
|
||||
color: context.colors.red1,
|
||||
color: context.colors.error,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
@@ -41,13 +41,13 @@ class RoutingDetailsScreenAppBarAction extends StatelessWidget {
|
||||
children: [
|
||||
CustomIcon.medium(
|
||||
icon: AssetIcons.delete,
|
||||
color: context.colors.red1,
|
||||
color: context.colors.error,
|
||||
),
|
||||
const SizedBox(width: 12),
|
||||
Text(
|
||||
context.ln.deleteAllRules,
|
||||
style: context.textTheme.bodyLarge?.copyWith(
|
||||
color: context.colors.red1,
|
||||
color: context.colors.error,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
@@ -16,7 +16,7 @@ class ServerDetailsScreenAppBarAction extends StatelessWidget {
|
||||
builder: (context, state) => state.isEditing
|
||||
? CustomIconButton.square(
|
||||
icon: AssetIcons.delete,
|
||||
color: context.colors.red1,
|
||||
color: context.colors.error,
|
||||
size: 24,
|
||||
onPressed: () => _showDeleteDialog(
|
||||
context,
|
||||
|
||||
@@ -37,9 +37,6 @@ class _ServersCardState extends State<ServersCard> {
|
||||
title: widget.server.name,
|
||||
titleStyle: context.textTheme.titleSmall,
|
||||
subtitle: widget.server.ipAddress,
|
||||
subtitleStyle: context.textTheme.bodyMedium?.copyWith(
|
||||
color: context.colors.gray1,
|
||||
),
|
||||
onTileTap: () => _pushServerDetailsScreen(
|
||||
context,
|
||||
server: widget.server,
|
||||
|
||||
@@ -32,7 +32,6 @@ class ServersCardConnectionButton extends StatelessWidget {
|
||||
icon: AssetIcons.update,
|
||||
onPressed: onPressed,
|
||||
size: 24,
|
||||
color: context.colors.staticWhite,
|
||||
selected: true,
|
||||
),
|
||||
)
|
||||
@@ -40,7 +39,6 @@ class ServersCardConnectionButton extends StatelessWidget {
|
||||
icon: AssetIcons.powerSettingsNew,
|
||||
onPressed: onPressed,
|
||||
size: 24,
|
||||
color: context.colors.staticWhite,
|
||||
selected: vpnManagerState == VpnState.connected,
|
||||
),
|
||||
);
|
||||
|
||||
@@ -14,16 +14,18 @@ class ServersEmptyPlaceholder extends StatelessWidget {
|
||||
Widget build(BuildContext context) => DefaultPage(
|
||||
title: context.ln.serversEmptyTitle,
|
||||
descriptionText: context.ln.serversEmptyDescription,
|
||||
imagePath: AssetImages.dns,
|
||||
imagePath: AssetImages.server,
|
||||
imageSize: const Size.square(248),
|
||||
buttonText: context.ln.create,
|
||||
onButtonPressed: () => _pushServerDetailsScreen(context),
|
||||
alignment: Alignment.center,
|
||||
);
|
||||
|
||||
void _pushServerDetailsScreen(BuildContext context) => context.push(
|
||||
const ServerDetailsPopUp(),
|
||||
).then(
|
||||
void _pushServerDetailsScreen(BuildContext context) => context
|
||||
.push(
|
||||
const ServerDetailsPopUp(),
|
||||
)
|
||||
.then(
|
||||
(_) => context.read<ServersBloc>().add(
|
||||
const ServersEvent.fetch(),
|
||||
),
|
||||
|
||||
@@ -20,7 +20,7 @@ class AboutScreen extends StatelessWidget {
|
||||
builder: (context, snapshot) => DefaultPage(
|
||||
title: context.ln.vpnOss,
|
||||
descriptionText: snapshot.data,
|
||||
imagePath: AssetImages.privacy,
|
||||
imagePath: AssetImages.about,
|
||||
imageSize: const Size.square(248),
|
||||
alignment: Alignment.center,
|
||||
),
|
||||
|
||||
@@ -27,7 +27,6 @@ class CustomElevatedButton extends StatelessWidget {
|
||||
label: Text(label),
|
||||
icon: CustomIcon.medium(
|
||||
icon: icon,
|
||||
color: context.theme.elevatedButtonTheme.style?.foregroundColor?.resolve({}) ?? context.colors.staticWhite,
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -27,7 +27,6 @@ class CustomFilledButton extends StatelessWidget {
|
||||
label: Text(label),
|
||||
icon: CustomIcon.medium(
|
||||
icon: icon,
|
||||
color: context.theme.filledButtonTheme.style?.foregroundColor?.resolve({}) ?? context.colors.staticWhite,
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -49,7 +49,7 @@ class CustomFloatingActionButton extends StatelessWidget {
|
||||
final theme = Theme.of(context).floatingActionButtonTheme;
|
||||
final iconWidget = CustomIcon.medium(
|
||||
icon: icon,
|
||||
color: theme.foregroundColor ?? context.colors.primary1,
|
||||
color: theme.foregroundColor ?? context.colors.accent,
|
||||
);
|
||||
|
||||
final Widget button = switch (type) {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:vpn/common/extensions/context_extensions.dart';
|
||||
import 'package:vpn/view/custom_icon.dart';
|
||||
|
||||
class CustomIconButton extends StatefulWidget {
|
||||
@@ -124,7 +123,7 @@ class _CustomIconButtonState extends State<CustomIconButton> {
|
||||
|
||||
return CustomIcon.medium(
|
||||
icon: widget.icon!,
|
||||
color: widget.onPressed == null ? context.colors.contrast4 : widget.color,
|
||||
color: widget.color,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -139,7 +138,7 @@ class _CustomIconButtonState extends State<CustomIconButton> {
|
||||
return CustomIcon(
|
||||
icon: widget.selectedIcon!,
|
||||
size: widget.width ?? widget.height,
|
||||
color: widget.onPressed == null ? context.colors.contrast4 : widget.color,
|
||||
color: widget.color,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,9 +37,7 @@ class _OutlinedButtonSvgState extends State<CustomOutlinedButton> {
|
||||
valueListenable: _statesController,
|
||||
builder: (context, value, child) => CustomIcon.medium(
|
||||
icon: widget.icon,
|
||||
color:
|
||||
context.theme.outlinedButtonTheme.style?.foregroundColor?.resolve(value) ?? context.colors.staticWhite,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||