lilu před 1 měsícem
rodič
revize
b0aa1d9500

binární
android/app/src/main/res/drawable/background_light.png


+ 9 - 0
android/app/src/main/res/drawable/launch_background_light.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <bitmap android:gravity="fill" android:src="@drawable/background_light"/>
+    </item>
+    <item>
+        <bitmap android:gravity="center" android:src="@drawable/splash"/>
+    </item>
+</layer-list>

+ 2 - 2
android/app/src/main/res/values-v31/styles.xml

@@ -6,9 +6,9 @@
         <item name="android:windowFullscreen">false</item>
         <item name="android:windowFullscreen">false</item>
         <item name="android:windowDrawsSystemBarBackgrounds">false</item>
         <item name="android:windowDrawsSystemBarBackgrounds">false</item>
         <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
         <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
-        <item name="android:windowSplashScreenBackground">#000000</item>
+        <item name="android:windowSplashScreenBackground">#FFFFFF</item>
         <item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
         <item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
-        <item name="android:windowSplashScreenIconBackgroundColor">#000000</item>
+        <item name="android:windowSplashScreenIconBackgroundColor">#FFFFFF</item>
     </style>
     </style>
     <!-- Theme applied to the Android Window as soon as the process has started.
     <!-- Theme applied to the Android Window as soon as the process has started.
          This theme determines the color of the Android Window while your
          This theme determines the color of the Android Window while your

+ 1 - 1
android/app/src/main/res/values/styles.xml

@@ -4,7 +4,7 @@
     <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
     <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
         <!-- Show a splash screen on the activity. Automatically removed when
         <!-- Show a splash screen on the activity. Automatically removed when
              the Flutter engine draws its first frame -->
              the Flutter engine draws its first frame -->
-        <item name="android:windowBackground">@drawable/launch_background</item>
+        <item name="android:windowBackground">@drawable/launch_background_light</item>
         <item name="android:forceDarkAllowed">false</item>
         <item name="android:forceDarkAllowed">false</item>
         <item name="android:windowFullscreen">false</item>
         <item name="android:windowFullscreen">false</item>
         <item name="android:windowDrawsSystemBarBackgrounds">false</item>
         <item name="android:windowDrawsSystemBarBackgrounds">false</item>

+ 34 - 21
lib/app/app.dart

@@ -98,28 +98,41 @@ class App extends StatelessWidget {
               child: const SizedBox.shrink(), // 不显示任何东西
               child: const SizedBox.shrink(), // 不显示任何东西
             ),
             ),
           ),
           ),
-          if (Configs.debug)
-            Positioned(
-              bottom: 100,
-              right: 10,
-              child: ClickOpacity(
-                child: Container(
-                  width: 40,
-                  height: 40,
-                  decoration: BoxDecoration(
-                    color: Get.reactiveTheme.primaryColor.withValues(
-                      alpha: 0.5,
-                    ),
-                    borderRadius: BorderRadius.circular(40),
-                  ),
-                  child: Icon(Icons.adb, color: Get.reactiveTheme.primaryColor),
-                ),
-                onTap: () {
-                  // 使用简化版开发者工具
-                  IXDeveloperTools.show();
-                },
-              ),
+          Positioned(
+            top: 100,
+            right: 0,
+            width: 100,
+            height: 100,
+            child: TripleTapDetector(
+              requiredTaps: 10,
+              onTripleTap: () async {
+                IXDeveloperTools.show();
+              },
+              child: const SizedBox.shrink(), // 不显示任何东西
             ),
             ),
+          ),
+          // if (Configs.debug)
+          //   Positioned(
+          //     bottom: 100,
+          //     right: 10,
+          //     child: ClickOpacity(
+          //       child: Container(
+          //         width: 40,
+          //         height: 40,
+          //         decoration: BoxDecoration(
+          //           color: Get.reactiveTheme.primaryColor.withValues(
+          //             alpha: 0.5,
+          //           ),
+          //           borderRadius: BorderRadius.circular(40),
+          //         ),
+          //         child: Icon(Icons.adb, color: Get.reactiveTheme.primaryColor),
+          //       ),
+          //       onTap: () {
+          //         // 使用简化版开发者工具
+          //         IXDeveloperTools.show();
+          //       },
+          //     ),
+          //   ),
         ],
         ],
       ),
       ),
     );
     );

+ 1 - 0
lib/app/modules/home/views/home_view.dart

@@ -597,6 +597,7 @@ class HomeView extends BaseView<HomeController> {
                                   mainAxisAlignment: MainAxisAlignment.center,
                                   mainAxisAlignment: MainAxisAlignment.center,
                                   crossAxisAlignment: CrossAxisAlignment.center,
                                   crossAxisAlignment: CrossAxisAlignment.center,
                                   children: [
                                   children: [
+                                    SizedBox(width: 2.w),
                                     // 国旗图标
                                     // 国旗图标
                                     CountryIcon(
                                     CountryIcon(
                                       countryCode: location.country ?? '',
                                       countryCode: location.country ?? '',

+ 1 - 0
lib/app/modules/setting/views/setting_view.dart

@@ -25,6 +25,7 @@ import '../../../components/ix_snackbar.dart';
 import '../../../constants/iconfont/iconfont.dart';
 import '../../../constants/iconfont/iconfont.dart';
 import '../../../routes/app_pages.dart';
 import '../../../routes/app_pages.dart';
 import '../../../widgets/ix_app_bar.dart';
 import '../../../widgets/ix_app_bar.dart';
+import '../../../widgets/triple_tap_detector.dart';
 import '../controllers/setting_controller.dart';
 import '../controllers/setting_controller.dart';
 
 
 class SettingView extends BaseView<SettingController> {
 class SettingView extends BaseView<SettingController> {

+ 2 - 0
lib/config/translations/en_US/en_us_translation.dart

@@ -443,6 +443,8 @@ Map<String, String> enUs = {
   Strings.vpnServiceEmptyError: 'VPN service is unavailable',
   Strings.vpnServiceEmptyError: 'VPN service is unavailable',
   Strings.vpnRouterError: 'VPN routing configuration error',
   Strings.vpnRouterError: 'VPN routing configuration error',
   Strings.vpnPermissionDeniedError: 'VPN permission denied',
   Strings.vpnPermissionDeniedError: 'VPN permission denied',
+  Strings.vpnRPCCallFailed: 'VPN service communication error',
+  Strings.vpnRPCReturnFalse: 'VPN service failed to start',
 
 
   // Remain time
   // Remain time
   Strings.remainTime: 'Remain time',
   Strings.remainTime: 'Remain time',

+ 2 - 0
lib/config/translations/zh_CN/zh_cn_translation.dart

@@ -391,6 +391,8 @@ Map<String, String> zhCN = {
   Strings.vpnServiceEmptyError: 'VPN 服务不可用',
   Strings.vpnServiceEmptyError: 'VPN 服务不可用',
   Strings.vpnRouterError: 'VPN路由配置错误',
   Strings.vpnRouterError: 'VPN路由配置错误',
   Strings.vpnPermissionDeniedError: 'VPN 权限被拒绝',
   Strings.vpnPermissionDeniedError: 'VPN 权限被拒绝',
+  Strings.vpnRPCCallFailed: 'VPN 服务通信错误',
+  Strings.vpnRPCReturnFalse: 'VPN 服务启动失败',
 
 
   // Remain time
   // Remain time
   Strings.remainTime: '剩余时长',
   Strings.remainTime: '剩余时长',