From eaf6084451915399862569d472bb2fa1718668a0 Mon Sep 17 00:00:00 2001 From: torvalds Date: Mon, 22 Jun 2026 11:28:53 +0700 Subject: [PATCH] =?UTF-8?q?fix(spoof):=20=D1=81=D1=83=D0=BA=D0=B0=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BA=D0=B8=20=D0=B7=D0=B0=D1=87=D0=B5=D0=BC=20=D0=BD?= =?UTF-8?q?=D0=B0=D0=BC=20=D1=81=D0=B0=D0=BC=D0=BE=D1=81=D1=82=D0=B0=D0=B2?= =?UTF-8?q?=20=D0=B0=D0=B9=D0=BE=D1=81=D1=8F=20=D0=B2=20=D1=81=D0=BF=D1=83?= =?UTF-8?q?=D1=84=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/core/storage/spoofing_service.dart | 10 +-- .../screens/profile/spoof_screen.dart | 63 +++++++++++++------ 2 files changed, 50 insertions(+), 23 deletions(-) diff --git a/lib/core/storage/spoofing_service.dart b/lib/core/storage/spoofing_service.dart index f5b3624..4f78800 100644 --- a/lib/core/storage/spoofing_service.dart +++ b/lib/core/storage/spoofing_service.dart @@ -80,12 +80,12 @@ class SpoofingService { } } - bool isMobile(DevicePreset p) => - p.deviceType == 'ANDROID' || p.deviceType == 'IOS'; + bool isAndroid(DevicePreset p) => p.deviceType == 'ANDROID'; final fresh = devicePresets - .where((p) => isMobile(p) && !used.contains(p.deviceName)) + .where((p) => isAndroid(p) && !used.contains(p.deviceName)) .toList(); - final pool = fresh.isNotEmpty ? fresh : devicePresets.where(isMobile).toList(); + final pool = + fresh.isNotEmpty ? fresh : devicePresets.where(isAndroid).toList(); final preset = pool[_rng.nextInt(pool.length)]; final shortLocale = preset.locale.split(RegExp(r'[-_]')).first; @@ -99,7 +99,7 @@ class SpoofingService { deviceLocale: shortLocale, deviceId: _hex(8), deviceType: preset.deviceType, - arch: preset.deviceType == 'IOS' ? 'arm64' : 'arm64-v8a', + arch: 'arm64-v8a', appVersion: hardcodedAppVersion, buildNumber: hardcodedBuildNumber, pushDeviceType: 'GCM', diff --git a/lib/frontend/screens/profile/spoof_screen.dart b/lib/frontend/screens/profile/spoof_screen.dart index 8bf482b..340dae6 100644 --- a/lib/frontend/screens/profile/spoof_screen.dart +++ b/lib/frontend/screens/profile/spoof_screen.dart @@ -138,6 +138,9 @@ class _SpoofScreenState extends State { var type = profile.deviceType.isEmpty ? 'ANDROID' : profile.deviceType; if (type == 'WEB') type = 'ANDROID'; _selectedDeviceType = type; + if (type == 'IOS' || type == 'DESKTOP') { + _selectedMethod = SpoofingMethod.full; + } } SpoofProfile _buildProfileFromControllers() { @@ -237,9 +240,10 @@ class _SpoofScreenState extends State { } Future _applyGeneratedData() async { - final filteredPresets = devicePresets - .where((p) => p.deviceType == _selectedDeviceType) - .toList(); + final type = + _selectedMethod == SpoofingMethod.full ? _selectedDeviceType : 'ANDROID'; + final filteredPresets = + devicePresets.where((p) => p.deviceType == type).toList(); if (filteredPresets.isEmpty) return; @@ -574,6 +578,10 @@ class _SpoofScreenState extends State { if (!confirmed || !mounted) return; } setState(() => _selectedMethod = next); + if (next == SpoofingMethod.partial && + _selectedDeviceType != 'ANDROID') { + _onDeviceTypeChanged('ANDROID'); + } _syncDeviceLocale(); }, ), @@ -602,21 +610,40 @@ class _SpoofScreenState extends State { text: l10n.spoofDeviceTypeDescription, ), const SizedBox(height: 12), - _buildChipSelector( - options: const [ - _ChipOption('ANDROID', 'Android', Icons.android_outlined), - _ChipOption('IOS', 'iOS', Icons.phone_iphone_outlined), - ], - selected: _selectedDeviceType, - onSelected: _onDeviceTypeChanged, - trailing: [ - _buildDisabledChip( - 'Desktop', - Icons.desktop_windows_outlined, - theme, - ), - ], - ), + if (_selectedMethod == SpoofingMethod.full) + _buildChipSelector( + options: const [ + _ChipOption('ANDROID', 'Android', Icons.android_outlined), + _ChipOption('IOS', 'iOS', Icons.phone_iphone_outlined), + _ChipOption( + 'DESKTOP', + 'Desktop', + Icons.desktop_windows_outlined, + ), + ], + selected: _selectedDeviceType, + onSelected: _onDeviceTypeChanged, + ) + else + _buildChipSelector( + options: const [ + _ChipOption('ANDROID', 'Android', Icons.android_outlined), + ], + selected: 'ANDROID', + onSelected: _onDeviceTypeChanged, + trailing: [ + _buildDisabledChip( + 'iOS', + Icons.phone_iphone_outlined, + theme, + ), + _buildDisabledChip( + 'Desktop', + Icons.desktop_windows_outlined, + theme, + ), + ], + ), ], ), ),