feat: mobile-like window size and always-visible stats
- Changed window size to mobile phone format (400x800) - Removed width condition for ActiveProxyFooter - now always visible - Added run-umbrix.sh launch script with icon copying - Stats cards now display on all screen sizes
This commit is contained in:
@@ -2,10 +2,10 @@
|
||||
import 'package:fluentui_system_icons/fluentui_system_icons.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gap/gap.dart';
|
||||
import 'package:hiddify/core/localization/translations.dart';
|
||||
import 'package:hiddify/core/widget/animated_visibility.dart';
|
||||
import 'package:hiddify/core/widget/shimmer_skeleton.dart';
|
||||
import 'package:hiddify/features/proxy/active/active_proxy_notifier.dart';
|
||||
import 'package:umbrix/core/localization/translations.dart';
|
||||
import 'package:umbrix/core/widget/animated_visibility.dart';
|
||||
import 'package:umbrix/core/widget/shimmer_skeleton.dart';
|
||||
import 'package:umbrix/features/proxy/active/active_proxy_notifier.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
|
||||
class ActiveProxyDelayIndicator extends HookConsumerWidget {
|
||||
|
||||
@@ -2,15 +2,15 @@ import 'package:dartx/dartx.dart';
|
||||
import 'package:fluentui_system_icons/fluentui_system_icons.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gap/gap.dart';
|
||||
import 'package:hiddify/core/localization/translations.dart';
|
||||
import 'package:hiddify/core/widget/animated_visibility.dart';
|
||||
import 'package:hiddify/core/widget/shimmer_skeleton.dart';
|
||||
import 'package:hiddify/features/proxy/active/active_proxy_notifier.dart';
|
||||
import 'package:hiddify/features/proxy/active/ip_widget.dart';
|
||||
import 'package:hiddify/features/proxy/model/proxy_failure.dart';
|
||||
import 'package:hiddify/features/stats/notifier/stats_notifier.dart';
|
||||
import 'package:hiddify/gen/fonts.gen.dart';
|
||||
import 'package:hiddify/utils/utils.dart';
|
||||
import 'package:umbrix/core/localization/translations.dart';
|
||||
import 'package:umbrix/core/widget/animated_visibility.dart';
|
||||
import 'package:umbrix/core/widget/shimmer_skeleton.dart';
|
||||
import 'package:umbrix/features/proxy/active/active_proxy_notifier.dart';
|
||||
import 'package:umbrix/features/proxy/active/ip_widget.dart';
|
||||
import 'package:umbrix/features/proxy/model/proxy_failure.dart';
|
||||
import 'package:umbrix/features/stats/notifier/stats_notifier.dart';
|
||||
import 'package:umbrix/gen/fonts.gen.dart';
|
||||
import 'package:umbrix/utils/utils.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
|
||||
class ActiveProxyFooter extends HookConsumerWidget {
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:hiddify/core/haptic/haptic_service.dart';
|
||||
import 'package:hiddify/core/preferences/general_preferences.dart';
|
||||
import 'package:hiddify/core/utils/throttler.dart';
|
||||
import 'package:hiddify/features/connection/notifier/connection_notifier.dart';
|
||||
import 'package:hiddify/features/proxy/data/proxy_data_providers.dart';
|
||||
import 'package:hiddify/features/proxy/model/ip_info_entity.dart';
|
||||
import 'package:hiddify/features/proxy/model/proxy_entity.dart';
|
||||
import 'package:hiddify/features/proxy/model/proxy_failure.dart';
|
||||
import 'package:hiddify/utils/riverpod_utils.dart';
|
||||
import 'package:hiddify/utils/utils.dart';
|
||||
import 'package:umbrix/core/haptic/haptic_service.dart';
|
||||
import 'package:umbrix/core/preferences/general_preferences.dart';
|
||||
import 'package:umbrix/core/utils/throttler.dart';
|
||||
import 'package:umbrix/features/connection/notifier/connection_notifier.dart';
|
||||
import 'package:umbrix/features/proxy/data/proxy_data_providers.dart';
|
||||
import 'package:umbrix/features/proxy/model/ip_info_entity.dart';
|
||||
import 'package:umbrix/features/proxy/model/proxy_entity.dart';
|
||||
import 'package:umbrix/features/proxy/model/proxy_failure.dart';
|
||||
import 'package:umbrix/utils/riverpod_utils.dart';
|
||||
import 'package:umbrix/utils/utils.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'active_proxy_notifier.g.dart';
|
||||
@@ -19,7 +19,7 @@ part 'active_proxy_notifier.g.dart';
|
||||
class IpInfoNotifier extends _$IpInfoNotifier with AppLogger {
|
||||
@override
|
||||
Future<IpInfo> build() async {
|
||||
ref.disposeDelay(const Duration(seconds: 20));
|
||||
ref.disposeDelay(const Duration(seconds: 120));
|
||||
final cancelToken = CancelToken();
|
||||
Timer? timer;
|
||||
ref.onDispose(() {
|
||||
@@ -48,13 +48,12 @@ class IpInfoNotifier extends _$IpInfoNotifier with AppLogger {
|
||||
final info = await ref.watch(proxyRepositoryProvider).getCurrentIpInfo(cancelToken).getOrElse(
|
||||
(err) {
|
||||
loggy.warning("error getting proxy ip info", err, StackTrace.current);
|
||||
// throw err; //hiddify: remove exception to be logged
|
||||
throw const UnknownIp();
|
||||
},
|
||||
).run();
|
||||
|
||||
timer = Timer(
|
||||
const Duration(seconds: 10),
|
||||
const Duration(seconds: 60),
|
||||
() {
|
||||
loggy.debug("entering idle mode");
|
||||
_idle = true;
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import 'package:circle_flags/circle_flags.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hiddify/core/haptic/haptic_service.dart';
|
||||
import 'package:hiddify/core/localization/translations.dart';
|
||||
import 'package:hiddify/core/utils/ip_utils.dart';
|
||||
import 'package:hiddify/gen/fonts.gen.dart';
|
||||
import 'package:hiddify/utils/riverpod_utils.dart';
|
||||
import 'package:umbrix/core/haptic/haptic_service.dart';
|
||||
import 'package:umbrix/core/localization/translations.dart';
|
||||
import 'package:umbrix/core/utils/ip_utils.dart';
|
||||
import 'package:umbrix/gen/fonts.gen.dart';
|
||||
import 'package:umbrix/utils/riverpod_utils.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
|
||||
final _showIp = StateProvider.autoDispose((ref) {
|
||||
|
||||
Reference in New Issue
Block a user