mirror of
https://github.com/rustdesk/rustdesk.git
synced 2025-05-11 10:26:19 +02:00
add floating window setting (#8279)
* Set `disable-floating-window` in client ui, it shows enabled when option is enabled and has floating window permission. * Remove ignore battery setting because not work on every device. * When the phone orientation changes, make the Y coordinate change proportionally, when changing back, the floating window position is still the original one. * Add custom client option `floating-window-untouchable` to make the click event pass through the floating window automically. Set it untouchable automically when transparency is 0. * On my phone, floating window size 16 no works and 32 works, so keep the size range [32, 320] Signed-off-by: 21pages <sunboeasy@gmail.com>
This commit is contained in:
parent
6d1d844b14
commit
64d0fb17f7
47 changed files with 155 additions and 14 deletions
|
@ -36,9 +36,11 @@ class SettingsPage extends StatefulWidget implements PageShape {
|
|||
const url = 'https://rustdesk.com/';
|
||||
|
||||
class _SettingsState extends State<SettingsPage> with WidgetsBindingObserver {
|
||||
final _hasIgnoreBattery = androidVersion >= 26;
|
||||
final _hasIgnoreBattery =
|
||||
false; //androidVersion >= 26; // remove because not work on every device
|
||||
var _ignoreBatteryOpt = false;
|
||||
var _enableStartOnBoot = false;
|
||||
var _floatingWindowDisabled = false;
|
||||
var _enableAbr = false;
|
||||
var _denyLANDiscovery = false;
|
||||
var _onlyWhiteList = false;
|
||||
|
@ -86,6 +88,14 @@ class _SettingsState extends State<SettingsPage> with WidgetsBindingObserver {
|
|||
_enableStartOnBoot = enableStartOnBoot;
|
||||
}
|
||||
|
||||
var floatingWindowDisabled =
|
||||
bind.mainGetLocalOption(key: kOptionDisableFloatingWindow) == "Y" ||
|
||||
!await AndroidPermissionManager.check(kSystemAlertWindow);
|
||||
if (floatingWindowDisabled != _floatingWindowDisabled) {
|
||||
update = true;
|
||||
_floatingWindowDisabled = floatingWindowDisabled;
|
||||
}
|
||||
|
||||
final enableAbrRes = option2bool(
|
||||
kOptionEnableAbr, await bind.mainGetOption(key: kOptionEnableAbr));
|
||||
if (enableAbrRes != _enableAbr) {
|
||||
|
@ -493,6 +503,32 @@ class _SettingsState extends State<SettingsPage> with WidgetsBindingObserver {
|
|||
gFFI.invokeMethod(AndroidChannel.kSetStartOnBootOpt, toValue);
|
||||
}));
|
||||
|
||||
onFloatingWindowChanged(bool toValue) async {
|
||||
if (toValue) {
|
||||
if (!await AndroidPermissionManager.check(kSystemAlertWindow)) {
|
||||
if (!await AndroidPermissionManager.request(kSystemAlertWindow)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
final disable = !toValue;
|
||||
bind.mainSetLocalOption(
|
||||
key: kOptionDisableFloatingWindow,
|
||||
value: disable ? 'Y' : defaultOptionNo);
|
||||
setState(() => _floatingWindowDisabled = disable);
|
||||
}
|
||||
|
||||
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));
|
||||
|
||||
final disabledSettings = bind.isDisableSettings();
|
||||
final settings = SettingsList(
|
||||
sections: [
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue