Code view:

A painting is a person's account of this edit as text, recorded independently of the node mapping - a rendering often has several equally defensible answers where the mapping has one. Deletions and insertions carry no position on the opposite side in a painting, so that panel draws no caret for them.

Before

…lines 1–122 unchanged (122 lines)
123
124 private static void scrcpy(Options options) throws IOException, ConfigurationException {
125 if (Build.VERSION.SDK_INT < AndroidVersions.API_31_ANDROID_12 && options.getVideoSource() == VideoSource.CAMERA) {
126 Ln.e("Camera mirroring is not supported before Android 12");
127 throw new ConfigurationException("Camera mirroring is not supported");
128 }
129
130 CleanUp cleanUp = null;
131 Thread initThread = null;
132
133 NewDisplay newDisplay = options.getNewDisplay();
134 int displayId = newDisplay == null ? options.getDisplayId() : Device.DISPLAY_ID_NONE;
135
…lines 136–301 unchanged (166 lines)

After

…lines 1–123 unchanged (123 lines)
124 private static void scrcpy(Options options) throws IOException, ConfigurationException {
125 if (Build.VERSION.SDK_INT < AndroidVersions.API_31_ANDROID_12 && options.getVideoSource() == VideoSource.CAMERA) {
126 Ln.e("Camera mirroring is not supported before Android 12");
127 throw new ConfigurationException("Camera mirroring is not supported");
128 }
129
130 if (Build.VERSION.SDK_INT < AndroidVersions.API_29_ANDROID_10 && options.getNewDisplay() != null) {
131 Ln.e("New virtual display is not supported before Android 10");
132 throw new ConfigurationException("New virtual display is not supported");
133 }
134
135 CleanUp cleanUp = null;
136 Thread initThread = null;
137
138 NewDisplay newDisplay = options.getNewDisplay();
139 int displayId = newDisplay == null ? options.getDisplayId() : Device.DISPLAY_ID_NONE;
…lines 140–306 unchanged (167 lines)

Before

program
package_declaration
package "package"
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "audio"
. "."
identifier "AudioCapture"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "audio"
. "."
identifier "AudioCodec"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "audio"
. "."
identifier "AudioDirectCapture"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "audio"
. "."
identifier "AudioEncoder"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "audio"
. "."
identifier "AudioPlaybackCapture"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "audio"
. "."
identifier "AudioRawRecorder"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "audio"
. "."
identifier "AudioSource"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "control"
. "."
identifier "ControlChannel"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "control"
. "."
identifier "Controller"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "device"
. "."
identifier "ConfigurationException"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "device"
. "."
identifier "DesktopConnection"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "device"
. "."
identifier "Device"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "device"
. "."
identifier "NewDisplay"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "device"
. "."
identifier "Streamer"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "util"
. "."
identifier "Ln"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "util"
. "."
identifier "LogUtils"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "util"
. "."
identifier "Settings"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "util"
. "."
identifier "SettingsException"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "video"
. "."
identifier "CameraCapture"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "video"
. "."
identifier "NewDisplayCapture"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "video"
. "."
identifier "ScreenCapture"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "video"
. "."
identifier "SurfaceCapture"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "video"
. "."
identifier "SurfaceEncoder"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "video"
. "."
identifier "VideoSource"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "os"
. "."
identifier "BatteryManager"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "os"
. "."
identifier "Build"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "io"
. "."
identifier "File"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "io"
. "."
identifier "IOException"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "ArrayList"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "List"
; ";"
class_declaration
modifiers
public "public"
final "final"
class "class"
identifier "Server"
class_body
{ "{"
field_declaration
modifiers
public "public"
static "static"
final "final"
type_identifier "String"
variable_declarator
identifier "SERVER_PATH"
; ";"
static_initializer (+47 nodes collapsed)
class_declaration (+159 nodes collapsed)
constructor_declaration
modifiers
private "private"
identifier "Server"
formal_parameters
( "("
) ")"
constructor_body
{ "{"
line_comment "// not instantiable"
} "}"
method_declaration (+375 nodes collapsed)
method_declaration
modifiers
private "private"
static "static"
void_type "void"
identifier "scrcpy"
formal_parameters
( "("
formal_parameter
type_identifier "Options"
identifier "options"
) ")"
throws
throws "throws"
type_identifier "IOException"
, ","
type_identifier "ConfigurationException"
block
{ "{"
if_statement (+62 nodes collapsed)
local_variable_declaration
type_identifier "CleanUp"
variable_declarator
identifier "cleanUp"
= "="
null_literal "null"
; ";"
local_variable_declaration
type_identifier "Thread"
variable_declarator
identifier "initThread"
= "="
null_literal "null"
; ";"
local_variable_declaration
type_identifier "NewDisplay"
variable_declarator
identifier "newDisplay"
= "="
method_invocation
identifier "options"
. "."
identifier "getNewDisplay"
argument_list
( "("
) ")"
; ";"
local_variable_declaration (+25 nodes collapsed)
if_statement (+41 nodes collapsed)
local_variable_declaration
integral_type
int "int"
variable_declarator
identifier "scid"
= "="
method_invocation
identifier "options"
. "."
identifier "getScid"
argument_list
( "("
) ")"
; ";"
local_variable_declaration
boolean_type "boolean"
variable_declarator
identifier "tunnelForward"
= "="
method_invocation
identifier "options"
. "."
identifier "isTunnelForward"
argument_list
( "("
) ")"
; ";"
local_variable_declaration
boolean_type "boolean"
variable_declarator
identifier "control"
= "="
method_invocation
identifier "options"
. "."
identifier "getControl"
argument_list
( "("
) ")"
; ";"
local_variable_declaration
boolean_type "boolean"
variable_declarator
identifier "video"
= "="
method_invocation
identifier "options"
. "."
identifier "getVideo"
argument_list
( "("
) ")"
; ";"
local_variable_declaration
boolean_type "boolean"
variable_declarator
identifier "audio"
= "="
method_invocation
identifier "options"
. "."
identifier "getAudio"
argument_list
( "("
) ")"
; ";"
local_variable_declaration
boolean_type "boolean"
variable_declarator
identifier "sendDummyByte"
= "="
method_invocation
identifier "options"
. "."
identifier "getSendDummyByte"
argument_list
( "("
) ")"
; ";"
expression_statement
method_invocation
identifier "Workarounds"
. "."
identifier "apply"
argument_list
( "("
) ")"
; ";"
local_variable_declaration (+21 nodes collapsed)
local_variable_declaration (+24 nodes collapsed)
try_statement (+807 nodes collapsed)
} "}"
method_declaration (+66 nodes collapsed)
method_declaration (+91 nodes collapsed)
method_declaration (+363 nodes collapsed)
} "}"

After

program
package_declaration
package "package"
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "audio"
. "."
identifier "AudioCapture"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "audio"
. "."
identifier "AudioCodec"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "audio"
. "."
identifier "AudioDirectCapture"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "audio"
. "."
identifier "AudioEncoder"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "audio"
. "."
identifier "AudioPlaybackCapture"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "audio"
. "."
identifier "AudioRawRecorder"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "audio"
. "."
identifier "AudioSource"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "control"
. "."
identifier "ControlChannel"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "control"
. "."
identifier "Controller"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "device"
. "."
identifier "ConfigurationException"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "device"
. "."
identifier "DesktopConnection"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "device"
. "."
identifier "Device"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "device"
. "."
identifier "NewDisplay"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "device"
. "."
identifier "Streamer"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "util"
. "."
identifier "Ln"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "util"
. "."
identifier "LogUtils"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "util"
. "."
identifier "Settings"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "util"
. "."
identifier "SettingsException"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "video"
. "."
identifier "CameraCapture"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "video"
. "."
identifier "NewDisplayCapture"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "video"
. "."
identifier "ScreenCapture"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "video"
. "."
identifier "SurfaceCapture"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "video"
. "."
identifier "SurfaceEncoder"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
. "."
identifier "video"
. "."
identifier "VideoSource"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "os"
. "."
identifier "BatteryManager"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "os"
. "."
identifier "Build"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "io"
. "."
identifier "File"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "io"
. "."
identifier "IOException"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "ArrayList"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "List"
; ";"
class_declaration
modifiers
public "public"
final "final"
class "class"
identifier "Server"
class_body
{ "{"
field_declaration
modifiers
public "public"
static "static"
final "final"
type_identifier "String"
variable_declarator
identifier "SERVER_PATH"
; ";"
static_initializer (+47 nodes collapsed)
class_declaration (+159 nodes collapsed)
constructor_declaration
modifiers
private "private"
identifier "Server"
formal_parameters
( "("
) ")"
constructor_body
{ "{"
line_comment "// not instantiable"
} "}"
method_declaration (+375 nodes collapsed)
method_declaration
modifiers
private "private"
static "static"
void_type "void"
identifier "scrcpy"
formal_parameters
( "("
formal_parameter
type_identifier "Options"
identifier "options"
) ")"
throws
throws "throws"
type_identifier "IOException"
, ","
type_identifier "ConfigurationException"
block
{ "{"
if_statement (+62 nodes collapsed)
if_statement
if "if"
parenthesized_expression
( "("
binary_expression
binary_expression
field_access
field_access
identifier "Build"
. "."
identifier "VERSION"
. "."
identifier "SDK_INT"
< "<"
field_access
identifier "AndroidVersions"
. "."
identifier "API_29_ANDROID_10"
&& "&&"
binary_expression
method_invocation
identifier "options"
. "."
identifier "getNewDisplay"
argument_list
( "("
) ")"
!= "!="
null_literal "null"
) ")"
block
{ "{"
expression_statement
method_invocation
identifier "Ln"
. "."
identifier "e"
argument_list
( "("
string_literal
" "\""
string_fragment "New virtual display is not supported before Android 10"
" "\""
) ")"
; ";"
throw_statement
throw "throw"
object_creation_expression
new "new"
type_identifier "ConfigurationException"
argument_list
( "("
string_literal
" "\""
string_fragment "New virtual display is not supported"
" "\""
) ")"
; ";"
} "}"
local_variable_declaration
type_identifier "CleanUp"
variable_declarator
identifier "cleanUp"
= "="
null_literal "null"
; ";"
local_variable_declaration
type_identifier "Thread"
variable_declarator
identifier "initThread"
= "="
null_literal "null"
; ";"
local_variable_declaration
type_identifier "NewDisplay"
variable_declarator
identifier "newDisplay"
= "="
method_invocation
identifier "options"
. "."
identifier "getNewDisplay"
argument_list
( "("
) ")"
; ";"
local_variable_declaration (+25 nodes collapsed)
if_statement (+41 nodes collapsed)
local_variable_declaration
integral_type
int "int"
variable_declarator
identifier "scid"
= "="
method_invocation
identifier "options"
. "."
identifier "getScid"
argument_list
( "("
) ")"
; ";"
local_variable_declaration
boolean_type "boolean"
variable_declarator
identifier "tunnelForward"
= "="
method_invocation
identifier "options"
. "."
identifier "isTunnelForward"
argument_list
( "("
) ")"
; ";"
local_variable_declaration
boolean_type "boolean"
variable_declarator
identifier "control"
= "="
method_invocation
identifier "options"
. "."
identifier "getControl"
argument_list
( "("
) ")"
; ";"
local_variable_declaration
boolean_type "boolean"
variable_declarator
identifier "video"
= "="
method_invocation
identifier "options"
. "."
identifier "getVideo"
argument_list
( "("
) ")"
; ";"
local_variable_declaration
boolean_type "boolean"
variable_declarator
identifier "audio"
= "="
method_invocation
identifier "options"
. "."
identifier "getAudio"
argument_list
( "("
) ")"
; ";"
local_variable_declaration
boolean_type "boolean"
variable_declarator
identifier "sendDummyByte"
= "="
method_invocation
identifier "options"
. "."
identifier "getSendDummyByte"
argument_list
( "("
) ")"
; ";"
expression_statement
method_invocation
identifier "Workarounds"
. "."
identifier "apply"
argument_list
( "("
) ")"
; ";"
local_variable_declaration (+21 nodes collapsed)
local_variable_declaration (+24 nodes collapsed)
try_statement (+807 nodes collapsed)
} "}"
method_declaration (+66 nodes collapsed)
method_declaration (+91 nodes collapsed)
method_declaration (+363 nodes collapsed)
} "}"