diff --git a/android/app/src/main/kotlin/com/hiddify/hiddify/MainActivity.kt b/android/app/src/main/kotlin/com/hiddify/hiddify/MainActivity.kt index a6d526c8..1d3165f3 100644 --- a/android/app/src/main/kotlin/com/hiddify/hiddify/MainActivity.kt +++ b/android/app/src/main/kotlin/com/hiddify/hiddify/MainActivity.kt @@ -59,7 +59,6 @@ class MainActivity : FlutterFragmentActivity(), ServiceConnection.Callback { fun startService() { if (!ServiceNotification.checkPermission()) { -// Log.d(TAG, "missing notification permission") grantNotificationPermission() return } @@ -81,15 +80,26 @@ class MainActivity : FlutterFragmentActivity(), ServiceConnection.Callback { } } + private suspend fun prepare() = withContext(Dispatchers.Main) { + try { + val intent = VpnService.prepare(this@MainActivity) + if (intent != null) { + startActivityForResult(intent, VPN_PERMISSION_REQUEST_CODE) + true + } else { + false + } + } catch (e: Exception) { + onServiceAlert(Alert.RequestVPNPermission, e.message) + false + } + } override fun onServiceStatusChanged(status: Status) { - Log.d(TAG, "service status changed: $status") serviceStatus.postValue(status) } - override fun onServiceAlert(type: Alert, message: String?) { - Log.d(TAG, "service alert: $type") serviceAlerts.postValue(ServiceEvent(Status.Stopped, type, message)) } @@ -154,22 +164,6 @@ class MainActivity : FlutterFragmentActivity(), ServiceConnection.Callback { } } - private suspend fun prepare() = withContext(Dispatchers.Main) { - try { - val intent = VpnService.prepare(this@MainActivity) - if (intent != null) { -// prepareLauncher.launch(intent) - startActivityForResult(intent, VPN_PERMISSION_REQUEST_CODE) - true - } else { - false - } - } catch (e: Exception) { - onServiceAlert(Alert.RequestVPNPermission, e.message) - false - } - } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == VPN_PERMISSION_REQUEST_CODE) { diff --git a/android/app/src/main/kotlin/com/hiddify/hiddify/bg/DefaultNetworkListener.kt b/android/app/src/main/kotlin/com/hiddify/hiddify/bg/DefaultNetworkListener.kt index e5608b58..c47d1c3f 100644 --- a/android/app/src/main/kotlin/com/hiddify/hiddify/bg/DefaultNetworkListener.kt +++ b/android/app/src/main/kotlin/com/hiddify/hiddify/bg/DefaultNetworkListener.kt @@ -172,5 +172,9 @@ object DefaultNetworkListener { } } - private fun unregister() = Application.connectivity.unregisterNetworkCallback(Callback) + private fun unregister() { + runCatching { + Application.connectivity.unregisterNetworkCallback(Callback) + } + } } \ No newline at end of file diff --git a/android/app/src/main/kotlin/com/hiddify/hiddify/bg/ProxyService.kt b/android/app/src/main/kotlin/com/hiddify/hiddify/bg/ProxyService.kt index ea30c2cd..5d65029e 100644 --- a/android/app/src/main/kotlin/com/hiddify/hiddify/bg/ProxyService.kt +++ b/android/app/src/main/kotlin/com/hiddify/hiddify/bg/ProxyService.kt @@ -7,7 +7,7 @@ class ProxyService : Service(), PlatformInterfaceWrapper { private val service = BoxService(this, this) - override fun onStartCommand(intent: Intent, flags: Int, startId: Int) = + override fun onStartCommand(intent: Intent?, flags: Int, startId: Int) = service.onStartCommand(intent, flags, startId) override fun onBind(intent: Intent) = service.onBind(intent) diff --git a/lib/features/common/app_update_notifier.dart b/lib/features/common/app_update_notifier.dart index dcfe4743..66d13581 100644 --- a/lib/features/common/app_update_notifier.dart +++ b/lib/features/common/app_update_notifier.dart @@ -63,10 +63,11 @@ class AppUpdateNotifier extends _$AppUpdateNotifier with AppLogger { return state = AppUpdateState.error(err); }, (remote) { - if (remote.version == _ignoreReleasePref.getValue()) { - loggy.debug("ignored release [${remote.version}]"); - return state = AppUpdateStateIgnored(remote); - } else if (remote.version.compareTo(currentVersion) > 0) { + if (remote.version.compareTo(currentVersion) > 0) { + if (remote.version == _ignoreReleasePref.getValue()) { + loggy.debug("ignored release [${remote.version}]"); + return state = AppUpdateStateIgnored(remote); + } loggy.debug("new version available: $remote"); return state = AppUpdateState.available(remote); } diff --git a/lib/features/common/window/window_controller.dart b/lib/features/common/window/window_controller.dart index 938d3d98..bd1f3c68 100644 --- a/lib/features/common/window/window_controller.dart +++ b/lib/features/common/window/window_controller.dart @@ -13,9 +13,10 @@ class WindowController extends _$WindowController @override Future build() async { await windowManager.ensureInitialized(); + const size = Size(868, 668); const windowOptions = WindowOptions( - size: Size(868, 768), - minimumSize: Size(868, 648), + size: size, + minimumSize: size, center: true, ); await windowManager.setPreventClose(true); diff --git a/lib/features/intro/view/intro_page.dart b/lib/features/intro/view/intro_page.dart index 54204917..f5671578 100644 --- a/lib/features/intro/view/intro_page.dart +++ b/lib/features/intro/view/intro_page.dart @@ -1,5 +1,6 @@ import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:gap/gap.dart'; import 'package:hiddify/core/core_providers.dart'; import 'package:hiddify/core/prefs/prefs.dart'; @@ -18,6 +19,8 @@ class IntroPage extends HookConsumerWidget with PresLogger { Widget build(BuildContext context, WidgetRef ref) { final t = ref.watch(translationsProvider); + final isStarting = useState(false); + return Scaffold( body: CustomScrollView( shrinkWrap: true, @@ -68,6 +71,8 @@ class IntroPage extends HookConsumerWidget with PresLogger { ), child: FilledButton( onPressed: () async { + if (isStarting.value) return; + isStarting.value = true; if (!ref.read(enableAnalyticsProvider)) { loggy.info("disabling analytics per user request"); try { @@ -84,7 +89,12 @@ class IntroPage extends HookConsumerWidget with PresLogger { .read(introCompletedProvider.notifier) .update(true); }, - child: Text(t.intro.start), + child: isStarting.value + ? LinearProgressIndicator( + backgroundColor: Colors.transparent, + color: Theme.of(context).colorScheme.onSurface, + ) + : Text(t.intro.start), ), ), ], diff --git a/lib/utils/sentry_utils.dart b/lib/utils/sentry_utils.dart index 9b250ced..44971fd6 100644 --- a/lib/utils/sentry_utils.dart +++ b/lib/utils/sentry_utils.dart @@ -15,6 +15,8 @@ bool canSendEvent(dynamic throwable) { UnexpectedFailure(:final error) => canSendEvent(error), DioException _ => false, SocketException _ => false, + HttpException _ => false, + HandshakeException _ => false, ExpectedFailure _ => false, ExpectedMeasuredFailure _ => false, _ => true,