mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-04-02 20:51:27 +03:00
ios
This commit is contained in:
@@ -29,9 +29,9 @@ class HomePageState extends State<HomePage> {
|
||||
int get selectedIndex => _selectedIndex;
|
||||
final List<PageShape> _pages = [];
|
||||
int _chatPageTabIndex = -1;
|
||||
bool get isChatPageCurrentTab => isAndroid
|
||||
bool get isChatPageCurrentTab => (isAndroid || isIOS)
|
||||
? _selectedIndex == _chatPageTabIndex
|
||||
: false; // change this when ios have chat page
|
||||
: false;
|
||||
|
||||
void refreshPages() {
|
||||
setState(() {
|
||||
@@ -52,7 +52,7 @@ class HomePageState extends State<HomePage> {
|
||||
appBarActions: [],
|
||||
));
|
||||
}
|
||||
if (isAndroid && !bind.isOutgoingOnly()) {
|
||||
if ((isAndroid || isIOS) && !bind.isOutgoingOnly()) {
|
||||
_chatPageTabIndex = _pages.length;
|
||||
_pages.addAll([ChatPage(type: ChatPageType.mobileMain), ServerPage()]);
|
||||
}
|
||||
|
||||
@@ -181,7 +181,11 @@ class _ServerPageState extends State<ServerPage> {
|
||||
_updateTimer = periodic_immediate(const Duration(seconds: 3), () async {
|
||||
await gFFI.serverModel.fetchID();
|
||||
});
|
||||
gFFI.serverModel.checkAndroidPermission();
|
||||
if (isAndroid) {
|
||||
gFFI.serverModel.checkAndroidPermission();
|
||||
} else if (isIOS) {
|
||||
gFFI.serverModel.checkIOSPermission();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -240,7 +244,7 @@ class ServiceNotRunningNotification extends StatelessWidget {
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(translate("android_start_service_tip"),
|
||||
Text(translate(isAndroid ? "android_start_service_tip" : "Start screen sharing service"),
|
||||
style:
|
||||
const TextStyle(fontSize: 12, color: MyTheme.darkGray))
|
||||
.marginOnly(bottom: 8),
|
||||
@@ -575,7 +579,7 @@ class _PermissionCheckerState extends State<PermissionChecker> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serverModel = Provider.of<ServerModel>(context);
|
||||
final hasAudioPermission = androidVersion >= 30;
|
||||
final hasAudioPermission = isIOS || androidVersion >= 30;
|
||||
return PaddingCard(
|
||||
title: translate("Permissions"),
|
||||
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
||||
@@ -599,10 +603,11 @@ class _PermissionCheckerState extends State<PermissionChecker> {
|
||||
: serverModel.toggleService),
|
||||
PermissionRow(translate("Input Control"), serverModel.inputOk,
|
||||
serverModel.toggleInput),
|
||||
PermissionRow(translate("Transfer file"), serverModel.fileOk,
|
||||
serverModel.toggleFile),
|
||||
if (!isIOS)
|
||||
PermissionRow(translate("Transfer file"), serverModel.fileOk,
|
||||
serverModel.toggleFile),
|
||||
hasAudioPermission
|
||||
? PermissionRow(translate("Audio Capture"), serverModel.audioOk,
|
||||
? PermissionRow(translate(isIOS ? "Microphone" : "Audio Capture"), serverModel.audioOk,
|
||||
serverModel.toggleAudio)
|
||||
: Row(children: [
|
||||
Icon(Icons.info_outline).marginOnly(right: 15),
|
||||
@@ -612,8 +617,19 @@ class _PermissionCheckerState extends State<PermissionChecker> {
|
||||
style: const TextStyle(color: MyTheme.darkGray),
|
||||
))
|
||||
]),
|
||||
PermissionRow(translate("Enable clipboard"), serverModel.clipboardOk,
|
||||
serverModel.toggleClipboard),
|
||||
if (!isIOS)
|
||||
PermissionRow(translate("Enable clipboard"), serverModel.clipboardOk,
|
||||
serverModel.toggleClipboard),
|
||||
if (isIOS) ...[
|
||||
Row(children: [
|
||||
Icon(Icons.info_outline, size: 16).marginOnly(right: 8),
|
||||
Expanded(
|
||||
child: Text(
|
||||
translate("File transfer and clipboard sync are not available during iOS screen sharing"),
|
||||
style: const TextStyle(fontSize: 12, color: MyTheme.darkGray),
|
||||
))
|
||||
]).marginOnly(top: 8),
|
||||
],
|
||||
]));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -602,39 +602,44 @@ class _SettingsState extends State<SettingsPage> with WidgetsBindingObserver {
|
||||
gFFI.serverModel.androidUpdatekeepScreenOn();
|
||||
}
|
||||
|
||||
enhancementsTiles.add(SettingsTile.switchTile(
|
||||
initialValue: !_floatingWindowDisabled,
|
||||
title: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
||||
Text(translate('Floating window')),
|
||||
Text('* ${translate('floating_window_tip')}',
|
||||
style: Theme.of(context).textTheme.bodySmall),
|
||||
]),
|
||||
onToggle: bind.mainIsOptionFixed(key: kOptionDisableFloatingWindow)
|
||||
? null
|
||||
: onFloatingWindowChanged));
|
||||
if (isAndroid) {
|
||||
enhancementsTiles.add(SettingsTile.switchTile(
|
||||
initialValue: !_floatingWindowDisabled,
|
||||
title: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
||||
Text(translate('Floating window')),
|
||||
Text('* ${translate('floating_window_tip')}',
|
||||
style: Theme.of(context).textTheme.bodySmall),
|
||||
]),
|
||||
onToggle: bind.mainIsOptionFixed(key: kOptionDisableFloatingWindow)
|
||||
? null
|
||||
: onFloatingWindowChanged));
|
||||
}
|
||||
|
||||
enhancementsTiles.add(_getPopupDialogRadioEntry(
|
||||
title: 'Keep screen on',
|
||||
list: [
|
||||
_RadioEntry('Never', _keepScreenOnToOption(KeepScreenOn.never)),
|
||||
_RadioEntry('During controlled',
|
||||
_keepScreenOnToOption(KeepScreenOn.duringControlled)),
|
||||
_RadioEntry('During service is on',
|
||||
_keepScreenOnToOption(KeepScreenOn.serviceOn)),
|
||||
],
|
||||
getter: () => _keepScreenOnToOption(_floatingWindowDisabled
|
||||
? KeepScreenOn.never
|
||||
: optionToKeepScreenOn(
|
||||
bind.mainGetLocalOption(key: kOptionKeepScreenOn))),
|
||||
asyncSetter: isOptionFixed(kOptionKeepScreenOn) || _floatingWindowDisabled
|
||||
? null
|
||||
: (value) async {
|
||||
await bind.mainSetLocalOption(
|
||||
key: kOptionKeepScreenOn, value: value);
|
||||
setState(() => _keepScreenOn = optionToKeepScreenOn(value));
|
||||
gFFI.serverModel.androidUpdatekeepScreenOn();
|
||||
},
|
||||
));
|
||||
if (isAndroid) {
|
||||
enhancementsTiles.add(_getPopupDialogRadioEntry(
|
||||
title: 'Keep screen on',
|
||||
list: [
|
||||
_RadioEntry('Never', _keepScreenOnToOption(KeepScreenOn.never)),
|
||||
_RadioEntry('During controlled',
|
||||
_keepScreenOnToOption(KeepScreenOn.duringControlled)),
|
||||
_RadioEntry('During service is on',
|
||||
_keepScreenOnToOption(KeepScreenOn.serviceOn)),
|
||||
],
|
||||
getter: () => _keepScreenOnToOption(
|
||||
_floatingWindowDisabled
|
||||
? KeepScreenOn.never
|
||||
: optionToKeepScreenOn(
|
||||
bind.mainGetLocalOption(key: kOptionKeepScreenOn))),
|
||||
asyncSetter: isOptionFixed(kOptionKeepScreenOn) || _floatingWindowDisabled
|
||||
? null
|
||||
: (value) async {
|
||||
await bind.mainSetLocalOption(
|
||||
key: kOptionKeepScreenOn, value: value);
|
||||
setState(() => _keepScreenOn = optionToKeepScreenOn(value));
|
||||
gFFI.serverModel.androidUpdatekeepScreenOn();
|
||||
},
|
||||
));
|
||||
}
|
||||
|
||||
final disabledSettings = bind.isDisableSettings();
|
||||
final hideSecuritySettings =
|
||||
@@ -669,7 +674,7 @@ class _SettingsState extends State<SettingsPage> with WidgetsBindingObserver {
|
||||
onPressed: (context) {
|
||||
showServerSettings(gFFI.dialogManager);
|
||||
}),
|
||||
if (!isIOS && !_hideNetwork && !_hideProxy)
|
||||
if (!_hideNetwork && !_hideProxy)
|
||||
SettingsTile(
|
||||
title: Text(translate('Socks5/Http(s) Proxy')),
|
||||
leading: Icon(Icons.network_ping),
|
||||
@@ -810,7 +815,7 @@ class _SettingsState extends State<SettingsPage> with WidgetsBindingObserver {
|
||||
!outgoingOnly &&
|
||||
!hideSecuritySettings)
|
||||
SettingsSection(title: Text('2FA'), tiles: tfaTiles),
|
||||
if (isAndroid &&
|
||||
if ((isAndroid || isIOS) &&
|
||||
!disabledSettings &&
|
||||
!outgoingOnly &&
|
||||
!hideSecuritySettings)
|
||||
@@ -819,7 +824,7 @@ class _SettingsState extends State<SettingsPage> with WidgetsBindingObserver {
|
||||
tiles: shareScreenTiles,
|
||||
),
|
||||
if (!bind.isIncomingOnly()) defaultDisplaySection(),
|
||||
if (isAndroid &&
|
||||
if ((isAndroid || isIOS) &&
|
||||
!disabledSettings &&
|
||||
!outgoingOnly &&
|
||||
!hideSecuritySettings)
|
||||
|
||||
Reference in New Issue
Block a user