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:
Umbrix Developer
2026-01-17 13:09:20 +03:00
parent ec5ebbd54b
commit 76a374950f
245 changed files with 7931 additions and 1315 deletions

View File

@@ -2,19 +2,19 @@ import 'package:fluentui_system_icons/fluentui_system_icons.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:gap/gap.dart';
import 'package:hiddify/core/app_info/app_info_provider.dart';
import 'package:hiddify/core/directories/directories_provider.dart';
import 'package:hiddify/core/localization/translations.dart';
import 'package:hiddify/core/model/failures.dart';
import 'package:hiddify/core/widget/adaptive_icon.dart';
import 'package:hiddify/features/app_update/notifier/app_update_notifier.dart';
import 'package:hiddify/features/app_update/notifier/app_update_state.dart';
import 'package:hiddify/features/app_update/widget/new_version_dialog.dart';
import 'package:hiddify/features/common/nested_app_bar.dart';
import 'package:hiddify/features/settings/about/privacy_policy_screen.dart';
import 'package:hiddify/features/settings/about/terms_and_conditions_screen.dart';
import 'package:hiddify/gen/assets.gen.dart';
import 'package:hiddify/utils/utils.dart';
import 'package:umbrix/core/app_info/app_info_provider.dart';
import 'package:umbrix/core/directories/directories_provider.dart';
import 'package:umbrix/core/localization/translations.dart';
import 'package:umbrix/core/model/failures.dart';
import 'package:umbrix/core/widget/adaptive_icon.dart';
import 'package:umbrix/features/app_update/notifier/app_update_notifier.dart';
import 'package:umbrix/features/app_update/notifier/app_update_state.dart';
import 'package:umbrix/features/app_update/widget/new_version_dialog.dart';
import 'package:umbrix/features/common/nested_app_bar.dart';
import 'package:umbrix/features/settings/about/privacy_policy_screen.dart';
import 'package:umbrix/features/settings/about/terms_and_conditions_screen.dart';
import 'package:umbrix/gen/assets.gen.dart';
import 'package:umbrix/utils/utils.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
class AboutPage extends HookConsumerWidget {
@@ -46,7 +46,28 @@ class AboutPage extends HookConsumerWidget {
);
final conditionalTiles = [
// UMBRIX: Отключили проверку обновлений - используем свой сервер
// UMBRIX: Кнопка проверки обновлений
// Для Desktop платформ (Windows/macOS/Linux) - собственный сервер обновлений
// Для Android - будет ссылка на Google Play Store в production
if (PlatformUtils.isDesktop)
ListTile(
title: Text(t.about.checkForUpdate),
leading: switch (appUpdate) {
AppUpdateStateChecking() => const SizedBox(
width: 24,
height: 24,
child: CircularProgressIndicator(strokeWidth: 2),
),
AppUpdateStateAvailable() => const Icon(
FluentIcons.arrow_download_24_filled,
color: Colors.green,
),
_ => const Icon(FluentIcons.arrow_sync_24_regular),
},
onTap: () async {
await ref.read(appUpdateNotifierProvider.notifier).check();
},
),
if (PlatformUtils.isDesktop)
ListTile(
title: Text(t.settings.general.openWorkingDir),

View File

@@ -1,7 +1,7 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:hiddify/core/localization/translations.dart';
import 'package:hiddify/gen/assets.gen.dart';
import 'package:umbrix/core/localization/translations.dart';
import 'package:umbrix/gen/assets.gen.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
class LicensesScreen extends HookConsumerWidget {

View File

@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
import 'package:hiddify/core/localization/translations.dart';
import 'package:umbrix/core/localization/translations.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
class PrivacyPolicyScreen extends ConsumerWidget {

View File

@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
import 'package:hiddify/core/localization/translations.dart';
import 'package:umbrix/core/localization/translations.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
class TermsAndConditionsScreen extends ConsumerWidget {