android keep screen on option (#8344)
* android keep screen on option Keep screen on option relays on floating window. Three options: Never, During controlled(default), During service is on Signed-off-by: 21pages <sunboeasy@gmail.com> * When rustdesk is in forground, be consistent with the settings Signed-off-by: 21pages <sunboeasy@gmail.com> --------- Signed-off-by: 21pages <sunboeasy@gmail.com>
This commit is contained in:
parent
bc875a35b0
commit
ab451b9056
@ -11,7 +11,9 @@ import android.graphics.PixelFormat
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.os.Build
|
||||
import android.os.Handler
|
||||
import android.os.IBinder
|
||||
import android.os.Looper
|
||||
import android.util.Log
|
||||
import android.view.Gravity
|
||||
import android.view.MotionEvent
|
||||
@ -20,6 +22,7 @@ import android.view.WindowManager
|
||||
import android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
|
||||
import android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
|
||||
import android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
|
||||
import android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
|
||||
import android.widget.ImageView
|
||||
import android.widget.PopupMenu
|
||||
import com.caverock.androidsvg.SVG
|
||||
@ -39,6 +42,7 @@ class FloatingWindowService : Service(), View.OnTouchListener {
|
||||
private var lastDownX = 0f
|
||||
private var lastDownY = 0f
|
||||
private var viewCreated = false;
|
||||
private var keepScreenOn = KeepScreenOn.DURING_CONTROLLED
|
||||
|
||||
companion object {
|
||||
private val logTag = "floatingService"
|
||||
@ -69,12 +73,21 @@ class FloatingWindowService : Service(), View.OnTouchListener {
|
||||
}
|
||||
Log.d(logTag, "floating window size: $viewWidth x $viewHeight, transparency: $viewTransparency, lastLayoutX: $lastLayoutX, lastLayoutY: $lastLayoutY, customSvg: $customSvg")
|
||||
createView(windowManager)
|
||||
handler.postDelayed(runnable, 1000)
|
||||
Log.d(logTag, "onCreate success")
|
||||
} catch (e: Exception) {
|
||||
Log.d(logTag, "onCreate failed: $e")
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
if (viewCreated) {
|
||||
windowManager.removeView(floatingView)
|
||||
}
|
||||
handler.removeCallbacks(runnable)
|
||||
}
|
||||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
private fun createView(windowManager: WindowManager) {
|
||||
floatingView = ImageView(this)
|
||||
@ -151,6 +164,15 @@ class FloatingWindowService : Service(), View.OnTouchListener {
|
||||
layoutParams.x = lastLayoutX
|
||||
layoutParams.y = lastLayoutY
|
||||
|
||||
val keepScreenOnOption = FFI.getLocalOption("keep-screen-on").lowercase()
|
||||
keepScreenOn = when (keepScreenOnOption) {
|
||||
"never" -> KeepScreenOn.NEVER
|
||||
"service-on" -> KeepScreenOn.SERVICE_ON
|
||||
else -> KeepScreenOn.DURING_CONTROLLED
|
||||
}
|
||||
Log.d(logTag, "keepScreenOn option: $keepScreenOnOption, value: $keepScreenOn")
|
||||
updateKeepScreenOnLayoutParams()
|
||||
|
||||
windowManager.addView(floatingView, layoutParams)
|
||||
moveToScreenSide()
|
||||
}
|
||||
@ -200,12 +222,7 @@ class FloatingWindowService : Service(), View.OnTouchListener {
|
||||
lastOrientation = resources.configuration.orientation
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
if (viewCreated) {
|
||||
windowManager.removeView(floatingView)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private fun performClick() {
|
||||
showPopupMenu()
|
||||
@ -326,5 +343,36 @@ class FloatingWindowService : Service(), View.OnTouchListener {
|
||||
private fun stopMainService() {
|
||||
MainActivity.flutterMethodChannel?.invokeMethod("stop_service", null)
|
||||
}
|
||||
|
||||
enum class KeepScreenOn {
|
||||
NEVER,
|
||||
DURING_CONTROLLED,
|
||||
SERVICE_ON,
|
||||
}
|
||||
|
||||
private val handler = Handler(Looper.getMainLooper())
|
||||
private val runnable = object : Runnable {
|
||||
override fun run() {
|
||||
if (updateKeepScreenOnLayoutParams()) {
|
||||
windowManager.updateViewLayout(floatingView, layoutParams)
|
||||
}
|
||||
handler.postDelayed(this, 1000) // 1000 milliseconds = 1 second
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateKeepScreenOnLayoutParams(): Boolean {
|
||||
val oldOn = layoutParams.flags and FLAG_KEEP_SCREEN_ON != 0
|
||||
val newOn = keepScreenOn == KeepScreenOn.SERVICE_ON || (keepScreenOn == KeepScreenOn.DURING_CONTROLLED && MainService.isStart)
|
||||
if (oldOn != newOn) {
|
||||
Log.d(logTag, "change keep screen on to $newOn")
|
||||
if (newOn) {
|
||||
layoutParams.flags = layoutParams.flags or FLAG_KEEP_SCREEN_ON
|
||||
} else {
|
||||
layoutParams.flags = layoutParams.flags and FLAG_KEEP_SCREEN_ON.inv()
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -139,6 +139,8 @@ const String kOptionToggleViewOnly = "view-only";
|
||||
|
||||
const String kOptionDisableFloatingWindow = "disable-floating-window";
|
||||
|
||||
const String kOptionKeepScreenOn = "keep-screen-on";
|
||||
|
||||
const String kUrlActionClose = "close";
|
||||
|
||||
const String kTabLabelHomePage = "Home";
|
||||
|
@ -35,12 +35,41 @@ class SettingsPage extends StatefulWidget implements PageShape {
|
||||
|
||||
const url = 'https://rustdesk.com/';
|
||||
|
||||
enum KeepScreenOn {
|
||||
never,
|
||||
duringControlled,
|
||||
serviceOn,
|
||||
}
|
||||
|
||||
String _keepScreenOnToOption(KeepScreenOn value) {
|
||||
switch (value) {
|
||||
case KeepScreenOn.never:
|
||||
return 'never';
|
||||
case KeepScreenOn.duringControlled:
|
||||
return 'during-controlled';
|
||||
case KeepScreenOn.serviceOn:
|
||||
return 'service-on';
|
||||
}
|
||||
}
|
||||
|
||||
KeepScreenOn optionToKeepScreenOn(String value) {
|
||||
switch (value) {
|
||||
case 'never':
|
||||
return KeepScreenOn.never;
|
||||
case 'service-on':
|
||||
return KeepScreenOn.serviceOn;
|
||||
default:
|
||||
return KeepScreenOn.duringControlled;
|
||||
}
|
||||
}
|
||||
|
||||
class _SettingsState extends State<SettingsPage> with WidgetsBindingObserver {
|
||||
final _hasIgnoreBattery =
|
||||
false; //androidVersion >= 26; // remove because not work on every device
|
||||
var _ignoreBatteryOpt = false;
|
||||
var _enableStartOnBoot = false;
|
||||
var _floatingWindowDisabled = false;
|
||||
var _keepScreenOn = KeepScreenOn.duringControlled; // relay on floating window
|
||||
var _enableAbr = false;
|
||||
var _denyLANDiscovery = false;
|
||||
var _onlyWhiteList = false;
|
||||
@ -96,6 +125,15 @@ class _SettingsState extends State<SettingsPage> with WidgetsBindingObserver {
|
||||
_floatingWindowDisabled = floatingWindowDisabled;
|
||||
}
|
||||
|
||||
final keepScreenOn = _floatingWindowDisabled
|
||||
? KeepScreenOn.never
|
||||
: optionToKeepScreenOn(
|
||||
bind.mainGetLocalOption(key: kOptionKeepScreenOn));
|
||||
if (keepScreenOn != _keepScreenOn) {
|
||||
update = true;
|
||||
_keepScreenOn = keepScreenOn;
|
||||
}
|
||||
|
||||
final enableAbrRes = option2bool(
|
||||
kOptionEnableAbr, await bind.mainGetOption(key: kOptionEnableAbr));
|
||||
if (enableAbrRes != _enableAbr) {
|
||||
@ -524,6 +562,29 @@ class _SettingsState extends State<SettingsPage> with WidgetsBindingObserver {
|
||||
? 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();
|
||||
},
|
||||
));
|
||||
|
||||
final disabledSettings = bind.isDisableSettings();
|
||||
final settings = SettingsList(
|
||||
sections: [
|
||||
@ -947,7 +1008,7 @@ class _RadioEntry {
|
||||
typedef _RadioEntryGetter = String Function();
|
||||
typedef _RadioEntrySetter = Future<void> Function(String);
|
||||
|
||||
_getPopupDialogRadioEntry({
|
||||
SettingsTile _getPopupDialogRadioEntry({
|
||||
required String title,
|
||||
required List<_RadioEntry> list,
|
||||
required _RadioEntryGetter getter,
|
||||
@ -1001,7 +1062,7 @@ _getPopupDialogRadioEntry({
|
||||
|
||||
return SettingsTile(
|
||||
title: Text(translate(title)),
|
||||
onPressed: (context) => showDialog(),
|
||||
onPressed: asyncSetter == null ? null : (context) => showDialog(),
|
||||
value: Padding(
|
||||
padding: EdgeInsets.symmetric(vertical: 8),
|
||||
child: Obx(() => Text(translate(valueText.value))),
|
||||
|
@ -4,6 +4,7 @@ import 'dart:convert';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_hbb/consts.dart';
|
||||
import 'package:flutter_hbb/main.dart';
|
||||
import 'package:flutter_hbb/mobile/pages/settings_page.dart';
|
||||
import 'package:flutter_hbb/models/chat_model.dart';
|
||||
import 'package:flutter_hbb/models/platform_model.dart';
|
||||
import 'package:get/get.dart';
|
||||
@ -421,7 +422,7 @@ class ServerModel with ChangeNotifier {
|
||||
await bind.mainStartService();
|
||||
updateClientState();
|
||||
if (isAndroid) {
|
||||
WakelockPlus.enable();
|
||||
androidUpdatekeepScreenOn();
|
||||
}
|
||||
}
|
||||
|
||||
@ -514,6 +515,7 @@ class ServerModel with ChangeNotifier {
|
||||
}
|
||||
if (_clients.length != oldClientLenght) {
|
||||
notifyListeners();
|
||||
if (isAndroid) androidUpdatekeepScreenOn();
|
||||
}
|
||||
}
|
||||
|
||||
@ -548,6 +550,7 @@ class ServerModel with ChangeNotifier {
|
||||
scrollToBottom();
|
||||
notifyListeners();
|
||||
if (isAndroid && !client.authorized) showLoginDialog(client);
|
||||
if (isAndroid) androidUpdatekeepScreenOn();
|
||||
} catch (e) {
|
||||
debugPrint("Failed to call loginRequest,error:$e");
|
||||
}
|
||||
@ -668,6 +671,7 @@ class ServerModel with ChangeNotifier {
|
||||
final index = _clients.indexOf(client);
|
||||
tabController.remove(index);
|
||||
_clients.remove(client);
|
||||
if (isAndroid) androidUpdatekeepScreenOn();
|
||||
}
|
||||
}
|
||||
|
||||
@ -691,6 +695,7 @@ class ServerModel with ChangeNotifier {
|
||||
if (desktopType == DesktopType.cm && _clients.isEmpty) {
|
||||
hideCmWindow();
|
||||
}
|
||||
if (isAndroid) androidUpdatekeepScreenOn();
|
||||
notifyListeners();
|
||||
} catch (e) {
|
||||
debugPrint("onClientRemove failed,error:$e");
|
||||
@ -702,6 +707,7 @@ class ServerModel with ChangeNotifier {
|
||||
_clients.map((client) => bind.cmCloseConnection(connId: client.id)));
|
||||
_clients.clear();
|
||||
tabController.state.value.tabs.clear();
|
||||
if (isAndroid) androidUpdatekeepScreenOn();
|
||||
}
|
||||
|
||||
void jumpTo(int id) {
|
||||
@ -739,6 +745,27 @@ class ServerModel with ChangeNotifier {
|
||||
debugPrint("updateVoiceCallState failed: $e");
|
||||
}
|
||||
}
|
||||
|
||||
void androidUpdatekeepScreenOn() async {
|
||||
if (!isAndroid) return;
|
||||
var floatingWindowDisabled =
|
||||
bind.mainGetLocalOption(key: kOptionDisableFloatingWindow) == "Y" ||
|
||||
!await AndroidPermissionManager.check(kSystemAlertWindow);
|
||||
final keepScreenOn = floatingWindowDisabled
|
||||
? KeepScreenOn.never
|
||||
: optionToKeepScreenOn(
|
||||
bind.mainGetLocalOption(key: kOptionKeepScreenOn));
|
||||
final on = ((keepScreenOn == KeepScreenOn.serviceOn) && _isStart) ||
|
||||
(keepScreenOn == KeepScreenOn.duringControlled &&
|
||||
_clients.map((e) => !e.disconnected).isNotEmpty);
|
||||
if (on != await WakelockPlus.enabled) {
|
||||
if (on) {
|
||||
WakelockPlus.enable();
|
||||
} else {
|
||||
WakelockPlus.disable();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enum ClientType {
|
||||
|
@ -2100,6 +2100,9 @@ pub mod keys {
|
||||
pub const OPTION_FLOATING_WINDOW_TRANSPARENCY: &str = "floating-window-transparency";
|
||||
pub const OPTION_FLOATING_WINDOW_SVG: &str = "floating-window-svg";
|
||||
|
||||
// android keep screen on
|
||||
pub const OPTION_KEEP_SCREEN_ON: &str = "keep-screen-on";
|
||||
|
||||
pub const OPTION_DISABLE_GROUP_PANEL: &str = "disable-group-panel";
|
||||
pub const OPTION_PRE_ELEVATE_SERVICE: &str = "pre-elevate-service";
|
||||
|
||||
@ -2163,6 +2166,7 @@ pub mod keys {
|
||||
OPTION_FLOATING_WINDOW_UNTOUCHABLE,
|
||||
OPTION_FLOATING_WINDOW_TRANSPARENCY,
|
||||
OPTION_FLOATING_WINDOW_SVG,
|
||||
OPTION_KEEP_SCREEN_ON,
|
||||
OPTION_DISABLE_GROUP_PANEL,
|
||||
OPTION_PRE_ELEVATE_SERVICE,
|
||||
];
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", "使用纹理渲染"),
|
||||
("Floating window", "悬浮窗"),
|
||||
("floating_window_tip", "有助于保持RustDesk后台服务"),
|
||||
("Keep screen on", "保持屏幕开启"),
|
||||
("Never", "从不"),
|
||||
("During controlled", "被控期间"),
|
||||
("During service is on", "服务开启期间"),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", "Použít vykreslování textur"),
|
||||
("Floating window", "Plovoucí okno"),
|
||||
("floating_window_tip", "Pomáhá udržovat službu RustDesk na pozadí"),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", "Textur-Rendering verwenden"),
|
||||
("Floating window", "Schwebendes Fenster"),
|
||||
("floating_window_tip", "Es hilft dabei, RustDesk im Hintergrund auszuführen."),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", "Usar renderizado de texturas"),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", "Utiliser le rendu de texture"),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", "Usa rendering texture"),
|
||||
("Floating window", "Finestra galleggiante"),
|
||||
("floating_window_tip", "Aiuta a mantenere il servizio di RustDesk in background"),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", "Izmantot tekstūras renderēšanu"),
|
||||
("Floating window", "Peldošs logs"),
|
||||
("floating_window_tip", "Tas palīdz uzturēt RustDesk fona servisu"),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", "Textuurrendering gebruiken"),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", "Визуализация текстур"),
|
||||
("Floating window", "Плавающее окно"),
|
||||
("floating_window_tip", "Помогает поддерживать фоновую службу RustDesk"),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", "Použiť vykresľovanie textúr"),
|
||||
("Floating window", "Plávajúce okno"),
|
||||
("floating_window_tip", "Pomáha udržiavať službu RustDesk na pozadí"),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", "使用紋理渲染"),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", "Використовувати візуалізацію текстур"),
|
||||
("Floating window", "Рухоме вікно"),
|
||||
("floating_window_tip", "Допомагає зберегти фонову службу Rustdesk"),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -617,5 +617,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Use texture rendering", ""),
|
||||
("Floating window", ""),
|
||||
("floating_window_tip", ""),
|
||||
("Keep screen on", ""),
|
||||
("Never", ""),
|
||||
("During controlled", ""),
|
||||
("During service is on", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user