Romain Vimont
b0b05909c0
Add UHID gamepad support
...
Similar to UHID keyboard and mouse, but for gamepads.
Can be enabled with --gamepad=uhid or -G.
It is not enabled by default because not all devices support UHID
(there is a permission error on old Android versions).
2024-09-07 23:24:42 +02:00
Romain Vimont
330d844231
Add UHID_DESTROY control message
...
This message will be sent on gamepad disconnection.
Contrary to keyboard and mouse, which are registered once and are
unregistered when scrcpy exists, each gamepad is mapped with its own HID
id, and they can be plugged/unplugged dynamically.
2024-09-07 23:24:42 +02:00
Romain Vimont
21b412cd98
Simplify messages reader/writer
...
In Java, control messages were parsed using manual buffering, which was
convoluted and error-prone.
Instead, read the socket directly through a DataInputStream and a
BufferedInputStream. Symmetrically, use a DataOutputStream and a
BufferedOutputStream to write messages.
2024-09-07 14:31:54 +02:00
Romain Vimont
0c95794463
Do not apply all workarounds for ONYX devices
...
Calling fillAppInfo() breaks video mirroring on ONYX devices.
Fixes #5182 <https://github.com/Genymobile/scrcpy/issues/5182 >
Refs 2b6089cbfc
2024-08-10 14:29:26 +02:00
Romain Vimont
523f939532
Do not create UHID thread if not used
...
The HandlerThread is used only via the looper queue.
2024-08-08 20:32:35 +02:00
Romain Vimont
cc41115625
Bump version to 2.6.1
2024-08-02 22:32:04 +02:00
Romain Vimont
773c23fda2
Inject finger input whenever possible
...
Even if the pointer is a mouse, inject it as a finger unless it is
required to be a mouse, that is:
- when it is a HOVER_MOUSE event, or
- when a secondary button is pressed.
Some apps/games only accept events from a finger/touchscreen, so using a
mouse by default does not work for them.
For simplicity, make this change on the server side just before
event injection (so that the client does not need to know about this
hacky behavior).
Refs 6808288823
Refs c7b1d0ea9a
Fixes #5162 <https://github.com/Genymobile/scrcpy/issues/5162 >
Fixes #5163 <https://github.com/Genymobile/scrcpy/issues/5163 >
2024-08-02 22:24:31 +02:00
Romain Vimont
52136268ef
Bump version to 2.6
2024-08-01 18:15:59 +02:00
Romain Vimont
2b6089cbfc
Enable workarounds by default
...
Workarounds were disabled by default, and only enabled for some devices
or under specific conditions.
But it seems they are needed for more and more devices, so enable them
by default. They could be disabled for specific devices if necessary in
the future.
In the past, these workarounds caused a (harmless) exception to be
printed on some Xiaomi devices [1]. But this is not a problem anymore
since commit b8c5853aa6
.
They also caused problems for audio on Vivo devices [2], but it seems
this is not the case anymore [3].
They might also impact an old Nvidia Shield [4], but hopefully this is
fixed now.
[1]: <https://github.com/Genymobile/scrcpy/issues/4015#issuecomment-1595382142 >
[2]: <https://github.com/Genymobile/scrcpy/issues/3805#issuecomment-1596148031 >
[3]: <https://github.com/Genymobile/scrcpy/issues/3805#issuecomment-2260205882 >
[4]: <https://github.com/Genymobile/scrcpy/issues/940 >
PR #5154 <https://github.com/Genymobile/scrcpy/pull/5154 >
2024-08-01 12:16:35 +02:00
Al Grimes
f691ebb1b4
Add workaround for TCL Android 12 Smart TVs
...
Fixes #5140 <https://github.com/Genymobile/scrcpy/issues/5140 >
PR #5148 <https://github.com/Genymobile/scrcpy/pull/5148 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2024-07-31 14:55:00 +02:00
Romain Vimont
31116a60d7
Add --audio-dup
...
Add an option to duplicate audio on the device, compatible with the new
audio playback capture (--audio-source=playback).
Fixes #3875 <https://github.com/Genymobile/scrcpy/issues/3875 >
Fixes #4380 <https://github.com/Genymobile/scrcpy/issues/4380 >
PR #5102 <https://github.com/Genymobile/scrcpy/pull/5102 >
Co-authored-by: Simon Chan <1330321+yume-chan@users.noreply.github.com>
2024-07-19 17:48:39 +02:00
Romain Vimont
a10f8cd798
Add audio playback capture method
...
Add a new method to capture audio playback.
It requires Android 13 (where the Shell app has MODIFY_AUDIO_ROUTING
permission).
The main benefit is that it supports keeping audio playing on the device
(implemented in a further commit).
Fixes #4380 <https://github.com/Genymobile/scrcpy/issues/4380 >
PR #5102 <https://github.com/Genymobile/scrcpy/pull/5102 >
Co-authored-by: Simon Chan <1330321+yume-chan@users.noreply.github.com>
2024-07-19 17:48:39 +02:00
Romain Vimont
53c6eb66ea
Move audio source value
...
The MediaRecorder constant should not belong to the AudioSource enum.
This will allow to add a new AudioSource which has no meaningful
MediaRecorder audio source value.
PR #5102 <https://github.com/Genymobile/scrcpy/pull/5102 >
2024-07-19 17:48:39 +02:00
Romain Vimont
0f076083e8
Extract AudioCapture interface
...
Move the implementation to AudioDirectCapture and extract an
AudioCapture interface.
This will allow to provide another AudioCapture implementation.
PR #5102 <https://github.com/Genymobile/scrcpy/pull/5102 >
2024-07-19 17:48:39 +02:00
Romain Vimont
053bf83f58
Extract AudioRecordReader
...
Move the logic to read from an AudioRecord and handle all corner cases
for PTS. This simplifies AudioCapture.
PR #5102 <https://github.com/Genymobile/scrcpy/pull/5102 >
2024-07-19 17:48:39 +02:00
Romain Vimont
414ce4c754
Move createAudioFormat() to AudioConfig
...
This will allow to reuse this method.
PR #5102 <https://github.com/Genymobile/scrcpy/pull/5102 >
2024-07-19 17:48:39 +02:00
Romain Vimont
a2f3a5cf18
Move hardcoded audio configuration to AudioConfig
...
This will allow to use these constants from different classes not
directly related to AudioCapture.
PR #5102 <https://github.com/Genymobile/scrcpy/pull/5102 >
2024-07-19 17:48:39 +02:00
Romain Vimont
5e605b9b8f
Move audio compatibility check
...
The compatibility depends on the capture constraints, not the encoding.
This will allow to add a new capture implementation with different
constraints.
PR #5102 <https://github.com/Genymobile/scrcpy/pull/5102 >
2024-07-19 17:48:39 +02:00
Romain Vimont
cf09e78323
Throw AudioCaptureException on workaround error
...
Replace a RuntimeException by a specific AudioCaptureException.
PR #5102 <https://github.com/Genymobile/scrcpy/pull/5102 >
2024-07-19 17:48:39 +02:00
Romain Vimont
3b8ec0c38d
Rename audio capture exception
...
The AudioCaptureForegroundException was very specific. Rename it to
AudioCaptureException to support other capture failures.
PR #5102 <https://github.com/Genymobile/scrcpy/pull/5102 >
2024-07-19 17:48:39 +02:00
Romain Vimont
39132ff2dd
Make encode() method private
...
It is only used from AudioEncoder.
PR #5102 <https://github.com/Genymobile/scrcpy/pull/5102 >
2024-07-19 17:48:39 +02:00
Kaiming Hu
9d1d79b004
Fix "turn screen off" for Honor Android 14 devices
...
Fixes #4823 <https://github.com/Genymobile/scrcpy/issues/4823 >
PR #5109 <https://github.com/Genymobile/scrcpy/pull/5109 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2024-07-17 18:02:29 +02:00
Romain Vimont
e0cdc2ace3
Fix method name
...
The method indicates whether GetPhysicalDisplayIds() exists. The "Get"
was missing.
2024-07-17 18:02:26 +02:00
Romain Vimont
e84db2914d
Reorganize server packages
...
There are now a lot of classes in the server, reorganize them into
subpackages.
2024-07-11 22:38:00 +02:00
Romain Vimont
80ca7b15e5
Extract sources paths in build_without_gradle.sh
...
This avoids duplication, and will be useful to add more packages.
2024-07-11 22:34:58 +02:00
Romain Vimont
79242957a0
Add clipboard workaround for Honor device
...
Fixes #5073 <https://github.com/Genymobile/scrcpy/issues/5073 >
2024-07-11 12:21:38 +02:00
Romain Vimont
fe7494c492
Linearize try-catch blocks
...
There are many possible method signatures for getPrimaryClip() and
setPrimaryClip().
Avoid the nested try-catch blocks.
2024-07-11 12:19:47 +02:00
Romain Vimont
86b8286217
Remove unused virtual mouse
...
PR #5076 <https://github.com/Genymobile/scrcpy/pull/5076 >
2024-07-11 12:04:09 +02:00
Romain Vimont
b50f9eb41d
Add workaround for Skyworth devices
...
The vendor-modified ROM of Skyworth devices needs a valid app
info/context.
Fixes #4922 <https://github.com/Genymobile/scrcpy/issues/4922 >
2024-07-08 17:16:01 +02:00
Romain Vimont
89df38f641
Bump version to 2.5
2024-06-29 16:52:45 +02:00
wuderek
592ca0b59b
Try newer display API first
...
The old createDisplay() API has been removed from Android. Try the newer
API first, since more and more devices will use that version.
PR #5008 <https://github.com/Genymobile/scrcpy/pull/5008 >
2024-06-21 14:25:47 +02:00
wuderek
30e42af2d4
Add missing virtual display release()
...
PR #5008 <https://github.com/Genymobile/scrcpy/pull/5008 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2024-06-21 14:20:33 +02:00
Romain Vimont
09e8c20168
Rename streamScreen() to streamCapture()
...
The capture source may be either the screen or the camera.
2024-05-14 08:23:57 +02:00
Romain Vimont
bcb8503b26
Handle reported camera sizes array is null
...
The array of sizes may be null. Handle this case gracefully.
Fixes #4852 <https://github.com/Genymobile/scrcpy/issues/4852 >
2024-04-17 10:45:18 +02:00
Romain Vimont
bd8b945bb3
Register rotation watcher only when possible
...
Old Android versions may not be able to register a rotation watcher for
a secondary display. In that case, report the error instead of
registering a rotation watcher for the default display.
Refs <https://github.com/Genymobile/scrcpy/pull/4740#issuecomment-2051245633 >
Suggested by: Kaiming Hu <huxxx1234@gmail.com>
2024-04-12 17:22:45 +02:00
Kaiming Hu
a73bf932d6
Fix could not rotate secondary display
...
The version of the methods with the display id parameter must be tried
first, otherwise they will never be used (since the old versions without
the display id are still present).
Regression introduced by ee6620d123
.
Refs #4740 <https://github.com/Genymobile/scrcpy/pull/4740 >
PR #4841 <https://github.com/Genymobile/scrcpy/pull/4841 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2024-04-12 17:20:15 +02:00
Stepan Salenikovich
7011dd1ef0
Fix freeze and thaw rotation for Android 14
...
Changed since AOSP/framework_base commit
670fb7f5c0d23cf51ead25538bcb017e03ed73ac, included in tag
android-14.0.0_r29.
Refs <670fb7f5c0
%5E%21/>
PR #4740 <https://github.com/Genymobile/scrcpy/pull/4740 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2024-04-06 17:38:24 +02:00
Romain Vimont
ee6620d123
Refactor WindowManager methods
...
Select the available method to invoke the same way as in other wrappers
(using a version field).
Refs d894e270a7
Refs #4740 <https://github.com/Genymobile/scrcpy/pull/4740 >
2024-04-06 17:38:21 +02:00
Simon Chan
bf625790fa
Request limited color range by default
...
Most devices currently use limited color range, but some recent devices
encode in full color range, which is currently not supported by the SDL
opengl render driver.
Fixes #4756 <https://github.com/Genymobile/scrcpy/issues/4756 >
Refs <https://github.com/Genymobile/scrcpy/issues/4756#issuecomment-2003710860 >
Refs libusb/#9311 <https://github.com/libsdl-org/SDL/issues/9311 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2024-03-30 15:28:57 +01:00
Romain Vimont
af57309074
Bump version to 2.4
2024-03-02 23:22:09 +01:00
Romain Vimont
151a6225d4
Add shortcut to open keyboard settings
...
The keyboard settings can be opened by:
adb shell am start -a android.settings.HARD_KEYBOARD_SETTINGS
Add a shortcut (MOD+k) for convenience if the current keyboard is HID.
PR #4473 <https://github.com/Genymobile/scrcpy/pull/4473 >
2024-03-01 00:52:10 +01:00
Romain Vimont
54dede3630
Fix startActivity() for supporting API < 30
...
Call the older startActivityAsUser() instead of
startActivityAsUserWithFeature() so that it also works on older Android
versions.
Fixes #4704 <https://github.com/Genymobile/scrcpy/issues/4704 >
PR #4473 <https://github.com/Genymobile/scrcpy/pull/4473 >
2024-03-01 00:52:05 +01:00
Romain Vimont
f557188dc8
Create UhidManager only on first use
...
There is no need to create a UhidManager instance (with its thread) if
no UHID is used.
PR #4473 <https://github.com/Genymobile/scrcpy/pull/4473 >
2024-03-01 00:52:03 +01:00
Simon Chan
87da68ee0d
Handle UHID output
...
Use UHID output reports to synchronize CapsLock and VerrNum states.
PR #4473 <https://github.com/Genymobile/scrcpy/pull/4473 >
Co-authored-by: Romain Vimont <rom@rom1v.com>
Signed-off-by: Romain Vimont <rom@rom1v.com>
2024-03-01 00:52:00 +01:00
Romain Vimont
021c5d371a
Refactor DeviceMessageSender
...
Refactor DeviceMessage as a queue of message. This will allow to add
other message types.
PR #4473 <https://github.com/Genymobile/scrcpy/pull/4473 >
2024-03-01 00:51:57 +01:00
Simon Chan
840680f546
Add UHID keyboard support
...
Use the following command:
scrcpy --keyboard=uhid
PR #4473 <https://github.com/Genymobile/scrcpy/pull/4473 >
Co-authored-by: Romain Vimont <rom@rom1v.com>
Signed-off-by: Romain Vimont <rom@rom1v.com>
2024-03-01 00:51:54 +01:00
Romain Vimont
4d5b67cc80
Log controller handling errors
...
On close, the controller is expected to throw an IOException because the
socket is closed, so the exception was ignored.
However, message handling actions may also throw IOException, and they
must not be silently ignored.
PR #4473 <https://github.com/Genymobile/scrcpy/pull/4473 >
2024-03-01 00:51:52 +01:00
eiyooooo
d894e270a7
Add rotation support for non-default display
...
Use new methods introduced by this commit:
<90c9005e68
%5E%21/>
PR #4698 <https://github.com/Genymobile/scrcpy/pull/4698 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2024-02-26 20:26:56 +01:00
Romain Vimont
746eaea556
Add missing clipboard workaround for IQOO device
...
The first part of the workaround fixed getPrimaryClip(). This part fixes
setPrimaryClip().
Fixes #4703 <https://github.com/Genymobile/scrcpy/issues/4703 >
Refs 5ce8672ebc
Refs #4492 <https://github.com/Genymobile/scrcpy/issues/4492 >
2024-02-26 08:36:18 +01:00
Romain Vimont
25f1e703b7
Extract ControlChannel class
...
This prevents many components from depending on the whole
DesktopConnection.
2024-02-23 20:07:16 +01:00