Romain Vimont
117fe32626
Fix visibility modifier
...
Refs b7a06278fe
2022-01-21 18:36:44 +01:00
Thomas Rebele
b7a06278fe
Fix NoSuchMethodException for injectInputEvent()
...
Some devices with modified ROMs expose a different signature for
injectInputEvent().
Fixes #2250 <https://github.com/Genymobile/scrcpy/issues/2250 >
PR #2946 <https://github.com/Genymobile/scrcpy/pull/2946 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2022-01-18 10:15:55 +01:00
Romain Vimont
60bf133ac2
Add final modifier to ScreenEncoder fields
...
These fields are only set from the constructor.
2022-01-15 23:25:55 +01:00
Romain Vimont
924375487e
Pass buttons state in scroll events
...
A scroll event might be produced when a mouse button is pressed (for
example when scrolling while selecting a text). For consistency, pass
the actual buttons state (instead of 0).
In practice, it seems that this use case does not work properly with
Android event injection, but it will work with HID mouse.
2022-01-04 17:41:40 +01:00
Romain Vimont
cabcbc2b15
Do not create control socket if no control
...
If --no-control is enabled, then it is not necessary to create a second
communication socket between the client and the server.
This also facilitates the use of the server alone (without the client)
to receive only the raw video stream.
2021-12-08 23:41:38 +01:00
Romain Vimont
e2b3968c66
Always synchronize clipboard on explicit COPY/CUT
...
If --no-clipboard-autosync is enabled, the automatic clipboard
synchronization performed whenever the device clipboard changes is
disabled.
But on explicit COPY and CUT scrcpy shortcuts (MOD+c and MOD+x), the
clipboard should still be synchronized, so that it remains possible to
copy-paste from the device to the computer.
This is consistent with the behavior of MOD+v, which pastes the computer
clipboard to the device.
Refs #2228 <https://github.com/Genymobile/scrcpy/issues/2228 >
Refs #2817 <https://github.com/Genymobile/scrcpy/pull/2817 >
PR #2834 <https://github.com/Genymobile/scrcpy/pull/2834 >
2021-11-29 22:00:55 +01:00
Romain Vimont
bfcb9d06c3
Expose sync mode for injecting events
...
Expose the inject input event mode so that it is possible to wait for
the events to be "finished". This will be necessary to read the
clipboard content only after the COPY or CUT key event is handled.
PR #2834 <https://github.com/Genymobile/scrcpy/pull/2834 >
2021-11-29 22:00:21 +01:00
Romain Vimont
dc19ae334d
Move acknowledgment handling
...
Handle all actions related to SET_CLIPBOARD from the dedicated method.
PR #2834 <https://github.com/Genymobile/scrcpy/pull/2834 >
2021-11-29 21:58:30 +01:00
Romain Vimont
4c47598865
Make lockVideoOrientation option name uniform
...
On the server, the option was named lockedVideoOrientation.
2021-11-24 21:33:58 +01:00
Romain Vimont
04e5537f8c
Pass server parameters as key=value pairs
...
The options values to configure the server were identified by their
command-line argument index. Now that there are a lot of arguments, many
of them being booleans, it became unreadable and error-prone.
Identify the arguments by a key string instead, and make them optional.
This will also simplify running the server manually for debugging.
2021-11-24 21:23:20 +01:00
Romain Vimont
2c3099e2de
Parse codec options early
...
For consistency with other options, parse the codec options on the
server before storing them in the Options instance.
2021-11-24 21:06:02 +01:00
Romain Vimont
6abff46c9f
Add option to disable clipboard autosync
...
By default, scrcpy automatically synchronizes the computer clipboard to
the device clipboard before injecting Ctrl+v, and the device clipboard
to the computer clipboard whenever it changes.
This new option --no-clipboard-autosync disables this automatic
synchronization.
Fixes #2228 <https://github.com/Genymobile/scrcpy/issues/2228 >
PR #2817 <https://github.com/Genymobile/scrcpy/pull/2817 >
2021-11-24 09:44:39 +01:00
Romain Vimont
41abe021e2
Make the device acknowledge device clipboard
...
If the client provided a sequence number on SET_CLIPBOARD request, make
the device send back an acknowledgement once the clipboard is set.
PR #2814 <https://github.com/Genymobile/scrcpy/pull/2814 >
2021-11-23 21:15:05 +01:00
Romain Vimont
2a0730ee9b
Add device clipboard set acknowledgement
...
Add a device message type so that the device could send acknowledgements
for SET_CLIPBOARD requests.
PR #2814 <https://github.com/Genymobile/scrcpy/pull/2814 >
2021-11-23 21:15:05 +01:00
Romain Vimont
901d837165
Add sequence number to set_clipboard request
...
This will allow the client to request an acknowledgement.
PR #2814 <https://github.com/Genymobile/scrcpy/pull/2814 >
2021-11-23 21:15:05 +01:00
Romain Vimont
ee93d2aac1
Configure init and cleanup asynchronously
...
Accessing the settings (like --show-touches) on start should not delay
screen mirroring.
PR #2802 <https://github.com/Genymobile/scrcpy/pull/2802 >
2021-11-18 08:37:32 +01:00
Romain Vimont
c29a0bf675
Do not quit on cleanup configuration failure
...
Cleanup is used for some options like --show-touches to restore the
state on exit.
If the configuration fails, do not crash the whole process. Just log an
error.
PR #2802 <https://github.com/Genymobile/scrcpy/pull/2802 >
2021-11-18 08:37:28 +01:00
Romain Vimont
411bb0d18e
Move init and cleanup to a separate method
...
PR #2802 <https://github.com/Genymobile/scrcpy/pull/2802 >
2021-11-18 08:37:26 +01:00
Romain Vimont
cc0902b13c
Read/write settings via command on Android >= 12
...
Before Android 8, executing the "settings" command from a shell was
very slow (~1 second), because it spawned a new app_process to execute
Java code. Therefore, to access settings without performance issues,
scrcpy used private APIs to read from and write to settings.
However, since Android 12, this is not possible anymore, due to
permissions changes.
To make it work again, execute the "settings" command on Android 12 (or
on previous version if the other method failed). This method is faster
than before Android 8 (~100ms).
Fixes #2671 <https://github.com/Genymobile/scrcpy/issues/2671 >
Fixes #2788 <https://github.com/Genymobile/scrcpy/issues/2788 >
PR #2802 <https://github.com/Genymobile/scrcpy/pull/2802 >
2021-11-18 08:37:22 +01:00
Romain Vimont
48b572c272
Add throwable parameter to Log.w()
...
When an exception occurs, we might want to log a warning instead of an
error.
PR #2802 <https://github.com/Genymobile/scrcpy/pull/2802 >
2021-11-18 08:37:18 +01:00
Romain Vimont
94feae71f2
Report settings errors via Exceptions
...
Settings read/write errors were silently ignored. Report them via a
SettingsException so that the caller can handle them.
This allows to log a proper error message, and will also allow to
fallback to a different settings method in case of failure.
PR #2802 <https://github.com/Genymobile/scrcpy/pull/2802 >
2021-11-18 08:37:02 +01:00
Romain Vimont
67170437f1
Wrap settings management into a Settings class
...
Until now, the code that needed to read/write the Android settings had
to explicitly open and close a ContentProvider.
Wrap these details into a Settings class.
This paves the way to provide an alternative implementation of settings
read/write for Android >= 12.
PR #2802 <https://github.com/Genymobile/scrcpy/pull/2802 >
2021-11-18 08:36:48 +01:00
Romain Vimont
8df42cec82
Fix workarounds for Meizu
...
Workarounds.fillAppInfo() is necessary for Meizu devices even before the
first call to internalStreamScreen(), but it is harmful on other
devices (#940 ).
Therefore, simplify the workaround, by calling fillAppInfo() only if
Build.BRAND equals "meizu" (case insensitive).
Fixes #240 <https://github.com/Genymobile/scrcpy/issues/240 > (again)
Fixes #2656 <https://github.com/Genymobile/scrcpy/issues/2656 >
2021-09-22 15:33:17 +02:00
Romain Vimont
fa100b814b
Add support for expandNotificationsPanel() variant
...
Some custom vendor ROM added an int as a parameter.
Fixes #2551 <https://github.com/Genymobile/scrcpy/issues/2551 >
2021-09-11 10:46:25 +02:00
Romain Vimont
116acc8d25
Use SOURCE_MOUSE for scroll events
...
This has no practical impact (AFAIK), but a scroll events should come
from a mouse.
Refs #2602 <https://github.com/Genymobile/scrcpy/issues/2602 >
2021-08-28 23:14:56 +02:00
Marti Raudsepp
937fa704a6
Add --verbosity=verbose log level
...
PR #2371 <https://github.com/Genymobile/scrcpy/pull/2371 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-06-20 12:34:19 +02:00
Romain Vimont
b846d3a085
Adapt call() on ContentProvider for Android 12
...
Android 12 changed one of the call() overloads with a new parameter
AttributionSource. Adapt the wrapper.
Fixes #2402 <https://github.com/Genymobile/scrcpy/issues/2402 >
2021-06-19 22:59:48 +02:00
Romain Vimont
16a63e0917
Use non-secure display for Android 12 preview
...
Android 12 preview identifies as Android 11, but its codename is "S".
Refs #2129 <https://github.com/Genymobile/scrcpy/issues/2129 >
2021-06-11 10:02:52 +02:00
Romain Vimont
f7533e8896
Use non-secure display for Android >= 12
...
Since Android 12, secure displays could not be created with shell
permissions anymore.
Refs commit 1fdde490fd
Fixes #2129 <https://github.com/Genymobile/scrcpy/issues/2129 >
2021-06-11 09:37:29 +02:00
Romain Vimont
969bfd4374
Serialize clean-up configuration
...
This avoids to pass each option as individual parameter and parse them
manually (it's still "manual" in the Parcelable implementation).
Refs #824 <https://github.com/Genymobile/scrcpy/pull/824#issuecomment-780319422 >
Reviewed-by: Yu-Chen Lin <npes87184@gmail.com>
2021-06-11 09:33:29 +02:00
Romain Vimont
233f8e6cc4
Rename keycode injection method
...
Make it explicit that it injects both "press" and "release" events.
2021-04-30 23:07:37 +02:00
Romain Vimont
9a7d351d67
Simplify non-static injectEvent() implementation
...
Just call the static version (having a displayId) from the non-static
version (using the displayId field).
2021-04-30 23:07:37 +02:00
Romain Vimont
d00ee640c0
Simplify Device.java
...
Remove useless intermediate method with a "mode" parameter (it's always
called with the same mode).
This also avoids the need for a specific injectEventOnDisplay() method,
since it does not conflict with another injectEvent() method anymore.
2021-04-30 23:07:29 +02:00
Romain Vimont
fd0dc6c0cd
Add --lock-video-orientation=initial
...
Add a new mode to the --lock-video-orientation option, to lock the
initial orientation of the device.
This avoids to pass an explicit value (0, 1, 2 or 3) and think about
which is the right one.
2021-04-25 14:55:54 +02:00
brunoais
50eecdab28
Add control message to expand settings panel
...
PR #2260 <https://github.com/Genymobile/scrcpy/pull/2260 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-04-25 14:36:48 +02:00
brunoais
66c581851f
Rename control message type to COLLAPSE_PANELS
...
The collapsing action collapses any panels.
By the way, the Android method is named collapsePanels().
PR #2260 <https://github.com/Genymobile/scrcpy/pull/2260 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-04-25 14:36:48 +02:00
Romain Vimont
bb4614d558
Reverse boolean logic for readability
...
Refs #2260 <https://github.com/Genymobile/scrcpy/pull/2260#issuecomment-823508759 >
2021-04-25 14:36:48 +02:00
Romain Vimont
d0739911a3
Forward DOWN and UP separately for right-click
...
The shortcut "back on screen on" is a bit special: the control is
requested by the client, but the actual event injection (POWER or BACK)
is determined on the device.
To properly inject DOWN and UP events for BACK, transmit the action as
a control parameter.
If the screen is off:
- on DOWN, inject POWER (DOWN and UP) (wake up the device immediately)
- on UP, do nothing
If the screen is on:
- on DOWN, inject BACK DOWN
- on UP, inject BACK UP
A corner case is when the screen turns off between the DOWN and UP
event. In that case, a BACK UP event will be injected, so it's harmless.
As a consequence of this change, the BACK button is now handled by
Android on mouse released. This is consistent with the keyboard shortcut
(Mod+b) behavior.
PR #2259 <https://github.com/Genymobile/scrcpy/pull/2259 >
Refs #2258 <https://github.com/Genymobile/scrcpy/pull/2258 >
2021-04-19 20:16:45 +02:00
Yu-Chen Lin
1d615a0d51
Support power off on close
...
PR #824 <https://github.com/Genymobile/scrcpy/pull/824 >
Signed-off-by: Yu-Chen Lin <npes87184@gmail.com>
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-03-16 21:12:35 +01:00
Yu-Chen Lin
fb0bcaebc2
Export static method to power off screen in Device
...
PR #824 <https://github.com/Genymobile/scrcpy/pull/824 >
Signed-off-by: Yu-Chen Lin <npes87184@gmail.com>
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-03-16 21:12:29 +01:00
Romain Vimont
0308ef43f2
Do not set buttons on touch events
...
BUTTON_PRIMARY must not be set for touch events:
> This button constant is not set in response to simple touches with a
> finger or stylus tip. The user must actually push a button.
<https://developer.android.com/reference/android/view/MotionEvent#BUTTON_PRIMARY >
Fixes #2169 <https://github.com/Genymobile/scrcpy/issues/2169 >
2021-03-15 18:46:56 +01:00
Romain Vimont
40febf4a91
Use device id 0 for touch/mouse events
...
Virtual device is only for keyboard sources, not mouse or touchscreen
sources. Here is the value of InputDevice.getDevice(-1).toString():
Input Device -1: Virtual
Descriptor: ...
Generation: 2
Location: built-in
Keyboard Type: alphabetic
Has Vibrator: false
Has mic: false
Sources: 0x301 ( keyboard dpad )
InputDevice.getDeviceId() documentation says:
> An id of zero indicates that the event didn't come from a physical
> device and maps to the default keymap.
<https://developer.android.com/reference/android/view/InputEvent#getDeviceId() >
However, injecting events with a device id of 0 causes event.getDevice()
to be null on the client-side.
Commit 26529d377f
used -1 as a workaround
to avoid a NPE on a specific Android TV device. But this is a bug in the
device system, which wrongly assumes that input device may not be null.
A similar issue was present in Flutter, but it is now fixed:
- <https://github.com/flutter/flutter/issues/30665 >
- <https://github.com/flutter/engine/pull/7986 >
On the other hand, using an id of -1 for touchscreen events (which is
invalid) causes issues for some apps:
<https://github.com/Genymobile/scrcpy/issues/2125#issuecomment-790535792 >
Therefore, use a device id of 0.
An alternative could be to find an existing device matching the source,
like "adb shell input" does. See getInputDeviceId():
<https://android.googlesource.com/platform/frameworks/base.git/+/master/cmds/input/src/com/android/commands/input/Input.java >
But it seems better to indicate that the event didn't come from a
physical device, and it would not solve #962 anyway, because an Android
TV has no touchscreen.
Refs #962 <https://github.com/Genymobile/scrcpy/issues/962 >
Fixes #2125 <https://github.com/Genymobile/scrcpy/issues/2125 >
2021-03-14 18:30:56 +01:00
Romain Vimont
429fdef04f
Fix encoder parameter suggestion
...
The option is --encoder, not --encoder-name.
2021-03-11 10:55:12 +01:00
Romain Vimont
218636dc10
Inject touch events with smallest detectable size
...
A value of 1 means the "largest detectable size", a value of 0 means the
"smallest detectable size".
https://developer.android.com/reference/android/view/MotionEvent.PointerCoords#size
https://developer.android.com/reference/android/view/MotionEvent#AXIS_SIZE
Fixes #2125 <https://github.com/Genymobile/scrcpy/issues/2125 >
2021-03-03 18:22:54 +01:00
Romain Vimont
90f8356630
Interrupt device threads on stop
...
The (non-daemon) threads were not interrupted on video stream stopped,
leaving the server process alive.
Interrupt them to wake up their blocking call so that they terminate
properly.
Refs #1992 <https://github.com/Genymobile/scrcpy/issues/1992 >
2021-01-01 17:32:34 +01:00
Romain Vimont
42ab8fd611
List available encoders on invalid name specified
...
If an invalid encoder name is given via the --encoder option, list all
the H.264 encoders available on the device.
2020-11-08 21:07:20 +01:00
Romain Vimont
363eeea19e
Log encoder name
...
When the encoder is selected automatically, log the name of the selected
encoder.
2020-11-08 21:07:20 +01:00
Tzah Mazuz
76c2c6e69d
Adding new option --encoder
...
Some devices have more than one encoder, and some encoders may cause
issues or crash. With this option we can specify which encoder we want
the device to use.
PR #1827 <https://github.com/Genymobile/scrcpy/pull/1827 >
Fixes #1810 <https://github.com/Genymobile/scrcpy/issues/1810 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2020-11-08 21:07:17 +01:00
Romain Vimont
adc547fa6e
Add an option to forward all clicks
...
Add --forward-all-clicks to disable mouse shortcuts and forward middle
and right clicks to the device instead.
Fixes #1302 <https://github.com/Genymobile/scrcpy/issues/1302 >
Fixes #1613 <https://github.com/Genymobile/scrcpy/issues/1613 >
2020-11-03 17:12:26 +01:00
Romain Vimont
2edf192e3a
Remove deprecation warning
...
As a workaround for some devices, we need to prepare the main looper.
The method is now deprecated, but we still want to call it.
2020-10-05 21:09:47 +02:00
Romain Vimont
ae758f99d6
Adapt call() on ContentProvider for Android 11
...
This commit in AOSP framework_base added a parameter "attributionTag" to
the call() method:
12ac3f406f
%5E%21/#F17
As a consequence, the method did not exist, so scrcpy used the legacy
call() method (using the authority "unknown") as a fallback, which fails
for security reasons.
Fixes #1468 <https://github.com/Genymobile/scrcpy/issues/1468 >
2020-09-15 13:31:10 +02:00
brunoais
0bf110dd5c
Reset power mode only if screen is on
...
PR #1670 <https://github.com/Genymobile/scrcpy/pull/1670 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2020-08-21 12:34:59 +02:00
Romain Vimont
0c5e0a4f6d
Make Device methods static when possible
...
The behavior of some methods do not depend on the user-provided options.
These methods can be static. This will allow to call them directly from
the cleanup process.
2020-08-21 12:34:50 +02:00
Romain Vimont
95f1ea0d80
Fix clipboard paste condition
...
To avoid possible copy-paste loops between the computer and the device,
the device clipboard is not set if it already contains the expected
content.
But the condition was wrong: it was not set also if it was empty.
Refs 1223a72eb8
Fixes #1658 <https://github.com/Genymobile/scrcpy/issues/1658 >
2020-08-10 14:37:32 +02:00
Romain Vimont
38940ffe89
Revert "Inject WAKEUP instead of POWER"
...
WAKEUP does not work on some devices.
Fixes #1655 <https://github.com/Genymobile/scrcpy/issues/1655 >
This reverts commit 322f1512ea
.
2020-08-09 17:10:27 +02:00
brunoais
cf9d44979c
Keep the screen off on powering on
...
PR #1577 <https://github.com/Genymobile/scrcpy/pull/1577 >
Fixes #1573 <https://github.com/Genymobile/scrcpy/issues/1573 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2020-08-03 19:51:58 +02:00
Romain Vimont
1223a72eb8
Set device clipboard only if necessary
...
Do not explicitly set the clipboard text if it already contains the
expected content. This avoids possible copy-paste loops between the
computer and the device.
2020-08-01 16:31:31 +02:00
Romain Vimont
eabaf6f7bd
Simplify PASTE option for "set clipboard"
...
When the client requests to set the clipboard, it may request to press
the PASTE key in addition. To be a bit generic, it was stored as a flag
in ControlMessage.java.
But flags suggest that it represents a bitwise union. Use a simple
boolean instead.
2020-07-17 00:00:42 +02:00
Romain Vimont
322f1512ea
Inject WAKEUP instead of POWER
...
To power the device on, inject KEYCODE_WAKEUP to avoid a possible
race condition (the device might become off between the test
isScreenOn() and the POWER keycode injection).
2020-07-15 12:03:44 +02:00
brunoais
30714aba34
Restore power mode to normal on cleanup
...
This avoids to let the device screen turned off (as enabled by Ctrl+o or
--turn-screen-off).
PR #1576 <https://github.com/Genymobile/scrcpy/pull/1576 >
Fixes #1572 <https://github.com/Genymobile/scrcpy/issues/1572 >
2020-07-09 22:33:11 +02:00
Romain Vimont
a973757fd1
Warn on ignored touch event
...
In theory, this was expected to only happen when a touch event is sent
just before the device is rotated, but some devices do not respect the
encoding size, causing an unexpected mismatch.
Refs #1518 <https://github.com/Genymobile/scrcpy/issues/1518 >
2020-07-09 22:32:14 +02:00
Romain Vimont
5fa46ad0c7
Fix constants name in comment
2020-07-07 15:47:25 +02:00
Romain Vimont
334964c380
Make setScreenPowerMode() method static
...
Its implementation does not use the instance at all.
2020-07-07 15:34:34 +02:00
Romain Vimont
f7d4b6d0db
Do not crash on missing clipboard manager
...
Some devices have no clipboard manager.
In that case, do not try to enable clipboard synchronization to avoid
a crash.
Fixes #1440 <https://github.com/Genymobile/scrcpy/issues/1440 >
Fixes #1556 <https://github.com/Genymobile/scrcpy/issues/1556 >
2020-07-03 08:53:51 +02:00
xeropresence
3c1ed5d86c
Handle repeating keycodes
...
Initialize "repeat" count on key events.
PR #1519 <https://github.com/Genymobile/scrcpy/pull/1519 >
Refs #1013 <https://github.com/Genymobile/scrcpy/pull/1013 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2020-06-19 22:30:17 +02:00
Romain Vimont
488d22d4e2
Increase clipboard size from 4k to 256k
...
Beyond 256k, SDL_GetClipboardText() returns an empty string on my
computer.
Fixes #1117 <https://github.com/Genymobile/scrcpy/issues/1117 >
2020-06-11 23:11:20 +02:00
Romain Vimont
245999aec4
Serialize text size on 4 bytes
...
This will allow to send text having a size greater than 65535 bytes.
2020-06-11 23:11:17 +02:00
Romain Vimont
a00a8763d6
Avoid additional copy on Java text parsing
...
Directly pass the buffer range to the String constructor.
2020-06-11 23:06:02 +02:00
Romain Vimont
8f314c74b0
Reorganize message size constants
...
Make the max clipboard text length depend on the max message size.
2020-06-11 22:58:54 +02:00
Romain Vimont
93a5c5149d
Push clipboard text only if not null
...
In practice, it does not change anything (it just avoids a spurious
wake-up), but semantically, it makes no sense to call
pushClipboardText() with a null value.
2020-05-27 18:26:39 +02:00
Romain Vimont
d499ee53c9
Initialize a default log level
...
Clean up has been broken by 3df63c579d
.
The verbosity was correctly initialized for the Server process, but not
for the CleanUp process.
To avoid the problem, initialize a default log level.
2020-05-27 12:05:29 +02:00
Romain Vimont
fc1dec0270
Paste on "set clipboard" if possible
...
Ctrl+Shift+v synchronizes the computer clipboard to the Android device
clipboard. This feature had been added to provide a way to copy UTF-8
text from the computer to the device.
To make such a paste more straightforward, if the device runs at least
Android 7, also send a PASTE keycode to paste immediately.
<https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_PASTE >
Fixes #786 <https://github.com/Genymobile/scrcpy/issues/786 >
2020-05-25 20:59:21 +02:00
Romain Vimont
4bbabfb4ef
Move injection methods to Device
...
Only the main injection method was exposed on Device, the convenience
methods were implemented in Controller.
For consistency, move them all to the Device class.
2020-05-25 03:28:33 +02:00
Romain Vimont
ffc57512b3
Avoid clipboard synchronization loop
...
The Android device listens for clipboard changes to synchronize with the
computer clipboard.
However, if the change comes from scrcpy (for example via Ctrl+Shift+v),
do not notify the change.
2020-05-25 03:28:33 +02:00
Romain Vimont
c7a33fac36
Log actions on the caller side
...
Some actions are exposed by the Device class, but logging success should
be done by the caller.
2020-05-25 03:28:33 +02:00
Romain Vimont
81573d81a0
Pass a Locale to toUpperCase()
...
Make lint happy.
2020-05-25 03:28:15 +02:00
Romain Vimont
5c2cf88a1d
Rename THRESHOLD to threshold
...
Since the field is not final anymore, lint expects the name not to be
capitalized.
2020-05-25 03:22:07 +02:00
Romain Vimont
3df63c579d
Configure server verbosity from the client
...
Send the requested log level from the client.
This paves the way to configure it via a command-line argument.
2020-05-24 21:14:25 +02:00
Tzah Mazuz
080a4ee365
Add --codec-options
...
Add a command-line parameter to pass custom options to the device
encoder (as a comma-separated list of "key[:type]=value").
The list of possible codec options is available in the Android
documentation:
<https://d.android.com/reference/android/media/MediaFormat >
PR #1325 <https://github.com/Genymobile/scrcpy/pull/1325 >
Refs #1226 <https://github.com/Genymobile/scrcpy/pull/1226 >
Co-authored-by: Romain Vimont <rom@rom1v.com>
2020-05-24 14:54:34 +02:00
Romain Vimont
517dbd9c85
Increase buffer size to fix "set clipboard" event
...
The buffer size must be greater than any event message.
Clipboard events may take up to 4096 bytes, so increase the buffer size.
Fixes #1425 <https://github.com/Genymobile/scrcpy/issues/1425 >
2020-05-24 14:33:23 +02:00
Romain Vimont
acc4ef31df
Synchronize device clipboard to computer
...
Automatically synchronize the device clipboard to the computer any time
it changes.
This allows seamless copy-paste from Android to the computer.
Fixes #1056 <https://github.com/Genymobile/scrcpy/issues/1056#issuecomment-631363684 >
PR #1423 <https://github.com/Genymobile/scrcpy/pull/1423 >
2020-05-24 14:31:49 +02:00
Romain Vimont
73e722784d
Remove useless exception declaration
...
The interface declares it can throw a RemoteException, but the
implementation never throws such exception.
2020-05-23 18:21:54 +02:00
Romain Vimont
e1cd75792c
Simplify rotation watcher call
...
Remove unnecessary private method (which was wrongly public).
2020-05-23 14:39:09 +02:00
Romain Vimont
e2d5f0e7fc
Send scroll events as a touchscreen
...
Scroll events were sent with a mouse input device. When scrolling on a
list, this could cause the whole list to be focused, and drawn with the
focus color as background.
Send scroll events with a touchscreen input device instead (like motion
events).
Fixes #1362 <https://github.com/Genymobile/scrcpy/issues/1362 >
2020-05-07 15:08:11 +02:00
Romain Vimont
74ece9b45b
Simplify ScreenEncoder more
...
Commit 927d655ff6
removed the
iFrameInternal field and constructor argument.
Also remove it from createFormat() arguments.
2020-05-05 19:01:44 +02:00
Romain Vimont
c77024314d
Add an option to keep the device awake
...
Add an option to prevent the device to sleep:
scrcpy --stay-awake
scrcpy -w
The initial state is restored on exit.
Fixes #631 <https://github.com/Genymobile/scrcpy/issues/631 >
2020-05-02 02:14:25 +02:00
Romain Vimont
4668638ee1
Handle "show touches" on the device-side
...
Now that the server can access the Android settings and clean up
properly, handle the "show touches" option from the server.
The initial state is now correctly restored, even on device
disconnection.
2020-05-02 01:55:30 +02:00
Romain Vimont
dbb0df607c
Move constants to ServiceManager
...
PACKAGE_NAME and USER_ID could be use by several "managers", so move
them to the service manager.
2020-05-02 01:22:18 +02:00
Romain Vimont
2f74ec2518
Add a clean up process on the device
...
In order to clean up on close, use a separate process which is not
killed when the device is disconnected (even if the main process itself
is killed).
2020-05-02 01:22:18 +02:00
Romain Vimont
8c6799297b
Implement access to settings without Context
...
Expose methods to access the Android settings using private APIs.
This allows to read and write settings values immediately without
starting a new process to call "settings".
2020-05-02 01:22:10 +02:00
Romain Vimont
62c0c1321f
Apply workarounds only on error
...
To avoid NullPointerException on some devices, workarounds have been
implemented. But these workaround produce (harmless) internal errors
causing exceptions to be printed in the console.
To avoid this problem, apply the workarounds only if it fails without
them.
Fixes #994 <https://github.com/Genymobile/scrcpy/issues/994 >
Refs #365 <https://github.com/Genymobile/scrcpy/issues/365 >
Refs #940 <https://github.com/Genymobile/scrcpy/issues/940 >
2020-05-01 19:42:31 +02:00
Tzah Mazuz
125c5561e8
Use MediaFormat constant for MIME type
...
Replace "video/avc" by MIMETYPE_VIDEO_AVC.
Signed-off-by: Romain Vimont <rom@rom1v.com>
2020-04-18 02:14:42 +02:00
Romain Vimont
94a7f1a0f8
Disable input events when necessary
...
Disable input events on secondary displays before Android 10, even if
FLAG_PRESENTATION is not set.
Refs #1288 <https://github.com/Genymobile/scrcpy/issues/1288 >
2020-04-16 20:54:00 +02:00
Romain Vimont
270d0bf639
Rename max length constant for text injection
...
To avoid confusion with the max text size for clipboard, rename the
constant limiting the text injection length.
2020-04-13 19:38:43 +02:00
Romain Vimont
927d655ff6
Simplify ScreenEncoder
...
Do not handle iFrameInterval field and parameter, it is never used
dynamically.
2020-04-12 02:09:28 +02:00
Romain Vimont
ee2894779a
Remove unused lockedVideoOrientation field
...
During PR #1151 , this field has been moved to ScreenInfo, but has not
been removed from ScreenEncoder.
2020-04-12 02:08:16 +02:00
Kostiantyn Luzan
c1ebea26e6
Register rotation watcher on selected display
...
PR #1275 <https://github.com/Genymobile/scrcpy/pull/1275 >
Signed-off-by: Kostiantyn Luzan <vblack2006@gmail.com>
Signed-off-by: Romain Vimont <rom@rom1v.com>
2020-04-08 12:09:24 +02:00
Romain Vimont
f07d21f050
Suppress DiscouragedPrivateApi lint warning
2020-04-08 12:09:24 +02:00
Romain Vimont
bea1c11f8e
Do not log success on failure
...
If calling the private API does not work, an exception is printed. In
that case, do not log that the action succeeded.
2020-04-02 21:05:26 +02:00
e_vigurskiy
4150eedcdf
Add display id parameter
...
Add --display command line parameter to specify a display id.
PR #1238 <https://github.com/Genymobile/scrcpy/pull/1238 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2020-04-02 21:02:52 +02:00
Romain Vimont
5031b2c8ff
Remove MagicNumber checkstyle
...
There are a lot of "magic numbers" that we really don't want to extract
as a constant.
Until now, many @SuppressWarnings annotations were added, but it makes
no sense to check for magic number if we silent the warnings everywhere.
2020-03-28 22:08:16 +01:00
Romain Vimont
4adf5fde6d
Log device details on server start
2020-03-28 15:52:02 +01:00
Romain Vimont
3504c0016b
Add tests for control message length
...
This will avoid regressions for #1245 .
<https://github.com/Genymobile/scrcpy/issues/1245 >
2020-03-26 22:48:01 +01:00
Romain Vimont
89d1602185
Fix expected message length for touch events
...
The expected length for a touch event control message was incorrect. As
a consequence, a BufferUnderflowException could occur.
Fixes #1245 <https://github.com/Genymobile/scrcpy/issues/1245 >
2020-03-26 22:45:43 +01:00
Romain Vimont
566ba766af
Remove unused constant
...
It has not been removed when mouse and touch events have been merged.
2020-03-26 22:43:53 +01:00
Tzah Mazuz
a0af402d96
Fix the printed versions (were opposite)
...
PR #1224 <https://github.com/Genymobile/scrcpy/pull/1224 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2020-03-19 19:28:57 +01:00
Romain Vimont
ae2d094362
Handle locked video orientation from ScreenInfo
...
Centralize video size management in ScreenInfo.
This allows to always send the correct initial video size to the client
if the video orientation is locked.
2020-03-08 10:38:31 +01:00
Romain Vimont
c5f5d1e456
Rename "rotation" to "device rotation"
...
This paves the way to reduce confusion in ScreenInfo when it will handle
locked video orientation.
2020-03-04 22:15:10 +01:00
Romain Vimont
63286424bb
Compute all screen info from ScreenInfo
...
Screen information was partially initialized from Device. Move this
initialization to ScreenInfo.
2020-03-04 22:15:10 +01:00
Romain Vimont
da18c9cdab
Remove useles import
2020-03-04 22:15:10 +01:00
George Stamoulis
1982bc439b
Add option to lock video orientation
...
PR #1151 <https://github.com/Genymobile/scrcpy/pull/1151 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2020-02-27 21:24:37 +01:00
Romain Vimont
ef56cc6ff7
Retrieve screen info once
...
The method getScreenInfo() is synchronized, and the result may change
between calls.
Call it once and store the result in a local variable.
2020-02-27 21:24:37 +01:00
Romain Vimont
96bd2c974d
Do not report workarounds errors
...
Some workarounds are needed on some devices. But applying them may cause
exceptions on other devices, where they are not necessary anyway.
Do not report these errors in release builds.
Closes #994 <https://github.com/Genymobile/scrcpy/issues/994 >
2020-01-19 15:52:24 +01:00
Romain Vimont
83d48267a7
Accept --max-fps before Android 10
...
KEY_MAX_FPS_TO_ENCODER existed privately before Android 10:
<https://github.com/Genymobile/scrcpy/issues/488#issuecomment-567321437 >
2019-12-19 11:52:09 +01:00
Romain Vimont
e0b117de13
Fix checkstyle warning
2019-12-05 21:05:45 +01:00
Romain Vimont
eb0f339271
Add shortcut to rotate screen
...
On Ctrl+r, disable auto-rotation (if enabled), set the screen rotation
and re-enable auto-rotation (if it was enabled).
Closes #11 <https://github.com/Genymobile/scrcpy/issues/11 >
2019-12-04 22:03:25 +01:00
Romain Vimont
bdd05b4a16
Refactor wrappers for Android SDK classes
...
Internally, a failure to invoke a method via reflection was partially
managed using exceptions, partially using a null return value.
Handle all errors at the same place, by not catching
NoSuchMethodException too early.
2019-12-04 19:34:20 +01:00
Romain Vimont
525d6d4a75
Try new methods before legacy ones
...
Use the legacy methods when the new ones do not exist.
2019-12-04 19:32:38 +01:00
Romain Vimont
8a694a9785
Suggest workaround for error 0xfffffc0e
...
When the hardware encoder is not able to encode at the given definition,
it fails with an error 0xfffffc0e.
It is documented in the FAQ:
<https://github.com/Genymobile/scrcpy/blob/master/FAQ.md#i-get-an-error-could-not-open-video-stream >
But it is better to directly suggest the workaround in the console.
2019-11-30 10:46:22 +01:00
Romain Vimont
26529d377f
Use virtual device id to avoid NPE
...
Inject mouse events using id -1 (virtual device) instead of 0 which
does not exist (and causes the InputDevice to be null).
Fixes <https://github.com/Genymobile/scrcpy/issues/962 >
2019-11-29 14:31:19 +01:00
Romain Vimont
6abb8fd0cd
Reformat Java code
...
Reformated by Android studio to match the 150 characters column defined
in checkstyle.
2019-11-25 17:33:42 +01:00
Romain Vimont
2b845680b0
Initialize Application object to avoid NPE
...
When an ApplicationInfo is set (commit
90293240cc
), some devices (Nvidia Shield
TV) attempt to access the Application object, causing a
NullPointerException.
As a workaround, initialize an Application object.
Fixes <https://github.com/Genymobile/scrcpy/issues/940 >
2019-11-24 11:58:40 +01:00
Romain Vimont
ebdc2ee8b5
Rename variable for consistency
...
Use suffix "Field" for fields variables.
2019-11-24 11:55:42 +01:00
Romain Vimont
83ace84280
Restore the .jar extension on the device side
...
Commit 3da95b52bd
renamed
'scrcpy-server.jar' to 'scrcpy-server' to avoid issues on the client
side.
However, removing the extension may cause issues with app_process, so
restore the extension only on the device side.
Fixes <https://github.com/Genymobile/scrcpy/issues/944 >
2019-11-22 15:23:57 +01:00
act262
90293240cc
Fix meizu 16th NPE
...
Fill AppInfo to avoid NullPointerException on some devices.
Fixes <https://github.com/Genymobile/scrcpy/issues/365 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2019-11-19 22:23:08 +01:00
Romain Vimont
213c468c20
Move workarounds to a separate class
...
Extract workarounds (currently only one) to a separate class to avoid
polluting the main code.
2019-11-19 22:23:08 +01:00
Romain Vimont
1d97d7213d
Add option --max-fps
...
Add an option to limit the capture frame rate. It only works for devices
with Android >= 10.
Fixes <https://github.com/Genymobile/scrcpy/issues/488 >
2019-11-17 22:10:39 +01:00
Romain Vimont
fb976816f9
Do not expose frame rate in ScreenEncoder
...
The KEY_FRAME_RATE parameter value is necessary for the configuration of
the encoder, but its actual value does not impact the frame rate (only
resources used by the encoder).
Therefore, it's an internal detail and should not be exposed by the
ScreenEncoder class.
2019-11-17 22:10:33 +01:00
Yu-Chen Lin
b963a3b9d5
Check client and server mismatch
...
Send client version as first parameter and check it at server start.
Signed-off-by: Yu-Chen Lin <npes87184@gmail.com>
Signed-off-by: Romain Vimont <rom@rom1v.com>
2019-11-13 12:00:50 +01:00
olbb
e282100d0b
Call Looper.prepareMainLooper() to avoid exception
...
Some devices internally create a Handler when creating an input Surface,
causing an exception:
> Surface: java.lang.RuntimeException: Can't create handler inside
> thread that has not called Looper.prepare()
As a workaround, call Looper.prepareMainLooper() beforehand.
Fixes:
- <https://github.com/Genymobile/scrcpy/issues/240 >
- <https://github.com/Genymobile/scrcpy/issues/921 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2019-11-09 20:31:57 +01:00
Romain Vimont
3da95b52bd
Rename scrcpy-server.jar to scrcpy-server
...
The server name ending with .jar has several drawbacks:
- meson requires the jar executable to attempt to modify it:
<https://github.com/Genymobile/scrcpy/issues/404#issuecomment-456065923 >
<https://github.com/mesonbuild/meson/issues/4844 >
- meson warns during "ninja install"
<https://github.com/Genymobile/scrcpy/issues/458 >
- some users try to execute it on the computer as a java executable
Removing the extension solves all these problems.
2019-10-31 10:54:29 +01:00
Romain Vimont
f9938dbf88
Inject button state for touch/mouse events
...
The buttons state was forwarded, but ignored by the server.
2019-10-25 11:04:04 +02:00
Romain Vimont
c33a147fd0
Fix "turn screen off" on Android Q
...
Call getInternalDisplayToken(), which retrieve the id of the first
physical display (which is not necessarily 0 anymore).
Fixes <https://github.com/Genymobile/scrcpy/issues/835 >
2019-10-17 23:25:00 +02:00
Romain Vimont
8b33c6c108
Adapt copy-paste methods for Android 10
...
The methods getPrimaryClip() and setPrimaryClip() expect an additional
parameter since Android 10.
Fixes <https://github.com/Genymobile/scrcpy/issues/796 >.
2019-10-17 22:21:47 +02:00
Romain Vimont
5b7a0cd8e9
Extract String literal to static constant
2019-10-17 22:11:39 +02:00
Romain Vimont
bab9361948
Do not crash on control error
...
Some devices do not have some methods that we invoke via reflection, or
their call do not return the expected value. In that case, do not crash
the whole controller.
2019-10-17 22:09:54 +02:00
Romain Vimont
6220456def
Merge mouse and touch events
...
Both are handled the very same way on the device.
2019-10-03 20:37:49 +02:00
Romain Vimont
7e1d52c119
Rename "touch pointer" to "pointer"
...
There are only touch pointers now, mouse pointers have been removed.
2019-10-03 20:27:28 +02:00
Romain Vimont
280d5b718c
Use common pointers for mouse and touch
...
The mouse is a pointer like any other.
2019-10-03 20:05:29 +02:00
Romain Vimont
f765aae352
Inject touch events on the server
...
On receiving an "inject touch" control message, update the local
pointers state and inject touches.
2019-10-03 20:05:29 +02:00
Romain Vimont
77f876e29c
Add "inject touch" control message
...
Add a control message type in the protocol to forward touch events to
the device.
2019-10-03 20:05:27 +02:00
Romain Vimont
d90549d1e6
Rename "pointer" to "mouse pointer"
...
This will help to distinguish them from "touch pointers".
2019-10-02 21:40:26 +02:00
Romain Vimont
6e38e0cbfe
Rename variable names "event" to "msg"
...
Some variable names had not been renamed when "event" was renamed to
"message" (28980bbc90
).
2019-09-15 17:29:03 +02:00
toddsierens
27eacc3c11
Update WindowManager.java
2019-08-08 17:17:48 -04:00
Romain Vimont
056e47e752
Replace "cannot" by "could not"
2019-06-23 20:52:03 +02:00
Romain Vimont
439b009a79
Fix expected parameters count in error message
2019-06-23 20:47:21 +02:00
Romain Vimont
4940746bcb
Remove useless else
...
The if-block ends with a return.
2019-06-14 10:15:53 +02:00
Romain Vimont
fe758e6e15
Improve comment
...
Rephrase to simplify and add a link to the issue.
2019-06-14 10:11:15 +02:00
Arne Schwabe
b769083a5b
Use getPhysicalDisplayToken on Anroid Q+ instead of getBuiltInDisplay
...
This makes the -S (screen off) parameter work on Android Q beta 4
Closes #586
2019-06-13 13:30:54 +02:00
Romain Vimont
8604f16b30
Truncate device name at UTF-8 code point boundary
...
Just in case.
2019-06-07 17:45:03 +02:00