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–75 unchanged (75 lines)
76 // If there is an Activity from Android shell running at foreground, then the permission system will believe scrcpy is also in the
77 // foreground.
78 Intent intent = new Intent(Intent.ACTION_MAIN);
79 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
80 intent.addCategory(Intent.CATEGORY_LAUNCHER);
81 intent.setComponent(new ComponentName(FakeContext.PACKAGE_NAME, "com.android.shell.HeapDumpActivity"));
82 ServiceManager.getActivityManager().startActivityAsUserWithFeature(intent);
83 }
84
85 private static void stopWorkaroundAndroid11() {
86 ServiceManager.getActivityManager().forceStopPackage(FakeContext.PACKAGE_NAME);
87 }
88
…lines 89–180 unchanged (92 lines)

After

…lines 1–75 unchanged (75 lines)
76 // If there is an Activity from Android shell running at foreground, then the permission system will believe scrcpy is also in the
77 // foreground.
78 Intent intent = new Intent(Intent.ACTION_MAIN);
79 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
80 intent.addCategory(Intent.CATEGORY_LAUNCHER);
81 intent.setComponent(new ComponentName(FakeContext.PACKAGE_NAME, "com.android.shell.HeapDumpActivity"));
82 ServiceManager.getActivityManager().startActivity(intent);
83 }
84
85 private static void stopWorkaroundAndroid11() {
86 ServiceManager.getActivityManager().forceStopPackage(FakeContext.PACKAGE_NAME);
87 }
88
…lines 89–180 unchanged (92 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 "wrappers"
. "."
identifier "ServiceManager"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "annotation"
. "."
identifier "SuppressLint"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "annotation"
. "."
identifier "TargetApi"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "content"
. "."
identifier "ComponentName"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "content"
. "."
identifier "Intent"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "media"
. "."
identifier "AudioFormat"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "media"
. "."
identifier "AudioRecord"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "media"
. "."
identifier "AudioTimestamp"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "media"
. "."
identifier "MediaCodec"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "os"
. "."
identifier "Build"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "os"
. "."
identifier "SystemClock"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "nio"
. "."
identifier "ByteBuffer"
; ";"
class_declaration
modifiers
public "public"
final "final"
class "class"
identifier "AudioCapture"
class_body
{ "{"
field_declaration
modifiers
public "public"
static "static"
final "final"
integral_type
int "int"
variable_declarator
identifier "SAMPLE_RATE"
= "="
decimal_integer_literal "48000"
; ";"
field_declaration
modifiers
public "public"
static "static"
final "final"
integral_type
int "int"
variable_declarator
identifier "CHANNEL_CONFIG"
= "="
field_access
identifier "AudioFormat"
. "."
identifier "CHANNEL_IN_STEREO"
; ";"
field_declaration
modifiers
public "public"
static "static"
final "final"
integral_type
int "int"
variable_declarator
identifier "CHANNELS"
= "="
decimal_integer_literal "2"
; ";"
field_declaration (+21 nodes collapsed)
field_declaration
modifiers
public "public"
static "static"
final "final"
integral_type
int "int"
variable_declarator
identifier "ENCODING"
= "="
field_access
identifier "AudioFormat"
. "."
identifier "ENCODING_PCM_16BIT"
; ";"
field_declaration
modifiers
public "public"
static "static"
final "final"
integral_type
int "int"
variable_declarator
identifier "BYTES_PER_SAMPLE"
= "="
decimal_integer_literal "2"
; ";"
line_comment "// Never read more than 1024 samples, even if the buffer is "...
line_comment "// A lower value is useless, since the system captures audio"...
line_comment "// receive 4 successive blocks without waiting, then we wait"...
field_declaration
modifiers
public "public"
static "static"
final "final"
integral_type
int "int"
variable_declarator
identifier "MAX_READ_SIZE"
= "="
binary_expression
binary_expression
decimal_integer_literal "1024"
* "*"
identifier "CHANNELS"
* "*"
identifier "BYTES_PER_SAMPLE"
; ";"
field_declaration (+24 nodes collapsed)
line_comment "// 1 sample in microseconds (used for fixing PTS)"
field_declaration
modifiers
private "private"
final "final"
integral_type
int "int"
variable_declarator
identifier "audioSource"
; ";"
field_declaration
modifiers
private "private"
type_identifier "AudioRecord"
variable_declarator
identifier "recorder"
; ";"
field_declaration
modifiers
private "private"
final "final"
type_identifier "AudioTimestamp"
variable_declarator
identifier "timestamp"
= "="
object_creation_expression
new "new"
type_identifier "AudioTimestamp"
argument_list
( "("
) ")"
; ";"
field_declaration
modifiers
private "private"
integral_type
long "long"
variable_declarator
identifier "previousRecorderTimestamp"
= "="
unary_expression
- "-"
decimal_integer_literal "1"
; ";"
field_declaration
modifiers
private "private"
integral_type
long "long"
variable_declarator
identifier "previousPts"
= "="
decimal_integer_literal "0"
; ";"
field_declaration
modifiers
private "private"
integral_type
long "long"
variable_declarator
identifier "nextPts"
= "="
decimal_integer_literal "0"
; ";"
constructor_declaration (+28 nodes collapsed)
method_declaration (+70 nodes collapsed)
method_declaration (+173 nodes collapsed)
method_declaration
modifiers
private "private"
static "static"
void_type "void"
identifier "startWorkaroundAndroid11"
formal_parameters
( "("
) ")"
block
{ "{"
line_comment "// Android 11 requires Apps to be at foreground to record au"...
line_comment "// Normally, each App has its own user ID, so Android checks"...
line_comment "// But scrcpy server is NOT an App, it's a Java application "...
line_comment "// shell (\"com.android.shell\")."
line_comment "// If there is an Activity from Android shell running at for"...
line_comment "// foreground."
local_variable_declaration
type_identifier "Intent"
variable_declarator
identifier "intent"
= "="
object_creation_expression
new "new"
type_identifier "Intent"
argument_list
( "("
field_access
identifier "Intent"
. "."
identifier "ACTION_MAIN"
) ")"
; ";"
expression_statement
method_invocation
identifier "intent"
. "."
identifier "addFlags"
argument_list
( "("
field_access
identifier "Intent"
. "."
identifier "FLAG_ACTIVITY_NEW_TASK"
) ")"
; ";"
expression_statement
method_invocation
identifier "intent"
. "."
identifier "addCategory"
argument_list
( "("
field_access
identifier "Intent"
. "."
identifier "CATEGORY_LAUNCHER"
) ")"
; ";"
expression_statement (+24 nodes collapsed)
expression_statement
method_invocation
method_invocation
identifier "ServiceManager"
. "."
identifier "getActivityManager"
argument_list
( "("
) ")"
. "."
identifier "startActivityAsUserWithFeature"
argument_list
( "("
identifier "intent"
) ")"
; ";"
} "}"
method_declaration (+31 nodes collapsed)
method_declaration (+145 nodes collapsed)
method_declaration (+73 nodes collapsed)
method_declaration (+83 nodes collapsed)
method_declaration (+33 nodes collapsed)
method_declaration (+283 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 "wrappers"
. "."
identifier "ServiceManager"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "annotation"
. "."
identifier "SuppressLint"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "annotation"
. "."
identifier "TargetApi"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "content"
. "."
identifier "ComponentName"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "content"
. "."
identifier "Intent"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "media"
. "."
identifier "AudioFormat"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "media"
. "."
identifier "AudioRecord"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "media"
. "."
identifier "AudioTimestamp"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "media"
. "."
identifier "MediaCodec"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "os"
. "."
identifier "Build"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "android"
. "."
identifier "os"
. "."
identifier "SystemClock"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "nio"
. "."
identifier "ByteBuffer"
; ";"
class_declaration
modifiers
public "public"
final "final"
class "class"
identifier "AudioCapture"
class_body
{ "{"
field_declaration
modifiers
public "public"
static "static"
final "final"
integral_type
int "int"
variable_declarator
identifier "SAMPLE_RATE"
= "="
decimal_integer_literal "48000"
; ";"
field_declaration
modifiers
public "public"
static "static"
final "final"
integral_type
int "int"
variable_declarator
identifier "CHANNEL_CONFIG"
= "="
field_access
identifier "AudioFormat"
. "."
identifier "CHANNEL_IN_STEREO"
; ";"
field_declaration
modifiers
public "public"
static "static"
final "final"
integral_type
int "int"
variable_declarator
identifier "CHANNELS"
= "="
decimal_integer_literal "2"
; ";"
field_declaration (+21 nodes collapsed)
field_declaration
modifiers
public "public"
static "static"
final "final"
integral_type
int "int"
variable_declarator
identifier "ENCODING"
= "="
field_access
identifier "AudioFormat"
. "."
identifier "ENCODING_PCM_16BIT"
; ";"
field_declaration
modifiers
public "public"
static "static"
final "final"
integral_type
int "int"
variable_declarator
identifier "BYTES_PER_SAMPLE"
= "="
decimal_integer_literal "2"
; ";"
line_comment "// Never read more than 1024 samples, even if the buffer is "...
line_comment "// A lower value is useless, since the system captures audio"...
line_comment "// receive 4 successive blocks without waiting, then we wait"...
field_declaration
modifiers
public "public"
static "static"
final "final"
integral_type
int "int"
variable_declarator
identifier "MAX_READ_SIZE"
= "="
binary_expression
binary_expression
decimal_integer_literal "1024"
* "*"
identifier "CHANNELS"
* "*"
identifier "BYTES_PER_SAMPLE"
; ";"
field_declaration (+24 nodes collapsed)
line_comment "// 1 sample in microseconds (used for fixing PTS)"
field_declaration
modifiers
private "private"
final "final"
integral_type
int "int"
variable_declarator
identifier "audioSource"
; ";"
field_declaration
modifiers
private "private"
type_identifier "AudioRecord"
variable_declarator
identifier "recorder"
; ";"
field_declaration
modifiers
private "private"
final "final"
type_identifier "AudioTimestamp"
variable_declarator
identifier "timestamp"
= "="
object_creation_expression
new "new"
type_identifier "AudioTimestamp"
argument_list
( "("
) ")"
; ";"
field_declaration
modifiers
private "private"
integral_type
long "long"
variable_declarator
identifier "previousRecorderTimestamp"
= "="
unary_expression
- "-"
decimal_integer_literal "1"
; ";"
field_declaration
modifiers
private "private"
integral_type
long "long"
variable_declarator
identifier "previousPts"
= "="
decimal_integer_literal "0"
; ";"
field_declaration
modifiers
private "private"
integral_type
long "long"
variable_declarator
identifier "nextPts"
= "="
decimal_integer_literal "0"
; ";"
constructor_declaration (+28 nodes collapsed)
method_declaration (+70 nodes collapsed)
method_declaration (+173 nodes collapsed)
method_declaration
modifiers
private "private"
static "static"
void_type "void"
identifier "startWorkaroundAndroid11"
formal_parameters
( "("
) ")"
block
{ "{"
line_comment "// Android 11 requires Apps to be at foreground to record au"...
line_comment "// Normally, each App has its own user ID, so Android checks"...
line_comment "// But scrcpy server is NOT an App, it's a Java application "...
line_comment "// shell (\"com.android.shell\")."
line_comment "// If there is an Activity from Android shell running at for"...
line_comment "// foreground."
local_variable_declaration
type_identifier "Intent"
variable_declarator
identifier "intent"
= "="
object_creation_expression
new "new"
type_identifier "Intent"
argument_list
( "("
field_access
identifier "Intent"
. "."
identifier "ACTION_MAIN"
) ")"
; ";"
expression_statement
method_invocation
identifier "intent"
. "."
identifier "addFlags"
argument_list
( "("
field_access
identifier "Intent"
. "."
identifier "FLAG_ACTIVITY_NEW_TASK"
) ")"
; ";"
expression_statement
method_invocation
identifier "intent"
. "."
identifier "addCategory"
argument_list
( "("
field_access
identifier "Intent"
. "."
identifier "CATEGORY_LAUNCHER"
) ")"
; ";"
expression_statement (+24 nodes collapsed)
expression_statement
method_invocation
method_invocation
identifier "ServiceManager"
. "."
identifier "getActivityManager"
argument_list
( "("
) ")"
. "."
identifier "startActivity"
argument_list
( "("
identifier "intent"
) ")"
; ";"
} "}"
method_declaration (+31 nodes collapsed)
method_declaration (+145 nodes collapsed)
method_declaration (+73 nodes collapsed)
method_declaration (+83 nodes collapsed)
method_declaration (+33 nodes collapsed)
method_declaration (+283 nodes collapsed)
} "}"