mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-03-22 12:41:14 +03:00
fix: Android, try sync clipboard on connecting (#10218)
* fix: Android, try sync clipboard on connecting Signed-off-by: fufesou <linlong1266@gmail.com> * Android, clipboard, more clear skip check Signed-off-by: fufesou <linlong1266@gmail.com> * comments Signed-off-by: fufesou <linlong1266@gmail.com> * comment todo: Android clipboard listener, callback twice Signed-off-by: fufesou <linlong1266@gmail.com> * Android, clipboard, remove listner Signed-off-by: fufesou <linlong1266@gmail.com> --------- Signed-off-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
@@ -8,8 +8,6 @@ use crate::ipc::{self, ClipboardFile, ClipboardNonFile, Data};
|
||||
use clipboard_master::{CallbackResult, ClipboardHandler};
|
||||
#[cfg(target_os = "android")]
|
||||
use hbb_common::config::{keys, option2bool};
|
||||
#[cfg(target_os = "android")]
|
||||
use scrap::android::ffi::call_clipboard_manager_enable_service_clipboard;
|
||||
use std::{
|
||||
io,
|
||||
sync::mpsc::{channel, RecvTimeoutError, Sender},
|
||||
@@ -224,24 +222,13 @@ impl Handler {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(target_os = "android")]
|
||||
fn is_clipboard_enabled() -> bool {
|
||||
let keyboard_enabled = crate::ui_interface::get_option(keys::OPTION_ENABLE_KEYBOARD);
|
||||
let keyboard_enabled = option2bool(keys::OPTION_ENABLE_KEYBOARD, &keyboard_enabled);
|
||||
let clip_enabled = crate::ui_interface::get_option(keys::OPTION_ENABLE_CLIPBOARD);
|
||||
let clip_enabled = option2bool(keys::OPTION_ENABLE_CLIPBOARD, &clip_enabled);
|
||||
keyboard_enabled && clip_enabled
|
||||
}
|
||||
|
||||
#[cfg(target_os = "android")]
|
||||
fn run(sp: EmptyExtraFieldService) -> ResultType<()> {
|
||||
let _res = call_clipboard_manager_enable_service_clipboard(is_clipboard_enabled());
|
||||
while sp.ok() {
|
||||
if let Some(msg) = crate::clipboard::get_clipboards_msg(false) {
|
||||
sp.send(msg);
|
||||
}
|
||||
std::thread::sleep(Duration::from_millis(INTERVAL));
|
||||
}
|
||||
let _res = call_clipboard_manager_enable_service_clipboard(false);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -1372,8 +1372,14 @@ impl Connection {
|
||||
if !self.follow_remote_window {
|
||||
noperms.push(NAME_WINDOW_FOCUS);
|
||||
}
|
||||
if !self.clipboard_enabled()
|
||||
|| !self.peer_keyboard_enabled()
|
||||
// Do not consider the clipboard and keyboard permissions on Android.
|
||||
// Because syncing the clipboard on Android is manually triggered by the user in the floating ball.
|
||||
#[cfg(target_os = "android")]
|
||||
let keyboard_clip_noperm = self.disable_keyboard || self.disable_clipboard;
|
||||
#[cfg(not(target_os = "android"))]
|
||||
let keyboard_clip_noperm =
|
||||
!self.clipboard_enabled() || !self.peer_keyboard_enabled();
|
||||
if keyboard_clip_noperm
|
||||
|| crate::get_builtin_option(keys::OPTION_ONE_WAY_CLIPBOARD_REDIRECTION) == "Y"
|
||||
{
|
||||
noperms.push(super::clipboard_service::NAME);
|
||||
|
||||
Reference in New Issue
Block a user