fix: unified keyboard check logic in common.rs
This commit is contained in:
		
							parent
							
								
									70dd3f323e
								
							
						
					
					
						commit
						6fdce63359
					
				| @ -1718,14 +1718,14 @@ impl LoginConfigHandler { | |||||||
|             crate::flutter::push_global_event(crate::flutter::APP_TYPE_MAIN, evt); |             crate::flutter::push_global_event(crate::flutter::APP_TYPE_MAIN, evt); | ||||||
|         } |         } | ||||||
|         if config.keyboard_mode.is_empty() { |         if config.keyboard_mode.is_empty() { | ||||||
|             if is_keyboard_mode_supported(&KeyboardMode::Map, get_version_number(&pi.version)) { |             if is_keyboard_mode_supported(&KeyboardMode::Map, get_version_number(&pi.version), &pi.platform) { | ||||||
|                 config.keyboard_mode = KeyboardMode::Map.to_string(); |                 config.keyboard_mode = KeyboardMode::Map.to_string(); | ||||||
|             } else { |             } else { | ||||||
|                 config.keyboard_mode = KeyboardMode::Legacy.to_string(); |                 config.keyboard_mode = KeyboardMode::Legacy.to_string(); | ||||||
|             } |             } | ||||||
|         } else { |         } else { | ||||||
|             let keyboard_modes = |             let keyboard_modes = | ||||||
|                 crate::get_supported_keyboard_modes(get_version_number(&pi.version)); |                 crate::get_supported_keyboard_modes(get_version_number(&pi.version), &pi.platform); | ||||||
|             let current_mode = &KeyboardMode::from_str(&config.keyboard_mode).unwrap_or_default(); |             let current_mode = &KeyboardMode::from_str(&config.keyboard_mode).unwrap_or_default(); | ||||||
|             if !keyboard_modes.contains(current_mode) { |             if !keyboard_modes.contains(current_mode) { | ||||||
|                 config.keyboard_mode = KeyboardMode::Legacy.to_string(); |                 config.keyboard_mode = KeyboardMode::Legacy.to_string(); | ||||||
|  | |||||||
| @ -977,18 +977,24 @@ pub fn make_privacy_mode_msg(state: back_notification::PrivacyModeState) -> Mess | |||||||
|     make_privacy_mode_msg_with_details(state, "".to_owned()) |     make_privacy_mode_msg_with_details(state, "".to_owned()) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub fn is_keyboard_mode_supported(keyboard_mode: &KeyboardMode, version_number: i64) -> bool { | pub fn is_keyboard_mode_supported(keyboard_mode: &KeyboardMode, version_number: i64, peer_platform: &str) -> bool { | ||||||
|     match keyboard_mode { |     match keyboard_mode { | ||||||
|         KeyboardMode::Legacy => true, |         KeyboardMode::Legacy => true, | ||||||
|         KeyboardMode::Map => version_number >= hbb_common::get_version_number("1.2.0"), |         KeyboardMode::Map => { | ||||||
|  |             if peer_platform.to_lowercase() == crate::PLATFORM_ANDROID.to_lowercase() { | ||||||
|  |                 false | ||||||
|  |             } else { | ||||||
|  |                 version_number >= hbb_common::get_version_number("1.2.0") | ||||||
|  |             } | ||||||
|  |         } | ||||||
|         KeyboardMode::Translate => version_number >= hbb_common::get_version_number("1.2.0"), |         KeyboardMode::Translate => version_number >= hbb_common::get_version_number("1.2.0"), | ||||||
|         KeyboardMode::Auto => version_number >= hbb_common::get_version_number("1.2.0"), |         KeyboardMode::Auto => version_number >= hbb_common::get_version_number("1.2.0"), | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub fn get_supported_keyboard_modes(version: i64) -> Vec<KeyboardMode> { | pub fn get_supported_keyboard_modes(version: i64, peer_platform: &str) -> Vec<KeyboardMode> { | ||||||
|     KeyboardMode::iter() |     KeyboardMode::iter() | ||||||
|         .filter(|&mode| is_keyboard_mode_supported(mode, version)) |         .filter(|&mode| is_keyboard_mode_supported(mode, version, peer_platform)) | ||||||
|         .map(|&mode| mode) |         .map(|&mode| mode) | ||||||
|         .collect::<Vec<_>>() |         .collect::<Vec<_>>() | ||||||
| } | } | ||||||
|  | |||||||
| @ -392,12 +392,10 @@ pub fn session_get_custom_image_quality(session_id: SessionID) -> Option<Vec<i32 | |||||||
| pub fn session_is_keyboard_mode_supported(session_id: SessionID, mode: String) -> SyncReturn<bool> { | pub fn session_is_keyboard_mode_supported(session_id: SessionID, mode: String) -> SyncReturn<bool> { | ||||||
|     if let Some(session) = sessions::get_session_by_session_id(&session_id) { |     if let Some(session) = sessions::get_session_by_session_id(&session_id) { | ||||||
|         if let Ok(mode) = KeyboardMode::from_str(&mode[..]) { |         if let Ok(mode) = KeyboardMode::from_str(&mode[..]) { | ||||||
|             if session.peer_platform() == "Android" && mode == KeyboardMode::Map { |  | ||||||
|                 return SyncReturn(false); |  | ||||||
|             } |  | ||||||
|             SyncReturn(is_keyboard_mode_supported( |             SyncReturn(is_keyboard_mode_supported( | ||||||
|                 &mode, |                 &mode, | ||||||
|                 session.get_peer_version(), |                 session.get_peer_version(), | ||||||
|  |                 &session.peer_platform() | ||||||
|             )) |             )) | ||||||
|         } else { |         } else { | ||||||
|             SyncReturn(false) |             SyncReturn(false) | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| use crate::input::{MOUSE_BUTTON_LEFT, MOUSE_TYPE_DOWN, MOUSE_TYPE_UP, MOUSE_TYPE_WHEEL}; | use crate::{input::{MOUSE_BUTTON_LEFT, MOUSE_TYPE_DOWN, MOUSE_TYPE_UP, MOUSE_TYPE_WHEEL}, common::{is_keyboard_mode_supported, get_supported_keyboard_modes}}; | ||||||
| use async_trait::async_trait; | use async_trait::async_trait; | ||||||
| use bytes::Bytes; | use bytes::Bytes; | ||||||
| use rdev::{Event, EventType::*, KeyCode}; | use rdev::{Event, EventType::*, KeyCode}; | ||||||
| @ -214,23 +214,36 @@ impl<T: InvokeUiSession> Session<T> { | |||||||
|         self.lc.read().unwrap().version.clone() |         self.lc.read().unwrap().version.clone() | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     pub fn fallback_keyboard_mode(&self) -> String { 
 | ||||||
|  |         let peer_version = self.get_peer_version(); | ||||||
|  |         let platform = self.peer_platform(); | ||||||
|  | 
 | ||||||
|  |         let supported_modes = get_supported_keyboard_modes(peer_version, &platform); | ||||||
|  |         if let Some(mode) = supported_modes.first() { | ||||||
|  |             return mode.to_string(); | ||||||
|  |         } else { | ||||||
|  |             if self.get_peer_version() >= get_version_number("1.2.0") { | ||||||
|  |                 return KeyboardMode::Map.to_string(); | ||||||
|  |             } else { | ||||||
|  |                 return KeyboardMode::Legacy.to_string(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     pub fn get_keyboard_mode(&self) -> String { |     pub fn get_keyboard_mode(&self) -> String { | ||||||
|         let mode = self.lc.read().unwrap().keyboard_mode.clone(); |         let mode = self.lc.read().unwrap().keyboard_mode.clone(); | ||||||
|         if self.peer_platform() == crate::PLATFORM_ANDROID { |         let keyboard_mode = KeyboardMode::from_str(&mode); | ||||||
|             if mode == "map" { | 
 | ||||||
|                 return "translate".to_string(); |         let peer_version = self.get_peer_version(); | ||||||
|  |         let platform = self.peer_platform(); | ||||||
|  | 
 | ||||||
|  |         // Saved keyboard mode still exists in this version.
 | ||||||
|  |         if let Ok(mode) = keyboard_mode { | ||||||
|  |             if is_keyboard_mode_supported(&mode, peer_version, &platform) { | ||||||
|  |                 return mode.to_string(); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         if ["map", "translate", "legacy"].contains(&(&mode as &str)) { |         self.fallback_keyboard_mode() | ||||||
|             mode |  | ||||||
|         } else { |  | ||||||
|             if self.get_peer_version() > hbb_common::get_version_number("1.2.0") { |  | ||||||
|                 "map" |  | ||||||
|             } else { |  | ||||||
|                 "legacy" |  | ||||||
|             } |  | ||||||
|             .to_string() |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn save_keyboard_mode(&self, value: String) { |     pub fn save_keyboard_mode(&self, value: String) { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user