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, + ), + ], + ), ], ), ),