From 696c3ce3e44fed34ee490bed6391ac476347b9b2 Mon Sep 17 00:00:00 2001 From: Tomas Date: Wed, 23 Sep 2026 15:40:11 +0300 Subject: [PATCH 01/19] Add the on-device screen streaming server A small Java server, built with Gradle into a dex jar and pushed to the device, that mirrors a display into an ImageReader, encodes each frame as JPEG and writes it to an abstract unix socket. It also reads control messages back up the same socket and injects touch, scroll, key and text events. The jar is a build output and is not committed. Co-Authored-By: Claude Opus 5 --- External/UnityLogcatServer/.gitignore | 3 + External/UnityLogcatServer/README.md | 309 +++++++++++++ External/UnityLogcatServer/build.gradle | 283 ++++++++++++ External/UnityLogcatServer/gradle.properties | 22 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 58694 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + External/UnityLogcatServer/gradlew | 183 ++++++++ External/UnityLogcatServer/gradlew.bat | 103 +++++ External/UnityLogcatServer/settings.gradle | 1 + .../android/logcat/server/ControlReader.java | 198 +++++++++ .../android/logcat/server/DisplayInfo.java | 50 +++ .../android/logcat/server/KeyInjector.java | 95 ++++ .../unity/android/logcat/server/Logger.java | 94 ++++ .../unity/android/logcat/server/Options.java | 135 ++++++ .../unity/android/logcat/server/Protocol.java | 78 ++++ .../android/logcat/server/ScreenStreamer.java | 416 ++++++++++++++++++ .../android/logcat/server/ScrollInjector.java | 81 ++++ .../unity/android/logcat/server/Server.java | 229 ++++++++++ .../com/unity/android/logcat/server/Size.java | 98 +++++ .../android/logcat/server/TouchInjector.java | 115 +++++ .../wrappers/DisplayManagerWrapper.java | 81 ++++ .../server/wrappers/InputManagerWrapper.java | 149 +++++++ .../wrappers/SurfaceControlWrapper.java | 64 +++ 23 files changed, 2794 insertions(+) create mode 100644 External/UnityLogcatServer/.gitignore create mode 100644 External/UnityLogcatServer/README.md create mode 100644 External/UnityLogcatServer/build.gradle create mode 100644 External/UnityLogcatServer/gradle.properties create mode 100644 External/UnityLogcatServer/gradle/wrapper/gradle-wrapper.jar create mode 100644 External/UnityLogcatServer/gradle/wrapper/gradle-wrapper.properties create mode 100755 External/UnityLogcatServer/gradlew create mode 100644 External/UnityLogcatServer/gradlew.bat create mode 100644 External/UnityLogcatServer/settings.gradle create mode 100644 External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/ControlReader.java create mode 100644 External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/DisplayInfo.java create mode 100644 External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/KeyInjector.java create mode 100644 External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/Logger.java create mode 100644 External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/Options.java create mode 100644 External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/Protocol.java create mode 100644 External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/ScreenStreamer.java create mode 100644 External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/ScrollInjector.java create mode 100644 External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/Server.java create mode 100644 External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/Size.java create mode 100644 External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/TouchInjector.java create mode 100644 External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/wrappers/DisplayManagerWrapper.java create mode 100644 External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/wrappers/InputManagerWrapper.java create mode 100644 External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/wrappers/SurfaceControlWrapper.java diff --git a/External/UnityLogcatServer/.gitignore b/External/UnityLogcatServer/.gitignore new file mode 100644 index 00000000..56e87749 --- /dev/null +++ b/External/UnityLogcatServer/.gitignore @@ -0,0 +1,3 @@ +build/ +.gradle/ +local.properties diff --git a/External/UnityLogcatServer/README.md b/External/UnityLogcatServer/README.md new file mode 100644 index 00000000..d09afa61 --- /dev/null +++ b/External/UnityLogcatServer/README.md @@ -0,0 +1,309 @@ +# UnityLogcatServer + +On-device server for the Android Logcat package's live screen streaming. It +mirrors a device display, encodes each frame as JPEG and writes the frames to a +socket that the Unity Editor reads. The same socket carries touch and key events back +the other way, so the live view is interactive. + +This is not an Android application. It has no manifest, no resources and no +activity - it is a dexed jar started by `app_process`, running as the `shell` +user, which is what lets it call the hidden display-mirroring APIs, and hold the +`INJECT_EVENTS` permission, that a normal app cannot. + +## Building + +Requires a JDK 17+ and an Android SDK with `platforms/android-36` and +`build-tools/36.0.0`. A Unity installation with Android support ships both. + +Point the build at the SDK with any one of: + +* `local.properties` in this directory, containing `sdk.dir=` (gitignored) +* the `ANDROID_HOME` environment variable +* the `ANDROID_SDK_ROOT` environment variable + +Then: + +```sh +./gradlew dexJar +``` + +which produces `build/outputs/unity-logcat-server.jar` and then copies it to +`com.unity.mobile.android-logcat/External~/unity-logcat-server.jar`, which is the +copy the package ships and the Editor pushes to the device. + +That copy step (`copyJarToPackage`) hangs off `dexJar`, so every route that +produces the jar - `dexJar`, `assemble`, `pushJar`, `runJar` - refreshes it, and +the two cannot silently drift apart. Deleting the copy is enough to make the next +build put it back, even when nothing else needs rebuilding. + +It copies the file itself instead of using a `Copy` task, because Gradle creates a +`Copy` task's destination directory before any task action runs - so a guard +against writing to the wrong place could never see it missing. The step instead +checks for the package's `package.json`, which is both a stronger check (it +confirms the destination really is this package) and something Gradle cannot +create on our behalf. If the project is ever moved relative to the package the +build fails naming the expected layout, though Gradle will already have created an +empty `External~` on its way to that failure. + +`External~` is named with a trailing `~` so that Unity ships the folder in the +package but does not import its contents as assets: the jar needs no `.meta` file +and never enters the AssetDatabase. The Editor reads it straight off disk. + +**The copy is a build output and is not committed.** The root `.gitignore` excludes +`com.unity.mobile.android-logcat/External~/unity-logcat-server.jar`; CI builds it +on demand before the package is published. The `External~` folder therefore does +not exist in a fresh checkout - the copy step creates it. Only the jar itself is +ignored, not the folder, so anything else put there later stays visible to git. + +The build uses the plain `java-library` plugin plus an explicit `d8` step rather +than the Android Gradle Plugin. AGP would produce an APK that then has to be +renamed, needs network access to the `google()` repository and pulls in a large +dependency tree - none of which this project has any use for. + +Sources are compiled with `android.jar` replacing the JDK bootclasspath, so +reaching for a desktop-only API is a compile error rather than a crash on the +device. + +## Running it by hand + +`./gradlew runJar` pushes the jar and runs it in the foreground. Or, spelled out: + +```sh +adb push build/outputs/unity-logcat-server.jar /data/local/tmp/ +adb shell CLASSPATH=/data/local/tmp/unity-logcat-server.jar \ + app_process / com.unity.android.logcat.server.Server log_level=debug + +# from another shell +adb forward tcp:27183 localabstract:unity_logcat_server +``` + +and then read frames from `127.0.0.1:27183`. + +Options are `key=value` pairs; `Server.USAGE` lists them: + +| Option | Default | Meaning | +| --- | --- | --- | +| `socket_name` | `unity_logcat_server` | abstract unix socket to listen on | +| `display_id` | `0` | display to capture | +| `max_size` | `1024` | longest side of the stream in pixels, 0 for native | +| `quality` | `70` | JPEG quality, 1..100 | +| `max_fps` | `30` | frame rate cap | +| `connect_timeout_ms` | `10000` | how long to wait for the Editor, 0 waits forever | +| `log_level` | `info` | `verbose`, `debug`, `info`, `warn`, `error` | + +Log output goes to both logcat (tag `UnityLogcatServer`) and stderr, so the +Editor can surface a startup failure from the `adb shell` process it spawned. + +## Lifecycle + +The server handles exactly one client and then exits. There is no daemon, nothing +is left listening between sessions, and a second live-stream session is a second +process. + +### Startup + +1. The Editor pushes the jar to `/data/local/tmp/` and spawns + `adb shell CLASSPATH= app_process / com.unity.android.logcat.server.Server `. + The process runs as the `shell` user, which is what makes the hidden + display-mirroring APIs callable. +2. `Server.main` parses the options and sets the log level. Bad options exit + immediately with the usage text. +3. `DisplayManagerGlobal` is resolved by reflection. If that class is missing the + server fails here, before it has claimed anything. +4. A `LocalServerSocket` is opened on `socket_name` and `Listening on + localabstract:` is logged. Nothing is captured yet - the display is only + mirrored once a client is actually there. +5. The Editor runs `adb forward tcp: localabstract:` and connects. + `adb forward` only succeeds once the socket exists, so the Editor may have to + retry: the server is spawned first, but there is no ordering guarantee between + two separate adb invocations. +6. Input injection is set up. Touch and keys share one input manager, so they are + available together or not at all. A failure here is not fatal: it is reported in + the header flags and the session continues as view-only. +7. On `accept()`, the 20-byte stream header is written straight away. That header + is what tells the Editor it has reached a real server of a protocol version it + understands, rather than a forwarded port that merely happens to connect. +8. The control reader thread starts, and the capture session with it: a + `HandlerThread`, an `ImageReader`, and a mirrored display pointed at the + reader's surface. Frames flow from the capture thread; the main thread re-reads + the display geometry every 500 ms and restarts the session if it changed. + +### Shutdown + +Every path ends in an explicit `System.exit`. `app_process` will not exit on its +own while a `Looper` or a non-daemon thread is alive, and the Editor is waiting +for its `adb shell` to return. + +| Trigger | How it is noticed | Exit code | +| --- | --- | --- | +| Editor closes the connection, its process dies, or the forward is removed | the capture thread's write fails, or the control reader reads EOF | 0 | +| No client connects within `connect_timeout_ms` (default 10 s) | a watchdog thread exits the process out from under the blocked `accept()` | 1 | +| The captured display disappears | the geometry poll gets no `DisplayInfo` | 0 | +| Neither mirroring API works | `startSession` throws | 1 | +| Invalid options | `Options.parse` throws | 2 | +| Anything unexpected | caught in `main` and logged with a stack trace | 1 | + +Three details matter for a clean stop: + +* **The accept timeout exits the process rather than closing the socket.** Closing + the server socket from the watchdog thread would look like the tidier option, but + on Linux closing a file descriptor does not interrupt an `accept()` that another + thread is already parked on - the server would stay wedged forever, which is the + exact orphan the timeout exists to prevent. At that point nothing has been claimed + that needs unwinding, so exiting is both simpler and the only thing that works. + +* **The control reader doubles as the disconnect detector, because writes alone are + not enough.** On a screen that has stopped changing no frames are produced, so + there is no write to fail: a departed client would go unnoticed and the server + would sit there mirroring a display nobody is reading. The reader treats EOF as + the end of the session. +* **The socket is closed before the streamer.** Closing it first unblocks a capture + thread parked in a write, so teardown does not have to wait for it. Teardown then + releases the mirrored display, closes the `ImageReader`, joins the capture thread + (2 s cap) and recycles the reusable bitmaps. + +### If the server is killed outright + +Killing the `adb shell`, or the process on the device, skips all of the above and +leaks nothing that survives: the mirrored display and the `ImageReader` belong to +the process, and the abstract socket name disappears with it. Only the pushed jar +remains on disk, which is inert. The Editor pushes each session's jar under a name +of its own and deletes it when the stream stops, so what a kill leaves behind is +one file that the next stream sweeps up. + +A stale server from a previous session is therefore only a problem if it is still +*running* - it would own the socket name. Passing a per-session unique +`socket_name` avoids the collision entirely, and `connect_timeout_ms` bounds how +long an orphan can linger before it gives up on its own. + +Deleting a jar out from under a server that is still running it is safe, which is +what lets the Editor sweep: the runtime keeps the file it opened, so an unlink only +removes the name. That was measured on Android 16 and Android 8.1, not assumed. + +## Wire protocol + +All integers big endian. See `Protocol.java`. + +Server to Editor: + +``` +Stream header, once, 20 bytes: + u32 magic 'U' 'L' 'S' '1' (0x554C5331) + u32 protocolVersion see serverProtocolVersion in gradle.properties + u32 codec 1 = MJPEG + u32 flags bit 0: the server can inject input + u32 serverPid this process on the device, so the Editor can name it + +Frame, repeated, 28 byte header + payload: + u64 ptsUs microseconds since the first frame + u32 width pixels of the streamed image + u32 height pixels of the streamed image + u32 displayWidth pixels of the display it was captured from + u32 displayHeight pixels of the display it was captured from + u32 payloadSize bytes of encoded frame that follow + u8[] payload JPEG +``` + +The sizes are in every frame because they change - on a rotation, on a foldable +being opened, or on `wm size` being overridden - and the server starts a new +capture session for the new geometry without announcing it on the socket. The +display size rides along so that the Editor can say what the stream is scaling +down from without asking adb, and without the two numbers being able to disagree. + +Editor to server, on the same socket (see `ControlReader.java`): + +``` +Touch, 9 bytes: + u8 type 1 = touch + u8 action 0 down, 1 up, 2 move, 3 cancel + u8 pointerId 0 based, one finger per id + u16 x position across the display, 0..65535 + u16 y position down the display, 0..65535 + u16 pressure 0..65535 + +Key, 10 bytes: + u8 type 2 = key + u8 action 0 down, 1 up + u32 keyCode Android KeyEvent.KEYCODE_* + u32 metaState Android KeyEvent.META_* + +Text, 3 bytes + payload: + u8 type 3 = text + u16 length bytes of UTF-8 that follow, max 4096 + u8[] text + +Scroll, 9 bytes: + u8 type 4 = scroll + u16 x position across the display, 0..65535 + u16 y position down the display, 0..65535 + i16 hScroll notches right, times 256 + i16 vScroll notches away from the user, times 256 +``` + +Keys and text are separate on purpose. A named key - Back, Enter, an arrow - has no +character to type and goes as a keycode. Typed characters go as text and are turned +into key events on the device by `KeyCharacterMap`, which is what makes punctuation, +shifted characters and non-US layouts work: the Editor sends the character the user +actually produced and the device works out which keystrokes would produce it, rather +than the Editor trying to model every layout. + +A scroll carries a position because that is what decides which view receives it, +and its magnitude is fixed point so that a trackpad's fractions survive without +putting a float on the wire. The server turns each one into a hover followed by an +`ACTION_SCROLL`: without the hover in front of it, the scroll is accepted and then +ignored, because Android delivers it to whatever the mouse is over. + +Touch positions are normalized rather than in pixels, so the Editor does not have +to know the device's current resolution - and cannot get it wrong, since its idea +of the screen is always at least a frame and possibly a whole rotation out of +date. The server scales them against the display it is capturing at that moment. + +`flags` exists so the Editor can tell "the user turned control off" from "this +device will not allow injection" and say so, rather than dropping every touch in +silence. + +Message sizes are known per type, so an unknown type means the reader no longer knows +where the next one starts. It stops reading control input at that point and leaves the +video stream running, which is the half worth keeping. A text message whose length +exceeds the cap is skipped by consuming its payload, so that one bad message does not +desynchronize the rest. + +Width and height travel with every frame instead of only in the stream header, +because they change when the device is rotated or the display is resized. The +Editor therefore never has to be told out of band that the geometry moved - it +just reads the next frame. + +`serverProtocolVersion` lives in `gradle.properties` and is baked into the jar as +`BuildConfig.PROTOCOL_VERSION`, so that the Editor and the server cannot silently +drift apart. Bump it whenever the packet layout changes. + +## Why JPEG + +H.264 through `MediaCodec` would cost a fraction of the bandwidth, but the Editor +would then need a video decoder, and there is no H.264 decoder reachable from +Editor C#. A JPEG frame goes straight into `Texture2D.LoadImage`. Measured on a +Pixel 2 at `max_size=512 quality=70`: ~30 KB per frame, ~3.6 Mbps at 15 fps. + +## Layout + +| File | Role | +| --- | --- | +| `Server.java` | entry point, socket setup, client lifetime | +| `ScreenStreamer.java` | display mirroring, JPEG encoding, frame pacing | +| `ControlReader.java` | control messages from the Editor, and EOF detection | +| `TouchInjector.java` | normalized positions to injected MotionEvents | +| `KeyInjector.java` | keycodes and text to injected KeyEvents | +| `Protocol.java` | wire format | +| `Options.java` | `key=value` command line | +| `DisplayInfo.java`, `Size.java` | value types | +| `Logger.java` | logging to logcat and stderr | +| `wrappers/DisplayManagerWrapper.java` | reflection over `DisplayManagerGlobal` | +| `wrappers/SurfaceControlWrapper.java` | reflection over `SurfaceControl` | +| `wrappers/InputManagerWrapper.java` | reflection over the hidden input injection API | + +Two mirroring paths are attempted in order: `DisplayManagerGlobal +.createVirtualDisplay`, then `SurfaceControl.createDisplay`. Neither works +everywhere - `SurfaceControl.createDisplay` was removed in Android 15, and the +`DisplayManagerGlobal` overload is missing on some older versions (including +Android 10, where the `SurfaceControl` path is the one that runs) - so whichever +succeeds first wins. diff --git a/External/UnityLogcatServer/build.gradle b/External/UnityLogcatServer/build.gradle new file mode 100644 index 00000000..65a3a67b --- /dev/null +++ b/External/UnityLogcatServer/build.gradle @@ -0,0 +1,283 @@ +// Build for the Unity Logcat on-device screen streaming server. +// +// The server is not an Android application: it has no manifest, no resources and +// no activity. It is a plain set of classes, dexed and archived into a jar, which +// is pushed to the device and executed by app_process as the `shell` user: +// +// adb push unity-logcat-server.jar /data/local/tmp/ +// adb shell CLASSPATH=/data/local/tmp/unity-logcat-server.jar \ +// app_process / com.unity.android.logcat.server.Server +// +// Because of that, this uses the plain `java-library` plugin plus an explicit d8 +// step instead of the Android Gradle Plugin. AGP would build an APK (which would +// then have to be renamed to a jar), pull in a large dependency tree and require +// network access to the `google()` repository - none of which buys us anything. +// +// ./gradlew dexJar -> build/outputs/unity-logcat-server.jar +// ./gradlew pushJar -> pushes it to the connected device +// ./gradlew runJar -> pushes and runs it (foreground, for manual testing) + +plugins { + id 'java-library' +} + +// --------------------------------------------------------------------------- +// Android SDK discovery +// --------------------------------------------------------------------------- + +def androidPlatform = project.property('androidPlatform') +def androidBuildTools = project.property('androidBuildTools') +def androidMinApi = project.property('androidMinApi') + +def sdkHelp = """Android SDK not found. Point the build at one of: + + * External/UnityLogcatServer/local.properties containing sdk.dir= + * the ANDROID_HOME environment variable + * the ANDROID_SDK_ROOT environment variable + +A Unity installation with Android support ships one, typically at +/Editor/Data/PlaybackEngines/AndroidPlayer/SDK. + +The build needs platforms/android-${androidPlatform}/android.jar +and build-tools/${androidBuildTools}/d8.""" + +def resolveSdkDir = { + def localProperties = file('local.properties') + if (localProperties.exists()) { + def props = new Properties() + localProperties.withInputStream { props.load(it) } + def dir = props.getProperty('sdk.dir') + if (dir) { + return file(dir) + } + } + for (name in ['ANDROID_HOME', 'ANDROID_SDK_ROOT']) { + def dir = System.getenv(name) + if (dir) { + // Gradle resolves a relative path against the project directory, not + // against wherever the build was invoked from, and with a daemon there is + // no useful "invoked from" anyway. A relative value is therefore almost + // certainly not the directory the caller meant, so say that rather than + // reporting a missing SDK at some path they never typed. + def f = new File(dir) + if (!f.isAbsolute()) { + throw new GradleException("$name is set to a relative path, '$dir'.\n" + + "It has to be absolute: Gradle would resolve it against " + + project.projectDir + ", not against the directory you ran from.") + } + return f + } + } + return null +} + +// Everything below resolves the SDK lazily, so that tasks which do not need it +// (`gradlew tasks`, `gradlew clean`) still work on a machine without one. +def sdkFile = { String relativePath -> + def sdkDir = resolveSdkDir() + if (sdkDir == null || !sdkDir.isDirectory()) { + throw new GradleException(sdkHelp) + } + def f = new File(sdkDir, relativePath) + if (!f.exists()) { + throw new GradleException("Not found: " + f + "\n\n" + sdkHelp) + } + return f +} + +def isWindows = System.getProperty('os.name').toLowerCase().contains('windows') +def androidJar = { sdkFile("platforms/android-${androidPlatform}/android.jar") } +// Needed on the compile classpath because we replace the bootclasspath with +// android.jar, which does not carry the JDK lambda metafactory stubs. +def lambdaStubs = { sdkFile("build-tools/${androidBuildTools}/core-lambda-stubs.jar") } +def d8 = { sdkFile("build-tools/${androidBuildTools}/d8" + (isWindows ? '.bat' : '')) } +def adb = { sdkFile('platform-tools/adb' + (isWindows ? '.exe' : '')) } + +// --------------------------------------------------------------------------- +// Compilation +// --------------------------------------------------------------------------- + +def generatedSrcDir = layout.buildDirectory.dir('generated/sources/buildconfig') + +// Values the Editor side also needs to agree on live in gradle.properties and are +// baked into the jar, so a protocol mismatch is detectable at runtime instead of +// being two constants that silently drift apart. +def generateBuildConfig = tasks.register('generateBuildConfig') { + description = 'Generates BuildConfig.java from gradle.properties' + def outDir = generatedSrcDir + def protocolVersion = project.property('serverProtocolVersion') + def socketName = project.property('serverSocketName') + inputs.property('protocolVersion', protocolVersion) + inputs.property('socketName', socketName) + outputs.dir(outDir) + doLast { + def pkgDir = new File(outDir.get().asFile, 'com/unity/android/logcat/server') + pkgDir.mkdirs() + new File(pkgDir, 'BuildConfig.java').text = [ + '// Generated by build.gradle from gradle.properties. Do not edit.', + 'package com.unity.android.logcat.server;', + '', + 'public final class BuildConfig {', + ' public static final int PROTOCOL_VERSION = ' + protocolVersion + ';', + ' public static final String DEFAULT_SOCKET_NAME = "' + socketName + '";', + '', + ' private BuildConfig() {', + ' }', + '}', + '' + ].join('\n') + } +} + +sourceSets { + main { + java { + srcDir generatedSrcDir + } + } +} + +tasks.named('compileJava', JavaCompile) { + dependsOn generateBuildConfig + options.encoding = 'UTF-8' + // Compile against android.jar rather than the JDK class library, so reaching + // for a desktop-only API is a compile error instead of a crash on device. + options.bootstrapClasspath = files(androidJar) + classpath = files(lambdaStubs) + sourceCompatibility = '1.8' + targetCompatibility = '1.8' + options.compilerArgs << '-Xlint:deprecation' << '-Xlint:unchecked' +} + +def classesJar = tasks.named('jar', Jar).flatMap { it.archiveFile } + +jar { + // Intermediate artifact only: plain .class files, not runnable on a device. + archiveFileName = 'unity-logcat-server-classes.jar' +} + +// --------------------------------------------------------------------------- +// Dexing: the actual deliverable +// +// These are typed Exec tasks whose command line is filled in at execution time, +// because the SDK is resolved lazily and because Gradle 9 removed the +// `project.exec {}` method that an ad-hoc task would otherwise have used. +// --------------------------------------------------------------------------- + +def serverJarName = 'unity-logcat-server.jar' +def outputJar = layout.buildDirectory.file("outputs/${serverJarName}") + +def dexJar = tasks.register('dexJar', Exec) { + group = 'build' + description = 'Dexes the compiled classes into build/outputs/unity-logcat-server.jar' + // Declaring the jar as an input is also what makes this run after it. + inputs.file(classesJar) + outputs.file(outputJar) + // d8 is a launcher script, and both of its forms have to be pointed at a JVM: + // the Windows .bat resolves java through JAVA_HOME, while the shell script on + // macOS and Linux simply runs `java`. Neither is a given - a CI agent whose only + // JDK lives inside a Unity installation has no JAVA_HOME set and no java on PATH - + // so both are handed the JVM Gradle is already running on, which is also always a + // path the platform's own shell understands. + def javaHome = System.getProperty('java.home') + // Matched to however the inherited variable is spelled, so Windows does not end up + // carrying both Path and PATH. + def pathName = System.getenv().keySet().find { it.equalsIgnoreCase('PATH') } ?: 'PATH' + environment 'JAVA_HOME', javaHome + environment pathName, new File(javaHome, 'bin').absolutePath + + File.pathSeparator + (System.getenv(pathName) ?: '') + doFirst { + def out = outputJar.get().asFile + out.parentFile.mkdirs() + // d8 writes an archive containing classes.dex when --output ends in .jar. + commandLine d8(), + '--release', + '--min-api', androidMinApi, + '--lib', androidJar(), + '--output', out, + classesJar.get().asFile + } + doLast { + def out = outputJar.get().asFile + logger.lifecycle("Server jar: " + out + " (" + out.length() + " bytes)") + } +} + +// --------------------------------------------------------------------------- +// Post-build: place the jar where the package can ship it +// +// A folder whose name ends in "~" is included in the published package but not +// imported as an asset, so the jar needs no .meta file and never enters the +// AssetDatabase. The Editor reads it straight off disk to push it to a device. +// --------------------------------------------------------------------------- + +def packageExternalDir = file('../../com.unity.mobile.android-logcat/External~') + +// Copies by hand rather than with a Copy task: Gradle creates a Copy task's +// destination directory before any task action runs, so a guard against writing +// to the wrong place can never see it missing. +def copyJarToPackage = tasks.register('copyJarToPackage') { + group = 'build' + description = "Copies the server jar into the package's External~ folder" + dependsOn dexJar + def destination = new File(packageExternalDir, serverJarName) + inputs.file(outputJar) + outputs.file(destination) + doLast { + // package.json is the marker: it says the destination really is the logcat + // package, and unlike a directory it is not something Gradle can create on + // our behalf. Catches this project being moved relative to the package + // instead of scattering an External~ folder somewhere unrelated. + def packageDir = packageExternalDir.parentFile + if (!new File(packageDir, 'package.json').isFile()) { + throw new GradleException("No Unity package found at " + packageDir + + "\nExpected this project to sit at /External/UnityLogcatServer," + + " alongside /com.unity.mobile.android-logcat.") + } + + packageExternalDir.mkdirs() + java.nio.file.Files.copy( + outputJar.get().asFile.toPath(), + destination.toPath(), + java.nio.file.StandardCopyOption.REPLACE_EXISTING) + logger.lifecycle("Copied to: " + destination) + } +} + +// Attached to dexJar rather than to assemble, so that every route which produces +// the jar - dexJar, assemble, pushJar, runJar - also refreshes the copy the +// package ships. Otherwise the two silently drift apart. +dexJar.configure { + finalizedBy copyJarToPackage +} + +tasks.named('assemble') { + dependsOn dexJar +} + +// --------------------------------------------------------------------------- +// Developer conveniences. The Editor does its own push/run at runtime; these +// exist so the server can be exercised without an Editor in the loop. +// --------------------------------------------------------------------------- + +def devicePath = project.property('serverDevicePath') + +def pushJar = tasks.register('pushJar', Exec) { + group = 'verification' + description = "Pushes the server jar to ${devicePath} on the connected device" + dependsOn dexJar + doFirst { + commandLine adb(), 'push', outputJar.get().asFile, devicePath + } +} + +tasks.register('runJar', Exec) { + group = 'verification' + description = 'Runs the server on the connected device in the foreground (Ctrl+C to stop)' + dependsOn pushJar + doFirst { + def serverArgs = project.findProperty('serverArgs') ?: 'log_level=debug' + commandLine adb(), 'shell', + "CLASSPATH=${devicePath} app_process / com.unity.android.logcat.server.Server ${serverArgs}" + } +} diff --git a/External/UnityLogcatServer/gradle.properties b/External/UnityLogcatServer/gradle.properties new file mode 100644 index 00000000..08fbbe23 --- /dev/null +++ b/External/UnityLogcatServer/gradle.properties @@ -0,0 +1,22 @@ +# Version of the wire protocol spoken between the Editor and the on-device server. +# The Editor refuses to talk to a server whose protocol version it does not know, +# so bump this whenever the packet layout in Protocol.java changes. +serverProtocolVersion=6 + +# Android platform the server is compiled against (android.jar is taken from +# $SDK/platforms/android-/android.jar). +androidPlatform=36 + +# Build tools providing d8 ($SDK/build-tools//d8). +androidBuildTools=36.0.0 + +# Lowest Android API level the produced dex must run on. +androidMinApi=24 + +# Name of the abstract-namespace unix socket the server listens on, and the +# on-device path the jar is pushed to. Kept here so the Editor-side constants +# have a single documented source. +serverSocketName=unity_logcat_server +serverDevicePath=/data/local/tmp/unity-logcat-server.jar + +org.gradle.jvmargs=-Xmx1024m diff --git a/External/UnityLogcatServer/gradle/wrapper/gradle-wrapper.jar b/External/UnityLogcatServer/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..490fda8577df6c95960ba7077c43220e5bb2c0d9 GIT binary patch literal 58694 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 literal 0 HcmV?d00001 diff --git a/External/UnityLogcatServer/gradle/wrapper/gradle-wrapper.properties b/External/UnityLogcatServer/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..7c4f2c7a --- /dev/null +++ b/External/UnityLogcatServer/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip +# https://gradle.org/release-checksums/ +distributionSha256Sum=b266d5ff6b90eada6dc3b20cb090e3731302e553a27c5d3e4df1f0d76beaff06 +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/External/UnityLogcatServer/gradlew b/External/UnityLogcatServer/gradlew new file mode 100755 index 00000000..2fe81a7d --- /dev/null +++ b/External/UnityLogcatServer/gradlew @@ -0,0 +1,183 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/External/UnityLogcatServer/gradlew.bat b/External/UnityLogcatServer/gradlew.bat new file mode 100644 index 00000000..62bd9b9c --- /dev/null +++ b/External/UnityLogcatServer/gradlew.bat @@ -0,0 +1,103 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/External/UnityLogcatServer/settings.gradle b/External/UnityLogcatServer/settings.gradle new file mode 100644 index 00000000..3366efed --- /dev/null +++ b/External/UnityLogcatServer/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'UnityLogcatServer' diff --git a/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/ControlReader.java b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/ControlReader.java new file mode 100644 index 00000000..fb54b42b --- /dev/null +++ b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/ControlReader.java @@ -0,0 +1,198 @@ +package com.unity.android.logcat.server; + +import java.io.DataInputStream; +import java.io.EOFException; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; + +/** + * Reads control messages the Editor sends back up the video socket, and notices the + * Editor going away. + *

+ * This runs even when nothing is being written to the socket, which is what makes a + * departed client detectable on a screen that has stopped changing: with no frames + * being produced there is no write to fail, so EOF here is the only signal. + * + *

+ * Message, 1 byte type then a fixed payload per type:
+ *
+ *   TYPE_TOUCH (1), 8 byte payload:
+ *     u8   action     0 down, 1 up, 2 move, 3 cancel
+ *     u8   pointerId  0 based
+ *     u16  x          position across the display, 0..65535
+ *     u16  y          position down the display, 0..65535
+ *     u16  pressure   0..65535
+ *
+ *   TYPE_SCROLL (4), 8 byte payload:
+ *     u16  x          position across the display, 0..65535
+ *     u16  y          position down the display, 0..65535
+ *     i16  hScroll    notches right, times SCROLL_SCALE
+ *     i16  vScroll    notches away from the user, times SCROLL_SCALE
+ * 
+ * + * Positions are normalized so that the Editor does not have to know the device's + * current resolution - see {@link TouchInjector}. + */ +public final class ControlReader implements Runnable { + public static final int TYPE_TOUCH = 1; + public static final int TYPE_KEY = 2; + public static final int TYPE_TEXT = 3; + public static final int TYPE_SCROLL = 4; + + private static final int NORMALIZED_MAX = 65535; + /** + * Scroll notches are sent as fixed point, so that a trackpad's fractions survive + * the trip without the message needing a float in it. 256 leaves room for +-128 + * notches in a single message, which no mouse will ever produce. + */ + private static final int SCROLL_SCALE = 256; + /** Generous for a keystroke or a paste, small enough that a bad length cannot hurt. */ + private static final int MAX_TEXT_LENGTH = 4096; + + private final InputStream input; + private final TouchInjector touchInjector; + private final KeyInjector keyInjector; + private final ScrollInjector scrollInjector; + private final Runnable onDisconnect; + + public ControlReader(InputStream input, TouchInjector touchInjector, KeyInjector keyInjector, + ScrollInjector scrollInjector, Runnable onDisconnect) { + this.input = input; + this.touchInjector = touchInjector; + this.keyInjector = keyInjector; + this.scrollInjector = scrollInjector; + this.onDisconnect = onDisconnect; + } + + @Override + public void run() { + try { + readMessages(); + } catch (EOFException e) { + Logger.d("Client went away"); + } catch (IOException e) { + // The socket was closed, by the client or by our own shutdown. Same + // conclusion either way. + Logger.d("Control channel closed: " + e); + } finally { + onDisconnect.run(); + } + } + + private void readMessages() throws IOException { + DataInputStream in = new DataInputStream(input); + + while (true) { + int type = in.read(); + if (type == -1) { + throw new EOFException(); + } + + switch (type) { + case TYPE_TOUCH: + readTouch(in); + break; + case TYPE_KEY: + readKey(in); + break; + case TYPE_TEXT: + readText(in); + break; + case TYPE_SCROLL: + readScroll(in); + break; + default: + // Message sizes are known per type, so an unknown type means we no + // longer know where the next one starts, and reading on would + // inject garbage. Draining rather than returning keeps the other + // thing this thread is for: noticing EOF, which on a screen that + // has stopped changing is the only sign the client has gone. Return + // here instead and the video stream would be left running with + // nobody watching it - and with nothing left to notice that. + Logger.w("Unknown control message type " + type + + ", ignoring the rest of the control channel"); + drainUntilClientGoes(in); + return; + } + } + } + + /** + * Reads and discards everything the client sends until it goes away, which is + * reported as {@link EOFException} exactly as a clean end of stream would be. + */ + private void drainUntilClientGoes(DataInputStream in) throws IOException { + byte[] scratch = new byte[256]; + while (in.read(scratch) != -1) { + // Discarded on purpose: the stream cannot be resynchronized, but the + // connection is still worth watching. + } + throw new EOFException(); + } + + private void readTouch(DataInputStream in) throws IOException { + int action = in.readUnsignedByte(); + int pointerId = in.readUnsignedByte(); + int x = in.readUnsignedShort(); + int y = in.readUnsignedShort(); + int pressure = in.readUnsignedShort(); + + if (touchInjector == null) { + // Input injection was unavailable at startup; the Editor was told, but a + // message already in flight can still turn up here. + return; + } + + touchInjector.inject(action, pointerId, + x / (float)NORMALIZED_MAX, + y / (float)NORMALIZED_MAX, + pressure / (float)NORMALIZED_MAX); + } + + private void readScroll(DataInputStream in) throws IOException { + int x = in.readUnsignedShort(); + int y = in.readUnsignedShort(); + int hScroll = in.readShort(); + int vScroll = in.readShort(); + + if (scrollInjector == null) { + return; + } + + scrollInjector.inject( + x / (float)NORMALIZED_MAX, + y / (float)NORMALIZED_MAX, + hScroll / (float)SCROLL_SCALE, + vScroll / (float)SCROLL_SCALE); + } + + private void readKey(DataInputStream in) throws IOException { + int action = in.readUnsignedByte(); + int keyCode = in.readInt(); + int metaState = in.readInt(); + + if (keyInjector == null) { + return; + } + keyInjector.injectKey(action, keyCode, metaState); + } + + private void readText(DataInputStream in) throws IOException { + int length = in.readUnsignedShort(); + if (length > MAX_TEXT_LENGTH) { + // The payload still has to be consumed, or the stream desynchronizes. + in.skipBytes(length); + Logger.w("Ignoring a " + length + " byte text message, the limit is " + MAX_TEXT_LENGTH); + return; + } + + byte[] bytes = new byte[length]; + in.readFully(bytes); + + if (keyInjector == null) { + return; + } + keyInjector.injectText(new String(bytes, StandardCharsets.UTF_8)); + } +} diff --git a/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/DisplayInfo.java b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/DisplayInfo.java new file mode 100644 index 00000000..6c09b3b7 --- /dev/null +++ b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/DisplayInfo.java @@ -0,0 +1,50 @@ +package com.unity.android.logcat.server; + +/** Snapshot of a logical display, read out of the hidden {@code DisplayInfo} class. */ +public final class DisplayInfo { + private final int displayId; + private final Size size; + private final int rotation; + private final int layerStack; + private final int flags; + private final int dpi; + + public DisplayInfo(int displayId, Size size, int rotation, int layerStack, int flags, int dpi) { + this.displayId = displayId; + this.size = size; + this.rotation = rotation; + this.layerStack = layerStack; + this.flags = flags; + this.dpi = dpi; + } + + public int getDisplayId() { + return displayId; + } + + /** Logical size, already rotated: it swaps when the device is turned. */ + public Size getSize() { + return size; + } + + public int getRotation() { + return rotation; + } + + public int getLayerStack() { + return layerStack; + } + + public int getFlags() { + return flags; + } + + public int getDpi() { + return dpi; + } + + @Override + public String toString() { + return "display " + displayId + " " + size + " rotation=" + rotation + " dpi=" + dpi; + } +} diff --git a/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/KeyInjector.java b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/KeyInjector.java new file mode 100644 index 00000000..e61124da --- /dev/null +++ b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/KeyInjector.java @@ -0,0 +1,95 @@ +package com.unity.android.logcat.server; + +import com.unity.android.logcat.server.wrappers.InputManagerWrapper; + +import android.os.SystemClock; +import android.view.InputDevice; +import android.view.KeyCharacterMap; +import android.view.KeyEvent; + +/** + * Injects key events and typed text into the device. + *

+ * There are two paths on purpose. Named keys - Back, Enter, the arrows - arrive as an + * Android keycode and become a {@link KeyEvent} directly. Typed characters arrive as + * text and are turned into key events by {@link KeyCharacterMap}, which is what makes + * punctuation, shifted characters and non-US layouts work: the Editor sends the + * character the user actually produced and lets the device work out which keystrokes + * would have produced it, instead of the Editor trying to map every layout itself. + */ +public final class KeyInjector { + public static final int ACTION_DOWN = 0; + public static final int ACTION_UP = 1; + + private final InputManagerWrapper inputManager; + private final int displayId; + + private KeyCharacterMap characterMap; + + public KeyInjector(InputManagerWrapper inputManager, int displayId) { + this.inputManager = inputManager; + this.displayId = displayId; + } + + /** + * @param action ACTION_DOWN or ACTION_UP + * @param keyCode an Android {@code KeyEvent.KEYCODE_*} value + * @param metaState Android {@code KeyEvent.META_*} flags + */ + public void injectKey(int action, int keyCode, int metaState) { + int keyAction; + switch (action) { + case ACTION_DOWN: + keyAction = KeyEvent.ACTION_DOWN; + break; + case ACTION_UP: + keyAction = KeyEvent.ACTION_UP; + break; + default: + Logger.w("Ignoring unknown key action " + action); + return; + } + + long now = SystemClock.uptimeMillis(); + KeyEvent event = new KeyEvent( + now, // downTime + now, // eventTime + keyAction, + keyCode, + 0, // repeat + metaState, + KeyCharacterMap.VIRTUAL_KEYBOARD, + 0, // scanCode + 0, // flags + InputDevice.SOURCE_KEYBOARD); + + inject(event); + } + + /** Types {@code text} as if it had been entered on a keyboard. */ + public void injectText(String text) { + if (text.isEmpty()) { + return; + } + + if (characterMap == null) { + characterMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD); + } + + KeyEvent[] events = characterMap.getEvents(text.toCharArray()); + if (events == null) { + // The virtual keyboard layout cannot produce one of these characters. There + // is no keystroke sequence to fall back to, so say so and move on. + Logger.w("Cannot type '" + text + "' with the virtual keyboard layout"); + return; + } + + for (KeyEvent event : events) { + inject(event); + } + } + + private void inject(KeyEvent event) { + inputManager.inject(event, displayId); + } +} diff --git a/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/Logger.java b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/Logger.java new file mode 100644 index 00000000..28a027b5 --- /dev/null +++ b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/Logger.java @@ -0,0 +1,94 @@ +package com.unity.android.logcat.server; + +import android.util.Log; + +/** + * Logging. + *

+ * Everything is written both to logcat and to stderr. stderr is what the Editor + * sees on the {@code adb shell} process it spawned, so it is the channel the + * Editor surfaces to the user when the server fails to start; logcat keeps a copy + * for after-the-fact diagnosis. + */ +public final class Logger { + public enum Level { + VERBOSE, DEBUG, INFO, WARN, ERROR + } + + private static final String TAG = "UnityLogcatServer"; + private static final String PREFIX = "[unity-logcat-server] "; + + private static Level threshold = Level.INFO; + + private Logger() { + } + + public static void setLevel(Level level) { + threshold = level; + } + + public static boolean isEnabled(Level level) { + return level.ordinal() >= threshold.ordinal(); + } + + public static void v(String message) { + log(Level.VERBOSE, message, null); + } + + public static void d(String message) { + log(Level.DEBUG, message, null); + } + + public static void i(String message) { + log(Level.INFO, message, null); + } + + public static void w(String message) { + log(Level.WARN, message, null); + } + + public static void w(String message, Throwable throwable) { + log(Level.WARN, message, throwable); + } + + public static void e(String message) { + log(Level.ERROR, message, null); + } + + public static void e(String message, Throwable throwable) { + log(Level.ERROR, message, throwable); + } + + private static void log(Level level, String message, Throwable throwable) { + if (!isEnabled(level)) { + return; + } + + switch (level) { + case VERBOSE: + Log.v(TAG, message, throwable); + break; + case DEBUG: + Log.d(TAG, message, throwable); + break; + case INFO: + Log.i(TAG, message, throwable); + break; + case WARN: + Log.w(TAG, message, throwable); + break; + case ERROR: + Log.e(TAG, message, throwable); + break; + default: + break; + } + + java.io.PrintStream stream = level.ordinal() >= Level.WARN.ordinal() ? System.err : System.out; + stream.println(PREFIX + level + ": " + message); + if (throwable != null) { + throwable.printStackTrace(stream); + } + stream.flush(); + } +} diff --git a/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/Options.java b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/Options.java new file mode 100644 index 00000000..dc007986 --- /dev/null +++ b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/Options.java @@ -0,0 +1,135 @@ +package com.unity.android.logcat.server; + +import java.util.Locale; + +/** + * Command line options, passed as {@code key=value} pairs: + * + *

+ * app_process / com.unity.android.logcat.server.Server display_id=0 max_size=1024
+ * 
+ * + * {@code key=value} rather than {@code --flags} because the whole command line is + * handed to {@code adb shell}, which passes it through a shell on the device; the + * fewer characters a shell wants to interpret, the better. + */ +public final class Options { + private String socketName = BuildConfig.DEFAULT_SOCKET_NAME; + private int displayId; + private int maxSize = 1024; + private int quality = 70; + private int maxFps = 30; + private int connectTimeoutMs = 10_000; + private Logger.Level logLevel = Logger.Level.INFO; + + private Options() { + } + + /** Abstract-namespace unix socket the server listens on. */ + public String getSocketName() { + return socketName; + } + + public int getDisplayId() { + return displayId; + } + + /** Longest side of the streamed image, in pixels. 0 means the display's own size. */ + public int getMaxSize() { + return maxSize; + } + + /** JPEG quality, 1..100. */ + public int getQuality() { + return quality; + } + + public int getMaxFps() { + return maxFps; + } + + /** How long to wait for the Editor to connect before giving up and exiting. */ + public int getConnectTimeoutMs() { + return connectTimeoutMs; + } + + public Logger.Level getLogLevel() { + return logLevel; + } + + public static Options parse(String... args) { + Options options = new Options(); + + for (String arg : args) { + if (arg.isEmpty()) { + continue; + } + + int equals = arg.indexOf('='); + if (equals == -1) { + throw new IllegalArgumentException("Expected key=value, got '" + arg + "'"); + } + String key = arg.substring(0, equals); + String value = arg.substring(equals + 1); + + switch (key) { + case "socket_name": + options.socketName = value; + break; + case "display_id": + options.displayId = parseInt(key, value, 0, Integer.MAX_VALUE); + break; + case "max_size": + options.maxSize = parseInt(key, value, 0, 16384); + break; + case "quality": + options.quality = parseInt(key, value, 1, 100); + break; + case "max_fps": + options.maxFps = parseInt(key, value, 1, 240); + break; + case "connect_timeout_ms": + options.connectTimeoutMs = parseInt(key, value, 0, 600_000); + break; + case "log_level": + options.logLevel = parseLogLevel(value); + break; + default: + throw new IllegalArgumentException("Unknown option '" + key + "'"); + } + } + + return options; + } + + private static int parseInt(String key, String value, int min, int max) { + int parsed; + try { + parsed = Integer.parseInt(value); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Option '" + key + "' is not a number: '" + value + "'"); + } + if (parsed < min || parsed > max) { + throw new IllegalArgumentException("Option '" + key + "' must be in [" + min + ".." + max + "], got " + parsed); + } + return parsed; + } + + private static Logger.Level parseLogLevel(String value) { + try { + return Logger.Level.valueOf(value.toUpperCase(Locale.ROOT)); + } catch (IllegalArgumentException e) { + throw new IllegalArgumentException("Unknown log_level '" + value + "'"); + } + } + + @Override + public String toString() { + return "socket_name=" + socketName + + " display_id=" + displayId + + " max_size=" + maxSize + + " quality=" + quality + + " max_fps=" + maxFps + + " log_level=" + logLevel; + } +} diff --git a/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/Protocol.java b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/Protocol.java new file mode 100644 index 00000000..c2aefd6a --- /dev/null +++ b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/Protocol.java @@ -0,0 +1,78 @@ +package com.unity.android.logcat.server; + +import java.io.BufferedOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +/** + * Wire format written to the socket. All integers are big endian, matching + * {@link DataOutputStream}. + * + *
+ * Stream header, once, 20 bytes:
+ *   u32  magic            'U' 'L' 'S' '1' (0x554C5331)
+ *   u32  protocolVersion  BuildConfig.PROTOCOL_VERSION
+ *   u32  codec            CODEC_MJPEG
+ *   u32  flags            FLAG_CONTROL_SUPPORTED if touch can be injected
+ *   u32  serverPid        this process on the device, so the Editor can name it
+ *
+ * Frame, repeated, 28 byte header + payload:
+ *   u64  ptsUs            microseconds since the first frame
+ *   u32  width            pixels of the streamed image
+ *   u32  height           pixels of the streamed image
+ *   u32  displayWidth     pixels of the display it was captured from
+ *   u32  displayHeight    pixels of the display it was captured from
+ *   u32  payloadSize      bytes of encoded frame that follow
+ *   u8[] payload
+ * 
+ * + * All four sizes travel with every frame because they change when the device is + * rotated or folded, and the server starts a new capture session without saying so + * on the socket. The reader is therefore never told out of band that the geometry + * moved - it just reads the next frame. + */ +public final class Protocol { + public static final int MAGIC = 0x554C5331; + public static final int CODEC_MJPEG = 1; + + /** + * Set when the server can inject input, so the Editor can tell "control is off" + * from "control is impossible on this device" and say so instead of quietly + * dropping every touch. + */ + public static final int FLAG_CONTROL_SUPPORTED = 1; + + private final DataOutputStream out; + private long firstFrameNs = -1; + + public Protocol(OutputStream stream) { + this.out = new DataOutputStream(new BufferedOutputStream(stream, 64 * 1024)); + } + + public void writeStreamHeader(int codec, int flags, int serverPid) throws IOException { + out.writeInt(MAGIC); + out.writeInt(BuildConfig.PROTOCOL_VERSION); + out.writeInt(codec); + out.writeInt(flags); + out.writeInt(serverPid); + out.flush(); + } + + public void writeFrame(long captureNs, int width, int height, int displayWidth, int displayHeight, + byte[] payload, int payloadSize) throws IOException { + if (firstFrameNs < 0) { + firstFrameNs = captureNs; + } + out.writeLong((captureNs - firstFrameNs) / 1000L); + out.writeInt(width); + out.writeInt(height); + out.writeInt(displayWidth); + out.writeInt(displayHeight); + out.writeInt(payloadSize); + out.write(payload, 0, payloadSize); + // Flushed per frame: this is a live stream, buffering a frame to fill the + // buffer would just add latency. + out.flush(); + } +} diff --git a/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/ScreenStreamer.java b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/ScreenStreamer.java new file mode 100644 index 00000000..a51617e5 --- /dev/null +++ b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/ScreenStreamer.java @@ -0,0 +1,416 @@ +package com.unity.android.logcat.server; + +import com.unity.android.logcat.server.wrappers.DisplayManagerWrapper; +import com.unity.android.logcat.server.wrappers.SurfaceControlWrapper; + +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.PixelFormat; +import android.graphics.Rect; +import android.hardware.display.VirtualDisplay; +import android.media.Image; +import android.media.ImageReader; +import android.os.Handler; +import android.os.HandlerThread; +import android.os.IBinder; +import android.view.Surface; + +import java.io.ByteArrayOutputStream; +import java.io.Closeable; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +/** + * Mirrors a display into an {@link ImageReader}, encodes each frame as JPEG and + * writes it to the socket. + *

+ * JPEG rather than H.264 is a deliberate trade. H.264 through {@code MediaCodec} + * would cost a fraction of the bandwidth, but the Editor would then need a video + * decoder, and there is no H.264 decoder reachable from Editor C#. A JPEG frame + * goes straight into {@code Texture2D.LoadImage}, so the Editor side stays + * dependency-free. At 1024px and quality 70 a frame is roughly 40-120 KB, i.e. + * 1-4 MB/s at 30 fps, which fits comfortably in what adb forwards. + */ +public final class ScreenStreamer implements Closeable { + private static final String VIRTUAL_DISPLAY_NAME = "unity-logcat"; + /** + * Two buffers: one being mirrored into, one being encoded. More would only + * buy latency. + */ + private static final int MAX_IMAGES = 2; + /** How often the display is re-read to notice a rotation or a resize. */ + private static final long DISPLAY_POLL_MS = 500; + private static final long STATS_INTERVAL_NS = 5L * 1000 * 1000 * 1000; + + private final Options options; + private final Protocol protocol; + private final DisplayManagerWrapper displayManager; + private final long minFrameIntervalNs; + + /** Guards the capture session, so a restart cannot race a frame callback. */ + private final Object sessionLock = new Object(); + private final CountDownLatch streamEnded = new CountDownLatch(1); + + private HandlerThread handlerThread; + private Handler handler; + + private ImageReader imageReader; + private VirtualDisplay virtualDisplay; + private IBinder surfaceControlDisplay; + private Size videoSize; + + private long lastFrameNs; + private Bitmap paddedBitmap; + private Bitmap frameBitmap; + private Canvas frameCanvas; + private final JpegBuffer jpeg = new JpegBuffer(); + + private long statsStartNs; + private int statsFrames; + private long statsBytes; + + private volatile boolean stopped; + private volatile IOException streamError; + /** Read by TouchInjector from the control thread, hence volatile. */ + private volatile Size displaySize; + + /** + * Logical size of the display being captured, or null before capture starts. This + * is the display's own size, not the streamed size: touch positions scale to the + * former. + */ + public Size getDisplaySize() { + return displaySize; + } + + public ScreenStreamer(Options options, Protocol protocol, DisplayManagerWrapper displayManager) { + this.options = options; + this.protocol = protocol; + this.displayManager = displayManager; + this.minFrameIntervalNs = 1000000000L / options.getMaxFps(); + } + + /** + * Streams until the client disconnects, the display disappears or + * {@link #close()} is called. + */ + public void stream() throws IOException, ReflectiveOperationException, InterruptedException { + DisplayInfo info = readDisplayInfo(); + Logger.i("Capturing " + info); + + handlerThread = new HandlerThread("unity-logcat-capture"); + handlerThread.start(); + handler = new Handler(handlerThread.getLooper()); + + statsStartNs = System.nanoTime(); + startSession(info); + + Size lastSize = info.getSize(); + int lastRotation = info.getRotation(); + + while (!stopped) { + if (streamEnded.await(DISPLAY_POLL_MS, TimeUnit.MILLISECONDS)) { + break; + } + + DisplayInfo current = displayManager.getDisplayInfo(options.getDisplayId()); + if (current == null) { + Logger.w("Display " + options.getDisplayId() + " is gone, stopping"); + break; + } + + // Rotating the device changes the logical size, which means a new + // ImageReader and a new mirrored display. The client needs no warning: + // every frame carries its own dimensions. + if (!current.getSize().equals(lastSize) || current.getRotation() != lastRotation) { + Logger.d("Display changed to " + current + ", restarting capture session"); + lastSize = current.getSize(); + lastRotation = current.getRotation(); + stopSession(); + startSession(current); + } + } + + if (streamError != null) { + throw streamError; + } + } + + private DisplayInfo readDisplayInfo() throws ReflectiveOperationException, IOException { + DisplayInfo info = displayManager.getDisplayInfo(options.getDisplayId()); + if (info == null) { + StringBuilder available = new StringBuilder(); + for (int id : displayManager.getDisplayIds()) { + available.append(' ').append(id); + } + throw new IOException("Unknown display id " + options.getDisplayId() + ", available:" + available); + } + return info; + } + + private void startSession(DisplayInfo info) throws IOException { + synchronized (sessionLock) { + displaySize = info.getSize(); + videoSize = info.getSize().limit(options.getMaxSize()); + int width = videoSize.getWidth(); + int height = videoSize.getHeight(); + + imageReader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, MAX_IMAGES); + imageReader.setOnImageAvailableListener(this::onImageAvailable, handler); + Surface surface = imageReader.getSurface(); + + try { + virtualDisplay = displayManager + .createVirtualDisplay(VIRTUAL_DISPLAY_NAME, width, height, info.getDisplayId(), surface); + Logger.d("Mirroring " + info.getSize() + " to " + videoSize + " via DisplayManagerGlobal"); + } catch (Exception displayManagerFailure) { + // Expected on some devices and Android versions - the fallback is + // the normal path there, so this is not a warning. + Logger.d("DisplayManagerGlobal.createVirtualDisplay unavailable (" + displayManagerFailure + + "), falling back to SurfaceControl"); + try { + startSessionWithSurfaceControl(info, surface, width, height); + Logger.d("Mirroring " + info.getSize() + " to " + videoSize + " via SurfaceControl"); + } catch (Exception surfaceControlFailure) { + Logger.e("DisplayManagerGlobal.createVirtualDisplay failed", displayManagerFailure); + Logger.e("SurfaceControl.createDisplay failed", surfaceControlFailure); + imageReader.close(); + imageReader = null; + throw new IOException("Could not mirror display " + info.getDisplayId()); + } + } + + lastFrameNs = 0; + } + } + + private void startSessionWithSurfaceControl(DisplayInfo info, Surface surface, int width, int height) + throws ReflectiveOperationException { + surfaceControlDisplay = SurfaceControlWrapper.createDisplay(VIRTUAL_DISPLAY_NAME, false); + SurfaceControlWrapper.openTransaction(); + try { + SurfaceControlWrapper.setDisplaySurface(surfaceControlDisplay, surface); + SurfaceControlWrapper.setDisplayProjection(surfaceControlDisplay, 0, + new Rect(0, 0, info.getSize().getWidth(), info.getSize().getHeight()), + new Rect(0, 0, width, height)); + SurfaceControlWrapper.setDisplayLayerStack(surfaceControlDisplay, info.getLayerStack()); + } finally { + SurfaceControlWrapper.closeTransaction(); + } + } + + private void stopSession() { + synchronized (sessionLock) { + if (virtualDisplay != null) { + virtualDisplay.release(); + virtualDisplay = null; + } + if (surfaceControlDisplay != null) { + try { + SurfaceControlWrapper.destroyDisplay(surfaceControlDisplay); + } catch (ReflectiveOperationException e) { + Logger.w("Could not destroy SurfaceControl display", e); + } + surfaceControlDisplay = null; + } + if (imageReader != null) { + imageReader.setOnImageAvailableListener(null, null); + imageReader.close(); + imageReader = null; + } + } + } + + private void onImageAvailable(ImageReader reader) { + synchronized (sessionLock) { + // A callback queued before the session was torn down. + if (stopped || reader != imageReader) { + return; + } + + Image image = null; + try { + image = reader.acquireLatestImage(); + if (image == null) { + return; + } + + long now = System.nanoTime(); + long waitNs = lastFrameNs == 0 ? 0 : minFrameIntervalNs - (now - lastFrameNs); + if (waitNs > 0) { + // Wait rather than drop: on a screen that has stopped changing + // this may be the last frame produced for a long time, and + // dropping it would leave the client showing a stale image. + TimeUnit.NANOSECONDS.sleep(waitNs); + now = System.nanoTime(); + } + lastFrameNs = now; + + encodeAndSend(image, now); + reportStats(now); + } catch (IOException e) { + // The only IOException reachable here comes from writing to the + // socket, which means the client is gone. That is how a session + // normally ends, so it is not recorded as a stream error - doing so + // would make an ordinary stop exit non-zero whenever the capture + // thread noticed the disconnect before the watch thread did. + if (!stopped) { + Logger.d("Client is gone (" + e + "), ending stream"); + } + endStream(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + endStream(); + } catch (RuntimeException e) { + Logger.e("Unexpected failure while encoding a frame", e); + streamError = new IOException("Frame encoding failed", e); + endStream(); + } finally { + if (image != null) { + image.close(); + } + } + } + } + + private void encodeAndSend(Image image, long captureNs) throws IOException { + Image.Plane plane = image.getPlanes()[0]; + ByteBuffer buffer = plane.getBuffer(); + int pixelStride = plane.getPixelStride(); + int rowStride = plane.getRowStride(); + + int width = image.getWidth(); + int height = image.getHeight(); + // The plane's rows can be wider than the image; those extra pixels have to + // be copied in and then cropped away. + int paddedWidth = rowStride / pixelStride; + + Bitmap padded = obtainPaddedBitmap(paddedWidth, height); + buffer.rewind(); + int required = padded.getRowBytes() * height; + if (buffer.remaining() < required) { + Logger.w("Frame plane is " + buffer.remaining() + " bytes, expected " + required + "; skipping frame"); + return; + } + padded.copyPixelsFromBuffer(buffer); + + Bitmap toEncode; + if (paddedWidth == width) { + toEncode = padded; + } else { + toEncode = obtainFrameBitmap(width, height); + frameCanvas.drawBitmap(padded, 0, 0, null); + } + + jpeg.reset(); + if (!toEncode.compress(Bitmap.CompressFormat.JPEG, options.getQuality(), jpeg)) { + // Keeps IOException in this method meaning "the socket died", so that a + // one-off encoder hiccup drops a frame instead of ending the session. + Logger.e("JPEG encoding failed, skipping frame"); + return; + } + + // The session's own size, which is what this frame was scaled down from. + Size display = displaySize; + protocol.writeFrame(captureNs, width, height, + display == null ? 0 : display.getWidth(), + display == null ? 0 : display.getHeight(), + jpeg.buffer(), jpeg.size()); + + statsFrames++; + statsBytes += jpeg.size(); + } + + private Bitmap obtainPaddedBitmap(int width, int height) { + if (paddedBitmap == null || paddedBitmap.getWidth() != width || paddedBitmap.getHeight() != height) { + if (paddedBitmap != null) { + paddedBitmap.recycle(); + } + paddedBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + } + return paddedBitmap; + } + + private Bitmap obtainFrameBitmap(int width, int height) { + if (frameBitmap == null || frameBitmap.getWidth() != width || frameBitmap.getHeight() != height) { + if (frameBitmap != null) { + frameBitmap.recycle(); + } + frameBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + frameCanvas = new Canvas(frameBitmap); + } + return frameBitmap; + } + + private void reportStats(long now) { + if (!Logger.isEnabled(Logger.Level.DEBUG)) { + return; + } + long elapsedNs = now - statsStartNs; + if (elapsedNs < STATS_INTERVAL_NS) { + return; + } + double seconds = elapsedNs / 1000000000.0; + Logger.d(String.format("%s: %.1f fps, %.2f Mbps", + videoSize, statsFrames / seconds, statsBytes * 8 / seconds / 1000000.0)); + statsStartNs = now; + statsFrames = 0; + statsBytes = 0; + } + + private void endStream() { + stopped = true; + streamEnded.countDown(); + } + + @Override + public synchronized void close() { + endStream(); + + HandlerThread thread = handlerThread; + if (thread != null) { + // Drops queued frame callbacks; a callback already running finishes, + // which it will do promptly since the socket is closed by now. + thread.quitSafely(); + } + + stopSession(); + + if (thread != null) { + try { + thread.join(2000); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + handlerThread = null; + handler = null; + } + + // Safe now: only the capture thread touched these, and it has stopped. + if (paddedBitmap != null) { + paddedBitmap.recycle(); + paddedBitmap = null; + } + if (frameBitmap != null) { + frameBitmap.recycle(); + frameBitmap = null; + } + frameCanvas = null; + } + + /** + * {@link ByteArrayOutputStream} that hands out its backing array, so a frame + * is not copied on its way from the JPEG encoder to the socket. + */ + private static final class JpegBuffer extends ByteArrayOutputStream { + JpegBuffer() { + super(256 * 1024); + } + + byte[] buffer() { + return buf; + } + } +} diff --git a/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/ScrollInjector.java b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/ScrollInjector.java new file mode 100644 index 00000000..ff592328 --- /dev/null +++ b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/ScrollInjector.java @@ -0,0 +1,81 @@ +package com.unity.android.logcat.server; + +import com.unity.android.logcat.server.wrappers.InputManagerWrapper; + +import android.os.SystemClock; +import android.view.InputDevice; +import android.view.MotionEvent; + +import java.util.function.Supplier; + +/** + * Turns scroll wheel movement from the Editor into {@code ACTION_SCROLL} + * {@link MotionEvent}s injected into the device. + *

+ * Unlike a touch this is not part of a gesture, so there is no down time to remember + * and no pointer to keep track of - each scroll stands alone. The magnitude travels in + * the {@code VSCROLL} and {@code HSCROLL} axes rather than in the position, which is + * why this needs the {@code PointerCoords} form of {@code MotionEvent.obtain}; the + * position still matters, because a scroll goes to whatever view is under the pointer. + *

+ * The event claims to come from a mouse: a touchscreen has no scroll axis, so an event + * from {@code SOURCE_TOUCHSCREEN} carrying one would be dropped. + */ +public final class ScrollInjector { + private final InputManagerWrapper inputManager; + private final Supplier displaySize; + private final int displayId; + + public ScrollInjector(InputManagerWrapper inputManager, Supplier displaySize, int displayId) { + this.inputManager = inputManager; + this.displaySize = displaySize; + this.displayId = displayId; + } + + /** + * @param nx horizontal position, 0..1 across the display + * @param ny vertical position, 0..1 down the display + * @param hScroll notches to the right, negative for left + * @param vScroll notches away from the user, negative for towards + */ + public void inject(float nx, float ny, float hScroll, float vScroll) { + if (hScroll == 0f && vScroll == 0f) { + return; + } + + Size size = displaySize.get(); + if (size == null) { + Logger.v("Ignoring scroll, the display size is not known yet"); + return; + } + + long now = SystemClock.uptimeMillis(); + + MotionEvent.PointerProperties properties = new MotionEvent.PointerProperties(); + properties.id = 0; + properties.toolType = MotionEvent.TOOL_TYPE_MOUSE; + + MotionEvent.PointerCoords coords = new MotionEvent.PointerCoords(); + coords.x = size.pixelX(nx); + coords.y = size.pixelY(ny); + coords.setAxisValue(MotionEvent.AXIS_VSCROLL, vScroll); + coords.setAxisValue(MotionEvent.AXIS_HSCROLL, hScroll); + + // A mouse has to be hovering over a view before a scroll means anything to it, + // and nothing else moves this pointer: the Editor sends a position with every + // scroll, not a stream of moves. So the hover is sent first, every time. + inject(MotionEvent.ACTION_HOVER_MOVE, now, properties, coords); + inject(MotionEvent.ACTION_SCROLL, now, properties, coords); + } + + private void inject(int action, long now, MotionEvent.PointerProperties properties, + MotionEvent.PointerCoords coords) { + // downTime is now: a scroll has no gesture behind it, so it is its own. + MotionEvent event = InputManagerWrapper.obtainMotionEvent( + now, now, action, properties, coords, InputDevice.SOURCE_MOUSE); + + if (!inputManager.inject(event, displayId)) { + Logger.d("Scroll event " + action + " was rejected"); + } + } +} diff --git a/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/Server.java b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/Server.java new file mode 100644 index 00000000..066e01ac --- /dev/null +++ b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/Server.java @@ -0,0 +1,229 @@ +package com.unity.android.logcat.server; + +import com.unity.android.logcat.server.wrappers.DisplayManagerWrapper; +import com.unity.android.logcat.server.wrappers.InputManagerWrapper; + +import android.net.LocalServerSocket; +import android.net.LocalSocket; + +import java.io.IOException; +import java.io.InputStream; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * Entry point of the on-device server. + *

+ * It is started by the Editor as: + * + *

+ * adb push unity-logcat-server.jar /data/local/tmp/
+ * adb shell CLASSPATH=/data/local/tmp/unity-logcat-server.jar \
+ *     app_process / com.unity.android.logcat.server.Server max_size=1024
+ * 
+ * + * and then reached over an abstract unix socket that the Editor forwards to a + * local TCP port: + * + *
+ * adb forward tcp:0 localabstract:unity_logcat_server
+ * 
+ * + *

Why a socket and not stdout

+ * Frames could be written to stdout and read from the {@code adb shell} process, + * as {@code screenrecord} does. A socket is used instead because it is + * bidirectional - the same connection can later carry input events from the + * Editor back to the device - and because it keeps frame data off a stream that + * also carries log output. + */ +public final class Server { + private static final String USAGE = "Usage: app_process / com.unity.android.logcat.server.Server [key=value ...]\n" + + " socket_name= abstract unix socket to listen on\n" + + " display_id= display to capture (default 0)\n" + + " max_size= longest side of the stream, 0 for native (default 1024)\n" + + " quality=<1..100> JPEG quality (default 70)\n" + + " max_fps=<1..240> frame rate cap (default 30)\n" + + " connect_timeout_ms= how long to wait for the Editor (default 10000, 0 waits forever)\n" + + " log_level="; + + private Server() { + } + + public static void main(String... args) { + Thread.setDefaultUncaughtExceptionHandler((thread, throwable) -> + Logger.e("Uncaught exception on thread " + thread.getName(), throwable)); + + int exitCode = 0; + try { + Options options = Options.parse(args); + Logger.setLevel(options.getLogLevel()); + Logger.d("Protocol version " + BuildConfig.PROTOCOL_VERSION + ", options: " + options); + run(options); + Logger.i("Stopped"); + } catch (IllegalArgumentException e) { + Logger.e(e.getMessage()); + Logger.e(USAGE); + exitCode = 2; + } catch (Throwable t) { + Logger.e("Server failed", t); + exitCode = 1; + } + + // app_process does not exit on its own while a Looper or a non-daemon + // thread is alive, and the Editor is waiting for its adb shell to return. + System.exit(exitCode); + } + + private static void run(Options options) throws Exception { + DisplayManagerWrapper displayManager = DisplayManagerWrapper.create(); + + LocalServerSocket serverSocket = new LocalServerSocket(options.getSocketName()); + Logger.i("Listening on localabstract:" + options.getSocketName()); + + LocalSocket socket = null; + ScreenStreamer streamer = null; + try { + socket = accept(serverSocket, options.getConnectTimeoutMs()); + Logger.d("Client connected"); + + Protocol protocol = new Protocol(socket.getOutputStream()); + + streamer = new ScreenStreamer(options, protocol, displayManager); + + // Input injection is optional: a device that will not allow it still + // streams fine, so a failure here is reported in the header rather than + // taken as fatal. Touch and keys share one input manager, so they are + // available together or not at all. + InputManagerWrapper inputManager = createInputManager(); + TouchInjector touchInjector = inputManager == null + ? null + : new TouchInjector(inputManager, streamer::getDisplaySize, options.getDisplayId()); + KeyInjector keyInjector = inputManager == null + ? null + : new KeyInjector(inputManager, options.getDisplayId()); + ScrollInjector scrollInjector = inputManager == null + ? null + : new ScrollInjector(inputManager, streamer::getDisplaySize, options.getDisplayId()); + int flags = inputManager != null ? Protocol.FLAG_CONTROL_SUPPORTED : 0; + + // Sent before anything else: `adb forward` succeeds as soon as the + // socket exists, so the header is what tells the Editor it is really + // talking to a server of a version it understands. + protocol.writeStreamHeader(Protocol.CODEC_MJPEG, flags, android.os.Process.myPid()); + + startControlReader(socket, streamer, touchInjector, keyInjector, scrollInjector); + streamer.stream(); + } finally { + // Socket first: it unblocks a capture thread parked in a write, so + // that closing the streamer does not have to wait for the timeout. + closeQuietly(socket); + if (streamer != null) { + streamer.close(); + } + closeQuietly(serverSocket); + } + } + + /** + * Waits for the Editor to connect, giving up after {@code timeoutMs} so that a + * server whose Editor died does not sit on the device forever. A timeout of 0 + * waits indefinitely. + */ + private static LocalSocket accept(LocalServerSocket serverSocket, int timeoutMs) throws IOException { + if (timeoutMs <= 0) { + return serverSocket.accept(); + } + + // Whichever of the two paths wins this CAS decides the outcome, so a client + // arriving exactly as the timeout expires cannot be half-accepted. + AtomicBoolean decided = new AtomicBoolean(); + + Thread watchdog = new Thread(() -> { + try { + Thread.sleep(timeoutMs); + } catch (InterruptedException e) { + return; + } + if (decided.compareAndSet(false, true)) { + Logger.e("No client connected within " + timeoutMs + " ms, giving up"); + // Note: closing the server socket here would NOT unblock the + // accept() below. On Linux, closing a file descriptor from another + // thread does not interrupt an accept() already parked on it, so + // that leaves the process wedged forever - the exact orphan this + // timeout exists to prevent. Exiting is what actually works, and + // nothing has been claimed yet that needs unwinding: no client, no + // capture session, and the kernel reclaims the socket. + System.exit(1); + } + }, "unity-logcat-accept-timeout"); + watchdog.setDaemon(true); + watchdog.start(); + + try { + LocalSocket socket = serverSocket.accept(); + if (!decided.compareAndSet(false, true)) { + // The watchdog got there first and the process is already exiting. + closeQuietly(socket); + throw new IOException("Client connected as the accept timeout expired"); + } + return socket; + } finally { + watchdog.interrupt(); + } + } + + private static InputManagerWrapper createInputManager() { + try { + return InputManagerWrapper.create(); + } catch (ReflectiveOperationException | RuntimeException e) { + Logger.w("Input injection is unavailable, the stream will be view-only", e); + return null; + } + } + + /** + * Reads control messages from the Editor, and notices it going away. + *

+ * Reading is also what detects a disconnect while the screen is static: with no + * frames being produced there is no write to fail, so EOF here is the only signal. + */ + private static void startControlReader(LocalSocket socket, ScreenStreamer streamer, + TouchInjector touchInjector, KeyInjector keyInjector, ScrollInjector scrollInjector) + throws IOException { + InputStream input = socket.getInputStream(); + Thread thread = new Thread( + new ControlReader(input, touchInjector, keyInjector, scrollInjector, streamer::close), + "unity-logcat-control"); + thread.setDaemon(true); + thread.start(); + } + + private static void closeQuietly(LocalSocket socket) { + if (socket == null) { + return; + } + try { + socket.close(); + } catch (IOException e) { + Logger.v("Ignoring close failure: " + e); + } + } + + /** + * Deliberately typed to the class rather than to {@link java.io.Closeable}: + * {@code LocalServerSocket} only declares that interface from API 29, so on an older + * device closing it through the interface throws {@code IncompatibleClassChangeError} + * - an Error, which escaped the shutdown path and made every stop report a failure. + * Calling the class's own {@code close()} compiles to a virtual call that works on + * every API level we support. + */ + private static void closeQuietly(LocalServerSocket serverSocket) { + if (serverSocket == null) { + return; + } + try { + serverSocket.close(); + } catch (IOException e) { + Logger.v("Ignoring close failure: " + e); + } + } +} diff --git a/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/Size.java b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/Size.java new file mode 100644 index 00000000..274ea4da --- /dev/null +++ b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/Size.java @@ -0,0 +1,98 @@ +package com.unity.android.logcat.server; + +/** Immutable width/height pair. */ +public final class Size { + /** + * Captured dimensions are rounded down to a multiple of this. Matching the + * buffer alignment the graphics stack wants keeps {@code Image.Plane} row + * padding at zero on most devices, which lets a frame be turned into a + * {@link android.graphics.Bitmap} without an intermediate copy. + */ + private static final int ALIGNMENT = 8; + + private final int width; + private final int height; + + public Size(int width, int height) { + this.width = width; + this.height = height; + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } + + /** + * Maps a normalized horizontal position, 0..1, onto these pixels. Clamped rather + * than rejected: a drag that runs off the edge of the view in the Editor should + * still read as a swipe to the edge of the screen. + */ + public float pixelX(float normalized) { + return clamp01(normalized) * width; + } + + /** The same down the display. */ + public float pixelY(float normalized) { + return clamp01(normalized) * height; + } + + private static float clamp01(float value) { + if (value < 0f) { + return 0f; + } + return value > 1f ? 1f : value; + } + + /** + * Scales down so that the longest side is at most {@code maxSize}, preserving + * aspect ratio. A {@code maxSize} of 0 means "do not scale", but the result is + * aligned either way. + */ + public Size limit(int maxSize) { + int w = width; + int h = height; + + if (maxSize > 0 && (w > maxSize || h > maxSize)) { + if (w > h) { + h = h * maxSize / w; + w = maxSize; + } else { + w = w * maxSize / h; + h = maxSize; + } + } + + return new Size(align(w), align(h)); + } + + private static int align(int value) { + int aligned = value & ~(ALIGNMENT - 1); + return aligned < ALIGNMENT ? ALIGNMENT : aligned; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof Size)) { + return false; + } + Size other = (Size) o; + return width == other.width && height == other.height; + } + + @Override + public int hashCode() { + return width * 31 + height; + } + + @Override + public String toString() { + return width + "x" + height; + } +} diff --git a/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/TouchInjector.java b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/TouchInjector.java new file mode 100644 index 00000000..8f8396f6 --- /dev/null +++ b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/TouchInjector.java @@ -0,0 +1,115 @@ +package com.unity.android.logcat.server; + +import com.unity.android.logcat.server.wrappers.InputManagerWrapper; + +import android.os.SystemClock; +import android.view.InputDevice; +import android.view.MotionEvent; + +import java.util.function.Supplier; + +/** + * Turns normalized touch positions from the Editor into {@link MotionEvent}s injected + * into the device. + *

+ * Positions arrive normalized rather than in pixels because the Editor's idea of the + * screen size is always at least one frame stale, and can be a whole rotation stale. + * Scaling here, against the display size the capture session is currently using, means + * a touch always lands where the user pointed even if the display changed size in the + * meantime. + */ +public final class TouchInjector { + public static final int ACTION_DOWN = 0; + public static final int ACTION_UP = 1; + public static final int ACTION_MOVE = 2; + public static final int ACTION_CANCEL = 3; + + private static final int MAX_POINTERS = 10; + + private final InputManagerWrapper inputManager; + private final Supplier displaySize; + private final int displayId; + + // One gesture per pointer. MotionEvent needs the time of the DOWN that started the + // gesture on every later event, so it is remembered here rather than sent over the + // wire: 0 means "this pointer is not down". + private final long[] downTimes = new long[MAX_POINTERS]; + + public TouchInjector(InputManagerWrapper inputManager, Supplier displaySize, int displayId) { + this.inputManager = inputManager; + this.displaySize = displaySize; + this.displayId = displayId; + } + + /** + * @param action one of the ACTION_* constants + * @param pointerId which finger, 0 based + * @param nx horizontal position, 0..1 across the display + * @param ny vertical position, 0..1 down the display + * @param pressure 0..1 + */ + public void inject(int action, int pointerId, float nx, float ny, float pressure) { + if (pointerId < 0 || pointerId >= MAX_POINTERS) { + Logger.w("Ignoring touch for pointer " + pointerId + ", only 0.." + (MAX_POINTERS - 1) + " are supported"); + return; + } + + Size size = displaySize.get(); + if (size == null) { + Logger.v("Ignoring touch, the display size is not known yet"); + return; + } + + long now = SystemClock.uptimeMillis(); + int motionAction; + + switch (action) { + case ACTION_DOWN: + downTimes[pointerId] = now; + motionAction = MotionEvent.ACTION_DOWN; + break; + case ACTION_MOVE: + motionAction = MotionEvent.ACTION_MOVE; + break; + case ACTION_UP: + motionAction = MotionEvent.ACTION_UP; + break; + case ACTION_CANCEL: + motionAction = MotionEvent.ACTION_CANCEL; + break; + default: + Logger.w("Ignoring unknown touch action " + action); + return; + } + + long downTime = downTimes[pointerId]; + if (downTime == 0) { + // A move or an up with no down in front of it - the Editor and the device + // disagree about the gesture, most likely because the stream restarted + // mid-drag. Dropping it is better than injecting a malformed gesture. + Logger.v("Ignoring touch action " + action + " for pointer " + pointerId + ", it is not down"); + return; + } + + if (motionAction == MotionEvent.ACTION_UP || motionAction == MotionEvent.ACTION_CANCEL) { + downTimes[pointerId] = 0; + } + + MotionEvent.PointerProperties properties = new MotionEvent.PointerProperties(); + properties.id = pointerId; + properties.toolType = MotionEvent.TOOL_TYPE_FINGER; + + MotionEvent.PointerCoords coords = new MotionEvent.PointerCoords(); + coords.x = size.pixelX(nx); + coords.y = size.pixelY(ny); + // A touchscreen event with zero pressure and size reads as a hover on some + // devices, so an active pointer always reports some. + coords.pressure = motionAction == MotionEvent.ACTION_UP + ? 0f + : Math.min(Math.max(pressure, 0.1f), 1f); + coords.size = 1f; + + inputManager.inject(InputManagerWrapper.obtainMotionEvent( + downTime, now, motionAction, properties, coords, InputDevice.SOURCE_TOUCHSCREEN), displayId); + } +} diff --git a/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/wrappers/DisplayManagerWrapper.java b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/wrappers/DisplayManagerWrapper.java new file mode 100644 index 00000000..bf593a75 --- /dev/null +++ b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/wrappers/DisplayManagerWrapper.java @@ -0,0 +1,81 @@ +package com.unity.android.logcat.server.wrappers; + +import com.unity.android.logcat.server.DisplayInfo; +import com.unity.android.logcat.server.Logger; +import com.unity.android.logcat.server.Size; + +import android.annotation.SuppressLint; +import android.hardware.display.VirtualDisplay; +import android.view.Surface; + +import java.lang.reflect.Method; + +/** + * Reflection over {@code android.hardware.display.DisplayManagerGlobal}. + *

+ * The public {@code DisplayManager} API cannot mirror a display into a surface + * without the {@code CAPTURE_VIDEO_OUTPUT} permission, which a shell process + * cannot hold. The hidden API can, and the server runs as {@code shell} via + * app_process, so it is allowed to call it. + */ +@SuppressLint("PrivateApi") +public final class DisplayManagerWrapper { + private final Object manager; // android.hardware.display.DisplayManagerGlobal + private Method getDisplayInfoMethod; + private Method createVirtualDisplayMethod; + + private DisplayManagerWrapper(Object manager) { + this.manager = manager; + } + + public static DisplayManagerWrapper create() throws ReflectiveOperationException { + Class clazz = Class.forName("android.hardware.display.DisplayManagerGlobal"); + Object instance = clazz.getDeclaredMethod("getInstance").invoke(null); + return new DisplayManagerWrapper(instance); + } + + /** @return null when the display does not exist. */ + public DisplayInfo getDisplayInfo(int displayId) throws ReflectiveOperationException { + if (getDisplayInfoMethod == null) { + getDisplayInfoMethod = manager.getClass().getMethod("getDisplayInfo", int.class); + } + Object displayInfo = getDisplayInfoMethod.invoke(manager, displayId); + if (displayInfo == null) { + return null; + } + + Class cls = displayInfo.getClass(); + // logicalWidth/logicalHeight already account for the current rotation. + int width = cls.getDeclaredField("logicalWidth").getInt(displayInfo); + int height = cls.getDeclaredField("logicalHeight").getInt(displayInfo); + int rotation = cls.getDeclaredField("rotation").getInt(displayInfo); + int layerStack = cls.getDeclaredField("layerStack").getInt(displayInfo); + int flags = cls.getDeclaredField("flags").getInt(displayInfo); + int dpi = cls.getDeclaredField("logicalDensityDpi").getInt(displayInfo); + + return new DisplayInfo(displayId, new Size(width, height), rotation, layerStack, flags, dpi); + } + + public int[] getDisplayIds() { + try { + return (int[]) manager.getClass().getMethod("getDisplayIds").invoke(manager); + } catch (ReflectiveOperationException e) { + Logger.w("Could not list display ids", e); + return new int[] { 0 }; + } + } + + /** + * Creates a virtual display mirroring {@code displayIdToMirror} into + * {@code surface}, via the hidden static + * {@code DisplayManager.createVirtualDisplay(String, int, int, int, Surface)}. + */ + public VirtualDisplay createVirtualDisplay(String name, int width, int height, int displayIdToMirror, Surface surface) + throws ReflectiveOperationException { + if (createVirtualDisplayMethod == null) { + createVirtualDisplayMethod = android.hardware.display.DisplayManager.class + .getMethod("createVirtualDisplay", String.class, int.class, int.class, int.class, Surface.class); + } + return (VirtualDisplay) createVirtualDisplayMethod.invoke(null, name, width, height, displayIdToMirror, surface); + } +} diff --git a/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/wrappers/InputManagerWrapper.java b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/wrappers/InputManagerWrapper.java new file mode 100644 index 00000000..8ddf9cc2 --- /dev/null +++ b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/wrappers/InputManagerWrapper.java @@ -0,0 +1,149 @@ +package com.unity.android.logcat.server.wrappers; + +import com.unity.android.logcat.server.Logger; + +import android.annotation.SuppressLint; +import android.view.InputEvent; +import android.view.MotionEvent; + +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + +/** + * Reflection over the hidden input injection API. + *

+ * Injecting an event into a window the caller does not own needs the + * {@code INJECT_EVENTS} signature permission, which an app cannot hold but the + * {@code shell} user can - so this works here and would not work from a normal app. + */ +@SuppressLint("PrivateApi") +public final class InputManagerWrapper { + /** android.hardware.input.InputManager.INJECT_INPUT_EVENT_MODE_ASYNC */ + private static final int INJECT_INPUT_EVENT_MODE_ASYNC = 0; + + private final Object manager; + private final Method injectInputEventMethod; + + private InputManagerWrapper(Object manager, Method injectInputEventMethod) { + this.manager = manager; + this.injectInputEventMethod = injectInputEventMethod; + } + + public static InputManagerWrapper create() throws ReflectiveOperationException { + Object manager; + try { + // Android 14 moved the singleton to InputManagerGlobal and removed + // InputManager.getInstance(). + Class globalClass = Class.forName("android.hardware.input.InputManagerGlobal"); + manager = globalClass.getDeclaredMethod("getInstance").invoke(null); + Logger.d("Injecting input via InputManagerGlobal"); + } catch (ClassNotFoundException | NoSuchMethodException e) { + Class managerClass = Class.forName("android.hardware.input.InputManager"); + manager = managerClass.getDeclaredMethod("getInstance").invoke(null); + Logger.d("Injecting input via InputManager"); + } + + if (manager == null) { + throw new ReflectiveOperationException("Could not obtain an input manager instance"); + } + + Method method = manager.getClass().getMethod("injectInputEvent", InputEvent.class, int.class); + return new InputManagerWrapper(manager, method); + } + + /** + * Cached per concrete event class, not once for all of them: {@code KeyEvent} and + * {@code MotionEvent} each declare their own {@code setDisplayId}, so a method + * resolved from one and invoked on the other throws + * {@code IllegalArgumentException} - which is not a + * {@code ReflectiveOperationException}, so it would escape the catch below, take + * out the control reader thread and stop the stream with it. + */ + private static final Map, Method> setDisplayIdMethods = new HashMap<>(); + private static boolean setDisplayIdUnavailable; + + /** + * Targets an event at a specific display. Without this an event goes to the default + * display, which is wrong when capturing any other one. The setter is hidden API, so + * a device without it means input on secondary displays does not work - the video + * stream is unaffected, hence a warning rather than a failure. + */ + public static void setDisplayId(InputEvent event, int displayId) { + if (setDisplayIdUnavailable) { + return; + } + Class eventClass = event.getClass(); + try { + // Resolved on the concrete class: KeyEvent and MotionEvent each declare + // their own, and which one exists on InputEvent varies by version. + Method method = setDisplayIdMethods.get(eventClass); + if (method == null) { + method = eventClass.getMethod("setDisplayId", int.class); + setDisplayIdMethods.put(eventClass, method); + } + method.invoke(event, displayId); + } catch (ReflectiveOperationException | IllegalArgumentException e) { + setDisplayIdUnavailable = true; + Logger.w("setDisplayId is unavailable, input will go to the default display", e); + } + } + + /** + * A one pointer {@link MotionEvent} at the given position. The arguments the + * injectors never vary are fixed here, so that the long {@code obtain} call is + * written once. + */ + public static MotionEvent obtainMotionEvent(long downTime, long eventTime, int action, + MotionEvent.PointerProperties properties, MotionEvent.PointerCoords coords, int source) { + return MotionEvent.obtain( + downTime, + eventTime, + action, + 1, // pointerCount + new MotionEvent.PointerProperties[] { properties }, + new MotionEvent.PointerCoords[] { coords }, + 0, // metaState + 0, // buttonState + 1f, // xPrecision + 1f, // yPrecision + 0, // deviceId + 0, // edgeFlags + source, + 0); // flags + } + + /** + * Sends an event to the display being captured and recycles it, which is what every + * injector does with one. + * + * @return false when the event was rejected, which the caller should not treat as fatal. + */ + public boolean inject(InputEvent event, int displayId) { + try { + if (displayId != 0) { + setDisplayId(event, displayId); + } + return injectInputEvent(event); + } finally { + if (event instanceof MotionEvent) { + // A KeyEvent from KeyCharacterMap is not ours to recycle, and recycling + // one that is still referenced is worse than not recycling it at all. + ((MotionEvent) event).recycle(); + } + } + } + + /** @return false when the event was rejected, which the caller should not treat as fatal. */ + public boolean injectInputEvent(InputEvent event) { + try { + // Async: we do not wait for the event to be dispatched. A live view sends a + // steady stream of moves and none of them is worth a round trip. + Object result = injectInputEventMethod.invoke(manager, event, INJECT_INPUT_EVENT_MODE_ASYNC); + return !(result instanceof Boolean) || (Boolean) result; + } catch (ReflectiveOperationException e) { + Logger.w("Failed to inject an input event", e); + return false; + } + } +} diff --git a/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/wrappers/SurfaceControlWrapper.java b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/wrappers/SurfaceControlWrapper.java new file mode 100644 index 00000000..f7c277da --- /dev/null +++ b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/wrappers/SurfaceControlWrapper.java @@ -0,0 +1,64 @@ +package com.unity.android.logcat.server.wrappers; + +import android.annotation.SuppressLint; +import android.graphics.Rect; +import android.os.IBinder; +import android.view.Surface; + +import java.lang.reflect.Method; + +/** + * Reflection over {@code android.view.SurfaceControl}. + *

+ * This is the fallback path for creating a mirrored display. It predates + * {@code DisplayManagerGlobal.createVirtualDisplay} and still works on devices + * where that call is missing or broken, but {@code createDisplay} was removed in + * Android 15, so it cannot be the primary path either. Whichever one works first + * wins - see {@code ScreenStreamer.startSession}. + */ +@SuppressLint("PrivateApi") +public final class SurfaceControlWrapper { + private static final Class CLASS; + + static { + try { + CLASS = Class.forName("android.view.SurfaceControl"); + } catch (ClassNotFoundException e) { + throw new AssertionError(e); + } + } + + private SurfaceControlWrapper() { + } + + public static IBinder createDisplay(String name, boolean secure) throws ReflectiveOperationException { + Method method = CLASS.getMethod("createDisplay", String.class, boolean.class); + return (IBinder) method.invoke(null, name, secure); + } + + public static void destroyDisplay(IBinder displayToken) throws ReflectiveOperationException { + CLASS.getMethod("destroyDisplay", IBinder.class).invoke(null, displayToken); + } + + public static void setDisplaySurface(IBinder displayToken, Surface surface) throws ReflectiveOperationException { + CLASS.getMethod("setDisplaySurface", IBinder.class, Surface.class).invoke(null, displayToken, surface); + } + + public static void setDisplayProjection(IBinder displayToken, int orientation, Rect layerStackRect, Rect displayRect) + throws ReflectiveOperationException { + CLASS.getMethod("setDisplayProjection", IBinder.class, int.class, Rect.class, Rect.class) + .invoke(null, displayToken, orientation, layerStackRect, displayRect); + } + + public static void setDisplayLayerStack(IBinder displayToken, int layerStack) throws ReflectiveOperationException { + CLASS.getMethod("setDisplayLayerStack", IBinder.class, int.class).invoke(null, displayToken, layerStack); + } + + public static void openTransaction() throws ReflectiveOperationException { + CLASS.getMethod("openTransaction").invoke(null); + } + + public static void closeTransaction() throws ReflectiveOperationException { + CLASS.getMethod("closeTransaction").invoke(null); + } +} From 6e8b6af8dbd3868326f2afcece12f71734c8fafa Mon Sep 17 00:00:00 2001 From: Tomas Date: Wed, 23 Sep 2026 15:40:11 +0300 Subject: [PATCH 02/19] Add live screen streaming to the Screen Capture window The window now lists saved screenshots beside a Live row that mirrors the device. Selecting Live starts the server on the device, shows its frames, and forwards touch, scroll, keyboard and text back to it. Along with it: a shared zoom and pan viewer for the live view and screenshot previews, a details file written beside each capture, a stats column, device rotation, and settings for the stream's size, quality and frame rate. Co-Authored-By: Claude Opus 5 --- .../Editor/AndroidLogcatActivityManager.cs | 23 + .../Editor/AndroidLogcatCaptureScreenshot.cs | 325 ++- .../Editor/AndroidLogcatConsoleWindow.cs | 2 +- .../Editor/AndroidLogcatContextMenu.cs | 10 + .../Editor/AndroidLogcatImageViewer.cs | 295 +++ .../Editor/AndroidLogcatImageViewer.cs.meta | 11 + .../Editor/AndroidLogcatLayoutViewerWindow.cs | 2 +- .../Editor/AndroidLogcatLiveStream.cs | 2019 +++++++++++++++++ .../Editor/AndroidLogcatLiveStream.cs.meta | 11 + .../Editor/AndroidLogcatRuntime.cs | 12 + .../AndroidLogcatScreenCaptureWindow.cs | 206 +- .../Editor/AndroidLogcatScreenshotInfo.cs | 201 ++ .../AndroidLogcatScreenshotInfo.cs.meta | 11 + .../Editor/AndroidLogcatScreenshotList.cs | 778 +++++++ .../AndroidLogcatScreenshotList.cs.meta | 2 + .../Editor/AndroidLogcatSettings.cs | 105 + .../Editor/AndroidLogcatSettingsProvider.cs | 43 + .../Editor/AndroidLogcatSettingsRange.cs | 51 + .../Editor/AndroidLogcatSettingsRange.cs.meta | 2 + .../Editor/AndroidLogcatStatsColumn.cs | 65 + .../Editor/AndroidLogcatStatsColumn.cs.meta | 11 + .../Editor/AndroidLogcatUserSettings.cs | 17 +- .../Editor/AndroidLogcatUtilities.cs | 338 +++ 23 files changed, 4482 insertions(+), 58 deletions(-) create mode 100644 com.unity.mobile.android-logcat/Editor/AndroidLogcatImageViewer.cs create mode 100644 com.unity.mobile.android-logcat/Editor/AndroidLogcatImageViewer.cs.meta create mode 100644 com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs create mode 100644 com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs.meta create mode 100644 com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotInfo.cs create mode 100644 com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotInfo.cs.meta create mode 100644 com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs create mode 100644 com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs.meta create mode 100644 com.unity.mobile.android-logcat/Editor/AndroidLogcatSettingsRange.cs create mode 100644 com.unity.mobile.android-logcat/Editor/AndroidLogcatSettingsRange.cs.meta create mode 100644 com.unity.mobile.android-logcat/Editor/AndroidLogcatStatsColumn.cs create mode 100644 com.unity.mobile.android-logcat/Editor/AndroidLogcatStatsColumn.cs.meta diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatActivityManager.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatActivityManager.cs index 8e3f53cf..97010403 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatActivityManager.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatActivityManager.cs @@ -5,6 +5,7 @@ namespace Unity.Android.Logcat internal abstract class IAndroidLogcatActivityManager { internal virtual void StartOrResumePackage(string packageName, string activityName = null) { } + internal virtual void StartAction(string action) { } internal virtual void StopPackage(string packageName) { } internal virtual void StopProcess(int processId) { } internal virtual void CrashPackage(string packageName) { } @@ -60,6 +61,28 @@ internal override void StartOrResumePackage(string packageName, string activityN m_ADB.Run(args.ToArray(), $"Failed to start package '{packageName}'"); } + ///

+ /// Starts whatever handles an intent action, for screens that are reached by + /// action rather than by naming a package - which activity serves one differs + /// between devices, the action does not. + /// + internal override void StartAction(string action) + { + var args = new[] + { + "-s", + m_DeviceId, + "shell", + "am", + "start", + "-a", + action + }; + AndroidLogcatInternalLog.Log($"adb {string.Join(" ", args)}"); + + m_ADB.Run(args, $"Failed to start '{action}'"); + } + internal override void StopPackage(string packageName) { var args = new[] diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatCaptureScreenshot.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatCaptureScreenshot.cs index 18487fd0..966414b4 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatCaptureScreenshot.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatCaptureScreenshot.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using UnityEngine; using UnityEditor; using System.IO; @@ -12,13 +13,19 @@ internal class AndroidLogcatCaptureScreenCaptureInput : IAndroidLogcatTaskInput internal AndroidBridge.ADB adb; internal string imagePath; internal string deviceId; + internal IAndroidLogcatDevice device; internal Action onCompleted; } internal class AndroidLogcatCaptureScreenCaptureResult : IAndroidLogcatTaskResult { internal string imagePath; + // The path AllocateImagePath handed out, which is imagePath on success and + // still needed on failure - that is the reservation to release. + internal string reservedPath; + internal string deviceId; internal string error; + internal AndroidLogcatScreenshotInfo info; internal Action onCompleted; } @@ -28,15 +35,274 @@ internal class AndroidLogcatCaptureScreenCaptureResult : IAndroidLogcatTaskResul private string m_Error; private Rect m_ScreenshotDrawingRect; + /// One saved screenshot on disk. + internal readonly struct Screenshot + { + internal string Path { get; } + /// File name without extension, which is what the list view shows. + internal string Name { get; } + /// + /// The device part of the file name. This is the sanitized device id, so + /// comparing it to a device means sanitizing that id too. + /// + internal string DevicePrefix { get; } + internal int Number { get; } + + internal Screenshot(string path, string devicePrefix, int number) + { + Path = path; + Name = System.IO.Path.GetFileNameWithoutExtension(path); + DevicePrefix = devicePrefix; + Number = number; + } + } + + // Every saved screenshot, of every device. Cached because the window asks for + // this from OnGUI, and scanning the directory every repaint would be disk I/O + // per frame. Rescanned when a capture lands. + private List m_Screenshots; + + // Paths handed out for captures that have not produced a file yet. Held apart + // from the cache above, because dropping that cache must not lose them: a + // capture still in flight has to keep its number reserved or the next capture + // takes the same one and overwrites it. A rescan puts them back. + private readonly HashSet m_ReservedPaths = new HashSet(); + + // What LoadImage last put on screen, which is what Open and Save As act on. + private string m_SelectedImagePath; + public bool IsCapturing => m_CaptureCount > 0; public Texture2D ImageTexture => m_ImageTexture; public string Error => m_Error; public Rect ScreenshotDrawingRect => m_ScreenshotDrawingRect; - public string GetImagePath(IAndroidLogcatDevice device) + + /// The screenshot currently displayed, or empty if there is none. + public string SelectedImagePath => m_SelectedImagePath; + + /// + /// Drops the cached listing so the next reads the + /// directory again. For changes this class did not make - a file added, removed + /// or replaced from outside the Editor - which nothing else can notice. + /// + public void InvalidateScreenshots() + { + m_Screenshots = null; + } + + /// + /// Every saved screenshot, of every device, grouped by device and numbered + /// ascending within each. + /// + public IReadOnlyList GetScreenshots() + { + if (m_Screenshots == null) + m_Screenshots = ScanScreenshots(); + return m_Screenshots; + } + + /// + /// The most recent screenshot captured for this device, or empty when there is + /// none. Screenshots are numbered rather than overwritten, so "the" path is + /// whichever one was taken last. + /// + public string GetLatestImagePath(IAndroidLogcatDevice device) { if (device == null) return string.Empty; - return AndroidLogcatUtilities.GetTemporaryPath(device, "screenshot", GetImageExtension()); + + var prefix = AndroidLogcatUtilities.SanitizeFileName(device.Id); + var screenshots = GetScreenshots(); + // Ordered by number within a device, so the last match is the newest. + for (var i = screenshots.Count - 1; i >= 0; i--) + { + if (screenshots[i].DevicePrefix == prefix) + return screenshots[i].Path; + } + return string.Empty; + } + + /// + /// Reserves the next free path, <device_id>_<number>.png under + /// , and makes sure + /// the directory exists - adb pull will not create it. + /// + private string AllocateImagePath(IAndroidLogcatDevice device) + { + var directory = AndroidLogcatUtilities.GetScreenshotsDirectory(); + Directory.CreateDirectory(directory); + + var prefix = AndroidLogcatUtilities.SanitizeFileName(device.Id); + var screenshots = GetScreenshots(); + + // Numbering is per device, so only this device's entries count. + var number = 1; + foreach (var screenshot in screenshots) + { + if (screenshot.DevicePrefix == prefix && screenshot.Number >= number) + number = screenshot.Number + 1; + } + + var path = Path.Combine(directory, $"{prefix}_{number}{GetImageExtension()}").Replace("\\", "/"); + + // The reservation is what stops a second capture queued before this file + // exists from picking the same number - the list is counted from, not the + // directory. It is both recorded and added to the live list, so it survives + // a rescan and is visible to the next allocation either way. The completion + // handler releases it. The Layout Viewer can queue captures without waiting + // for the previous one, so this is reachable. + m_ReservedPaths.Add(path); + m_Screenshots.Add(new Screenshot(path, prefix, number)); + m_Screenshots.Sort(CompareScreenshots); + return path; + } + + private List ScanScreenshots() + { + var screenshots = new List(); + var directory = AndroidLogcatUtilities.GetScreenshotsDirectory(); + if (!Directory.Exists(directory)) + return screenshots; + + foreach (var file in Directory.GetFiles(directory, $"*{GetImageExtension()}")) + { + var name = Path.GetFileNameWithoutExtension(file); + + // Split at the last underscore: a device id can contain one itself once + // sanitized, e.g. an ip:port becomes 192.168.1.5_5555, so only the part + // after the final underscore is the number. + // + // A name that does not match is still listed, with no device and no + // number. Renaming is allowed, and a file dropped in here by hand should + // show up too - being unable to see a file that is plainly in the folder + // would be worse than not knowing which device it came from. + var devicePrefix = string.Empty; + var number = 0; + var separator = name.LastIndexOf('_'); + if (separator > 0 && int.TryParse(name.Substring(separator + 1), out number)) + devicePrefix = name.Substring(0, separator); + else + number = 0; + + screenshots.Add(new Screenshot(file.Replace("\\", "/"), devicePrefix, number)); + } + + // Captures that are still in flight have no file yet, so a scan would not + // see them - and the number they reserved would be handed out twice. + foreach (var reserved in m_ReservedPaths) + { + if (File.Exists(reserved)) + continue; + + var name = Path.GetFileNameWithoutExtension(reserved); + var separator = name.LastIndexOf('_'); + if (separator > 0 && int.TryParse(name.Substring(separator + 1), out var reservedNumber)) + screenshots.Add(new Screenshot(reserved, name.Substring(0, separator), reservedNumber)); + } + + screenshots.Sort(CompareScreenshots); + return screenshots; + } + + /// + /// Groups by device, then orders by number. GetFiles order is filesystem + /// dependent, and sorting the names as strings would put #10 before #2. Renamed + /// files have no device or number, so they sort last, by name. + /// + private static int CompareScreenshots(Screenshot a, Screenshot b) + { + var aNamed = string.IsNullOrEmpty(a.DevicePrefix); + var bNamed = string.IsNullOrEmpty(b.DevicePrefix); + if (aNamed != bNamed) + return aNamed ? 1 : -1; + if (aNamed) + return string.Compare(a.Name, b.Name, StringComparison.Ordinal); + + var byDevice = string.Compare(a.DevicePrefix, b.DevicePrefix, StringComparison.Ordinal); + return byDevice != 0 ? byDevice : a.Number.CompareTo(b.Number); + } + + /// + /// Renames a saved screenshot, keeping it in the same directory and keeping its + /// extension. A name that no longer matches + /// <device_id>_<number> is fine: it stays in the list, just + /// without a device or a number, and is never picked as "the latest" for a device. + /// + /// False if the name is unusable or the move failed, which is logged. + public bool RenameScreenshot(string path, string newName) + { + if (string.IsNullOrEmpty(path) || !File.Exists(path)) + return false; + + newName = newName == null ? string.Empty : newName.Trim(); + if (newName.Length == 0) + return false; + + if (newName.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0) + { + UnityEngine.Debug.LogError($"'{newName}' is not a usable file name."); + return false; + } + + var directory = Path.GetDirectoryName(path); + var target = Path.Combine(directory, newName + GetImageExtension()).Replace("\\", "/"); + if (target == path) + return true; + + if (File.Exists(target)) + { + UnityEngine.Debug.LogError($"'{newName}{GetImageExtension()}' already exists."); + return false; + } + + try + { + File.Move(path, target); + } + catch (Exception ex) + { + UnityEngine.Debug.LogError($"Failed to rename '{path}' to '{target}'.\n{ex.Message}"); + return false; + } + + AndroidLogcatScreenshotInfo.Move(path, target); + + // Rescan, so the list picks up the new name and reorders. + InvalidateScreenshots(); + + // Keep showing the same image, now under its new path. + if (m_SelectedImagePath == path) + m_SelectedImagePath = target; + + return true; + } + + /// + /// Removes a saved screenshot from disk. If it was the one on screen, the image + /// is cleared too - the caller decides what to show instead. + /// + /// False if the file could not be removed, which is already logged. + public bool DeleteScreenshot(string path) + { + try + { + if (File.Exists(path)) + File.Delete(path); + } + catch (Exception ex) + { + UnityEngine.Debug.LogError($"Failed to delete '{path}'.\n{ex.Message}"); + return false; + } + + AndroidLogcatScreenshotInfo.Delete(path); + + // Rescan, so the list loses the row. + InvalidateScreenshots(); + + if (m_SelectedImagePath == path) + LoadImage(string.Empty); + + return true; } public string GetImageExtension() @@ -58,8 +324,10 @@ public void QueueScreenCapture(IAndroidLogcatDevice device, Action onCompleted) new AndroidLogcatCaptureScreenCaptureInput() { adb = m_Runtime.Tools.ADB, - imagePath = GetImagePath(device), + // Allocated here on the main thread, before the task is scheduled. + imagePath = AllocateImagePath(device), deviceId = device.Id, + device = device, onCompleted = onCompleted }, ExecuteScreenCapture, @@ -76,7 +344,12 @@ private static IAndroidLogcatTaskResult ExecuteScreenCapture(IAndroidLogcatTaskI return new AndroidLogcatCaptureScreenCaptureResult() { imagePath = result ? i.imagePath : null, + reservedPath = i.imagePath, + deviceId = i.deviceId, error = error, + // Read here because it asks the device; written on the main thread, + // where JsonUtility is safe to call. + info = result ? AndroidLogcatScreenshotInfo.Create(i.device) : null, onCompleted = i.onCompleted }; } @@ -87,20 +360,66 @@ private void IntegrateCaptureScreenShot(IAndroidLogcatTaskResult result) m_CaptureCount--; var captureResult = (AndroidLogcatCaptureScreenCaptureResult)result; m_Error = captureResult.error; + + // This capture's reservation is done with: the file either exists now or + // never will. Only this one is released - reservations for captures still + // in flight have to stand, which is why they do not live in the cache. + m_ReservedPaths.Remove(captureResult.reservedPath); + + captureResult.info?.Save(captureResult.imagePath); + + // Drop the cache so the new file appears in the list, and so a failed + // capture's entry disappears again. One rescan per capture, rather than per + // repaint, which is what the cache is there for. + InvalidateScreenshots(); + LoadImage(captureResult.imagePath); captureResult.onCompleted(); } + /// + /// Records which screenshot is selected without touching + /// , for a window that shows the image itself. + /// + /// The texture here is shared with the Layout Viewer, which draws its node + /// bounds over it while holding a hierarchy queried against a particular + /// screenshot. Loading a historical screenshot into it from the capture list + /// would leave that overlay drawn over an unrelated image, so the list keeps + /// its own texture and only the path is shared. + /// + /// + public void SelectImage(string imagePath) + { + m_SelectedImagePath = string.IsNullOrEmpty(imagePath) + ? string.Empty + : imagePath.Replace("\\", "/"); + + // As in LoadImage: an image to show supersedes the last capture's error. + if (!string.IsNullOrEmpty(m_SelectedImagePath)) + m_Error = string.Empty; + } + public void LoadImage(string imagePath) { m_ImageTexture = null; + m_SelectedImagePath = string.Empty; if (string.IsNullOrEmpty(imagePath)) return; if (!File.Exists(imagePath)) return; + // An image to show supersedes the last capture's error, which DoGUI draws + // in preference to the texture and nothing else would ever clear - leaving + // every saved screenshot hidden behind it until a capture succeeded. Done + // after the returns above, so a failed capture keeps the error it just set. + m_Error = string.Empty; + + // Normalized so it compares equal to the paths in the screenshot list, + // which the list view uses to mark the selected row. + m_SelectedImagePath = imagePath.Replace("\\", "/"); + var imageData = File.ReadAllBytes(imagePath); m_ImageTexture = new Texture2D(2, 2); diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatConsoleWindow.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatConsoleWindow.cs index 5ce27cda..73efafb3 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatConsoleWindow.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatConsoleWindow.cs @@ -154,7 +154,7 @@ private void TagSelectionChanged() RestartLogCat(); } - private void FilterByProcessId(int processId) + internal void FilterByProcessId(int processId) { var selectedDevice = m_Runtime.DeviceQuery.SelectedDevice; var processes = m_Runtime.UserSettings.GetKnownProcesses(selectedDevice); diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatContextMenu.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatContextMenu.cs index 46b747e1..979c833a 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatContextMenu.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatContextMenu.cs @@ -39,6 +39,16 @@ internal enum FilterContextMenu MatchCase } + internal enum ScreenshotContextMenu + { + None, + ShowInFileBrowser, + Open, + SaveAs, + Rename, + Reconnect + } + class AndroidContextMenu { internal class MenuItemData diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatImageViewer.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatImageViewer.cs new file mode 100644 index 00000000..414708eb --- /dev/null +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatImageViewer.cs @@ -0,0 +1,295 @@ +using System; +using UnityEditor; +using UnityEngine; + +namespace Unity.Android.Logcat +{ + /// + /// Zoom and pan for an image drawn into a rect handed down by a window - the live + /// view and the saved screenshots both draw through it. Ctrl and the wheel zoom, + /// Ctrl and a middle mouse drag move the zoomed image, and scrollbars appear with + /// it. Everything else is left alone, because the live view forwards clicks, the + /// plain wheel and keys to the device. + /// + internal class AndroidLogcatImageViewer + { + static class Styles + { + static readonly string kModifier = + Application.platform == RuntimePlatform.OSXEditor ? "Cmd" : "Ctrl"; + + static readonly string Gestures = + $"{kModifier}+Wheel over the image zooms between 100% and 4000%, " + + $"{kModifier}+Middle mouse drag moves the zoomed image."; + + internal static GUIContent Zoom(int percent) + { + return new GUIContent($"{percent}%", Gestures); + } + + static GUIStyle s_Badge; + + /// + /// A help box that does not wrap. The standard one does, and CalcSize being + /// a fraction short of what it then needs breaks "168%" across two lines. + /// + internal static GUIStyle Badge + { + get + { + if (s_Badge == null) + { + s_Badge = new GUIStyle(EditorStyles.helpBox); + s_Badge.wordWrap = false; + s_Badge.alignment = TextAnchor.MiddleCenter; + s_Badge.padding = new RectOffset(6, 6, 2, 2); + } + return s_Badge; + } + } + } + + internal const float kMinZoom = 1.0f; + internal const float kMaxZoom = 40.0f; + + // Four notches of the wheel double the zoom. A factor rather than a fixed step, + // because a step that is a sensible move at 100% is invisible at 4000%. + const float kWheelDeltaPerNotch = 3.0f; + const float kNotchesPerDoubling = 4.0f; + const int kMiddleMouseButton = 2; + const float kBadgeMargin = 4; + // Deliberately more than a scrollbar takes. It only bounds how far the image can + // be moved, and BeginScrollView clamps what it is handed, so guessing high costs + // nothing where guessing low leaves a strip of the image unreachable. + const float kScrollbarSize = 20; + + float m_Zoom = kMinZoom; + Vector2 m_Scroll; + bool m_Panning; + + internal float Zoom => m_Zoom; + internal Vector2 Scroll => m_Scroll; + internal int ZoomPercent => Mathf.RoundToInt(m_Zoom * 100); + internal bool IsZoomed => m_Zoom > kMinZoom; + + internal void Reset() + { + m_Zoom = kMinZoom; + m_Scroll = Vector2.zero; + } + + /// + /// Draws an image of the given aspect ratio into and + /// returns the box it is seen through, for laying out whatever sits beside it. + /// is handed the image rect, which is only + /// meaningful inside the scroll view - the same space the live view reads the + /// mouse in. covers the views that are not already + /// repainting, a stopped stream or a screenshot. + /// + internal Rect DoGUI(Rect area, float aspect, Action drawContents, Action repaint) + { + // Allocated on every pass whatever the state, so that the ids handed out + // after it do not shift between the Layout and Repaint passes. + var controlId = GUIUtility.GetControlID(FocusType.Passive); + + // Both before the scroll view, so neither it nor the contents see these + // events first: the live view forwards a plain wheel to the device, and the + // scroll view would scroll on it. + var box = ViewBox(area, aspect, out _); + HandleZoom(area, aspect, box, repaint); + HandlePan(controlId, area, aspect, box, repaint); + + box = ViewBox(area, aspect, out var image); + var content = new Rect(0, 0, image.x, image.y); + + m_Scroll = GUI.BeginScrollView(box, m_Scroll, content); + drawContents(content); + GUI.EndScrollView(); + + // Outside the scroll view, or it would scroll away with the image. + if (IsZoomed) + DoZoomBadgeGUI(box); + + return box; + } + + /// + /// The box the image is seen through, centred in the area, and the size the + /// image is drawn at. The box is the image's own size until the image outgrows + /// the area: at 100% that is exactly the fitted image, and a zoomed portrait + /// screen keeps the scrollbar against its edge rather than across the letterbox. + /// + Rect ViewBox(Rect area, float aspect, out Vector2 image) + { + var fitted = FitRect(area, aspect); + image = new Vector2(fitted.width, fitted.height) * m_Zoom; + + // Room for whichever scrollbar the image is about to need. + var want = image; + if (image.y > area.height) + want.x += kScrollbarSize; + if (image.x > area.width) + want.y += kScrollbarSize; + + var size = new Vector2(Mathf.Min(area.width, want.x), Mathf.Min(area.height, want.y)); + return new Rect( + area.x + (area.width - size.x) * 0.5f, + area.y + (area.height - size.y) * 0.5f, + size.x, size.y); + } + + static Rect FitRect(Rect container, float aspect) + { + if (container.width <= 0 || container.height <= 0 || aspect <= 0) + return container; + + if (aspect > container.width / container.height) + { + var height = container.width / aspect; + return new Rect(container.x, container.y + (container.height - height) * 0.5f, container.width, height); + } + + var width = container.height * aspect; + return new Rect(container.x + (container.width - width) * 0.5f, container.y, width, container.height); + } + + /// + /// Zooms by one wheel movement, keeping whatever is under + /// where it is. Positive deltas zoom out, matching + /// the wheel. Returns false when the zoom was already at the end of its range. + /// + internal bool ZoomAt(Rect area, float aspect, Vector2 pointer, float wheelDelta) + { + if (area.width <= 0 || area.height <= 0) + return false; + + var doublings = -wheelDelta / (kWheelDeltaPerNotch * kNotchesPerDoubling); + var zoom = Mathf.Clamp(m_Zoom * Mathf.Pow(2.0f, doublings), kMinZoom, kMaxZoom); + if (Mathf.Approximately(zoom, m_Zoom)) + return false; + + var box = ViewBox(area, aspect, out var image); + if (image.x <= 0 || image.y <= 0) + { + m_Zoom = zoom; + return true; + } + + var pointOnImage = new Vector2( + (pointer.x - box.x + m_Scroll.x) / image.x, + (pointer.y - box.y + m_Scroll.y) / image.y); + + m_Zoom = zoom; + + // The box moves as well as the image, growing until it fills the area, so + // the same point is somewhere else on screen even before scrolling. + var zoomedBox = ViewBox(area, aspect, out var zoomedImage); + m_Scroll = new Vector2( + pointOnImage.x * zoomedImage.x - (pointer.x - zoomedBox.x), + pointOnImage.y * zoomedImage.y - (pointer.y - zoomedBox.y)); + ClampScroll(area, aspect); + return true; + } + + /// Moves the image with the mouse, so the view moves the other way. + internal void Pan(Rect area, float aspect, Vector2 mouseDelta) + { + m_Scroll -= mouseDelta; + ClampScroll(area, aspect); + } + + void HandleZoom(Rect area, float aspect, Rect box, Action repaint) + { + var e = Event.current; + if (e.type != EventType.ScrollWheel || !IsViewModifier(e)) + return; + if (!box.Contains(e.mousePosition)) + return; + + // Used at either end of the range too: the wheel is still zooming, and + // letting it through would scroll the view or, in the live view, the device. + e.Use(); + + if (ZoomAt(area, aspect, e.mousePosition, e.delta.y)) + repaint?.Invoke(); + } + + void HandlePan(int controlId, Rect area, float aspect, Rect box, Action repaint) + { + var e = Event.current; + + switch (e.type) + { + case EventType.MouseDown: + if (e.button != kMiddleMouseButton || !IsViewModifier(e) || !IsZoomed) + break; + // Not while something else is being dragged - a touch being held on + // the device, say. + if (GUIUtility.hotControl != 0 || !box.Contains(e.mousePosition)) + break; + // Routes the rest of the drag here, including outside the box. + GUIUtility.hotControl = controlId; + m_Panning = true; + e.Use(); + break; + + case EventType.MouseDrag: + if (!m_Panning) + break; + // The modifier is deliberately not rechecked: letting go of Ctrl + // halfway through a drag should not abandon it. + Pan(area, aspect, e.delta); + e.Use(); + repaint?.Invoke(); + break; + + case EventType.MouseUp: + if (!m_Panning) + break; + EndPan(controlId); + e.Use(); + break; + } + + // A drag that left the window never reports its button going up. + if (m_Panning && e.type == EventType.MouseLeaveWindow) + EndPan(controlId); + } + + void EndPan(int controlId) + { + m_Panning = false; + if (GUIUtility.hotControl == controlId) + GUIUtility.hotControl = 0; + } + + static bool IsViewModifier(Event e) + { + return (e.modifiers & (EventModifiers.Control | EventModifiers.Command)) != 0; + } + + void ClampScroll(Rect area, float aspect) + { + var box = ViewBox(area, aspect, out var image); + + // The scrollbars sit inside the box, so each takes a strip off what is left. + var visible = new Vector2( + box.width - (image.y > box.height ? kScrollbarSize : 0), + box.height - (image.x > box.width ? kScrollbarSize : 0)); + + m_Scroll = new Vector2( + Mathf.Clamp(m_Scroll.x, 0, Mathf.Max(0, image.x - visible.x)), + Mathf.Clamp(m_Scroll.y, 0, Mathf.Max(0, image.y - visible.y))); + } + + void DoZoomBadgeGUI(Rect area) + { + var content = Styles.Zoom(ZoomPercent); + var size = Styles.Badge.CalcSize(content); + var rect = new Rect(area.x + kBadgeMargin, area.y + kBadgeMargin, + Mathf.Min(Mathf.Ceil(size.x), area.width), + Mathf.Min(Mathf.Ceil(size.y), area.height)); + GUI.Label(rect, content, Styles.Badge); + } + } +} diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatImageViewer.cs.meta b/com.unity.mobile.android-logcat/Editor/AndroidLogcatImageViewer.cs.meta new file mode 100644 index 00000000..7e5002d8 --- /dev/null +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatImageViewer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12a67dd26b8f42789faffcba19296bf6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatLayoutViewerWindow.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatLayoutViewerWindow.cs index aacd5d1c..bab4da5a 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatLayoutViewerWindow.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatLayoutViewerWindow.cs @@ -258,7 +258,7 @@ private string ResolveDisplaySizeString() } private void DoScreenshotSaveAsGUI() { - var srcPath = m_CaptureScreenshot.GetImagePath(m_DeviceSelection.SelectedDevice); + var srcPath = m_CaptureScreenshot.GetLatestImagePath(m_DeviceSelection.SelectedDevice); EditorGUI.BeginDisabledGroup(string.IsNullOrEmpty(srcPath) || m_CaptureScreenshot.ImageTexture == null); if (GUILayout.Button(Styles.SaveScreenshot, AndroidLogcatStyles.toolbarButton)) { diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs new file mode 100644 index 00000000..d6c94492 --- /dev/null +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs @@ -0,0 +1,2019 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Net; +using System.Net.NetworkInformation; +using System.Net.Sockets; +using System.Text; +using System.Threading; +using UnityEditor; +using UnityEngine; + +namespace Unity.Android.Logcat +{ + /// + /// Live view of an Android device screen. + /// + /// A small server jar (built from External~/UnityLogcatServer, shipped in the + /// package as External~/unity-logcat-server.jar) is pushed to the device and run + /// by app_process as the shell user. It mirrors a display, encodes each frame as + /// JPEG and writes the frames to an abstract unix socket, which adb forwards to a + /// local TCP port that we read here. + /// + /// + /// The transport is a socket rather than the server's stdout because it is + /// bidirectional - the same connection can later carry input events to the + /// device - and it keeps frame data off a stream that also carries log output. + /// + /// + /// Threading: a reader thread does the blocking socket reads and hands the newest + /// frame over; turns it into a texture on the main thread, + /// because Texture2D can only be touched there. + /// + /// + internal class AndroidLogcatLiveStream + { + internal enum Result + { + Success, + Failure + } + + internal enum FailureType + { + None, + JarNotFound + } + + /// + /// The type byte that starts every Editor to server control message. Values match + /// the TYPE_* constants in ControlReader.java, and the server stops reading + /// control input on one it does not recognize, since it would no longer know + /// where the next message begins. + /// + internal enum ControlMessage : byte + { + Touch = 1, + Key = 2, + Text = 3, + Scroll = 4 + } + + /// Values match the action byte in ControlReader.java. + internal enum TouchAction : byte + { + Down = 0, + Up = 1, + Move = 2, + /// Abandons the gesture without a tap, e.g. the mouse left the window. + Cancel = 3 + } + + /// Values match the action byte in ControlReader.java. + internal enum KeyAction : byte + { + Down = 0, + Up = 1 + } + + readonly AndroidLogcatImageViewer m_Viewer = new AndroidLogcatImageViewer(); + + static string m_ServerJarPath; + + internal static string GetServerJarPath() + { + if (!string.IsNullOrEmpty(m_ServerJarPath)) + return m_ServerJarPath; + + var path = AndroidLogcatUtilities.ResolvePath(kServerExternalFolder, kServerJarName); + if (path == null) + throw new FileNotFoundException($"Couldn't locate the Android Logcat package to find {kServerJarName} in it."); + + m_ServerJarPath = path; + return m_ServerJarPath; + } + + // Android KeyEvent.META_* flags. Both the basic flag and the left variant, + // the way a keyboard reports a modifier that is actually held down. + const int kMetaShiftOn = 0x1 | 0x40; + const int kMetaAltOn = 0x2 | 0x10; + const int kMetaCtrlOn = 0x1000 | 0x2000; + + // Must stay in step with External/UnityLogcatServer: Protocol.java and the + // serverProtocolVersion / serverSocketName / serverDevicePath entries in + // gradle.properties. The server sends its version in the stream header, so a + // mismatch is reported rather than misparsed. + const uint kProtocolMagic = 0x554C5331; // "ULS1" + const int kProtocolVersion = 6; + const int kCodecMjpeg = 1; + const int kStreamHeaderSize = 20; // magic + version + codec + flags + serverPid + // ptsUs + width + height + displayWidth + displayHeight + payloadSize + const int kFrameHeaderSize = 28; + + // Protocol.FLAG_CONTROL_SUPPORTED: the server was able to set up input + // injection, so touch messages will actually do something. + const int kFlagControlSupported = 1; + + // Largest fixed-size message: the key one, at type + action + keyCode + metaState. + const int kControlMessageSize = 10; + const int kMaxTextBytes = 4096; + // Positions go over the wire normalized, so the server can scale them against + // the display size it is currently capturing rather than trusting ours, which + // is always at least a frame - and possibly a whole rotation - out of date. + const float kNormalizedMax = 65535.0f; + // Scroll notches go over as fixed point, so a trackpad's fractions survive + // without putting a float on the wire. Must match SCROLL_SCALE in ControlReader. + const float kScrollScale = 256.0f; + // Unity reports roughly three lines per wheel notch, where Android counts + // notches, so the delta is divided by this on the way out. + const float kUnityScrollLinesPerNotch = 3.0f; + + const string kServerJarName = "unity-logcat-server.jar"; + // The jar is pushed under a name of its own per session - see StartStreaming. + const string kServerDeviceFolder = "/data/local/tmp"; + const string kServerDeviceNamePrefix = "unity-logcat-server"; + const string kServerMainClass = "com.unity.android.logcat.server.Server"; + const string kServerExternalFolder = "External~"; + + // Stream settings live in AndroidLogcatSettings, under Preferences. The + // arguments of StartStreaming override them, which is what the tests use. + + // How long the server waits for us, and how long we spend trying to reach it. + // The server's own timeout is the longer of the two, so that it is always us + // who gives up first and the server is never left listening for a client that + // has already stopped trying. + const int kConnectTimeoutMs = 10000; + const int kServerConnectTimeoutMs = 15000; + const int kConnectRetryDelayMs = 100; + + // A frame is a JPEG of a phone screen; anything this large means the stream + // has desynchronized and we should fail instead of allocating wildly. + const int kMaxFrameSize = 32 * 1024 * 1024; + + const float kNavigationSpacing = 6; + const float kBuildJarButtonWidth = 180; + const float kReconnectButtonWidth = 100; + const float kNavigationButtonWidth = 60; + // A row each: both labels are too wide for the two of them to share the stats + // column without being clipped. + const float kDebugButtonWidth = 150; + + static class Styles + { + internal static readonly GUIContent DisplaySize = new GUIContent("Display size", + "Resolution of the display being mirrored, as the frames report it. The streamed " + + "image is this scaled down to fit Max Size, so the two rows together say how much " + + "detail the stream is giving up."); + internal static readonly GUIContent StreamSize = new GUIContent("Stream size", + "Size of the streamed image, which is the device display scaled down to fit max_size."); + internal static readonly GUIContent FrameRate = new GUIContent("Frame rate", + "Frames arriving per second. A mirrored display only produces a frame when the screen changes, so an idle device sends almost none."); + internal static readonly GUIContent Bandwidth = new GUIContent("Bandwidth", + "Megabits per second arriving over adb."); + internal static readonly GUIContent Input = new GUIContent("Input", + "Click or drag the image to send touch events to the device, scroll the wheel over it to " + + "scroll on the device, and click it then type to send keys. Select all, copy and paste go " + + "to the device and use its clipboard; other Ctrl and Cmd combinations stay in the Editor."); + + // Same glyphs and wording as the navigation row in the Inputs window. + internal static readonly GUIContent NavigationKeys = new GUIContent("Navigation Keys"); + internal static readonly GUIContent Back = new GUIContent("◄", + "Send Back key event. The Escape key does the same once the image has focus."); + internal static readonly GUIContent Home = new GUIContent("●", "Send Home key event"); + internal static readonly GUIContent Recents = new GUIContent("■", "Send Overview key event"); + + internal static readonly GUIContent DeviceRotation = new GUIContent("Device Rotation", + "Rotate the device itself. Auto hands the rotation back to its accelerometer."); + internal static readonly GUIContent[] Rotations = + { + new GUIContent("Auto", "Let the device rotate with its accelerometer again"), + new GUIContent("0°", "Lock the device to its natural orientation"), + new GUIContent("90°", "Lock the device rotated 90°"), + new GUIContent("180°", "Lock the device rotated 180°"), + new GUIContent("270°", "Lock the device rotated 270°") + }; + + internal static readonly GUIContent DeveloperMode = new GUIContent("Developer Mode"); + internal static readonly GUIContent Socket = new GUIContent("Socket", + "Abstract unix socket the on-device server is listening on."); + internal static readonly GUIContent ForwardedPort = new GUIContent("Port", + "Local TCP port adb forwards to that socket."); + internal static readonly GUIContent ServerOnDevice = new GUIContent("Server", + "Where the server jar was pushed on the device."); + internal static readonly GUIContent ServerPid = new GUIContent("Server pid", + "Process id of the server on the device, for adb shell kill or ps."); + internal static readonly GUIContent RebuildJar = new GUIContent("Rebuild server", + "Run 'gradlew dexJar' on External/UnityLogcatServer, which also copies the jar into the " + + "package, then restart the stream so the device picks the new one up and point the " + + "Logcat window at the server that comes back. Only available in the package's own " + + "repository, where that Gradle project sits next to the package."); + internal static readonly GUIContent KillServer = new GUIContent("Kill server", + "Kill the server on the device, so the stream fails the way it would if the " + + "server died on its own."); + internal static readonly GUIContent Reconnect = new GUIContent("Reconnect", + "Start the stream on the device again."); + internal static readonly GUIContent ShowServerLogcat = new GUIContent("Show server logs", + "Open the Android Logcat window filtered to this server's process."); + } + + AndroidLogcatRuntimeBase m_Runtime; + IAndroidLogcatDevice m_Device; + + /// + /// Where the forwarded port lives, for setups where adb's forward is not on + /// this machine's loopback: which port to forward, and the address to reach it + /// at. Set by the integration tests on build agents whose adb server runs + /// beside the device rather than beside the Editor. All off by default, which + /// is the plain 'adb picks a port on localhost' case. + /// + internal int ForwardLocalPort { get; set; } + internal string TunnelHost { get; set; } + internal int TunnelPort { get; set; } + Action m_OnStopLiveStream; + FailureType m_FailureType; + + Process m_ServerProcess; + readonly StringBuilder m_ServerLog = new StringBuilder(); + readonly StringBuilder m_Errors = new StringBuilder(); + string m_SocketName; + // Where this session's jar lives on the device, unique per session - see + // StartStreaming for why it cannot be a shared path. + string m_ServerDevicePath; + int m_ForwardedPort = -1; + + Thread m_ReaderThread; + volatile bool m_Stop; + volatile string m_ReaderError; + volatile bool m_StreamEnded; + + // Guards the connection so that StopStreaming can close it from the main + // thread while the reader thread is blocked in a read on it. + readonly object m_ConnectionLock = new object(); + TcpClient m_Client; + NetworkStream m_Stream; + + // Frame handover, reader thread -> main thread. + readonly object m_FrameLock = new object(); + byte[] m_PendingFrame; + int m_PendingFrameSize; + int m_PendingWidth; + int m_PendingHeight; + int m_PendingDisplayWidth; + int m_PendingDisplayHeight; + long m_ReceivedBytes; + int m_ReceivedFrames; + + // Frame buffers are reused rather than allocated per frame, which at 30 fps was + // a few MB per second of short-lived garbage. + // + // A buffer is owned by exactly one of four places at any moment: this free list, + // the reader thread filling it, the pending slot, or the main thread decoding it. + // It only ever moves between them under m_FrameLock, and the main thread is what + // hands it back, so the reader cannot overwrite a buffer being decoded. Three is + // the most that can be in flight at once - one being filled, one pending, one + // being decoded. + const int kMaxFrameBuffers = 3; + readonly Stack m_FreeFrameBuffers = new Stack(kMaxFrameBuffers); + + volatile bool m_ControlSupported; + // Reported by the server in the stream header, so it is exact rather than + // guessed from the process table, where several app_process entries can exist. + volatile int m_ServerPid; + // Set by the Rebuild jar button, cleared once the Logcat window has been + // pointed at the server that came up. The pid is not known when the stream is + // started - it arrives in the stream header, on the reader thread - so this + // waits for it rather than guessing. + bool m_ShowLogcatWhenServerStarts; + readonly byte[] m_ControlMessage = new byte[kControlMessageSize]; + bool m_TouchDown; + // The modifier keys the device is holding because the user is holding them. + EventModifiers m_HeldModifiers; + bool m_ControlWriteFailed; + + Texture2D m_Texture; + int m_FrameWidth; + int m_FrameHeight; + // What the frames were scaled down from. Zero until the first one arrives. + int m_DisplayWidth; + int m_DisplayHeight; + double m_Fps; + double m_Mbps; + DateTime m_StatsTime; + long m_StatsBytes; + int m_StatsFrames; + + internal bool IsStreaming => m_ReaderThread != null; + internal string Errors => m_Errors.ToString(); + internal Texture2D Texture => m_Texture; + + /// + /// Whether the server can inject input. False means the device refused to set it + /// up, in which case the view is read only and says so - better than accepting + /// clicks that quietly go nowhere. + /// + internal bool ControlSupported => m_ControlSupported; + + /// + /// Input is always on when the device supports it. There is no toggle: sending an + /// event costs a handful of bytes and nothing at all when idle, so the only + /// argument for one would be avoiding stray input, and a window does not click or + /// type by itself. + /// + bool CanSendInput => IsStreaming && m_ControlSupported; + + /// Frames read off the socket since streaming started. + internal int FramesReceived + { + get + { + lock (m_FrameLock) + return m_ReceivedFrames; + } + } + + internal AndroidLogcatLiveStream(AndroidLogcatRuntimeBase runtime) + { + m_Runtime = runtime; + m_Runtime.Update += Update; + m_Runtime.Closing += Cleanup; + } + + void Cleanup() + { + if (m_Runtime == null) + return; + if (IsStreaming) + Shutdown(Result.Success); + DestroyTexture(); + m_Runtime = null; + } + + internal void StartStreaming(IAndroidLogcatDevice device, + Action onStopLiveStream, + int? maxSize = null, + int? quality = null, + int? maxFps = null, + string displayId = null) + { + if (device == null) + throw new InvalidOperationException("No device selected"); + if (IsStreaming) + throw new InvalidOperationException("Already streaming"); + + m_Errors.Clear(); + m_FailureType = FailureType.None; + lock (m_ServerLog) + m_ServerLog.Clear(); + DestroyTexture(); + + m_Device = device; + m_OnStopLiveStream = onStopLiveStream; + m_Stop = false; + m_ReaderError = null; + m_StreamEnded = false; + m_ControlSupported = false; + m_ServerPid = 0; + m_ControlWriteFailed = false; + m_TouchDown = false; + m_HeldModifiers = EventModifiers.None; + m_FrameWidth = 0; + m_FrameHeight = 0; + m_DisplayWidth = 0; + m_DisplayHeight = 0; + m_Fps = 0; + m_Mbps = 0; + m_StatsTime = DateTime.Now; + m_StatsBytes = 0; + m_StatsFrames = 0; + lock (m_FrameLock) + { + m_PendingFrame = null; + m_PendingFrameSize = 0; + m_ReceivedBytes = 0; + m_ReceivedFrames = 0; + } + + try + { + // One id for the session, used for both the socket and the jar, and + // settled before anything is pushed - the push needs the path. + // + // The socket name has to be unique so that a server left over from a + // previous run cannot own the name we are about to listen on. The jar + // path has to be unique because `adb push` rewrites its destination in + // place rather than replacing it: with a shared name, starting a stream + // while the previous server is still on its way out would truncate the + // file that one is executing from, and a class it had not loaded yet + // would fail to load. + var sessionId = Guid.NewGuid().ToString("N").Substring(0, 8); + m_SocketName = "unity_logcat_server_" + sessionId; + m_ServerDevicePath = $"{kServerDeviceFolder}/{kServerDeviceNamePrefix}-{sessionId}.jar"; + + // Before anything else, because a dark screen produces no frames at all + // and the wait for the first one would just time out. + device.WakeUp(); + + // Before pushing ours, so it cannot sweep away what it is about to push. + RemoveStaleServerJars(device); + + var jarPath = GetServerJarPath(); + if (!File.Exists(jarPath)) + { + m_FailureType = FailureType.JarNotFound; + var error = $"{kServerJarName} is missing from the package, live streaming is unavailable.\n" + + $"Expected it at {jarPath}\n" + + "Build it by running 'gradlew dexJar' in External/UnityLogcatServer."; + AppendError(error); + Shutdown(Result.Failure); + return; + } + + PushServer(device, jarPath); + + var settings = m_Runtime.Settings; + StartServerProcess(device, + maxSize ?? settings.LiveStreamMaxSize, + quality ?? settings.LiveStreamQuality, + maxFps ?? settings.LiveStreamMaxFps, + displayId); + m_ForwardedPort = SetupPortForward(device, m_SocketName); + + // Connecting is retried until the server has created its socket, so it + // happens on the reader thread rather than stalling the main thread. + m_ReaderThread = new Thread(ReadFrames) + { + Name = "AndroidLogcatLiveStream", + IsBackground = true + }; + m_ReaderThread.Start(); + } + catch (Exception ex) + { + AndroidLogcatInternalLog.Log(ex.ToString()); + AppendError(ex.Message); + // Nothing is streaming, so unwind whatever did get set up and report + // through the callback instead of throwing into OnGUI. + Shutdown(Result.Failure); + } + } + + internal bool StopStreaming() + { + if (!IsStreaming) + return false; + Shutdown(Result.Success); + return m_Errors.Length == 0; + } + + /// + /// Tears down everything StartStreaming may have set up, in the reverse order, + /// and reports the outcome. Safe to call when only part of the setup happened. + /// + void Shutdown(Result result) + { + m_Stop = true; + // Whatever was waiting for a pid is not getting one now. + m_ShowLogcatWhenServerStarts = false; + + // The connection goes first: closing it is what unblocks a reader thread + // parked in a read, so the join below does not have to wait it out. + CloseConnection(); + + var thread = m_ReaderThread; + m_ReaderThread = null; + if (thread != null && !thread.Join(TimeSpan.FromSeconds(2))) + AndroidLogcatInternalLog.Log("Live stream reader thread did not stop in time"); + + // With the reader gone, and this being the main thread, nothing can still be + // holding a buffer - and once the stream is over they are only memory. A + // frame off a big display is worth a couple of MB. + lock (m_FrameLock) + { + m_PendingFrame = null; + m_PendingFrameSize = 0; + m_FreeFrameBuffers.Clear(); + } + + KillServerProcess(); + RemovePortForward(); + RemoveServerJar(); + + if (result == Result.Failure) + AppendServerLog(); + + m_Device = null; + var callback = m_OnStopLiveStream; + m_OnStopLiveStream = null; + callback?.Invoke(result); + } + + void Update() + { + if (!IsStreaming) + return; + + // The header has landed, so the new server can be named. Done here rather + // than where the pid is parsed, because that is the reader thread and this + // opens an EditorWindow. + if (m_ShowLogcatWhenServerStarts && m_ServerPid > 0) + { + m_ShowLogcatWhenServerStarts = false; + ShowServerLogcat(); + } + + ApplyPendingFrame(); + + var error = m_ReaderError; + if (!string.IsNullOrEmpty(error)) + { + AppendError(error); + Shutdown(Result.Failure); + return; + } + + if (m_StreamEnded) + { + // A reader that ended without recording an error, which today can only + // mean Stop was asked for - the loop has no other way out. + // + // The connection closing on its own does not arrive here: reading hits + // end of stream, which is an exception, so it goes through the branch + // above. That is deliberate. A stream that ends without the user asking + // is worth reporting, and reporting it as a failure is what appends the + // server's own log, which is where the reason lives - the captured + // display went away, the process was killed, and so on. + Shutdown(Result.Success); + } + } + + void ApplyPendingFrame() + { + byte[] frame; + int size; + int width, height; + int displayWidth, displayHeight; + long bytes; + int frames; + + lock (m_FrameLock) + { + frame = m_PendingFrame; + size = m_PendingFrameSize; + m_PendingFrame = null; + m_PendingFrameSize = 0; + width = m_PendingWidth; + height = m_PendingHeight; + displayWidth = m_PendingDisplayWidth; + displayHeight = m_PendingDisplayHeight; + bytes = m_ReceivedBytes; + frames = m_ReceivedFrames; + } + + if (frame != null) + { + if (m_Texture == null) + m_Texture = new Texture2D(2, 2); + // LoadImage resizes the texture to the incoming frame, which is how a + // rotation is absorbed: the server just starts sending a new size. + // + // Decoded through a span rather than the byte[] overload, which would + // take the whole buffer: a reused buffer is usually larger than the + // frame sitting in it. + if (ImageConversion.LoadImage(m_Texture, new ReadOnlySpan(frame, 0, size))) + { + m_FrameWidth = width; + m_FrameHeight = height; + m_DisplayWidth = displayWidth; + m_DisplayHeight = displayHeight; + } + + // Returned whether or not it decoded - a frame this thread could not + // read is still a buffer the reader can fill. + ReturnFrameBuffer(frame); + } + + var now = DateTime.Now; + var elapsed = (now - m_StatsTime).TotalSeconds; + if (elapsed >= 1.0) + { + m_Fps = (frames - m_StatsFrames) / elapsed; + m_Mbps = (bytes - m_StatsBytes) * 8 / elapsed / 1000000.0; + m_StatsTime = now; + m_StatsFrames = frames; + m_StatsBytes = bytes; + } + } + + // ------------------------------------------------------------------ + // Server setup + // ------------------------------------------------------------------ + + void PushServer(IAndroidLogcatDevice device, string jarPath) + { + AndroidLogcatInternalLog.Log($"Pushing {jarPath} to {m_ServerDevicePath}"); + // Pushed on every start: the destination name is new each time, so there is + // never a stale jar to reuse and never one in use to overwrite. + m_Runtime.Tools.ADB.Run(new[] + { + $"-s {device.Id}", + "push", + $"\"{jarPath}\"", + m_ServerDevicePath + }, $"Failed to push {kServerJarName} to the device"); + } + + void StartServerProcess(IAndroidLogcatDevice device, int maxSize, int quality, int maxFps, string displayId) + { + var args = new StringBuilder(); + args.Append($"-s {device.Id} shell CLASSPATH={m_ServerDevicePath} app_process / {kServerMainClass}"); + args.Append($" socket_name={m_SocketName}"); + args.Append($" max_size={maxSize}"); + args.Append($" quality={quality}"); + args.Append($" max_fps={maxFps}"); + args.Append($" connect_timeout_ms={kServerConnectTimeoutMs}"); + if (!string.IsNullOrEmpty(displayId)) + args.Append($" display_id={displayId}"); + if (Unsupported.IsDeveloperMode()) + args.Append(" log_level=debug"); + + AndroidLogcatInternalLog.Log($"{m_Runtime.Tools.ADB.GetADBPath()} {args}"); + + m_ServerProcess = new Process(); + var si = m_ServerProcess.StartInfo; + si.FileName = m_Runtime.Tools.ADB.GetADBPath(); + si.Arguments = args.ToString(); + si.RedirectStandardOutput = true; + si.RedirectStandardError = true; + si.UseShellExecute = false; + si.CreateNoWindow = true; + // Both streams are drained asynchronously. The server logs to stdout and + // stderr for its whole lifetime, and a pipe nobody reads eventually fills + // and blocks the server. + m_ServerProcess.OutputDataReceived += OnServerOutput; + m_ServerProcess.ErrorDataReceived += OnServerOutput; + m_ServerProcess.Start(); + m_ServerProcess.BeginOutputReadLine(); + m_ServerProcess.BeginErrorReadLine(); + } + + void OnServerOutput(object sender, DataReceivedEventArgs e) + { + if (string.IsNullOrEmpty(e.Data)) + return; + lock (m_ServerLog) + m_ServerLog.AppendLine(e.Data); + AndroidLogcatInternalLog.Log(e.Data); + } + + /// + /// Where the forwarded port is listening. adb opens it on whichever host runs + /// the adb *server*, which is this machine unless the environment points + /// somewhere else. Both loopbacks are tried otherwise: which family adb binds + /// is up to adb, and a connect to the other one is refused outright. + /// + static IPAddress[] AdbServerAddresses() + { + // ANDROID_ADB_SERVER_SOCKET is 'tcp::'; the address variable is + // just the host. + var socket = Environment.GetEnvironmentVariable("ANDROID_ADB_SERVER_SOCKET"); + if (!string.IsNullOrEmpty(socket)) + { + var parts = socket.Split(':'); + if (parts.Length >= 3 && parts[0] == "tcp" && parts[1].Length > 0) + return Resolve(parts[1]); + } + + var host = Environment.GetEnvironmentVariable("ANDROID_ADB_SERVER_ADDRESS"); + if (!string.IsNullOrEmpty(host)) + return Resolve(host); + + return new[] { IPAddress.Loopback, IPAddress.IPv6Loopback }; + } + + static IPAddress[] Resolve(string host) + { + if (IPAddress.TryParse(host, out var parsed)) + return new[] { parsed }; + + try + { + return Dns.GetHostAddresses(host); + } + catch (Exception ex) + { + throw new IOException($"Could not resolve the adb server host '{host}': {InnermostMessage(ex)}"); + } + } + + /// + /// What adb thinks it is forwarding, for the failure message. A forward that + /// exists and cannot be reached says something quite different from one that + /// was never created. + /// + string DescribeForwards() + { + try + { + return "adb forward --list:" + Environment.NewLine + + m_Runtime.Tools.ADB.Run(new[] { "forward", "--list" }, "Failed to list adb forwards"); + } + catch (Exception ex) + { + return $"Could not list adb forwards: {InnermostMessage(ex)}"; + } + } + + /// + /// Whether anything on this machine is actually listening on the forwarded + /// port. adb listing a forward only says its server registered one, which is + /// not the same as a socket existing - and that difference is what separates + /// 'adb never bound it' from 'something is refusing us'. + /// + string DescribeLocalListeners() + { + try + { + var listeners = IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners() + .Where(e => e.Port == m_ForwardedPort) + .Select(e => e.ToString()) + .ToArray(); + + return listeners.Length == 0 + ? $"Nothing on this machine is listening on port {m_ForwardedPort}" + : $"Listening on port {m_ForwardedPort}: {string.Join(", ", listeners)}"; + } + catch (Exception ex) + { + return $"Could not list local listeners: {InnermostMessage(ex)}"; + } + } + + /// + /// The message worth reading. Everything reaches adb through reflection, and + /// "Exception has been thrown by the target of an invocation" is what that + /// wrapper says about a failure it is hiding. + /// + static string InnermostMessage(Exception ex) + { + while (ex.InnerException != null) + ex = ex.InnerException; + // Windows socket messages come back padded with nulls, which truncate + // every log line they land in. + return ex.Message.Trim('\0'); + } + + int SetupPortForward(IAndroidLogcatDevice device, string socketName) + { + // tcp:0 lets adb pick a free port and print it, so two Editors streaming + // from two devices cannot collide on a hardcoded one. A caller only asks + // for a specific port when something outside has to know it in advance. + var local = ForwardLocalPort > 0 ? ForwardLocalPort : 0; + var output = m_Runtime.Tools.ADB.Run(new[] + { + $"-s {device.Id}", + "forward", + $"tcp:{local}", + $"localabstract:{socketName}" + }, "Failed to set up an adb port forward for the live stream"); + + // adb only prints the port when it picked one. + var port = local; + if (local == 0 && (!int.TryParse(output.Trim(), out port) || port <= 0)) + throw new Exception($"Expected a port number from 'adb forward tcp:0', got '{output}'"); + + AndroidLogcatInternalLog.Log($"Forwarding tcp:{port} to localabstract:{socketName}"); + return port; + } + + // ------------------------------------------------------------------ + // Reader thread + // ------------------------------------------------------------------ + + void ReadFrames() + { + try + { + var stream = Connect(); + var header = new byte[kFrameHeaderSize]; + + while (!m_Stop) + { + ReadExactly(stream, header, kFrameHeaderSize); + // Bytes 0..7 are the presentation timestamp, unused: frames are + // displayed as they arrive rather than scheduled. + var width = ReadInt32BE(header, 8); + var height = ReadInt32BE(header, 12); + var displayWidth = ReadInt32BE(header, 16); + var displayHeight = ReadInt32BE(header, 20); + var size = ReadInt32BE(header, 24); + + if (size <= 0 || size > kMaxFrameSize) + throw new IOException($"Frame size {size} is out of range, the stream is out of sync"); + + var payload = RentFrameBuffer(size); + ReadExactly(stream, payload, size); + + lock (m_FrameLock) + { + // Only the newest frame is kept: if the Editor cannot keep up, + // showing the latest screen matters more than showing every + // frame. The frame being dropped goes back to the free list + // instead of to the GC - the main thread never saw it, so + // nothing else can be holding it. + ReturnFrameBuffer(m_PendingFrame); + + m_PendingFrame = payload; + m_PendingFrameSize = size; + m_PendingWidth = width; + m_PendingHeight = height; + m_PendingDisplayWidth = displayWidth; + m_PendingDisplayHeight = displayHeight; + m_ReceivedBytes += size; + m_ReceivedFrames++; + } + } + } + catch (Exception ex) + { + // A read failing after Stop was requested is just the connection we + // closed ourselves. + if (!m_Stop) + m_ReaderError = ex.Message; + } + finally + { + m_StreamEnded = true; + } + } + + /// + /// Connects to the forwarded port and validates the stream header, retrying + /// until the server has created its socket. 'adb forward' succeeds whether or + /// not anything is listening on the device yet, so an early attempt shows up as + /// a connection that is immediately closed rather than as a refused connect. + /// + NetworkStream Connect() + { + var deadline = DateTime.Now.AddMilliseconds(kConnectTimeoutMs); + var addresses = string.IsNullOrEmpty(TunnelHost) ? AdbServerAddresses() : Resolve(TunnelHost); + var port = TunnelPort > 0 ? TunnelPort : m_ForwardedPort; + // One entry per address: which one refused and which one was never + // reachable is the whole diagnosis when this times out. + var failures = new Dictionary(); + + while (!m_Stop) + { + foreach (var address in addresses) + { + TcpClient client = null; + try + { + // The socket has to match the address family: an IPv4 socket + // cannot reach a forward adb bound on the IPv6 loopback, and + // fails with 'the socket is not connected' rather than anything + // that names the real problem. + client = new TcpClient(address.AddressFamily) { NoDelay = true }; + lock (m_ConnectionLock) + { + if (m_Stop) + throw new OperationCanceledException(); + // Published before connecting, so that a Stop arriving now can + // close the socket and break us out of the attempt. + m_Client = client; + } + + client.Connect(address, port); + var stream = client.GetStream(); + ValidateStreamHeader(stream); + + lock (m_ConnectionLock) + m_Stream = stream; + AndroidLogcatInternalLog.Log($"Live stream connected on {address}:{port}"); + return stream; + } + catch (ProtocolMismatchException) + { + // Retrying cannot help: we did reach the server and disagree with it. + throw; + } + catch (Exception ex) + { + failures[address] = InnermostMessage(ex); + lock (m_ConnectionLock) + { + m_Client = null; + m_Stream = null; + } + try + { + client?.Close(); + } + catch (Exception) + { + // Nothing useful to do about a failure to close a failed socket. + } + } + } + + if (m_Stop || DateTime.Now >= deadline) + break; + Thread.Sleep(kConnectRetryDelayMs); + } + + if (m_Stop) + throw new OperationCanceledException(); + + var reasons = failures.Select(f => $"{f.Key}:{port} - {f.Value}"); + throw new IOException($"Timed out after {kConnectTimeoutMs} ms connecting to the server on the device" + + $"{Environment.NewLine}{string.Join(Environment.NewLine, reasons)}" + + $"{Environment.NewLine}{DescribeLocalListeners()}" + + $"{Environment.NewLine}{DescribeForwards()}"); + } + + void ValidateStreamHeader(NetworkStream stream) + { + var header = new byte[kStreamHeaderSize]; + ReadExactly(stream, header, kStreamHeaderSize); + + var magic = (uint)ReadInt32BE(header, 0); + if (magic != kProtocolMagic) + throw new ProtocolMismatchException($"Expected stream magic 0x{kProtocolMagic:X8} but got 0x{magic:X8}, this is not the live stream server"); + + var version = ReadInt32BE(header, 4); + if (version != kProtocolVersion) + { + throw new ProtocolMismatchException( + $"The server on the device speaks protocol version {version}, this Editor expects {kProtocolVersion}.\n" + + $"Rebuild {kServerJarName} with 'gradlew dexJar' in External/UnityLogcatServer."); + } + + var codec = ReadInt32BE(header, 8); + if (codec != kCodecMjpeg) + throw new ProtocolMismatchException($"The server is sending codec {codec}, which this Editor cannot decode"); + + var flags = ReadInt32BE(header, 12); + m_ControlSupported = (flags & kFlagControlSupported) != 0; + if (!m_ControlSupported) + AndroidLogcatInternalLog.Log("The server cannot inject input, the live stream will be view only"); + + m_ServerPid = ReadInt32BE(header, 16); + } + + static void ReadExactly(Stream stream, byte[] buffer, int count) + { + var offset = 0; + while (offset < count) + { + var read = stream.Read(buffer, offset, count - offset); + if (read <= 0) + throw new EndOfStreamException("The device closed the live stream connection"); + offset += read; + } + } + + static void WriteUInt16BE(byte[] buffer, int offset, int value) + { + buffer[offset] = (byte)(value >> 8); + buffer[offset + 1] = (byte)value; + } + + static int ReadInt32BE(byte[] buffer, int offset) + { + return (buffer[offset] << 24) + | (buffer[offset + 1] << 16) + | (buffer[offset + 2] << 8) + | buffer[offset + 3]; + } + + /// + /// Reaching a server we cannot talk to, as opposed to not reaching one yet. + /// Retrying a connect makes sense for the latter and never for the former. + /// + class ProtocolMismatchException : Exception + { + public ProtocolMismatchException(string message) : base(message) + { + } + } + + // ------------------------------------------------------------------ + // Teardown + // ------------------------------------------------------------------ + + void CloseConnection() + { + lock (m_ConnectionLock) + { + try + { + m_Stream?.Close(); + m_Client?.Close(); + } + catch (Exception ex) + { + AndroidLogcatInternalLog.Log($"Failed to close the live stream connection: {ex.Message}"); + } + m_Stream = null; + m_Client = null; + } + } + + /// + /// Kills the server on the device, which is the only way to see from the Editor + /// what a server that dies mid-stream looks like. + /// + void KillServerOnDevice() + { + RunAdbQuietly(new[] + { + $"-s {m_Device.Id}", + "shell", + "kill", + m_ServerPid.ToString() + }, $"Failed to kill the live stream server (pid {m_ServerPid})"); + } + + void KillServerProcess() + { + var process = m_ServerProcess; + m_ServerProcess = null; + if (process == null) + return; + + try + { + // Closing the connection makes the server exit by itself, so give it a + // moment before killing it: a clean exit releases the mirrored display + // on the device instead of leaving it to the kernel. + if (!process.WaitForExit(1000)) + { + AndroidLogcatInternalLog.Log("Live stream server did not exit on its own, killing it"); + process.Kill(); + process.WaitForExit(); + } + AndroidLogcatInternalLog.Log($"Live stream server exited with code {process.ExitCode}"); + } + catch (Exception ex) + { + AndroidLogcatInternalLog.Log($"Failed to stop the live stream server: {ex.Message}"); + } + finally + { + process.Close(); + } + } + + /// + /// Deletes jars left behind by sessions that never got to clean up after + /// themselves - an Editor killed mid-stream - and the fixed name that versions + /// before the per-session path used. + /// + /// Safe even if a server is still running from one of them: unlinking a jar does + /// not disturb a process already executing it, because the runtime keeps the + /// file it opened. That was verified on device rather than assumed, on both + /// Android 16 and Android 8.1. + /// + /// + void RemoveStaleServerJars(IAndroidLogcatDevice device) + { + DeleteOnDevice(device, $"{kServerDeviceFolder}/{kServerDeviceNamePrefix}*.jar"); + } + + /// + /// Deletes this session's jar from the device. Unlinking it is safe even if the + /// server somehow outlived us - the file stays alive for whoever has it open - + /// and skipping it would leave 17 KB behind on the device per stream. + /// + void RemoveServerJar() + { + var path = m_ServerDevicePath; + m_ServerDevicePath = null; + DeleteOnDevice(m_Device, path); + } + + /// + /// Deletes files on the device, one path or a glob, and never fails: tidying up + /// is not worth losing a stream over, and what is left behind if it does fail is + /// a small file in a temporary folder. + /// + void DeleteOnDevice(IAndroidLogcatDevice device, string target) + { + if (device == null || string.IsNullOrEmpty(target)) + return; + + RunAdbQuietly(new[] + { + $"-s {device.Id}", + "shell", + // Quoted so the target reaches the device's shell whole, glob and all, + // rather than anything on this side of adb taking an interest in it. + // rm -f is silent when nothing matches. + $"\"rm -f {target}\"" + }, $"Failed to delete {target} from the device"); + } + + /// + /// Runs an adb command and never throws. Everything that goes through here is + /// tidying up after a stream, where what is left behind if it fails is a file in + /// a temporary folder or a port forward that goes away with the adb server. + /// + void RunAdbQuietly(string[] args, string failureMessage) + { + try + { + m_Runtime.Tools.ADB.Run(args, failureMessage); + } + catch (Exception ex) + { + AndroidLogcatInternalLog.Log($"{failureMessage}: {InnermostMessage(ex)}"); + } + } + + void RemovePortForward() + { + if (m_ForwardedPort <= 0) + return; + + var port = m_ForwardedPort; + var device = m_Device; + m_ForwardedPort = -1; + if (device == null) + return; + + RunAdbQuietly(new[] + { + $"-s {device.Id}", + "forward", + "--remove", + $"tcp:{port}" + }, $"Failed to remove the adb port forward for tcp:{port}"); + } + + /// + /// A buffer at least bytes long, reused if one that big + /// is free. Called only from the reader thread. + /// + byte[] RentFrameBuffer(int size) + { + lock (m_FrameLock) + { + while (m_FreeFrameBuffers.Count > 0) + { + var buffer = m_FreeFrameBuffers.Pop(); + if (buffer.Length >= size) + return buffer; + // Too small, because frames have grown - a rotation, or simply a + // busier screen. Dropped, and the rounding up below replaces it. + } + } + + // Rounded up so that frames creeping up in size do not reallocate every + // time: JPEG sizes vary frame to frame even at a fixed resolution. + return new byte[Mathf.NextPowerOfTwo(size)]; + } + + /// + /// Gives a buffer back, from either thread. Null is accepted, so returning + /// whatever happened to be in the pending slot needs no check at the call site. + /// + void ReturnFrameBuffer(byte[] buffer) + { + if (buffer == null) + return; + + lock (m_FrameLock) + { + // Over the cap only if a buffer has leaked somewhere, in which case the + // extra one is better dropped than kept forever. + if (m_FreeFrameBuffers.Count < kMaxFrameBuffers) + m_FreeFrameBuffers.Push(buffer); + } + } + + void DestroyTexture() + { + if (m_Texture == null) + return; + UnityEngine.Object.DestroyImmediate(m_Texture); + m_Texture = null; + } + + void AppendError(string message) + { + if (string.IsNullOrEmpty(message)) + return; + if (m_Errors.Length > 0) + m_Errors.AppendLine(); + m_Errors.AppendLine(message); + } + + void AppendServerLog() + { + string log; + lock (m_ServerLog) + log = m_ServerLog.ToString(); + if (string.IsNullOrEmpty(log)) + return; + m_Errors.AppendLine(); + m_Errors.AppendLine("Server output:"); + m_Errors.Append(log); + } + + // ------------------------------------------------------------------ + // GUI + // ------------------------------------------------------------------ + + /// + /// The device the window is pointed at, which is not necessarily + /// : a stream that failed to start has already been shut + /// down, and shutting down clears that. Only the error state's retry uses it. + /// + /// + /// For what changes outside the frames arriving - zooming a stopped stream. + /// + internal void DoGUI(Rect rc, IAndroidLogcatDevice selectedDevice, Action repaint) + { + // Allocated on every pass, before any early return: skipping it on some + // frames would shift control ids between the Layout and Repaint passes and + // trip "GUI id mismatch" warnings. + var controlId = GUIUtility.GetControlID(FocusType.Keyboard); + + if (m_Errors.Length > 0) + DoErrorsGUI(rc, selectedDevice); + // Before the texture, not after it: a device that goes away stops the + // stream but leaves the last frame behind, and a still image of a device + // that is no longer there says nothing about why it stopped updating. + else if (selectedDevice == null) + EditorGUI.HelpBox(rc, "No valid device selected.", MessageType.Info); + else if (m_Texture == null) + EditorGUI.HelpBox(rc, IsStreaming + ? "Starting the stream on the device..." + : "The live stream is not running.", MessageType.Info); + else + DoStreamGUI(rc, controlId, repaint); + } + + /// + /// What went wrong, where the image would be, and what can be done about it. + /// + void DoErrorsGUI(Rect rc, IAndroidLogcatDevice selectedDevice) + { + var message = new GUIContent(m_Errors.ToString(), + EditorGUIUtility.IconContent("console.erroricon").image); + + var buttonHeight = EditorGUIUtility.singleLineHeight; + var messageRect = new Rect(rc.x, rc.y, rc.width, + Mathf.Min(Mathf.Max(0, rc.height - buttonHeight - kNavigationSpacing), + EditorStyles.helpBox.CalcHeight(message, rc.width))); + + GUI.Label(messageRect, message, EditorStyles.helpBox); + + DoErrorButtonsGUI(rc, messageRect.yMax + kNavigationSpacing, buttonHeight, selectedDevice); + } + + void DoErrorButtonsGUI(Rect rc, float y, float height, IAndroidLogcatDevice selectedDevice) + { + // The jar is a build output and is not committed, so a fresh clone has none + // until Gradle has run. Offering to run it here is the whole of the fix, so + // the button is only worth drawing when that project is actually next to + // the package - GetServerGradleProjectPath says so. + var gradleProject = m_FailureType == FailureType.JarNotFound + ? GetServerGradleProjectPath() + : null; + + var x = rc.x; + if (gradleProject != null) + { + var buttonRect = new Rect(x, y, Mathf.Min(kBuildJarButtonWidth, rc.width), height); + if (GUI.Button(buttonRect, new GUIContent("Build the server jar", + $"Runs 'gradlew dexJar' in {gradleProject}, then starts the stream again."))) + { + RebuildServerJar(gradleProject); + // Whatever the window is pointed at now. Building is worth doing + // even with no device selected; only the retry needs one. + RestartStreaming(selectedDevice); + } + x = buttonRect.xMax + kNavigationSpacing; + } + + // A stream that failed leaves nothing in the view to act on, and + // reselecting the row to start another one is not something the window + // says anywhere. + EditorGUI.BeginDisabledGroup(selectedDevice == null); + var reconnectRect = new Rect(x, y, + Mathf.Min(kReconnectButtonWidth, Mathf.Max(0, rc.xMax - x)), height); + if (GUI.Button(reconnectRect, Styles.Reconnect)) + RestartStreaming(selectedDevice); + EditorGUI.EndDisabledGroup(); + } + + /// The mirrored screen, with the stats column beside it. + void DoStreamGUI(Rect rc, int controlId, Action repaint) + { + // The info column is reserved before the image is fitted, so that the image + // is never drawn underneath it. + var statsWidth = IsStreaming ? AndroidLogcatStatsColumn.WidthFor(rc) : 0; + var imageArea = new Rect(rc.x, rc.y, Mathf.Max(0, rc.width - statsWidth), rc.height); + + var aspect = (float)m_Texture.width / m_Texture.height; + + var imageBox = m_Viewer.DoGUI(imageArea, aspect, videoRect => + { + HandleTouchInput(controlId, videoRect); + GUI.DrawTexture(videoRect, m_Texture); + }, repaint); + + HandleKeyboardInput(controlId); + + if (statsWidth > 0) + DoStatsGUI(AndroidLogcatStatsColumn.RectBeside(rc, imageBox)); + } + + void DoStatsGUI(Rect rc) + { + const float kLabelWidth = AndroidLogcatStatsColumn.kLabelWidth; + var y = rc.y; + + // A row reading 0x0 says less than no row at all. + if (m_DisplayWidth > 0 && m_DisplayHeight > 0) + AndroidLogcatStatsColumn.Row(rc, kLabelWidth, ref y, Styles.DisplaySize, $"{m_DisplayWidth}x{m_DisplayHeight}"); + AndroidLogcatStatsColumn.Row(rc, kLabelWidth, ref y, Styles.StreamSize, $"{m_FrameWidth}x{m_FrameHeight}"); + AndroidLogcatStatsColumn.Row(rc, kLabelWidth, ref y, Styles.FrameRate, $"{m_Fps:0.0} fps"); + AndroidLogcatStatsColumn.Row(rc, kLabelWidth, ref y, Styles.Bandwidth, $"{m_Mbps:0.00} Mbps"); + // Listed whether or not it works: without the row there is nothing in the + // window to say the view is interactive at all. One row rather than separate + // Touch and Keyboard ones because the server reports a single capability + // covering both, so the two could never disagree. The column is too narrow + // for how to use them, so that lives in the tooltip. + AndroidLogcatStatsColumn.Row(rc, kLabelWidth, ref y, Styles.Input, + m_ControlSupported ? "Supported" : "Unsupported"); + + y += kNavigationSpacing; + DoNavigationGUI(rc, ref y); + DoRotationGUI(rc, ref y); + DoDebuggingGUI(rc, kLabelWidth, ref y); + } + + /// + /// Android's Back / Home / Overview buttons. + /// + /// On a device with the three-button navigation bar these are also just tappable + /// in the mirrored image, but on one using gesture navigation there is no bar to + /// tap - so without these there is no way to leave an app from the live view. + /// + /// + void DoNavigationGUI(Rect rc, ref float y) + { + var height = EditorGUIUtility.singleLineHeight; + if (y + height * 2 > rc.yMax) + return; + + GUI.Label(new Rect(rc.x, y, rc.width, height), Styles.NavigationKeys, EditorStyles.miniBoldLabel); + y += height; + + EditorGUI.BeginDisabledGroup(!CanSendInput); + + // Fixed width, rather than a third of the column each: these hold a single + // glyph, so stretching them to fill the column just looks wrong. Narrowed + // only if the column itself cannot fit three of them. Joined into one group, + // as the same row is in the Inputs window. + var width = Mathf.Floor(ButtonRowWidth(rc) / 3); + if (GUI.Button(new Rect(rc.x, y, width, height), Styles.Back, EditorStyles.miniButtonLeft)) + SendKeyPress(AndroidKeyCode.BACK); + if (GUI.Button(new Rect(rc.x + width, y, width, height), Styles.Home, EditorStyles.miniButtonMid)) + SendKeyPress(AndroidKeyCode.HOME); + if (GUI.Button(new Rect(rc.x + width * 2, y, width, height), Styles.Recents, EditorStyles.miniButtonRight)) + SendKeyPress(AndroidKeyCode.APP_SWITCH); + + EditorGUI.EndDisabledGroup(); + y += height; + } + + /// + /// Rotates the device the stream is coming from. Not an input event like the + /// navigation row above it - this goes through adb settings, so it works on a + /// device whose server cannot inject input, and it outlives the stream. + /// + void DoRotationGUI(Rect rc, ref float y) + { + var height = EditorGUIUtility.singleLineHeight; + y += kNavigationSpacing; + if (y + height * 2 > rc.yMax) + return; + + GUI.Label(new Rect(rc.x, y, rc.width, height), Styles.DeviceRotation, EditorStyles.miniBoldLabel); + y += height; + + EditorGUI.BeginDisabledGroup(m_Device == null); + + var rotations = Styles.Rotations; + var width = Mathf.Floor(ButtonRowWidth(rc) / rotations.Length); + for (var i = 0; i < rotations.Length; i++) + { + var style = i == 0 ? EditorStyles.miniButtonLeft + : i == rotations.Length - 1 ? EditorStyles.miniButtonRight + : EditorStyles.miniButtonMid; + // Auto is first and is -1, so the index is the rotation shifted by one. + if (GUI.Button(new Rect(rc.x + width * i, y, width, height), rotations[i], style)) + SetRotation((AndroidDeviceRotation)(i - 1)); + } + + EditorGUI.EndDisabledGroup(); + y += height; + } + + /// + /// How much of the column the navigation and rotation rows take, so the two + /// line up as one block of controls rather than two of different widths. + /// + static float ButtonRowWidth(Rect rc) + { + return Mathf.Min(kNavigationButtonWidth, Mathf.Floor(rc.width / 3)) * 3; + } + + void SetRotation(AndroidDeviceRotation rotation) + { + try + { + m_Device.SetRotation(rotation); + } + catch (Exception ex) + { + AndroidLogcatInternalLog.Log($"Failed to set rotation to {rotation}: {InnermostMessage(ex)}"); + } + } + + // ------------------------------------------------------------------ + // Touch forwarding + // ------------------------------------------------------------------ + + void HandleTouchInput(int controlId, Rect videoRect) + { + var e = Event.current; + + if (!CanSendInput) + { + // Control switched off, or the stream dropped, in the middle of a drag. + // The device still believes a finger is down, so let go of it - which + // deliberately bypasses the CanSendTouch gate that just failed. + if (m_TouchDown) + { + SendTouchAt(TouchAction.Cancel, videoRect, e.mousePosition); + ReleaseTouch(controlId); + } + return; + } + + switch (e.GetTypeForControl(controlId)) + { + case EventType.MouseDown: + if (e.button != 0 || !videoRect.Contains(e.mousePosition)) + break; + // Taking the hot control is what routes the rest of the drag here, + // including the part that happens outside the rect. + GUIUtility.hotControl = controlId; + // Also takes keyboard focus, so a click is all it takes before typing. + GUIUtility.keyboardControl = controlId; + m_TouchDown = true; + SendTouchAt(TouchAction.Down, videoRect, e.mousePosition); + e.Use(); + break; + + case EventType.MouseDrag: + if (!m_TouchDown) + break; + SendTouchAt(TouchAction.Move, videoRect, e.mousePosition); + e.Use(); + break; + + case EventType.MouseUp: + if (!m_TouchDown) + break; + SendTouchAt(TouchAction.Up, videoRect, e.mousePosition); + ReleaseTouch(controlId); + e.Use(); + break; + + case EventType.ScrollWheel: + // No focus or hot control needed: a wheel acts on whatever the + // pointer is over, on the device as much as in the Editor. + if (!videoRect.Contains(e.mousePosition)) + break; + SendScrollAt(videoRect, e.mousePosition, e.delta); + e.Use(); + break; + } + + // Losing the mouse mid-drag would otherwise leave the finger down for good. + if (m_TouchDown && e.type == EventType.MouseLeaveWindow) + { + SendTouchAt(TouchAction.Cancel, videoRect, e.mousePosition); + ReleaseTouch(controlId); + } + } + + void ReleaseTouch(int controlId) + { + m_TouchDown = false; + if (GUIUtility.hotControl == controlId) + GUIUtility.hotControl = 0; + } + + /// + /// Sends a touch at a position in normalized display coordinates, (0,0) being the + /// top left of the device screen. Does nothing unless the stream is up, the server + /// supports injection and control is enabled. + /// + internal void SendTouch(TouchAction action, float normalizedX, float normalizedY) + { + if (!CanSendInput) + return; + SendTouchMessage(action, normalizedX, normalizedY); + } + + /// + /// Sends a named key, e.g. . For typed + /// characters use instead, which handles layouts. + /// + internal void SendKey(KeyAction action, AndroidKeyCode keyCode, int metaState = 0) + { + if (!CanSendInput) + return; + SendKeyMessage(action, keyCode, metaState); + } + + /// + /// Presses and releases a key, for callers that have no press and release of + /// their own to mirror - a toolbar button, say. + /// + internal void SendKeyPress(AndroidKeyCode keyCode, int metaState = 0) + { + SendKey(KeyAction.Down, keyCode, metaState); + SendKey(KeyAction.Up, keyCode, metaState); + } + + /// + /// Sends a scroll at a position in normalized display coordinates. Magnitudes are + /// in wheel notches: positive vertical scrolls away from the user, positive + /// horizontal to the right. + /// + internal void SendScroll(float normalizedX, float normalizedY, + float horizontalNotches, float verticalNotches) + { + if (!CanSendInput) + return; + SendScrollMessage(normalizedX, normalizedY, horizontalNotches, verticalNotches); + } + + /// Types text on the device. + internal void SendText(string text) + { + if (!CanSendInput || string.IsNullOrEmpty(text)) + return; + SendTextMessage(text); + } + + void SendTouchAt(TouchAction action, Rect videoRect, Vector2 mousePosition) + { + var position = PositionOnScreen(videoRect, mousePosition); + SendTouchMessage(action, position.x, position.y); + } + + void SendScrollAt(Rect videoRect, Vector2 mousePosition, Vector2 delta) + { + var position = PositionOnScreen(videoRect, mousePosition); + + // Unity's scroll delta grows downward, where Android's VSCROLL is notches + // away from the user, so the vertical sign flips. Horizontal is passed + // through: both count rightward as positive. + SendScrollMessage(position.x, position.y, + delta.x / kUnityScrollLinesPerNotch, + -delta.y / kUnityScrollLinesPerNotch); + } + + /// + /// Where a mouse position falls on the device screen, 0..1. Clamped, not + /// rejected: a swipe that overshoots the edge of the view should still read as a + /// swipe to the edge of the screen. GUI y grows downward and so does the device + /// y, so there is nothing to flip. + /// + static Vector2 PositionOnScreen(Rect videoRect, Vector2 mousePosition) + { + return new Vector2( + Mathf.Clamp01((mousePosition.x - videoRect.x) / videoRect.width), + Mathf.Clamp01((mousePosition.y - videoRect.y) / videoRect.height)); + } + + void SendTouchMessage(TouchAction action, float x, float y) + { + var message = m_ControlMessage; + message[0] = (byte)ControlMessage.Touch; + message[1] = (byte)action; + message[2] = 0; // pointer id - a mouse is a single finger + WriteUInt16BE(message, 3, ToNormalized(x)); + WriteUInt16BE(message, 5, ToNormalized(y)); + // Full pressure. The server drops it to 0 for an Up by itself. + WriteUInt16BE(message, 7, (int)kNormalizedMax); + + SendControlMessage(message, 9, "touch"); + } + + void SendScrollMessage(float x, float y, float hScroll, float vScroll) + { + var h = ToScrollFixedPoint(hScroll); + var v = ToScrollFixedPoint(vScroll); + // Rounded away to nothing - a trackpad twitch, or a delta of zero on an axis + // the mouse does not have. The server would ignore it anyway. + if (h == 0 && v == 0) + return; + + var message = m_ControlMessage; + message[0] = (byte)ControlMessage.Scroll; + WriteUInt16BE(message, 1, ToNormalized(x)); + WriteUInt16BE(message, 3, ToNormalized(y)); + WriteUInt16BE(message, 5, h); + WriteUInt16BE(message, 7, v); + + SendControlMessage(message, 9, "scroll"); + } + + /// A position, 0..1, as the protocol carries it. + static int ToNormalized(float value) + { + return (int)Mathf.Round(value * kNormalizedMax); + } + + static short ToScrollFixedPoint(float notches) + { + return (short)Mathf.Clamp(Mathf.Round(notches * kScrollScale), + short.MinValue, short.MaxValue); + } + + void SendKeyMessage(KeyAction action, AndroidKeyCode keyCode, int metaState) + { + var message = m_ControlMessage; + message[0] = (byte)ControlMessage.Key; + message[1] = (byte)action; + WriteInt32BE(message, 2, (int)keyCode); + WriteInt32BE(message, 6, metaState); + + SendControlMessage(message, 10, "key"); + } + + void SendTextMessage(string text) + { + var bytes = Encoding.UTF8.GetBytes(text); + if (bytes.Length > kMaxTextBytes) + { + AndroidLogcatInternalLog.Log($"Not sending {bytes.Length} bytes of text, the limit is {kMaxTextBytes}"); + return; + } + + // Length prefixed, so the server stays in sync even on a message it decides + // to ignore. Allocated per message rather than reusing a buffer: this only + // happens on a keystroke or a paste. + var message = new byte[3 + bytes.Length]; + message[0] = (byte)ControlMessage.Text; + WriteUInt16BE(message, 1, bytes.Length); + Array.Copy(bytes, 0, message, 3, bytes.Length); + + SendControlMessage(message, message.Length, "text"); + } + + void SendControlMessage(byte[] message, int length, string what) + { + NetworkStream stream; + lock (m_ConnectionLock) + stream = m_Stream; + if (stream == null) + return; + + try + { + stream.Write(message, 0, length); + stream.Flush(); + } + catch (Exception ex) + { + // The reader thread watches the same connection and will report the + // failure properly, so this only needs to avoid throwing out of OnGUI - + // and to not log the same thing once per mouse move. + if (!m_ControlWriteFailed) + { + m_ControlWriteFailed = true; + AndroidLogcatInternalLog.Log($"Failed to send a {what} event: {ex.Message}"); + } + } + } + + static void WriteInt32BE(byte[] buffer, int offset, int value) + { + buffer[offset] = (byte)(value >> 24); + buffer[offset + 1] = (byte)(value >> 16); + buffer[offset + 2] = (byte)(value >> 8); + buffer[offset + 3] = (byte)value; + } + + // ------------------------------------------------------------------ + // Keyboard forwarding + // ------------------------------------------------------------------ + + void HandleKeyboardInput(int controlId) + { + if (!CanSendInput || GUIUtility.keyboardControl != controlId) + { + // Focus moved away, or the stream went down, with a modifier held: let + // go of it rather than leaving the device holding shift. + SyncModifiers(EventModifiers.None); + return; + } + + var e = Event.current; + if (e.type != EventType.KeyDown && e.type != EventType.KeyUp) + return; + + // Before whatever this event turns into: the device holds a modifier for as + // long as the user does. + SyncModifiers(e.modifiers); + + // Select all, copy and paste act on the device: they are text editing where + // the text is, and they do nothing in this window otherwise. The device's + // own clipboard is what is copied to and pasted from - nothing is exchanged + // with the Editor's clipboard. + if (TryMapEditingShortcut(e, out var editingKeyCode)) + { + // Forced to Ctrl even when the user pressed Cmd: Android has no Command + // modifier, and META_CTRL_ON is what a text field acts on. + SendKeyMessage(e.type == EventType.KeyDown ? KeyAction.Down : KeyAction.Up, + editingKeyCode, MetaState(e.modifiers) | kMetaCtrlOn); + e.Use(); + return; + } + + // Every other Editor shortcut keeps working: Ctrl/Cmd combinations are not + // forwarded, so Ctrl+S still saves rather than going to the device. + if ((e.modifiers & (EventModifiers.Control | EventModifiers.Command)) != 0) + return; + + if (TryMapKeyCode(e.keyCode, out var androidKeyCode)) + { + SendKeyMessage(e.type == EventType.KeyDown ? KeyAction.Down : KeyAction.Up, + androidKeyCode, MetaState(e.modifiers)); + e.Use(); + return; + } + + // Anything printable goes as text rather than as a keycode. Unity reports a + // printable key twice - once with a keyCode and once with a character - and + // only the character knows about the keyboard layout, so letting the device + // work out the keystrokes from the character is what makes punctuation and + // non-US layouts come out right. + if (e.type == EventType.KeyDown && e.character != '\0' && !char.IsControl(e.character)) + { + SendTextMessage(e.character.ToString()); + e.Use(); + } + } + + /// + /// Presses and releases modifier keys on the device so that what it holds + /// matches what the user holds. A text field extends a selection while shift is + /// down and not merely named in a key's metaState - checked on a device - and + /// the modifier keys are forwarded as keys in their own right. + /// + /// Ctrl and Cmd are deliberately not among them: those chords stay with the + /// Editor apart from the three that are mapped, and pressing Ctrl on the device + /// every time someone saves a scene would be its own kind of surprise. + /// + /// + void SyncModifiers(EventModifiers modifiers) + { + var wanted = modifiers & (EventModifiers.Shift | EventModifiers.Alt); + var changed = wanted ^ m_HeldModifiers; + if (changed == EventModifiers.None) + return; + + m_HeldModifiers = wanted; + var meta = MetaState(wanted); + + if ((changed & EventModifiers.Shift) != 0) + { + SendKeyMessage((wanted & EventModifiers.Shift) != 0 ? KeyAction.Down : KeyAction.Up, + AndroidKeyCode.SHIFT_LEFT, meta); + } + + if ((changed & EventModifiers.Alt) != 0) + { + SendKeyMessage((wanted & EventModifiers.Alt) != 0 ? KeyAction.Down : KeyAction.Up, + AndroidKeyCode.ALT_LEFT, meta); + } + } + + /// + /// Named keys that have no character to type. Everything else - letters, digits, + /// punctuation - is left to the text path. + /// + static bool TryMapKeyCode(KeyCode keyCode, out AndroidKeyCode androidKeyCode) + { + switch (keyCode) + { + // Escape is the device's BACK rather than Android's ESCAPE: on a phone + // that is what "go back" means, and it is the reason to press it. + case KeyCode.Escape: androidKeyCode = AndroidKeyCode.BACK; return true; + case KeyCode.Return: + case KeyCode.KeypadEnter: androidKeyCode = AndroidKeyCode.ENTER; return true; + case KeyCode.Backspace: androidKeyCode = AndroidKeyCode.DEL; return true; + case KeyCode.Delete: androidKeyCode = AndroidKeyCode.FORWARD_DEL; return true; + case KeyCode.Tab: androidKeyCode = AndroidKeyCode.TAB; return true; + case KeyCode.UpArrow: androidKeyCode = AndroidKeyCode.DPAD_UP; return true; + case KeyCode.DownArrow: androidKeyCode = AndroidKeyCode.DPAD_DOWN; return true; + case KeyCode.LeftArrow: androidKeyCode = AndroidKeyCode.DPAD_LEFT; return true; + case KeyCode.RightArrow: androidKeyCode = AndroidKeyCode.DPAD_RIGHT; return true; + case KeyCode.Home: androidKeyCode = AndroidKeyCode.MOVE_HOME; return true; + case KeyCode.End: androidKeyCode = AndroidKeyCode.MOVE_END; return true; + case KeyCode.PageUp: androidKeyCode = AndroidKeyCode.PAGE_UP; return true; + case KeyCode.PageDown: androidKeyCode = AndroidKeyCode.PAGE_DOWN; return true; + default: androidKeyCode = default; return false; + } + } + + /// + /// The Ctrl/Cmd chords that are forwarded to the device rather than left to the + /// Editor: select all, copy and paste. Only the bare chord, so Ctrl+Shift+A and + /// anything with Alt still belong to the Editor. + /// + internal static bool TryMapEditingShortcut(Event e, out AndroidKeyCode androidKeyCode) + { + androidKeyCode = default; + + if ((e.modifiers & (EventModifiers.Control | EventModifiers.Command)) == 0) + return false; + if ((e.modifiers & (EventModifiers.Shift | EventModifiers.Alt)) != 0) + return false; + + switch (e.keyCode) + { + case KeyCode.A: androidKeyCode = AndroidKeyCode.A; return true; + case KeyCode.C: androidKeyCode = AndroidKeyCode.C; return true; + case KeyCode.V: androidKeyCode = AndroidKeyCode.V; return true; + default: return false; + } + } + + static int MetaState(EventModifiers modifiers) + { + var meta = 0; + if ((modifiers & EventModifiers.Shift) != 0) + meta |= kMetaShiftOn; + if ((modifiers & EventModifiers.Alt) != 0) + meta |= kMetaAltOn; + if ((modifiers & EventModifiers.Control) != 0) + meta |= kMetaCtrlOn; + return meta; + } + + /// + /// Opens the Android Logcat window showing only this server's process, the + /// equivalent of adb logcat --pid=<server pid>. Tag filtering is left + /// as the user set it. + /// + void ShowServerLogcat() + { + var window = AndroidLogcatConsoleWindow.ShowNewOrExisting(); + if (window == null) + return; + + // Logcat follows the runtime-wide device selection, so filtering by a process + // id means nothing without selecting the device that process is on first. + if (m_Device != null) + m_Runtime.DeviceQuery.SelectDevice(m_Device); + + window.FilterByProcessId(m_ServerPid); + } + + /// + /// Extra detail for diagnosing the stream, below the navigation buttons. Touch + /// support is not repeated here - the rows above already report it. + /// + void DoDebuggingGUI(Rect rc, float labelWidth, ref float y) + { + if (!Unsupported.IsDeveloperMode()) + return; + + var height = EditorGUIUtility.singleLineHeight; + y += kNavigationSpacing; + if (y + height > rc.yMax) + return; + + GUI.Label(new Rect(rc.x, y, rc.width, height), Styles.DeveloperMode, EditorStyles.miniBoldLabel); + y += height; + + AndroidLogcatStatsColumn.Row(rc, labelWidth, ref y, Styles.Socket, + string.IsNullOrEmpty(m_SocketName) ? "-" : m_SocketName, m_SocketName); + AndroidLogcatStatsColumn.Row(rc, labelWidth, ref y, Styles.ForwardedPort, + m_ForwardedPort > 0 ? m_ForwardedPort.ToString() : "-"); + AndroidLogcatStatsColumn.Row(rc, labelWidth, ref y, Styles.ServerOnDevice, + string.IsNullOrEmpty(m_ServerDevicePath) ? "-" : m_ServerDevicePath, m_ServerDevicePath); + AndroidLogcatStatsColumn.Row(rc, labelWidth, ref y, Styles.ServerPid, + m_ServerPid > 0 ? m_ServerPid.ToString() : "-"); + + if (y + height > rc.yMax) + return; + + // Everything the server logs goes to logcat as well, so there is no button + // for the copy the Editor captures from the adb shell - that copy is kept + // only because a server that dies before it has a pid leaves nothing for + // the Logcat window to filter on, and it ends up in Errors instead. + var buttonWidth = Mathf.Min(kDebugButtonWidth, rc.width); + + EditorGUI.BeginDisabledGroup(m_ServerPid <= 0 || m_Device == null); + if (GUI.Button(new Rect(rc.x, y, buttonWidth, height), + Styles.ShowServerLogcat, EditorStyles.miniButton)) + { + ShowServerLogcat(); + } + EditorGUI.EndDisabledGroup(); + + y += height; + + if (y + height > rc.yMax) + return; + + EditorGUI.BeginDisabledGroup(m_ServerPid <= 0 || m_Device == null); + if (GUI.Button(new Rect(rc.x, y, buttonWidth, height), + Styles.KillServer, EditorStyles.miniButton)) + { + KillServerOnDevice(); + } + EditorGUI.EndDisabledGroup(); + + y += height; + + if (y + height > rc.yMax) + return; + + var gradleProject = GetServerGradleProjectPath(); + EditorGUI.BeginDisabledGroup(gradleProject == null); + if (GUI.Button(new Rect(rc.x, y, buttonWidth, height), + Styles.RebuildJar, EditorStyles.miniButton)) + { + RebuildServerJar(gradleProject); + } + EditorGUI.EndDisabledGroup(); + + y += height; + } + + /// + /// The Gradle project that builds the server, which lives beside the package in + /// its own repository - <repo>/External/UnityLogcatServer - and not + /// at all in a package installed from a registry. Null when it is not there. + /// + static string GetServerGradleProjectPath() + { + var path = AndroidLogcatUtilities.ResolvePath("..", "External", "UnityLogcatServer"); + return path != null && File.Exists(Path.Combine(path, "build.gradle")) ? path : null; + } + + /// + /// Builds the server jar and, if a stream is up, restarts it so the device runs + /// the new one and the Logcat window follows it. Developer-mode only: it is the + /// edit-build-run loop for the server, which is otherwise a trip to a terminal. + /// + void RebuildServerJar(string gradleProject) + { + if (gradleProject == null) + return; + + if (!AndroidLogcatUtilities.RunGradle(gradleProject, "dexJar")) + return; + + var wasStreaming = IsStreaming; + UnityEngine.Debug.Log("Live stream server jar rebuilt" + + (wasStreaming ? ", restarting the stream" : "")); + + if (!wasStreaming) + return; + + RestartStreaming(m_Device); + // Armed after the restart, so that the state reset inside StartStreaming + // does not clear it, and only if that restart actually took: a stream that + // failed to start has no server to show, and Shutdown disarms this anyway. + m_ShowLogcatWhenServerStarts = IsStreaming; + } + + /// + /// Stops and starts the stream against the same device, keeping the caller's + /// completion callback. Does nothing when no stream is running. + /// + internal void RestartStreaming(IAndroidLogcatDevice device) + { + var onStopped = m_OnStopLiveStream; + StopStreaming(); + if (device != null) + StartStreaming(device, onStopped); + } + } +} diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs.meta b/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs.meta new file mode 100644 index 00000000..4b2000c1 --- /dev/null +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c87b2c434792aae49951aacc50ba4e9b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatRuntime.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatRuntime.cs index 6fe9da39..7e479973 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatRuntime.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatRuntime.cs @@ -15,6 +15,7 @@ internal abstract class AndroidLogcatRuntimeBase protected AndroidLogcatCaptureScreenshot m_CaptureScreenshot; protected AndroidLogcatCaptureVideo m_CaptureVideo; protected AndroidLogcatQueryLayout m_QueryLayout; + protected AndroidLogcatLiveStream m_LiveSream; protected bool m_Initialized; protected abstract string UserSettingsPath { get; } @@ -59,6 +60,10 @@ public AndroidLogcatCaptureScreenshot CaptureScreenshot { get { ValidateIsInitialized(); return m_CaptureScreenshot; } } + public AndroidLogcatLiveStream LiveStream + { + get { ValidateIsInitialized(); return m_LiveSream; } + } public AndroidLogcatQueryLayout QueryLayout { @@ -72,6 +77,7 @@ public AndroidLogcatQueryLayout QueryLayout protected abstract AndroidLogcatCaptureVideo CreateScreenRecorder(); protected abstract AndroidLogcatCaptureScreenshot CreateScreenCapture(); protected abstract AndroidLogcatQueryLayout CreateQueryLayout(); + protected abstract AndroidLogcatLiveStream CreateLiveStream(); protected abstract void SaveEditorSettings(AndroidLogcatSettings settings); public virtual void Initialize() @@ -94,6 +100,7 @@ public virtual void Initialize() m_CaptureVideo = CreateScreenRecorder(); m_CaptureScreenshot = CreateScreenCapture(); m_QueryLayout = CreateQueryLayout(); + m_LiveSream = CreateLiveStream(); m_Initialized = true; } @@ -180,6 +187,11 @@ protected override AndroidLogcatQueryLayout CreateQueryLayout() return new AndroidLogcatQueryLayout(this); } + protected override AndroidLogcatLiveStream CreateLiveStream() + { + return new AndroidLogcatLiveStream(this); + } + protected override AndroidLogcatSettings LoadEditorSettings() { return AndroidLogcatSettings.Load(); diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenCaptureWindow.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenCaptureWindow.cs index d011891a..9795b8dc 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenCaptureWindow.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenCaptureWindow.cs @@ -4,6 +4,7 @@ using UnityEditor; using System.Collections.Generic; using UnityEditor.IMGUI.Controls; +using UnityEditor.ShortcutManagement; namespace Unity.Android.Logcat { @@ -19,7 +20,8 @@ class Styles public static GUIContent ShowInfo = new GUIContent("Show Info", "Display video information."); public static GUIContent Open = new GUIContent("Open", "Open captured screenshot or video."); public static GUIContent SaveAs = new GUIContent("Save As", "Save captured screenshot or video."); - public static GUIContent CaptureScreenshot = new GUIContent("Capture", "Capture screenshot from the android device."); + public static GUIContent CaptureScreenshot = new GUIContent("Capture", + "Capture screenshot from the android device. Shortcut: Ctrl+Shift+S, Cmd+Shift+S on macOS."); public static GUIContent CaptureVideo = new GUIContent("Capture", "Record the video from the android device, click Stop afterwards to stop the recording."); public static GUIContent StopVideo = new GUIContent("Stop", "Stop the recording."); } @@ -31,14 +33,17 @@ internal enum Mode private AndroidLogcatRuntimeBase m_Runtime; private const int kButtonAreaHeight = 30; - private const int kBottomAreaHeight = 8; + private AndroidLogcatCaptureScreenshot m_CaptureScreenshot; private AndroidLogcatCaptureVideo m_CaptureVideo; private AndroidLogcatVideoPlayer m_VideoPlayer; + private AndroidLogcatLiveStream m_LiveStream; private AndroidLogcatDeviceSelection m_DeviceSelection; private IAndroidLogcatDevice m_LastDeviceUsedForAssets; + private AndroidLogcatScreenshotList m_ScreenshotList; + private bool IsCapturing { get @@ -46,7 +51,7 @@ private bool IsCapturing var mode = m_Runtime.UserSettings.CaptureSettings.Mode; switch (mode) { - case Mode.Screenshot: return m_CaptureScreenshot.IsCapturing; + case Mode.Screenshot: return m_CaptureScreenshot.IsCapturing || m_LiveStream.IsStreaming; case Mode.Video: return m_CaptureVideo.IsRecording; default: throw new NotImplementedException(mode.ToString()); @@ -61,7 +66,9 @@ private string TemporaryPath var mode = m_Runtime.UserSettings.CaptureSettings.Mode; switch (mode) { - case Mode.Screenshot: return m_CaptureScreenshot.GetImagePath(m_DeviceSelection.SelectedDevice); + // A live stream leaves no file behind, so there is nothing to open or + // save while its row is selected. + case Mode.Screenshot: return m_ScreenshotList.LiveSelected ? string.Empty : m_CaptureScreenshot.SelectedImagePath; case Mode.Video: return m_CaptureVideo.GetVideoPath(m_DeviceSelection.SelectedDevice); default: throw new NotImplementedException(mode.ToString()); @@ -69,14 +76,11 @@ private string TemporaryPath } } - private string ExtensionForDialog - { - get - { - return Path.GetExtension(TemporaryPath).Substring(1); - } - } - + // Alongside the Logcat window's own entry, and reachable without opening that + // window first - the Screen Capture window is useful on its own. A device with + // no Android support installed gets the same message here as anywhere else, from + // OnGUI, rather than the item being hidden. + [MenuItem("Window/Analysis/Android Screen Capture")] public static void ShowWindow() { GetWindow("Device Screen Capture"); @@ -92,7 +96,15 @@ private void OnEnable() m_Runtime.Closing += OnDisable; m_CaptureScreenshot = m_Runtime.CaptureScreenshot; m_CaptureVideo = m_Runtime.CaptureVideo; + m_LiveStream = m_Runtime.LiveStream; m_VideoPlayer = new AndroidLogcatVideoPlayer(); + m_ScreenshotList = new AndroidLogcatScreenshotList(m_Runtime, Repaint); + + // Settings saved while the removed LiveStream mode was selected still hold + // its value, which is now out of range and would throw in the switches above. + var captureSettings = m_Runtime.UserSettings.CaptureSettings; + if (!Enum.IsDefined(typeof(Mode), captureSettings.Mode)) + captureSettings.Mode = Mode.Screenshot; m_Runtime.DeviceQuery.UpdateConnectedDevicesList(true); } @@ -104,11 +116,17 @@ private void ReloadCaptureAssetsIfNeeded(IAndroidLogcatDevice device) m_LastDeviceUsedForAssets = device; m_VideoPlayer.Play(m_CaptureVideo.GetVideoPath(device)); - m_Runtime.CaptureScreenshot.LoadImage(m_Runtime.CaptureScreenshot.GetImagePath(device)); + m_Runtime.CaptureScreenshot.LoadImage(m_Runtime.CaptureScreenshot.GetLatestImagePath(device)); + + m_ScreenshotList.OnDeviceChanged(m_DeviceSelection.SelectedDevice); } private void OnDisable() { + // The live stream is owned by the runtime, so it would otherwise keep + // mirroring the device after the window that was showing it is gone. + m_ScreenshotList?.Deselect(); + if (m_VideoPlayer != null) { m_VideoPlayer.Dispose(); @@ -129,8 +147,48 @@ private void QueueScreenCapture() m_CaptureScreenshot.QueueScreenCapture(m_DeviceSelection.SelectedDevice, OnScreenshotCompleted); } + /// + /// Ctrl+Shift+S, and Cmd+Shift+S on macOS - + /// is whichever of the two the platform uses. + /// + /// Scoped to this window rather than registered globally: the Editor's own + /// File > Save As sits on the same chord, and a window scoped shortcut takes + /// precedence over a global one only while its window has focus. It shows up in + /// Edit > Shortcuts under "Android Logcat", so it can be rebound there. + /// + /// + [Shortcut("Android Logcat/Capture Screenshot", typeof(AndroidLogcatScreenCaptureWindow), + KeyCode.S, ShortcutModifiers.Action | ShortcutModifiers.Shift)] + static void CaptureScreenshotShortcut(ShortcutArguments args) + { + var window = args.context as AndroidLogcatScreenCaptureWindow; + if (window != null) + window.CaptureScreenshotFromShortcut(); + } + + void CaptureScreenshotFromShortcut() + { + // The same conditions the Capture button draws itself with: it is disabled + // without a device and while a capture is in flight, and in Video mode it + // records video instead, which this shortcut is not for. + if (m_Runtime == null || m_DeviceSelection == null) + return; + if (m_Runtime.UserSettings.CaptureSettings.Mode != Mode.Screenshot) + return; + if (m_DeviceSelection.SelectedDevice == null || m_CaptureScreenshot.IsCapturing) + return; + + QueueScreenCapture(); + } + void OnScreenshotCompleted() { + // The image lands on disk while the capture is still running, and its + // details file only when the capture is integrated here. Selecting the row + // in between loads one without the other, and the preview would keep that + // for as long as the selection does not change. + m_ScreenshotList?.InvalidatePreview(); + var texture = m_CaptureScreenshot.ImageTexture; if (texture != null) maxSize = new Vector2(Math.Max(texture.width, position.width), texture.height + kButtonAreaHeight); @@ -145,7 +203,36 @@ void OnVideoCompleted(AndroidLogcatCaptureVideo.Result result, string videoPath) void DoModeGUI() { - m_Runtime.UserSettings.CaptureSettings.Mode = (Mode)EditorGUILayout.EnumPopup(m_Runtime.UserSettings.CaptureSettings.Mode, AndroidLogcatStyles.toolbarPopup); + var settings = m_Runtime.UserSettings.CaptureSettings; + var mode = (Mode)EditorGUILayout.EnumPopup(settings.Mode, AndroidLogcatStyles.toolbarPopup); + if (mode == settings.Mode) + return; + + settings.Mode = mode; + + // The list, and with it the Live row, is only drawn in Screenshot mode. + // Leaving that mode has to stop the stream, or the server carries on + // mirroring the device's display for a window that no longer shows it - + // and Video mode would happily start a recording alongside it. + if (mode != Mode.Screenshot) + m_ScreenshotList.Deselect(); + } + + /// + /// The screenshots folder is an ordinary directory that the user can add to, + /// delete from or overwrite behind the Editor's back. Nothing inside the Editor + /// can notice that, so the listing and the loaded image are both dropped when + /// this window comes back to the front - the moment someone is most likely to + /// have just been doing exactly that in a file browser. + /// + void OnFocus() + { + if (!AndroidBridge.AndroidExtensionsInstalled || m_Runtime == null) + return; + + m_CaptureScreenshot.InvalidateScreenshots(); + m_ScreenshotList?.InvalidatePreview(); + Repaint(); } void OnGUI() @@ -161,11 +248,8 @@ void OnGUI() DoToolbarGUI(); - GUILayout.Space(10); - if (m_DeviceSelection.SelectedDevice == null) - EditorGUILayout.HelpBox("No valid device selected.", MessageType.Info); - else - DoPreviewGUI(); + GUILayout.Space(5); + DoPreviewGUI(); EditorGUILayout.EndVertical(); } @@ -249,18 +333,7 @@ private void DoOpenGUI() { EditorGUI.BeginDisabledGroup(!File.Exists(TemporaryPath)); if (GUILayout.Button(Styles.Open, AndroidLogcatStyles.toolbarButton)) - { - switch (Application.platform) - { - case RuntimePlatform.OSXEditor: - System.Diagnostics.Process.Start("open", TemporaryPath); - break; - default: - Application.OpenURL(TemporaryPath); - break; - } - } - + AndroidLogcatUtilities.OpenFile(TemporaryPath); EditorGUI.EndDisabledGroup(); } @@ -269,40 +342,67 @@ private void DoSaveAsGUI() EditorGUI.BeginDisabledGroup(!File.Exists(TemporaryPath)); if (GUILayout.Button(Styles.SaveAs, AndroidLogcatStyles.toolbarButton)) { - var mode = m_Runtime.UserSettings.CaptureSettings.Mode; - var path = EditorUtility.SaveFilePanel( - "Save Screen Capture", - m_Runtime.UserSettings.CaptureSettings.GetLastSaveLocation(mode), - Path.GetFileName(TemporaryPath), - ExtensionForDialog); - if (!string.IsNullOrEmpty(path)) - { - try - { - m_Runtime.UserSettings.CaptureSettings.SetLastSaveLocation(mode, Path.GetFullPath(Path.GetDirectoryName(path))); - File.Copy(TemporaryPath, path, true); - } - catch (Exception ex) - { - UnityEngine.Debug.LogErrorFormat("Failed to save to '{0}' as '{1}'.", path, ex.Message); - } - } + var settings = m_Runtime.UserSettings.CaptureSettings; + settings.SaveFileAs(settings.Mode, TemporaryPath, "Save Screen Capture"); } EditorGUI.EndDisabledGroup(); } + /// + /// The list of saved screenshots on the left, the selected one on the right, a + /// draggable splitter between them. + /// + private void DoScreenshotGUI(Rect rc) + { + // Drawn with or without a device: these are files on this machine, and + // they outlive the device they came from. What needs a device - Capture, + // the live view - disables itself. + // The list draws itself and the splitter, and hands back what is left. + var imageRect = m_ScreenshotList.DoGUI(rc, m_DeviceSelection.SelectedDevice); + + if (m_ScreenshotList.LiveSelected) + { + // The developer-mode details are drawn by DoGUI, in the info column. + m_LiveStream.DoGUI(imageRect, m_DeviceSelection.SelectedDevice, Repaint); + // Frames arrive on the runtime's update, not on GUI events, so the window + // has to keep repainting to show them. + if (m_LiveStream.IsStreaming) + Repaint(); + } + // The list draws the image, not AndroidLogcatCaptureScreenshot: its texture + // belongs to the Layout Viewer as much as to this window. + else if (!m_ScreenshotList.DoPreviewGUI(imageRect)) + { + var message = m_DeviceSelection.SelectedDevice == null + ? "No screenshot to show." + : "No screenshot to show, click Capture button."; + EditorGUI.HelpBox(imageRect, message, MessageType.Info); + } + } + private void DoPreviewGUI() { switch (m_Runtime.UserSettings.CaptureSettings.Mode) { case Mode.Screenshot: { - var rc = new Rect(0, kButtonAreaHeight * 2, position.width, position.height - kButtonAreaHeight - kBottomAreaHeight); - if (!m_CaptureScreenshot.DoGUI(rc)) - EditorGUILayout.HelpBox("No screenshot to show, click Capture button.", MessageType.Info); + // Claimed from the layout rather than offset by a hardcoded + // toolbar height, which left a gap when the two disagreed. + var rc = GUILayoutUtility.GetRect(0, 0, + GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true)); + DoScreenshotGUI(rc); } break; case Mode.Video: + // Unlike the saved screenshots, a recording belongs to the device it + // was taken from and is kept per device, so there is nothing to show + // while none is selected. + if (m_DeviceSelection.SelectedDevice == null) + { + EditorGUILayout.HelpBox("No valid device selected.", MessageType.Info); + break; + } + if (Unsupported.IsDeveloperMode()) m_CaptureVideo.DoDebuggingGUI(); DoVideoSettingsGUI(); @@ -323,6 +423,8 @@ private void DoPreviewGUI() Repaint(); } break; + default: + break; } } diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotInfo.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotInfo.cs new file mode 100644 index 00000000..0c2df34c --- /dev/null +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotInfo.cs @@ -0,0 +1,201 @@ +using System; +using System.IO; +using UnityEngine; + +namespace Unity.Android.Logcat +{ + /// + /// What a screenshot cannot say about itself: the device it came from, and when. + /// Written beside the image as <name>.json when it is captured, and + /// moved and deleted with it. A screenshot that has none - captured before this + /// existed, or dropped into the folder by hand - shows Undefined instead. + /// + [Serializable] + internal class AndroidLogcatScreenshotInfo + { + internal const string kExtension = ".json"; + + // Bumped if the fields below stop meaning what they mean now, so a reader can + // tell an old file from an unreadable one. + internal const int kVersion = 1; + + public int version = kVersion; + public string capturedAt; + public string deviceId; + public string deviceName; + public string manufacturer; + public string model; + public string osVersion; + public int apiLevel; + public string abi; + public int displayWidth; + public int displayHeight; + + internal static string PathFor(string imagePath) + { + return string.IsNullOrEmpty(imagePath) ? null : Path.ChangeExtension(imagePath, kExtension); + } + + /// + /// Reads the device. Talks to adb for the display size, so this belongs on the + /// thread the capture itself runs on, not on the GUI's. + /// + internal static AndroidLogcatScreenshotInfo Create(IAndroidLogcatDevice device) + { + if (device == null) + return null; + + var displaySize = Vector2.zero; + try + { + device.QueryDisplaySize(out var physical, out var overriden); + displaySize = overriden ?? physical; + } + catch (Exception ex) + { + AndroidLogcatInternalLog.Log($"Failed to query display size: {ex.Message}"); + } + + var manufacturer = device.Manufacturer ?? string.Empty; + var model = device.Model ?? string.Empty; + + return new AndroidLogcatScreenshotInfo() + { + capturedAt = DateTime.Now.ToString("o"), + deviceId = device.Id, + deviceName = $"{manufacturer} {model}".Trim(), + manufacturer = manufacturer, + model = model, + osVersion = device.OSVersion?.ToString(), + apiLevel = device.APILevel, + abi = device.ABI, + displayWidth = (int)displaySize.x, + displayHeight = (int)displaySize.y + }; + } + + static bool IsDetails(AndroidLogcatScreenshotInfo info) + { + return info != null && info.version > 0 && !string.IsNullOrEmpty(info.capturedAt); + } + + static bool MayReplace(string path, string what) + { + if (!File.Exists(path)) + return true; + + try + { + if (IsDetails(JsonUtility.FromJson(File.ReadAllText(path)))) + return true; + } + catch (Exception) + { + // Not readable as ours, so certainly not ours. + } + + UnityEngine.Debug.LogWarning($"Not {what} '{path}': it was not written by Android Logcat."); + return false; + } + + internal void Save(string imagePath) + { + var path = PathFor(imagePath); + if (!MayReplace(path, "overwriting")) + return; + + try + { + File.WriteAllText(path, JsonUtility.ToJson(this, true)); + } + catch (Exception ex) + { + // A screenshot without its details is still a screenshot, so this is + // logged rather than failing the capture. + UnityEngine.Debug.LogWarning($"Failed to write '{path}'.\n{ex.Message}"); + } + } + + /// Returns null when there is no file, or it cannot be read. + internal static AndroidLogcatScreenshotInfo Load(string imagePath) + { + var path = PathFor(imagePath); + if (string.IsNullOrEmpty(path) || !File.Exists(path)) + return null; + + try + { + var info = JsonUtility.FromJson(File.ReadAllText(path)); + // A file of someone else's that shares the name is not details, and + // its defaults would be shown as a device of empty strings and zeroes. + return IsDetails(info) ? info : null; + } + catch (Exception ex) + { + AndroidLogcatInternalLog.Log($"Failed to read '{path}': {ex.Message}"); + return null; + } + } + + internal static void Move(string fromImagePath, string toImagePath) + { + if (!Both(fromImagePath, toImagePath, out var from, out var to)) + return; + if (!MayReplace(to, "overwriting")) + return; + + try + { + File.Delete(to); + File.Move(from, to); + } + catch (Exception ex) + { + UnityEngine.Debug.LogWarning($"Failed to move '{from}' to '{to}'.\n{ex.Message}"); + } + } + + /// Takes the details along to a copy of the image saved elsewhere. + internal static void CopyBeside(string fromImagePath, string toImagePath) + { + if (!Both(fromImagePath, toImagePath, out var from, out var to)) + return; + if (!MayReplace(to, "overwriting")) + return; + + try + { + File.Copy(from, to, true); + } + catch (Exception ex) + { + UnityEngine.Debug.LogWarning($"Failed to copy '{from}' to '{to}'.\n{ex.Message}"); + } + } + + static bool Both(string fromImagePath, string toImagePath, out string from, out string to) + { + from = PathFor(fromImagePath); + to = PathFor(toImagePath); + return from != null && to != null && from != to && File.Exists(from); + } + + internal static void Delete(string imagePath) + { + var path = PathFor(imagePath); + if (path == null || !File.Exists(path)) + return; + if (!MayReplace(path, "deleting")) + return; + + try + { + File.Delete(path); + } + catch (Exception ex) + { + UnityEngine.Debug.LogWarning($"Failed to delete '{path}'.\n{ex.Message}"); + } + } + } +} diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotInfo.cs.meta b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotInfo.cs.meta new file mode 100644 index 00000000..0d77b111 --- /dev/null +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eb45dfea200f4f63a69a5427a68b6317 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs new file mode 100644 index 00000000..016245e8 --- /dev/null +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs @@ -0,0 +1,778 @@ +using System; +using System.Collections.Generic; +using System.IO; +using UnityEditor; +using UnityEngine; + +namespace Unity.Android.Logcat +{ + /// + /// The list of saved screenshots, with the live stream as its first row, and the + /// splitter that separates it from whatever is being shown on the right. + /// + /// One per window rather than one per runtime: the scroll position, the splitter + /// width and which row is selected are all view state, and + /// is a runtime-wide singleton shared + /// with the Layout Viewer. Files, numbering and the image itself stay there; this + /// only decides what to look at. + /// + /// + internal class AndroidLogcatScreenshotList + { + static class Styles + { + internal static readonly GUIContent LiveRow = new GUIContent("Live", + "Show the device screen live. Streaming stops when another row is selected. " + + "Right click to reconnect."); + internal static readonly GUIContent Delete = new GUIContent("×", + "Delete this screenshot from disk"); + + internal static readonly GUIContent Device = new GUIContent("Device", + "The device the screenshot was captured from, as its details file records it."); + internal static readonly GUIContent OS = new GUIContent("OS", + "The Android version the device was running."); + internal static readonly GUIContent DisplaySize = new GUIContent("Display size", + "The device's display resolution at the time, which is not the image size when the display was rotated or its size overridden."); + internal static readonly GUIContent ImageSize = new GUIContent("Image size", + "Size of the image in pixels, which is the resolution of the display it was captured from."); + internal static readonly GUIContent FileSize = new GUIContent("File size", + "Size of the file on disk."); + internal static readonly GUIContent Captured = new GUIContent("Captured", + "When the file was last written."); + + // The selected row draws on a coloured background, where the default label + // colour is hard to read. + static GUIStyle s_SelectedRow; + internal static GUIStyle SelectedRow + { + get + { + if (s_SelectedRow == null) + { + s_SelectedRow = new GUIStyle(EditorStyles.label); + s_SelectedRow.normal.textColor = Color.white; + } + return s_SelectedRow; + } + } + } + + internal const float kDefaultWidth = 220; + const float kMinWidth = 150; + const float kMaxWidth = 400; + const float kSplitterWidth = 5; + const float kScrollbarWidth = 16; + const float kDeleteButtonWidth = 18; + const float kDeleteButtonMargin = 2; + // Air between the Live row and the saved screenshots, with the line in it. + const float kGroupGap = 5; + + readonly AndroidLogcatRuntimeBase m_Runtime; + readonly AndroidLogcatCaptureScreenshot m_CaptureScreenshot; + readonly AndroidLogcatLiveStream m_LiveStream; + readonly Action m_Repaint; + + const string kRenameControlName = "ScreenshotRenameField"; + const string kUndefined = "Undefined"; + + readonly Splitter m_Splitter = new Splitter(Splitter.SplitterType.Horizontal, kMinWidth, kMaxWidth); + Vector2 m_Scroll; + bool m_LiveSelected; + // Whether the one-off "what should this window open on" decision has been made. + bool m_InitialSelectionDone; + + // Which row is being renamed, and the text so far. The field is focused once, + // the frame after it first appears. + string m_RenamingPath; + string m_RenameText; + bool m_RenameNeedsFocus; + // The list's own control id, remembered so that focus can go back to it once a + // rename ends - otherwise the keys would need another click to work again. + int m_ListControlId; + + // The selected screenshot, drawn by this window and nothing else. It is + // deliberately not AndroidLogcatCaptureScreenshot's texture: that one is shared + // with the Layout Viewer, which draws node bounds over it, and swapping it for + // a screenshot picked out of this list would put that overlay on an unrelated + // image. Only the selected path is shared. + Texture2D m_PreviewTexture; + string m_PreviewPath; + PreviewDetails m_PreviewDetails; + + // Zoom and pan for the preview. Its own, separate from the live view's: they + // show different things, and a zoom set on one is rarely the one wanted on the + // other. Kept across screenshots, though - screenshots from the same device are + // the same size, so comparing two of them at the same zoom is the point. + readonly AndroidLogcatImageViewer m_Viewer = new AndroidLogcatImageViewer(); + + /// + /// Whether the Live row is the selected one, so the caller knows to show the + /// stream rather than an image, and that there is no file to open or save. + /// + internal bool LiveSelected => m_LiveSelected; + + internal AndroidLogcatScreenshotList(AndroidLogcatRuntimeBase runtime, Action repaint) + { + m_Runtime = runtime; + m_CaptureScreenshot = runtime.CaptureScreenshot; + m_LiveStream = runtime.LiveStream; + m_Repaint = repaint; + + // Settings saved before the width existed deserialize it as 0, which would + // collapse the list to nothing. + var settings = m_Runtime.UserSettings.CaptureSettings; + if (settings.ScreenshotListWidth < kMinWidth) + settings.ScreenshotListWidth = kDefaultWidth; + } + + /// + /// Stops the stream and drops the selection, for a window that is going away or + /// has switched to a mode that does not show this list. The initial selection is + /// forgotten with it, so coming back decides what to open on again. + /// + internal void Deselect() + { + if (m_LiveSelected) + m_LiveStream.StopStreaming(); + m_LiveSelected = false; + m_InitialSelectionDone = false; + DestroyPreview(); + } + + /// + /// Forgets the loaded preview, so the next pass reads it from disk again even + /// though the selected path has not changed. The file behind that path can have + /// been replaced while the Editor was not looking. + /// + internal void InvalidatePreview() + { + DestroyPreview(); + } + + /// + /// Draws the selected screenshot, or the last capture's error if there is one. + /// Returns false when there is nothing to show, so the caller can say so. + /// + internal bool DoPreviewGUI(Rect rc) + { + var error = m_CaptureScreenshot.Error; + if (!string.IsNullOrEmpty(error)) + { + EditorGUI.HelpBox(rc, error, MessageType.Error); + return true; + } + + if (m_PreviewTexture == null) + return false; + + // The same column the live view draws, so the two modes look alike. Taken + // out of the area before the image is fitted, or the image would be drawn + // underneath it, and sized to its text, or a device name is cut in half. + var statsWidth = AndroidLogcatStatsColumn.WidthFor(rc, m_PreviewDetails.Values); + var imageArea = new Rect(rc.x, rc.y, Mathf.Max(0, rc.width - statsWidth), rc.height); + + var imageBox = m_Viewer.DoGUI(imageArea, + (float)m_PreviewTexture.width / m_PreviewTexture.height, + imageRect => GUI.DrawTexture(imageRect, m_PreviewTexture), m_Repaint); + + DoStatsGUI(AndroidLogcatStatsColumn.RectBeside(rc, imageBox)); + return true; + } + + void DoStatsGUI(Rect rc) + { + const float kLabelWidth = AndroidLogcatStatsColumn.kLabelWidth; + var y = rc.y; + var details = m_PreviewDetails; + + AndroidLogcatStatsColumn.Row(rc, kLabelWidth, ref y, Styles.Device, details.Device, details.DeviceId); + AndroidLogcatStatsColumn.Row(rc, kLabelWidth, ref y, Styles.OS, details.OS); + AndroidLogcatStatsColumn.Row(rc, kLabelWidth, ref y, Styles.DisplaySize, details.DisplaySize); + AndroidLogcatStatsColumn.Row(rc, kLabelWidth, ref y, Styles.ImageSize, details.ImageSize); + AndroidLogcatStatsColumn.Row(rc, kLabelWidth, ref y, Styles.FileSize, details.FileSize); + AndroidLogcatStatsColumn.Row(rc, kLabelWidth, ref y, Styles.Captured, details.Captured, details.CapturedInFull); + } + + /// + /// What the details column says about the selected screenshot, worked out when + /// it is loaded: the column is measured against these before the image is + /// fitted, and none of it changes while the same screenshot is shown. + /// + class PreviewDetails + { + internal string Device { get; } + internal string DeviceId { get; } + internal string OS { get; } + internal string DisplaySize { get; } + internal string ImageSize { get; } + internal string FileSize { get; } + internal string Captured { get; } + internal string CapturedInFull { get; } + internal string[] Values { get; } + + internal PreviewDetails(Texture2D texture, FileInfo file, AndroidLogcatScreenshotInfo info) + { + Device = info == null || string.IsNullOrEmpty(info.deviceName) ? kUndefined : info.deviceName; + DeviceId = info?.deviceId; + OS = info == null ? kUndefined : OperatingSystem(info); + DisplaySize = info == null || info.displayWidth <= 0 + ? kUndefined + : $"{info.displayWidth}x{info.displayHeight}"; + ImageSize = $"{texture.width}x{texture.height}"; + FileSize = EditorUtility.FormatBytes(file.Length); + Captured = file.LastWriteTime.ToString("g"); + CapturedInFull = file.LastWriteTime.ToString("F"); + Values = new[] { Device, OS, DisplaySize, ImageSize, FileSize, Captured }; + } + } + + static string OperatingSystem(AndroidLogcatScreenshotInfo info) + { + if (string.IsNullOrEmpty(info.osVersion)) + return info.apiLevel > 0 ? $"API {info.apiLevel}" : kUndefined; + return info.apiLevel > 0 ? $"Android {info.osVersion} (API {info.apiLevel})" : $"Android {info.osVersion}"; + } + + /// + /// Loads whatever the selection points at, if it is not already loaded. Called + /// every pass rather than from each place that can change the selection - a + /// capture landing, a delete, a rename - so there is one path to get wrong + /// instead of four. + /// + void SyncPreview() + { + var path = m_CaptureScreenshot.SelectedImagePath; + if (path == m_PreviewPath) + return; + + DestroyPreview(); + m_PreviewPath = path; + + if (string.IsNullOrEmpty(path) || !File.Exists(path)) + return; + + var texture = new Texture2D(2, 2); + if (texture.LoadImage(File.ReadAllBytes(path))) + { + m_PreviewTexture = texture; + m_PreviewDetails = new PreviewDetails(texture, new FileInfo(path), + AndroidLogcatScreenshotInfo.Load(path)); + } + else + { + UnityEngine.Object.DestroyImmediate(texture); + } + } + + void DestroyPreview() + { + if (m_PreviewTexture != null) + UnityEngine.Object.DestroyImmediate(m_PreviewTexture); + m_PreviewTexture = null; + m_PreviewPath = null; + m_PreviewDetails = null; + } + + /// + /// A stream belongs to the device it was started on, so it has to be restarted + /// against a new one. + /// + internal void OnDeviceChanged(IAndroidLogcatDevice device) + { + if (m_LiveSelected) + m_LiveStream.RestartStreaming(device); + } + + /// + /// Draws the list and the splitter, and returns what is left for the caller to + /// draw the image or the stream into. + /// + internal Rect DoGUI(Rect rc, IAndroidLogcatDevice device) + { + var settings = m_Runtime.UserSettings.CaptureSettings; + var width = settings.ScreenshotListWidth; + + var listRect = new Rect(rc.x, rc.y, width, rc.height); + var splitterRect = new Rect(listRect.xMax, rc.y, kSplitterWidth, rc.height); + + DoListGUI(listRect, device); + + if (m_Splitter.DoGUI(splitterRect, ref width)) + { + settings.ScreenshotListWidth = width; + m_Repaint(); + } + + return new Rect(splitterRect.xMax, rc.y, Mathf.Max(0, rc.xMax - splitterRect.xMax), rc.height); + } + + void DoListGUI(Rect rc, IAndroidLogcatDevice device) + { + // Allocated on every pass, before any early return, so control ids do not + // shift between the Layout and Repaint passes. + var controlId = GUIUtility.GetControlID(FocusType.Keyboard); + m_ListControlId = controlId; + + GUI.Box(rc, GUIContent.none, EditorStyles.helpBox); + + // Every device, not just the selected one: a screenshot is worth looking at + // whichever device it came from, and the file name says which that was. + var screenshots = m_CaptureScreenshot.GetScreenshots(); + + SyncPreview(); + + // Row 0 is the live stream, the rest are saved screenshots. + var rowCount = screenshots.Count + 1; + var selectedRow = m_LiveSelected ? 0 : -1; + if (!m_LiveSelected) + { + var selectedPath = m_CaptureScreenshot.SelectedImagePath; + for (var i = 0; i < screenshots.Count; i++) + { + if (screenshots[i].Path == selectedPath) + { + selectedRow = i + 1; + break; + } + } + } + + // With no screenshots to look at, open on the live view rather than on an + // empty pane. Once per window, and only when the list is empty: deleting the + // last screenshot deliberately leaves nothing selected rather than starting a + // stream, and that has to stay true. + if (!m_InitialSelectionDone) + { + m_InitialSelectionDone = true; + if (screenshots.Count == 0 && !m_LiveSelected) + { + SelectRow(screenshots, 0, device); + selectedRow = 0; + } + } + + var rowHeight = EditorGUIUtility.singleLineHeight; + var inner = new Rect(rc.x + 1, rc.y + 1, rc.width - 2, rc.height - 2); + + // Room for the scrollbar is reserved only when there will be one. Reserving + // it unconditionally leaves a dead strip that pushes the delete buttons away + // from the right edge. + var contentHeight = rowCount * rowHeight + (screenshots.Count > 0 ? kGroupGap : 0); + var scrollbarWidth = contentHeight > inner.height ? kScrollbarWidth : 0; + var content = new Rect(0, 0, inner.width - scrollbarWidth, contentHeight); + var hasFocus = GUIUtility.keyboardControl == controlId; + + // Acted on after the loop: deleting invalidates the cached list that is being + // iterated here, and a menu has to be positioned in window coordinates rather + // than the scroll view's. + string deletePath = null; + var deleteRow = -1; + var menuRow = -1; + string menuPath = null; + var menuScreenPosition = Vector2.zero; + + m_Scroll = GUI.BeginScrollView(inner, m_Scroll, content); + for (var row = 0; row < rowCount; row++) + { + var rowRect = new Rect(0, RowTop(row, rowHeight), content.width, rowHeight); + var isSelected = row == selectedRow; + + if (Event.current.type == EventType.Repaint && isSelected) + { + // Dimmer when the list is not focused, the way editor lists behave. + EditorGUI.DrawRect(rowRect, hasFocus + ? new Color(0.24f, 0.48f, 0.90f, 0.85f) + : new Color(0.30f, 0.30f, 0.30f, 0.85f)); + } + + // The Live row has no file behind it, so nothing to delete. + var deleteWidth = row == 0 ? 0 : kDeleteButtonWidth + kDeleteButtonMargin * 2; + var labelRect = new Rect(rowRect.x + 4, rowRect.y, + Mathf.Max(0, rowRect.width - 4 - deleteWidth), rowRect.height); + + if (row > 0 && screenshots[row - 1].Path == m_RenamingPath) + { + DoRenameFieldGUI(labelRect); + } + else + { + // Tooltip relative to the project, because the absolute path is + // mostly project folder and covers the rows around it. + var label = row == 0 + ? Styles.LiveRow + : new GUIContent(screenshots[row - 1].Name, + AndroidLogcatUtilities.ProjectRelativePath(screenshots[row - 1].Path)); + var style = isSelected ? Styles.SelectedRow : EditorStyles.label; + GUI.Label(labelRect, label, style); + } + + if (deleteWidth > 0) + { + // Inset by a pixel top and bottom so the button does not touch the + // rows above and below it. + var deleteRect = new Rect( + rowRect.xMax - kDeleteButtonWidth - kDeleteButtonMargin, + rowRect.y + 1, + kDeleteButtonWidth, + rowRect.height - 2); + if (GUI.Button(deleteRect, Styles.Delete, EditorStyles.miniButton)) + { + deletePath = screenshots[row - 1].Path; + deleteRow = row; + } + } + + // Hit tested against the label rather than the whole row, so that the + // delete button does not also change the selection. Skipped while this + // row is being renamed, so clicking into the text field does not count + // as selecting the row. + if (Event.current.type == EventType.MouseDown && Event.current.button == 0 + && labelRect.Contains(Event.current.mousePosition) + && (row == 0 || screenshots[row - 1].Path != m_RenamingPath)) + { + GUIUtility.keyboardControl = controlId; + SelectRow(screenshots, row, device); + + // The Live row has no file to open. + if (Event.current.clickCount == 2 && row > 0) + AndroidLogcatUtilities.OpenFile(screenshots[row - 1].Path); + + Event.current.Use(); + } + + if (Event.current.type == EventType.ContextClick + && rowRect.Contains(Event.current.mousePosition)) + { + // Selected as well, so the menu acts on what is now on screen. + GUIUtility.keyboardControl = controlId; + SelectRow(screenshots, row, device); + + menuRow = row; + menuPath = row == 0 ? null : screenshots[row - 1].Path; + // Captured in screen space: inside the scroll view the mouse position + // is in content coordinates, which the menu would misplace. + menuScreenPosition = GUIUtility.GUIToScreenPoint(Event.current.mousePosition); + Event.current.Use(); + } + } + + // The Live row is not one of the saved screenshots, and a list that runs + // them together reads as though it were. + if (screenshots.Count > 0 && Event.current.type == EventType.Repaint) + { + var separator = new Rect(kGroupGap, rowHeight + Mathf.Floor(kGroupGap * 0.5f), + Mathf.Max(0, content.width - kGroupGap * 2), 1); + EditorGUI.DrawRect(separator, EditorGUIUtility.isProSkin + ? new Color(1, 1, 1, 0.12f) + : new Color(0, 0, 0, 0.2f)); + } + + GUI.EndScrollView(); + + HandleKeys(controlId, screenshots, rowCount, selectedRow, rowHeight, inner.height, device); + + if (menuRow == 0) + ShowLiveRowContextMenu(GUIUtility.ScreenToGUIPoint(menuScreenPosition), device); + else if (menuRow > 0) + ShowRowContextMenu(menuPath, GUIUtility.ScreenToGUIPoint(menuScreenPosition)); + + if (deletePath != null) + ConfirmAndDelete(deletePath, deleteRow, device); + } + + /// + /// The Live row has no file behind it, so all it offers is starting the stream + /// over - a server that died, or a device that went away and came back, otherwise + /// needs the selection moved off the row and back onto it. + /// + void ShowLiveRowContextMenu(Vector2 position, IAndroidLogcatDevice device) + { + var menu = new AndroidContextMenu(); + // The device travels in the menu item, because the menu is answered long + // after this method has returned - the same reason the screenshot rows put + // their path there. Named argument: the third positional parameter of Add + // is `selected`, not `enabled`, and reconnecting without a device to + // reconnect to does nothing. + menu.Add(ScreenshotContextMenu.Reconnect, "Reconnect", + enabled: device != null, userData: device); + menu.Show(position, OnContextMenuSelection); + } + + void ShowRowContextMenu(string path, Vector2 position) + { + var menu = new AndroidContextMenu(); + menu.Add(ScreenshotContextMenu.ShowInFileBrowser, + AndroidLogcatUtilities.RevealInFileBrowserLabel, userData: path); + menu.Add(ScreenshotContextMenu.Open, "Open", userData: path); + menu.Add(ScreenshotContextMenu.SaveAs, "Save As...", userData: path); + menu.Add(ScreenshotContextMenu.Rename, "Rename", userData: path); + menu.Show(position, OnContextMenuSelection); + } + + /// + /// The row's label replaced by a text field. Enter commits, Escape cancels, and + /// losing focus commits as well - clicking away is not a reason to throw the name + /// the user typed away. + /// + void DoRenameFieldGUI(Rect rc) + { + var e = Event.current; + if (e.type == EventType.KeyDown) + { + if (e.keyCode == KeyCode.Return || e.keyCode == KeyCode.KeypadEnter) + { + CommitRename(); + e.Use(); + return; + } + if (e.keyCode == KeyCode.Escape) + { + CancelRename(); + e.Use(); + return; + } + } + + GUI.SetNextControlName(kRenameControlName); + m_RenameText = EditorGUI.TextField(rc, m_RenameText); + + if (m_RenameNeedsFocus) + { + // Has to happen after the field exists, so a frame later than the menu. + GUI.FocusControl(kRenameControlName); + m_RenameNeedsFocus = false; + } + else if (GUI.GetNameOfFocusedControl() != kRenameControlName) + { + CommitRename(); + } + } + + void BeginRename(string path) + { + m_RenamingPath = path; + m_RenameText = Path.GetFileNameWithoutExtension(path); + m_RenameNeedsFocus = true; + m_Repaint(); + } + + void CommitRename() + { + var path = m_RenamingPath; + var name = m_RenameText; + CancelRename(); + + if (path == null) + return; + + // An unchanged or unusable name is not an error; the row just goes back to + // showing what it showed before. + m_CaptureScreenshot.RenameScreenshot(path, name); + m_Repaint(); + } + + void CancelRename() + { + m_RenamingPath = null; + m_RenameText = null; + m_RenameNeedsFocus = false; + if (GUI.GetNameOfFocusedControl() == kRenameControlName) + GUIUtility.keyboardControl = m_ListControlId; + } + + void OnContextMenuSelection(object userData, string[] options, int selected) + { + var menu = (AndroidContextMenu)userData; + var item = menu.GetItemAt(selected); + if (item == null) + return; + + // What UserData holds depends on the item: a path for the screenshot rows, + // the device for the Live row. + switch (item.Item) + { + case ScreenshotContextMenu.ShowInFileBrowser: + AndroidLogcatUtilities.RevealInFileBrowser((string)item.UserData); + break; + case ScreenshotContextMenu.Open: + AndroidLogcatUtilities.OpenFile((string)item.UserData); + break; + case ScreenshotContextMenu.SaveAs: + SaveAs((string)item.UserData); + break; + case ScreenshotContextMenu.Rename: + BeginRename((string)item.UserData); + break; + case ScreenshotContextMenu.Reconnect: + // The context click selected the row, so the stream is this window's + // to restart by the time this runs. + m_LiveStream.RestartStreaming((IAndroidLogcatDevice)item.UserData); + m_Repaint(); + break; + } + } + + void SaveAs(string path) + { + // Screenshots are always saved under the Screenshot mode's remembered + // location, whatever mode the window happens to be in. + m_Runtime.UserSettings.CaptureSettings.SaveFileAs( + AndroidLogcatScreenCaptureWindow.Mode.Screenshot, path, "Save Screenshot"); + } + + /// + /// F2 everywhere, and Enter as well on macOS - the same bindings the Project + /// window uses, so whichever one the user reaches for works. + /// + static bool IsRenameShortcut(Event e) + { + if (e.keyCode == KeyCode.F2) + return true; + return Application.platform == RuntimePlatform.OSXEditor + && (e.keyCode == KeyCode.Return || e.keyCode == KeyCode.KeypadEnter); + } + + /// + /// Delete everywhere, and Command+Backspace on macOS, where compact keyboards + /// have no forward delete key - again what the Project window takes. + /// + static bool IsDeleteShortcut(Event e) + { + if (e.keyCode == KeyCode.Delete) + return true; + return Application.platform == RuntimePlatform.OSXEditor + && e.keyCode == KeyCode.Backspace && e.command; + } + + /// + /// Up and Down cycle through the list once it has focus, F2 renames and Delete + /// deletes. + /// + void HandleKeys(int controlId, IReadOnlyList screenshots, + int rowCount, int selectedRow, float rowHeight, float viewHeight, IAndroidLogcatDevice device) + { + // While the rename field has focus it owns the keyboard, so none of this runs. + if (GUIUtility.keyboardControl != controlId || Event.current.type != EventType.KeyDown) + return; + + if (IsRenameShortcut(Event.current)) + { + // Row 0 is the live stream, which has no file to rename. + if (selectedRow > 0) + BeginRename(screenshots[selectedRow - 1].Path); + Event.current.Use(); + return; + } + + if (IsDeleteShortcut(Event.current)) + { + // Used before the dialog, which pumps its own events. + Event.current.Use(); + // Row 0 is the live stream, which has no file to delete. Same + // confirmation as the row's own button, and it runs from the same place + // in the frame - after the scroll view has closed. + if (selectedRow > 0) + ConfirmAndDelete(screenshots[selectedRow - 1].Path, selectedRow, device); + return; + } + + var delta = 0; + switch (Event.current.keyCode) + { + case KeyCode.UpArrow: delta = -1; break; + case KeyCode.DownArrow: delta = 1; break; + case KeyCode.Home: delta = -rowCount; break; + case KeyCode.End: delta = rowCount; break; + default: return; + } + + // No selection yet: Down starts at the top, Up at the bottom. + var next = selectedRow < 0 + ? (delta > 0 ? 0 : rowCount - 1) + : Mathf.Clamp(selectedRow + delta, 0, rowCount - 1); + + if (next != selectedRow) + { + SelectRow(screenshots, next, device); + ScrollIntoView(next, rowHeight, viewHeight); + } + Event.current.Use(); + } + + /// + /// Row 0 shows the live stream, the rest a saved screenshot. Streaming starts and + /// stops with the selection rather than needing its own button, so leaving the + /// Live row does not leave the device mirroring for nothing. + /// + void SelectRow(IReadOnlyList screenshots, int row, + IAndroidLogcatDevice device) + { + if (row == 0) + { + if (!m_LiveSelected) + { + m_LiveSelected = true; + m_LiveStream.RestartStreaming(device); + } + } + else + { + if (m_LiveSelected) + { + m_LiveSelected = false; + m_LiveStream.StopStreaming(); + } + m_CaptureScreenshot.SelectImage(screenshots[row - 1].Path); + } + m_Repaint(); + } + + /// + /// Deleting is confirmed first: the button sits next to the row one clicks to + /// select it, and the file is gone for good afterwards. The deletion itself is + /// AndroidLogcatCaptureScreenshot.DeleteScreenshot; what belongs here is the + /// prompt, which the Layout Viewer sharing that instance should not inherit, and + /// picking what to select next. + /// + void ConfirmAndDelete(string path, int row, IAndroidLogcatDevice device) + { + var name = Path.GetFileNameWithoutExtension(path); + if (!EditorUtility.DisplayDialog("Delete Screenshot", + $"Delete {name}?\n\nThe file is removed from disk and this cannot be undone.", + "Delete", "Cancel")) + return; + + var wasSelected = m_CaptureScreenshot.SelectedImagePath == path; + if (!m_CaptureScreenshot.DeleteScreenshot(path)) + return; + + if (wasSelected) + { + // Whatever took its place, else the one before it. Deliberately not the + // Live row, which would start streaming because a file was deleted. + var remaining = m_CaptureScreenshot.GetScreenshots(); + if (remaining.Count > 0) + SelectRow(remaining, Mathf.Clamp(row - 1, 0, remaining.Count - 1) + 1, device); + } + m_Repaint(); + } + + /// + /// Where a row sits in the list. Everything below the Live row is pushed down + /// by the gap that separates the two groups. + /// + static float RowTop(int row, float rowHeight) + { + return row * rowHeight + (row > 0 ? kGroupGap : 0); + } + + void ScrollIntoView(int index, float rowHeight, float viewHeight) + { + var top = RowTop(index, rowHeight); + if (top < m_Scroll.y) + m_Scroll.y = top; + else if (top + rowHeight > m_Scroll.y + viewHeight) + m_Scroll.y = top + rowHeight - viewHeight; + } + } +} diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs.meta b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs.meta new file mode 100644 index 00000000..27ec6578 --- /dev/null +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 225cc8cc8f773564bb589c0fe90d1599 \ No newline at end of file diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatSettings.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatSettings.cs index f33ea155..7739f437 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatSettings.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatSettings.cs @@ -17,6 +17,14 @@ internal class AndroidLogcatSettings // Since querying memory from device is a lengthy operation, here's a cap 500 ms, setting it too low will make memory request to be delayed internal static int kMinMemoryRequestIntervalMS = 500; + // Live stream settings, as default/min/max. The server accepts wider values than + // these, but a stream is only as useful as the link can carry and every frame is + // JPEG encoded on the device, so this is the range the sliders offer and what a + // hand edited settings file is held to. + internal static readonly SettingsRange kLiveStreamMaxSize = new SettingsRange(1024, 256, 2048); + internal static readonly SettingsRange kLiveStreamQuality = new SettingsRange(70, 1, 100); + internal static readonly SettingsRange kLiveStreamMaxFps = new SettingsRange(30, 1, 120); + internal static readonly string[] kAddressResolveRegex = { @"\s*#\d{2}\s*pc\s(?
[a-fA-F0-9xX]+).*\/(?\S+)\/(?lib.*)\.so(?:.*\(BuildId:\s*(?\S+)\))?", @@ -57,6 +65,15 @@ internal class AndroidLogcatSettings [SerializeField] private int m_MaxExitedPackagesToShow; + [SerializeField] + private int m_LiveStreamMaxSize; + + [SerializeField] + private int m_LiveStreamQuality; + + [SerializeField] + private int m_LiveStreamMaxFps; + internal int MemoryRequestIntervalMS { set @@ -128,6 +145,63 @@ internal int MaxExitedPackagesToShow return m_MaxExitedPackagesToShow; } } + /// + /// Longest side of the live stream, in pixels. The device display is scaled down + /// to fit, which is what keeps the bandwidth and the encoding cost down. + /// + internal int LiveStreamMaxSize + { + set + { + var corrected = kLiveStreamMaxSize.Clamp(value); + if (m_LiveStreamMaxSize == corrected) + return; + m_LiveStreamMaxSize = corrected; + InvokeOnSettingsChanged(); + } + get + { + return m_LiveStreamMaxSize; + } + } + + /// JPEG quality of the live stream, 1 to 100. + internal int LiveStreamQuality + { + set + { + var corrected = kLiveStreamQuality.Clamp(value); + if (m_LiveStreamQuality == corrected) + return; + m_LiveStreamQuality = corrected; + InvokeOnSettingsChanged(); + } + get + { + return m_LiveStreamQuality; + } + } + + /// + /// Frame rate cap of the live stream. A mirrored display only produces a frame + /// when the screen changes, so this is a ceiling rather than a rate. + /// + internal int LiveStreamMaxFps + { + set + { + var corrected = kLiveStreamMaxFps.Clamp(value); + if (m_LiveStreamMaxFps == corrected) + return; + m_LiveStreamMaxFps = corrected; + InvokeOnSettingsChanged(); + } + get + { + return m_LiveStreamMaxFps; + } + } + internal Font MessageFont { set @@ -208,6 +282,7 @@ internal void Reset() m_MessageFont = AssetDatabase.LoadAssetAtPath("Packages/com.unity.mobile.android-logcat/Editor/Fonts/consola.ttf"); m_MessageFontSize = 11; m_MaxExitedPackagesToShow = 4; + ResetLiveStreamFields(); if (Enum.GetValues(typeof(Priority)).Length != 6) throw new Exception("Unexpected length of Priority enum."); @@ -227,6 +302,28 @@ internal void Reset() InvokeOnSettingsChanged(); } + /// + /// Just the live stream settings, for the Reset button beside them, so that + /// putting the stream back to its defaults does not take the message colours, + /// fonts and regexes with it. + /// + internal void ResetLiveStreamSettings() + { + ResetLiveStreamFields(); + InvokeOnSettingsChanged(); + } + + /// + /// The fields on their own, so that keeps raising one change + /// notification for the lot rather than one per section. + /// + private void ResetLiveStreamFields() + { + m_LiveStreamMaxSize = kLiveStreamMaxSize.Default; + m_LiveStreamQuality = kLiveStreamQuality.Default; + m_LiveStreamMaxFps = kLiveStreamMaxFps.Default; + } + internal void ResetStacktraceResolveRegex() { // Note: Don't create new instance, if not necessary @@ -313,6 +410,14 @@ private void Validate() var defaultColumnData = GetColumns(); if (m_ColumnData == null || m_ColumnData.Length != defaultColumnData.Length) m_ColumnData = defaultColumnData; + + // Settings saved before the live stream existed deserialize these as 0, and a + // hand edited file can hold anything. Filling them in here is why adding them + // did not need a kVersion bump, which would have reset colours, fonts and + // regexes along with them. + m_LiveStreamMaxSize = kLiveStreamMaxSize.OrDefault(m_LiveStreamMaxSize); + m_LiveStreamQuality = kLiveStreamQuality.OrDefault(m_LiveStreamQuality); + m_LiveStreamMaxFps = kLiveStreamMaxFps.OrDefault(m_LiveStreamMaxFps); } internal static AndroidLogcatSettings Load() diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatSettingsProvider.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatSettingsProvider.cs index a03e6d52..047a0fc0 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatSettingsProvider.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatSettingsProvider.cs @@ -20,6 +20,15 @@ class Styles public static GUIContent requestIntervalMS = new GUIContent("Request Interval ms", $"How often to request memory dump from the device? The minimum value is {AndroidLogcatSettings.kMinMemoryRequestIntervalMS} ms"); public static GUIContent maxExitedPackageToShow = new GUIContent("Max Exited Packages", "The maximum number of packages in package selection which have exited."); + + public static GUIContent liveStreamMaxSize = new GUIContent("Max Size", + "Longest side of the streamed image in pixels. The device display is scaled down to fit, which is what keeps the bandwidth and the encoding cost on the device down."); + public static GUIContent liveStreamQuality = new GUIContent("JPEG Quality", + "Quality of each streamed frame. Lower means a smaller frame and less bandwidth."); + public static GUIContent liveStreamReset = new GUIContent("Reset", + $"Put Max Size, JPEG Quality and Max Frame Rate back to {AndroidLogcatSettings.kLiveStreamMaxSize.Default}, {AndroidLogcatSettings.kLiveStreamQuality.Default} and {AndroidLogcatSettings.kLiveStreamMaxFps.Default}, leaving every other setting alone."); + public static GUIContent liveStreamMaxFps = new GUIContent("Max Frame Rate", + "Ceiling on frames per second. A mirrored display only produces a frame when the screen changes, so an idle device sends fewer than this rather than exactly this."); } private AndroidLogcatRuntimeBase m_Runtime; @@ -65,6 +74,31 @@ public override void OnGUI(string searchContext) settings.MaxExitedPackagesToShow = EditorGUILayout.IntSlider(Styles.maxExitedPackageToShow, settings.MaxExitedPackagesToShow, 1, 100); + GUILayout.Space(20); + EditorGUILayout.LabelField("Live Stream", EditorStyles.boldLabel); + // Applied when a stream starts, so a stream that is already running keeps the + // settings it started with until it is reconnected. + settings.LiveStreamMaxSize = LiveStreamSlider(Styles.liveStreamMaxSize, + settings.LiveStreamMaxSize, AndroidLogcatSettings.kLiveStreamMaxSize); + settings.LiveStreamQuality = LiveStreamSlider(Styles.liveStreamQuality, + settings.LiveStreamQuality, AndroidLogcatSettings.kLiveStreamQuality); + settings.LiveStreamMaxFps = LiveStreamSlider(Styles.liveStreamMaxFps, + settings.LiveStreamMaxFps, AndroidLogcatSettings.kLiveStreamMaxFps); + + EditorGUILayout.HelpBox( + "Applied when a stream starts. To apply them to a stream that is already running, " + + "right click the Live row in the Device Screen Capture window and choose Reconnect.", + MessageType.None); + + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + // Resets this section only - the button at the bottom of the page is the one + // that resets everything. + if (GUILayout.Button(Styles.liveStreamReset, GUILayout.Width(60))) + settings.ResetLiveStreamSettings(); + GUILayout.Space(5); + GUILayout.EndHorizontal(); + GUILayout.Space(20); EditorGUILayout.LabelField(Styles.stactraceRegex, EditorStyles.boldLabel); m_RegexList.OnGUI(150.0f); @@ -82,6 +116,15 @@ public override void OnGUI(string searchContext) GUILayout.EndHorizontal(); } + /// + /// A slider whose ends come from the setting's own range, so the UI cannot offer + /// what the setter would clamp away. + /// + static int LiveStreamSlider(GUIContent label, int value, SettingsRange range) + { + return EditorGUILayout.IntSlider(label, value, range.Min, range.Max); + } + [SettingsProvider] public static SettingsProvider CreateAndroidLogcatSettingsProvider() { diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatSettingsRange.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatSettingsRange.cs new file mode 100644 index 00000000..52c5e134 --- /dev/null +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatSettingsRange.cs @@ -0,0 +1,51 @@ +using System; + +namespace Unity.Android.Logcat +{ + /// + /// The default and the accepted bounds of a numeric setting, kept in one place so + /// that the slider the user drags, the clamping on the way in and the value a reset + /// restores cannot drift apart. + /// + /// A readonly struct rather than a record: a positional record needs + /// System.Runtime.CompilerServices.IsExternalInit, which Unity's profile does + /// not carry, so it would take a shim type of its own to compile. Nothing here needs + /// the value equality a record would bring. + /// + /// + internal readonly struct SettingsRange + { + internal int Default { get; } + internal int Min { get; } + internal int Max { get; } + + internal SettingsRange(int defaultValue, int min, int max) + { + if (min > max) + throw new ArgumentException($"Min {min} is greater than max {max}"); + if (defaultValue < min || defaultValue > max) + throw new ArgumentException($"Default {defaultValue} is outside {min}..{max}"); + + Default = defaultValue; + Min = min; + Max = max; + } + + /// The value brought inside the bounds, for a value the user chose. + internal int Clamp(int value) + { + return Math.Clamp(value, Min, Max); + } + + /// + /// The value if it is within bounds, otherwise - for a + /// setting read back from a blob written before it existed, where it arrives as + /// 0. Clamping such a value would quietly pick , which is not + /// what a setting nobody has ever chosen should end up as. + /// + internal int OrDefault(int value) + { + return value < Min || value > Max ? Default : value; + } + } +} diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatSettingsRange.cs.meta b/com.unity.mobile.android-logcat/Editor/AndroidLogcatSettingsRange.cs.meta new file mode 100644 index 00000000..b0b68e82 --- /dev/null +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatSettingsRange.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 5520d088c648b2c458ad5878a6f117d7 \ No newline at end of file diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatStatsColumn.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatStatsColumn.cs new file mode 100644 index 00000000..dc4760a8 --- /dev/null +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatStatsColumn.cs @@ -0,0 +1,65 @@ +using UnityEditor; +using UnityEngine; + +namespace Unity.Android.Logcat +{ + /// + /// The column of name/value rows beside the image in the Screen Capture window, + /// shared by the live view and the screenshot preview so the two look alike. + /// + internal static class AndroidLogcatStatsColumn + { + const float kWidth = 190; + const float kMargin = 8; + + internal const float kLabelWidth = 80; + + /// + /// Width to reserve out of an area before the image is fitted into it. Capped + /// to a fraction of it, so a narrow window does not lose the image to the column. + /// + internal static float WidthFor(Rect area) + { + return Mathf.Min(kWidth, area.width * 0.4f); + } + + /// + /// The same, widened to hold the values it is given - a device name is longer + /// than anything the live view shows - and capped the same way, so a narrow + /// window keeps its image rather than losing it to the column. + /// + internal static float WidthFor(Rect area, string[] values) + { + var widest = 0.0f; + foreach (var value in values) + widest = Mathf.Max(widest, Mathf.Ceil(EditorStyles.miniLabel.CalcSize(new GUIContent(value)).x)); + + return Mathf.Min(Mathf.Max(kWidth, kLabelWidth + widest + kMargin), area.width * 0.4f); + } + + /// + /// The column's rect, against the image rather than the right edge of the area: + /// the image is centred in what is left over, so the gap beside it varies. + /// + internal static Rect RectBeside(Rect area, Rect imageBox) + { + return new Rect(imageBox.xMax + kMargin, imageBox.y, + Mathf.Max(0, area.xMax - imageBox.xMax - kMargin), imageBox.height); + } + + internal static void Row(Rect rc, float labelWidth, ref float y, GUIContent name, string value, + string valueTooltip = null) + { + var height = EditorGUIUtility.singleLineHeight; + if (y + height > rc.yMax) + return; + + GUI.Label(new Rect(rc.x, y, labelWidth, height), name, EditorStyles.miniLabel); + // The column is narrow enough that long values clip, so the tooltip carries + // the full text where that matters. + GUI.Label(new Rect(rc.x + labelWidth, y, Mathf.Max(0, rc.width - labelWidth), height), + new GUIContent(value, valueTooltip ?? name.tooltip), EditorStyles.miniLabel); + y += height; + } + } +} diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatStatsColumn.cs.meta b/com.unity.mobile.android-logcat/Editor/AndroidLogcatStatsColumn.cs.meta new file mode 100644 index 00000000..be0eb0bb --- /dev/null +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatStatsColumn.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 583c4386639442cdacf72621cb86a42b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatUserSettings.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatUserSettings.cs index 2f7edd09..cb997e35 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatUserSettings.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatUserSettings.cs @@ -52,9 +52,23 @@ internal class ScreenCaptureSettings { [SerializeField] internal AndroidLogcatScreenCaptureWindow.Mode Mode; + /// Width of the saved screenshot list, left of the splitter. + [SerializeField] + internal float ScreenshotListWidth; [SerializeField] private string[] m_LastSaveLocation; + /// + /// Saves a copy of a capture wherever the user picks, starting from where + /// they picked last time for this mode, and remembering where that was. + /// + internal void SaveFileAs(AndroidLogcatScreenCaptureWindow.Mode mode, string path, string title) + { + var directory = AndroidLogcatUtilities.SaveFileAs(path, title, GetLastSaveLocation(mode)); + if (directory != null) + SetLastSaveLocation(mode, directory); + } + internal void SetLastSaveLocation(AndroidLogcatScreenCaptureWindow.Mode mode, string path) { if (m_LastSaveLocation == null || (int)mode >= m_LastSaveLocation.Length) @@ -383,7 +397,8 @@ internal void ResetScreenCaptureSettings() { m_ScreenCaptureSettings = new ScreenCaptureSettings { - Mode = AndroidLogcatScreenCaptureWindow.Mode.Screenshot + Mode = AndroidLogcatScreenCaptureWindow.Mode.Screenshot, + ScreenshotListWidth = AndroidLogcatScreenshotList.kDefaultWidth }; m_ScreenCaptureSettings.ResetLastSaveLocation(); } diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatUtilities.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatUtilities.cs index 60cb6cbc..b711e6ce 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatUtilities.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatUtilities.cs @@ -88,6 +88,344 @@ public static string SanitizeFileName(string name) return name; } + /// + /// What the OS calls its file browser, for menu items that reveal a file in it. + /// + public static string RevealInFileBrowserLabel + { + get + { + switch (Application.platform) + { + case RuntimePlatform.OSXEditor: return "Show In Finder"; + case RuntimePlatform.LinuxEditor: return "Show In File Manager"; + default: return "Show In Explorer"; + } + } + } + + /// Selects a file in the OS file browser, rather than opening it. + public static void RevealInFileBrowser(string path) + { + if (string.IsNullOrEmpty(path) || !File.Exists(path)) + return; + + UnityEditor.EditorUtility.RevealInFinder(path); + } + + /// Opens a file with whatever the OS uses for its type. + public static void OpenFile(string path) + { + if (string.IsNullOrEmpty(path) || !File.Exists(path)) + return; + + switch (Application.platform) + { + case RuntimePlatform.OSXEditor: + // Application.OpenURL on a plain path does nothing useful on macOS. + System.Diagnostics.Process.Start("open", path); + break; + default: + Application.OpenURL(path); + break; + } + } + + /// + /// Asks where to put a copy of and copies it there. + /// The extension offered in the dialog comes from the source file, so callers do + /// not have to know it. + /// + /// + /// The directory saved into, so the caller can remember it, or null if the dialog + /// was cancelled or the copy failed. A failure is logged. + /// + public static string SaveFileAs(string sourcePath, string title, string startDirectory) + { + if (string.IsNullOrEmpty(sourcePath) || !File.Exists(sourcePath)) + return null; + + var extension = Path.GetExtension(sourcePath); + var path = UnityEditor.EditorUtility.SaveFilePanel(title, startDirectory, + Path.GetFileName(sourcePath), + string.IsNullOrEmpty(extension) ? string.Empty : extension.Substring(1)); + if (string.IsNullOrEmpty(path)) + return null; + + try + { + File.Copy(sourcePath, path, true); + } + catch (Exception ex) + { + Debug.LogErrorFormat("Failed to save '{0}' as '{1}'.\n{2}", sourcePath, path, ex.Message); + return null; + } + + // A screenshot's details file goes with the copy. Nothing to do for a + // file that has none, which is every video. + AndroidLogcatScreenshotInfo.CopyBeside(sourcePath, path); + + return Path.GetFullPath(Path.GetDirectoryName(path)); + } + + /// + /// Where captured screenshots are kept: under Library, which is per machine and + /// gitignored, and outside Assets so Unity never imports the images as assets. + /// Not UserSettings - that is for settings, and these are output. + /// + /// Library is also deleted from time to time, by hand or by the Editor. That is + /// the right trade for debugging output: a screenshot worth keeping is one Save + /// As away from somewhere that is not Library. + /// + /// + public static string GetScreenshotsDirectory() + { + var path = Path.Combine(Application.dataPath, "..", "Library", "AndroidLogcat", "Screenshots"); + return Path.GetFullPath(path).Replace("\\", "/"); + } + + + internal static string ResolvePath(params string[] relativeParts) + { + var package = UnityEditor.PackageManager.PackageInfo.FindForAssembly( + typeof(AndroidLogcatUtilities).Assembly); + if (package == null) + return null; + + var parts = new string[relativeParts.Length + 1]; + parts[0] = package.resolvedPath; + Array.Copy(relativeParts, 0, parts, 1, relativeParts.Length); + return Path.GetFullPath(Path.Combine(parts)); + } + + /// + /// The path with the project folder stripped off, for showing in the UI. A + /// screenshot's absolute path is mostly project folder, which in a tooltip is + /// wide enough to cover the rows around it. + /// + public static string ProjectRelativePath(string path) + { + return ProjectRelativePath(path, GetProjectDirectory()); + } + + /// + /// The same, against a given project folder rather than this project's, so that + /// it can be exercised with paths from a platform other than the one running. + /// + internal static string ProjectRelativePath(string path, string projectDirectory) + { + if (string.IsNullOrEmpty(path)) + return path; + + // Trailing slash trimmed so that the separator check below has a separator + // to find, whatever shape the folder was handed over in. + var project = projectDirectory.Replace("\\", "/").TrimEnd('/'); + var normalized = path.Replace("\\", "/"); + + if (normalized.Length > project.Length + 1 + && normalized[project.Length] == '/' + && normalized.StartsWith(project, StringComparison.OrdinalIgnoreCase)) + return normalized.Substring(project.Length + 1); + + // Not under the project - a screenshot opened from elsewhere, say - so there + // is nothing to strip and the whole path is the most useful thing to show. + return normalized; + } + + static string s_ProjectDirectory; + + /// + /// The folder that holds Assets, cached: tooltips are built per row per repaint, + /// and the project does not move while the Editor is running. + /// + static string GetProjectDirectory() + { + if (s_ProjectDirectory == null) + s_ProjectDirectory = Path.GetFullPath(Path.Combine(Application.dataPath, "..")).Replace("\\", "/"); + return s_ProjectDirectory; + } + + // Long enough for a first run, which downloads Gradle itself. + const int kGradleTimeoutMs = 5 * 60 * 1000; + const int kGradleProgressUpdateMs = 200; + + /// + /// Runs a Gradle task in a project directory and says whether it succeeded, + /// logging its output either way. + /// + /// The JDK and SDK come from Unity's own External Tools settings rather than + /// from the environment: the Editor may not have inherited a shell environment + /// at all, the one it did inherit is not necessarily the one this build wants, + /// and a user who pointed Unity at their own SDK or JDK means it. The wrapper + /// is run through sh off Windows, so that this does not depend on its + /// executable bit, which is invisible to anyone working from Windows. + /// + /// + /// Blocking, behind a progress bar. This is a developer action - there is no + /// hot path here - and a Gradle build wants the Editor to sit still anyway. + /// + /// + /// + /// Kills a process and whatever it started. Gradle runs behind a launcher + /// script and does its work in a daemon, so killing only the process we started + /// leaves the build running. + /// + static void KillProcessTree(System.Diagnostics.Process process) + { + try + { + if (Application.platform == RuntimePlatform.WindowsEditor) + { + var killer = System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo + { + FileName = "taskkill", + Arguments = $"/T /F /PID {process.Id}", + UseShellExecute = false, + CreateNoWindow = true + }); + killer?.WaitForExit(5000); + killer?.Dispose(); + } + else + { + process.Kill(); + } + } + catch (Exception ex) + { + Debug.LogWarning($"Failed to stop Gradle.\n{ex.Message}"); + } + } + + internal static bool RunGradle(string projectDirectory, string task) + { + if (string.IsNullOrEmpty(projectDirectory) || !Directory.Exists(projectDirectory)) + { + Debug.LogError($"No Gradle project at '{projectDirectory}'."); + return false; + } + + string androidHome; + string javaHome; + try + { + androidHome = AndroidBridge.AndroidExternalToolsSettings.sdkRootPath; + javaHome = AndroidBridge.AndroidExternalToolsSettings.jdkRootPath; + } + catch (Exception ex) + { + Debug.LogError("Could not read the Android SDK and JDK locations from " + + $"Preferences > External Tools.\n{ex.Message}"); + return false; + } + + var windows = Application.platform == RuntimePlatform.WindowsEditor; + + var process = new System.Diagnostics.Process(); + var si = process.StartInfo; + si.WorkingDirectory = projectDirectory; + si.FileName = windows ? Path.Combine(projectDirectory, "gradlew.bat") : "sh"; + si.Arguments = windows ? task : $"gradlew {task}"; + // Left unset when a path is not configured, rather than pointed at nothing: + // Gradle then falls back to local.properties or an inherited variable, which + // is a better answer than a directory that does not exist. + if (!string.IsNullOrEmpty(javaHome) && Directory.Exists(javaHome)) + si.EnvironmentVariables["JAVA_HOME"] = javaHome; + if (!string.IsNullOrEmpty(androidHome) && Directory.Exists(androidHome)) + si.EnvironmentVariables["ANDROID_HOME"] = androidHome; + si.UseShellExecute = false; + si.CreateNoWindow = true; + si.RedirectStandardOutput = true; + si.RedirectStandardError = true; + + var output = new System.Text.StringBuilder(); + // What Gradle said last, which is the only sign of progress it gives while + // a build runs. + var lastLine = string.Empty; + + try + { + var title = $"Running Gradle in {Path.GetFileName(projectDirectory)}"; + var command = $"{si.FileName} {si.Arguments}"; + EditorUtility.DisplayProgressBar(title, command, 0); + + System.Diagnostics.DataReceivedEventHandler record = (s, e) => + { + if (string.IsNullOrEmpty(e.Data)) + return; + // Straight to Editor.log as it arrives: the collected log is only + // reported once the build is over, which is no help while watching + // one that is stuck. + Console.WriteLine(e.Data); + lock (output) + { + output.AppendLine(e.Data); + lastLine = e.Data; + } + }; + + process.OutputDataReceived += record; + process.ErrorDataReceived += record; + process.Start(); + process.BeginOutputReadLine(); + process.BeginErrorReadLine(); + + var started = DateTime.Now; + while (!process.WaitForExit(kGradleProgressUpdateMs)) + { + string message; + lock (output) + message = string.IsNullOrEmpty(lastLine) ? command : lastLine; + + var elapsed = DateTime.Now - started; + // Gradle reports no progress of its own, so the bar only says the + // build is still alive - it fills over ten seconds and starts over. + var progress = (float)(elapsed.TotalSeconds % 10.0) / 10.0f; + + if (EditorUtility.DisplayCancelableProgressBar(title, message, progress)) + { + KillProcessTree(process); + Debug.LogWarning($"'gradlew {task}' was cancelled."); + return false; + } + + if (elapsed.TotalMilliseconds >= kGradleTimeoutMs) + { + KillProcessTree(process); + Debug.LogError($"Gradle did not finish within {kGradleTimeoutMs / 1000} s."); + return false; + } + } + + // The redirected output is read on other threads, and the wait above + // only waits for the process: this one waits for that output too. + process.WaitForExit(); + + string log; + lock (output) + log = output.ToString(); + AndroidLogcatInternalLog.Log(log); + + if (process.ExitCode != 0) + { + Debug.LogError($"'gradlew {task}' failed with exit code {process.ExitCode}.\n{log}"); + return false; + } + + return true; + } + catch (Exception ex) + { + Debug.LogError($"Failed to run Gradle in '{projectDirectory}'.\n{ex.Message}"); + return false; + } + finally + { + process.Dispose(); + EditorUtility.ClearProgressBar(); + } + } /// /// Get the top activity on the given device. From f482cfc060b401a0cee6172302fb6c685321091b Mon Sep 17 00:00:00 2001 From: Tomas Date: Wed, 23 Sep 2026 15:40:11 +0300 Subject: [PATCH 03/19] Add tests for live streaming and screenshot details Integration tests covering the stream end to end: frames arriving, injected touch, scroll, keys and text taking effect on the device, streaming a device that was asleep, and an unknown display id. Edit mode coverage for the details file written beside a screenshot. Co-Authored-By: Claude Opus 5 --- .../Tests/Editor/AndroidLogcatGeneralTests.cs | 448 +++++++++++++++++ .../Tests/Editor/AndroidLogcatTestRuntime.cs | 6 + .../AndroidLogcatIntegrationLiveStream.cs | 469 ++++++++++++++++++ ...AndroidLogcatIntegrationLiveStream.cs.meta | 2 + .../AndroidLogcatIntegrationScreenCapture.cs | 159 +++++- 5 files changed, 1083 insertions(+), 1 deletion(-) create mode 100644 com.unity.mobile.android-logcat/Tests/Editor/Integration/AndroidLogcatIntegrationLiveStream.cs create mode 100644 com.unity.mobile.android-logcat/Tests/Editor/Integration/AndroidLogcatIntegrationLiveStream.cs.meta diff --git a/com.unity.mobile.android-logcat/Tests/Editor/AndroidLogcatGeneralTests.cs b/com.unity.mobile.android-logcat/Tests/Editor/AndroidLogcatGeneralTests.cs index 23364e54..de63fba3 100644 --- a/com.unity.mobile.android-logcat/Tests/Editor/AndroidLogcatGeneralTests.cs +++ b/com.unity.mobile.android-logcat/Tests/Editor/AndroidLogcatGeneralTests.cs @@ -1,12 +1,271 @@ using System; +using System.Linq; +using UnityEngine; using UnityEngine.TestTools; using NUnit.Framework; using System.Collections; using System.Collections.Generic; +using System.Text.RegularExpressions; using Unity.Android.Logcat; class AndroidLogcatGeneralTests { + /// + /// The screenshots folder is an ordinary directory, so files can appear in it or + /// change without the Editor having done anything, and a cached listing cannot + /// notice by itself. This is the API underneath the Screen Capture window's + /// refresh when it regains focus. + /// + /// No device needed: the listing is a directory scan, so the files can simply be + /// written here. + /// + /// + [Test] + public void InvalidateScreenshotsPicksUpExternalChanges() + { + var runtime = new AndroidLogcatTestRuntime(); + runtime.Initialize(); + try + { + // Built directly rather than taken from the runtime: the test runtime has + // no screen capture service, and the two calls used here only read the + // directory - nothing is queued, so nothing needs a device or a dispatcher. + var captureScreenshot = new AndroidLogcatCaptureScreenshot(runtime); + + var directory = AndroidLogcatUtilities.GetScreenshotsDirectory(); + System.IO.Directory.CreateDirectory(directory); + + var first = System.IO.Path.Combine(directory, "unittest-device_1.png").Replace("\\", "/"); + var second = System.IO.Path.Combine(directory, "unittest-device_2.png").Replace("\\", "/"); + System.IO.File.WriteAllBytes(first, new byte[] { 1, 2, 3 }); + + try + { + var screenshots = captureScreenshot.GetScreenshots(); + Assert.IsTrue(screenshots.Any(s => s.Path == first), "The first file should be listed"); + Assert.IsFalse(screenshots.Any(s => s.Path == second), "The second one does not exist yet"); + + // Written behind the cache's back, as a file browser would. + System.IO.File.WriteAllBytes(second, new byte[] { 4, 5, 6 }); + + Assert.IsFalse(captureScreenshot.GetScreenshots().Any(s => s.Path == second), + "A cached listing cannot know about a file the Editor did not write"); + + captureScreenshot.InvalidateScreenshots(); + + Assert.IsTrue(captureScreenshot.GetScreenshots().Any(s => s.Path == second), + "After invalidating, the rescan should pick the file up"); + + // And the same for one that disappears. + System.IO.File.Delete(first); + Assert.IsTrue(captureScreenshot.GetScreenshots().Any(s => s.Path == first), + "Still cached, so still listed"); + + captureScreenshot.InvalidateScreenshots(); + Assert.IsFalse(captureScreenshot.GetScreenshots().Any(s => s.Path == first), + "After invalidating, a file that is gone should be gone from the list"); + } + finally + { + foreach (var path in new[] { first, second }) + { + if (System.IO.File.Exists(path)) + System.IO.File.Delete(path); + } + } + } + finally + { + runtime.Shutdown(); + } + } + + [Test] + public void SettingsRangeTests() + { + var range = new SettingsRange(70, 1, 100); + Assert.AreEqual(70, range.Default); + Assert.AreEqual(1, range.Min); + Assert.AreEqual(100, range.Max); + + // A value the user chose is brought inside the bounds. + Assert.AreEqual(1, range.Clamp(-5)); + Assert.AreEqual(1, range.Clamp(0)); + Assert.AreEqual(100, range.Clamp(1000)); + Assert.AreEqual(55, range.Clamp(55)); + Assert.AreEqual(1, range.Clamp(1)); + Assert.AreEqual(100, range.Clamp(100)); + + // A value read back from an older settings blob falls back to the default + // instead, since 0 there means nobody ever chose one. + Assert.AreEqual(70, range.OrDefault(0)); + Assert.AreEqual(70, range.OrDefault(-5)); + Assert.AreEqual(70, range.OrDefault(1000)); + Assert.AreEqual(55, range.OrDefault(55)); + Assert.AreEqual(1, range.OrDefault(1)); + Assert.AreEqual(100, range.OrDefault(100)); + + // A range that cannot hold its own default is a mistake at the declaration, so + // it is refused rather than silently clamped. + Assert.Throws(typeof(ArgumentException), () => new SettingsRange(0, 1, 100)); + Assert.Throws(typeof(ArgumentException), () => new SettingsRange(500, 1, 100)); + Assert.Throws(typeof(ArgumentException), () => new SettingsRange(5, 100, 1)); + } + + [Test] + public void LiveStreamSettingsTests() + { + var settings = new AndroidLogcatSettings(); + + // The defaults are what the live stream used to hold as constants. + Assert.AreEqual(AndroidLogcatSettings.kLiveStreamMaxSize.Default, settings.LiveStreamMaxSize); + Assert.AreEqual(AndroidLogcatSettings.kLiveStreamQuality.Default, settings.LiveStreamQuality); + Assert.AreEqual(AndroidLogcatSettings.kLiveStreamMaxFps.Default, settings.LiveStreamMaxFps); + + // Clamped on the way in, so a hand edited settings file cannot hand the server + // something it will refuse or choke on. + settings.LiveStreamMaxSize = 1; + Assert.AreEqual(AndroidLogcatSettings.kLiveStreamMaxSize.Min, settings.LiveStreamMaxSize); + settings.LiveStreamMaxSize = 100000; + Assert.AreEqual(AndroidLogcatSettings.kLiveStreamMaxSize.Max, settings.LiveStreamMaxSize); + + settings.LiveStreamQuality = 0; + Assert.AreEqual(AndroidLogcatSettings.kLiveStreamQuality.Min, settings.LiveStreamQuality); + settings.LiveStreamQuality = 1000; + Assert.AreEqual(AndroidLogcatSettings.kLiveStreamQuality.Max, settings.LiveStreamQuality); + + settings.LiveStreamMaxFps = 0; + Assert.AreEqual(AndroidLogcatSettings.kLiveStreamMaxFps.Min, settings.LiveStreamMaxFps); + settings.LiveStreamMaxFps = 1000; + Assert.AreEqual(AndroidLogcatSettings.kLiveStreamMaxFps.Max, settings.LiveStreamMaxFps); + + // A value inside the range is kept as it is. + settings.LiveStreamMaxSize = 512; + settings.LiveStreamQuality = 55; + settings.LiveStreamMaxFps = 15; + Assert.AreEqual(512, settings.LiveStreamMaxSize); + Assert.AreEqual(55, settings.LiveStreamQuality); + Assert.AreEqual(15, settings.LiveStreamMaxFps); + + // The section's own Reset button puts the three back without disturbing + // anything else on the page. + settings.MessageFontSize = 17; + settings.MaxCachedMessageCount = 1234; + settings.ResetLiveStreamSettings(); + Assert.AreEqual(AndroidLogcatSettings.kLiveStreamMaxSize.Default, settings.LiveStreamMaxSize); + Assert.AreEqual(AndroidLogcatSettings.kLiveStreamQuality.Default, settings.LiveStreamQuality); + Assert.AreEqual(AndroidLogcatSettings.kLiveStreamMaxFps.Default, settings.LiveStreamMaxFps); + Assert.AreEqual(17, settings.MessageFontSize, "A live stream reset should not touch the font size"); + Assert.AreEqual(1234, settings.MaxCachedMessageCount, "A live stream reset should not touch the message cap"); + + // And the whole page Reset takes them with everything else. + settings.LiveStreamMaxSize = 512; + settings.Reset(); + Assert.AreEqual(AndroidLogcatSettings.kLiveStreamMaxSize.Default, settings.LiveStreamMaxSize); + Assert.AreEqual(AndroidLogcatSettings.kLiveStreamQuality.Default, settings.LiveStreamQuality); + Assert.AreEqual(AndroidLogcatSettings.kLiveStreamMaxFps.Default, settings.LiveStreamMaxFps); + } + + [Test] + public void LiveStreamEditingShortcutTests() + { + AndroidKeyCode mapped; + + // Ctrl on Windows and Linux, Cmd on macOS: both have to reach the device, where + // they arrive as Ctrl either way. + foreach (var modifier in new[] { EventModifiers.Control, EventModifiers.Command }) + { + Assert.IsTrue(AndroidLogcatLiveStream.TryMapEditingShortcut( + new Event { keyCode = KeyCode.A, modifiers = modifier }, out mapped), $"A with {modifier}"); + Assert.AreEqual(AndroidKeyCode.A, mapped); + + Assert.IsTrue(AndroidLogcatLiveStream.TryMapEditingShortcut( + new Event { keyCode = KeyCode.C, modifiers = modifier }, out mapped), $"C with {modifier}"); + Assert.AreEqual(AndroidKeyCode.C, mapped); + + Assert.IsTrue(AndroidLogcatLiveStream.TryMapEditingShortcut( + new Event { keyCode = KeyCode.V, modifiers = modifier }, out mapped), $"V with {modifier}"); + Assert.AreEqual(AndroidKeyCode.V, mapped); + } + + // A bare letter is ordinary typing, which goes to the device as text instead. + Assert.IsFalse(AndroidLogcatLiveStream.TryMapEditingShortcut( + new Event { keyCode = KeyCode.A, modifiers = EventModifiers.None }, out mapped)); + + // Every other Ctrl chord belongs to the Editor - Ctrl+S in particular. + Assert.IsFalse(AndroidLogcatLiveStream.TryMapEditingShortcut( + new Event { keyCode = KeyCode.S, modifiers = EventModifiers.Control }, out mapped)); + Assert.IsFalse(AndroidLogcatLiveStream.TryMapEditingShortcut( + new Event { keyCode = KeyCode.Z, modifiers = EventModifiers.Control }, out mapped)); + + // And so does anything with a further modifier on top, such as this window's own + // Ctrl+Shift+S, so only the bare chord is taken. + Assert.IsFalse(AndroidLogcatLiveStream.TryMapEditingShortcut( + new Event { keyCode = KeyCode.A, modifiers = EventModifiers.Control | EventModifiers.Shift }, + out mapped)); + Assert.IsFalse(AndroidLogcatLiveStream.TryMapEditingShortcut( + new Event { keyCode = KeyCode.V, modifiers = EventModifiers.Control | EventModifiers.Alt }, + out mapped)); + } + + [Test] + public void ProjectRelativePathTests() + { + const string screenshot = "Library/AndroidLogcat/Screenshots/device_1.png"; + + // Windows, where paths come in with backslashes and in whatever case the caller + // happened to use - hence the case insensitive comparison in the function. + var windows = "C:/Users/tomas/Projects/MyProject"; + StringAssert.AreEqualIgnoringCase(screenshot, + AndroidLogcatUtilities.ProjectRelativePath(windows + "/" + screenshot, windows)); + StringAssert.AreEqualIgnoringCase(screenshot, + AndroidLogcatUtilities.ProjectRelativePath( + @"C:\Users\tomas\Projects\MyProject\Library\AndroidLogcat\Screenshots\device_1.png", windows)); + StringAssert.AreEqualIgnoringCase(screenshot, + AndroidLogcatUtilities.ProjectRelativePath( + @"c:\users\tomas\projects\myproject\Library\AndroidLogcat\Screenshots\device_1.png", windows)); + + // macOS, and Linux with it: rooted at / with no drive, and project folders with + // spaces in them are the norm rather than the exception. + var osx = "/Users/tomas/Projects/MyProject"; + StringAssert.AreEqualIgnoringCase(screenshot, + AndroidLogcatUtilities.ProjectRelativePath(osx + "/" + screenshot, osx)); + + var osxWithSpaces = "/Users/tomas/Unity Projects/My Project"; + StringAssert.AreEqualIgnoringCase(screenshot, + AndroidLogcatUtilities.ProjectRelativePath(osxWithSpaces + "/" + screenshot, osxWithSpaces)); + + // A trailing slash on the project folder must not eat the first character of + // what is left. + StringAssert.AreEqualIgnoringCase(screenshot, + AndroidLogcatUtilities.ProjectRelativePath(osx + "/" + screenshot, osx + "/")); + + // Outside the project there is nothing to strip. + StringAssert.AreEqualIgnoringCase("/Users/tomas/Desktop/shot.png", + AndroidLogcatUtilities.ProjectRelativePath("/Users/tomas/Desktop/shot.png", osx)); + StringAssert.AreEqualIgnoringCase("D:/elsewhere/shot.png", + AndroidLogcatUtilities.ProjectRelativePath("D:/elsewhere/shot.png", windows)); + + // A folder whose name merely starts with the project folder's must not be taken + // for something inside it. + StringAssert.AreEqualIgnoringCase(osx + "2/shot.png", + AndroidLogcatUtilities.ProjectRelativePath(osx + "2/shot.png", osx)); + + // The project folder itself is not a file in the project, so it is left alone + // rather than turned into an empty string. + StringAssert.AreEqualIgnoringCase(osx, AndroidLogcatUtilities.ProjectRelativePath(osx, osx)); + + // And through the public entry point, which is what the screenshot list calls, + // to prove it is wired to this project's folder. + var project = System.IO.Path.GetFullPath( + System.IO.Path.Combine(UnityEngine.Application.dataPath, "..")).Replace("\\", "/"); + StringAssert.AreEqualIgnoringCase(screenshot, + AndroidLogcatUtilities.ProjectRelativePath(project + "/" + screenshot)); + + Assert.AreEqual(string.Empty, AndroidLogcatUtilities.ProjectRelativePath(string.Empty)); + Assert.IsNull(AndroidLogcatUtilities.ProjectRelativePath(null)); + } + [Test] public void ParseVersionTests() { @@ -25,6 +284,195 @@ public void ParseVersionTests() } } + /// + /// The server jar is a build output, not something a clone comes with, and every + /// live stream test needs it on the device. Checking it here means one quick + /// failure saying what to run, rather than a device fixture timing out later. + /// + [Test] + public void LiveStreamServerJarIsBuilt() + { + var path = AndroidLogcatLiveStream.GetServerJarPath().Replace("\\", "/"); + + // Resolved through the Package Manager, so it follows the package wherever it + // is installed from. + StringAssert.EndsWith("External~/unity-logcat-server.jar", path); + FileAssert.Exists(path, + "Was the server jar packed? It is built by 'gradlew dexJar' in External/UnityLogcatServer, " + + "which copies it into the package."); + } + + /// + /// The details file written beside a screenshot. No device: the fake one answers + /// the same calls, and the rest is a file next to a file. + /// + [Test] + public void ScreenshotInfoRoundTripsAndFollowsTheImage() + { + var directory = AndroidLogcatUtilities.GetScreenshotsDirectory(); + System.IO.Directory.CreateDirectory(directory); + + var image = System.IO.Path.Combine(directory, "unittest-info_1.png").Replace("\\", "/"); + var renamed = System.IO.Path.Combine(directory, "unittest-info-renamed.png").Replace("\\", "/"); + var foreign = System.IO.Path.Combine(directory, "unittest-info-foreign.png").Replace("\\", "/"); + + try + { + Assert.IsNull(AndroidLogcatScreenshotInfo.Load(image), + "A screenshot with no details file has nothing to read"); + + var device = new AndroidLogcatFakeDevice90("unittest-device"); + device.SetRawDisplayInfo("Physical size: 1080x2400\nOverride size: 540x1200"); + + var info = AndroidLogcatScreenshotInfo.Create(device); + Assert.AreEqual("unittest-device", info.deviceId); + // An overridden size is what the device composes, so that is what a + // screenshot of it was taken at. + Assert.AreEqual(540, info.displayWidth); + Assert.AreEqual(1200, info.displayHeight); + + info.Save(image); + FileAssert.Exists(AndroidLogcatScreenshotInfo.PathFor(image)); + + var loaded = AndroidLogcatScreenshotInfo.Load(image); + Assert.AreEqual(AndroidLogcatScreenshotInfo.kVersion, loaded.version); + Assert.AreEqual(info.deviceId, loaded.deviceId); + Assert.AreEqual(info.deviceName, loaded.deviceName); + Assert.AreEqual(info.capturedAt, loaded.capturedAt); + Assert.AreEqual(info.displayWidth, loaded.displayWidth); + Assert.AreEqual(info.displayHeight, loaded.displayHeight); + + AndroidLogcatScreenshotInfo.Move(image, renamed); + Assert.IsNull(AndroidLogcatScreenshotInfo.Load(image), + "The details should have moved with the image"); + Assert.AreEqual(info.deviceId, AndroidLogcatScreenshotInfo.Load(renamed).deviceId); + + AndroidLogcatScreenshotInfo.Delete(renamed); + Assert.IsNull(AndroidLogcatScreenshotInfo.Load(renamed)); + + // The details take the image's name with a .json extension, which is a + // name someone else's file can already have - saving a capture as + // settings.png beside an unrelated settings.json must not eat it. + var foreignJson = AndroidLogcatScreenshotInfo.PathFor(foreign); + const string keep = "{\"keep\":\"me\"}"; + System.IO.File.WriteAllText(foreignJson, keep); + + Assert.IsNull(AndroidLogcatScreenshotInfo.Load(foreign), + "Someone else's json is not a details file"); + + LogAssert.Expect(LogType.Warning, new Regex("not written by Android Logcat")); + info.Save(foreign); + Assert.AreEqual(keep, System.IO.File.ReadAllText(foreignJson), + "Saving details should not overwrite a file we did not write"); + + LogAssert.Expect(LogType.Warning, new Regex("not written by Android Logcat")); + AndroidLogcatScreenshotInfo.Delete(foreign); + FileAssert.Exists(foreignJson); + } + finally + { + System.IO.File.Delete(AndroidLogcatScreenshotInfo.PathFor(image)); + System.IO.File.Delete(AndroidLogcatScreenshotInfo.PathFor(renamed)); + System.IO.File.Delete(AndroidLogcatScreenshotInfo.PathFor(foreign)); + } + } + + /// + /// The zoom of the live view and the screenshot preview. No device and no GUI: what + /// the wheel and the drag do to the view is arithmetic that can simply be called. + /// + [Test] + public void ImageViewerZoomsBetween100And4000Percent() + { + var viewer = new AndroidLogcatImageViewer(); + var area = new Rect(0, 0, 400, 300); + // The area's own shape, so the image fills it at 100%. + const float aspect = 4.0f / 3.0f; + + Assert.AreEqual(AndroidLogcatImageViewer.kMinZoom, viewer.Zoom, 0.0001f, + "Expected to start at 100%"); + Assert.IsFalse(viewer.IsZoomed); + + // A notch of the wheel is a delta of 3, and scrolling up reports it negative. + Assert.IsTrue(viewer.ZoomAt(area, aspect, area.center, -3.0f), "Expected one notch to zoom in"); + Assert.Greater(viewer.Zoom, AndroidLogcatImageViewer.kMinZoom); + Assert.IsTrue(viewer.IsZoomed); + + for (var notch = 0; notch < 100; notch++) + viewer.ZoomAt(area, aspect, area.center, -3.0f); + + Assert.AreEqual(AndroidLogcatImageViewer.kMaxZoom, viewer.Zoom, 0.0001f, + "Expected to stop at 4000%"); + Assert.IsFalse(viewer.ZoomAt(area, aspect, area.center, -3.0f), + "Expected no change once the zoom is at its maximum"); + + for (var notch = 0; notch < 100; notch++) + viewer.ZoomAt(area, aspect, area.center, 3.0f); + + Assert.AreEqual(AndroidLogcatImageViewer.kMinZoom, viewer.Zoom, 0.0001f, + "Expected to stop at 100%"); + Assert.IsFalse(viewer.ZoomAt(area, aspect, area.center, 3.0f), + "Expected no change once the zoom is at its minimum"); + Assert.IsFalse(viewer.IsZoomed); + Assert.AreEqual(Vector2.zero, viewer.Scroll, + "Zooming all the way back out should leave nothing scrolled out of view"); + } + + [Test] + public void ImageViewerZoomKeepsWhatIsUnderTheCursorThere() + { + var viewer = new AndroidLogcatImageViewer(); + var area = new Rect(0, 0, 400, 300); + const float aspect = 4.0f / 3.0f; + // The quarter point of the area, and so of the image in it. + var pointer = new Vector2(100, 75); + + // Four notches double the zoom, so twelve wheel units is exactly 200%. + Assert.IsTrue(viewer.ZoomAt(area, aspect, pointer, -12.0f)); + Assert.AreEqual(2.0f, viewer.Zoom, 0.0001f); + + // (100,75) of the 400x300 area is (200,150) of the 800x600 it has become, and + // that has to end up back under the cursor - so the view scrolls by (100,75). + Assert.AreEqual(100.0f, viewer.Scroll.x, 0.001f); + Assert.AreEqual(75.0f, viewer.Scroll.y, 0.001f); + + viewer.Reset(); + Assert.AreEqual(AndroidLogcatImageViewer.kMinZoom, viewer.Zoom, 0.0001f); + Assert.AreEqual(Vector2.zero, viewer.Scroll); + } + + [Test] + public void ImageViewerPansOnlyWithinTheZoomedImage() + { + var viewer = new AndroidLogcatImageViewer(); + var area = new Rect(0, 0, 400, 300); + const float aspect = 4.0f / 3.0f; + + // Nothing to move at 100%: the image is exactly the area. + viewer.Pan(area, aspect, new Vector2(-50, -50)); + Assert.AreEqual(Vector2.zero, viewer.Scroll); + + viewer.ZoomAt(area, aspect, area.min, -12.0f); + Assert.AreEqual(Vector2.zero, viewer.Scroll, + "Zooming in on the top left corner should have nothing scrolled out of view yet"); + + // Far past the end of the image: the far corner has to be reachable, and the + // image must not carry on off the view. + viewer.Pan(area, aspect, new Vector2(-10000, -10000)); + Assert.GreaterOrEqual(viewer.Scroll.x, area.width * (viewer.Zoom - 1.0f), + "Expected to be able to reach the right edge of the image"); + Assert.GreaterOrEqual(viewer.Scroll.y, area.height * (viewer.Zoom - 1.0f), + "Expected to be able to reach the bottom edge of the image"); + Assert.Less(viewer.Scroll.x, area.width * viewer.Zoom, + "Expected not to be able to drag the image out of the view"); + Assert.Less(viewer.Scroll.y, area.height * viewer.Zoom, + "Expected not to be able to drag the image out of the view"); + + // And back, which stops at the near corner rather than going past it. + viewer.Pan(area, aspect, new Vector2(10000, 10000)); + Assert.AreEqual(Vector2.zero, viewer.Scroll); + } + [Test] public void ParsePIDNameTests() { diff --git a/com.unity.mobile.android-logcat/Tests/Editor/AndroidLogcatTestRuntime.cs b/com.unity.mobile.android-logcat/Tests/Editor/AndroidLogcatTestRuntime.cs index ce4b8d44..ee51fcb5 100644 --- a/com.unity.mobile.android-logcat/Tests/Editor/AndroidLogcatTestRuntime.cs +++ b/com.unity.mobile.android-logcat/Tests/Editor/AndroidLogcatTestRuntime.cs @@ -34,11 +34,17 @@ protected override AndroidLogcatCaptureVideo CreateScreenRecorder() { return null; } + protected override AndroidLogcatCaptureScreenshot CreateScreenCapture() { return null; } + protected override AndroidLogcatLiveStream CreateLiveStream() + { + return null; + } + protected override void SaveEditorSettings(AndroidLogcatSettings settings) { // Don't save editor settings for tests diff --git a/com.unity.mobile.android-logcat/Tests/Editor/Integration/AndroidLogcatIntegrationLiveStream.cs b/com.unity.mobile.android-logcat/Tests/Editor/Integration/AndroidLogcatIntegrationLiveStream.cs new file mode 100644 index 00000000..3adf06e7 --- /dev/null +++ b/com.unity.mobile.android-logcat/Tests/Editor/Integration/AndroidLogcatIntegrationLiveStream.cs @@ -0,0 +1,469 @@ +using System; +using NUnit.Framework; +using System.Collections; +using Unity.Android.Logcat; +using UnityEngine; +using UnityEngine.TestTools; +using System.IO; +using System.Net; +using System.Text; + +[TestFixture] +[RequiresAndroidDevice] +internal class AndroidLogcatRuntimeIntegrationLiveStream : AndroidLogcatIntegrationTestBase +{ + // Small and slow on purpose: these tests care that frames arrive and are + // decodable, not about throughput, and a smaller stream starts sooner. + const int kMaxSize = 512; + const int kMaxFps = 15; + + // On these agents adb's forward is created beside the device rather than beside + // the Editor, so connecting to the loopback is refused however healthy + // 'adb forward --list' looks. The device is reached instead at its own address, + // through a port the platform maps for us - and that mapping points at a fixed + // port on the far side, which is the one the forward has to ask for here. + const int kMappedLocalPort = 27183; + const string kMappedPortUrl = "https://api.platform-env.ds.unity3d.com/mappedPort"; + + /// + /// Points the live stream at the device the way the agents reach it. Does nothing + /// off a build agent, where adb's forward is on the loopback like anywhere else. + /// + private void ConfigureLiveStreamTunnel() + { + var deviceId = Environment.GetEnvironmentVariable("BOKKEN_DEVICE_ID"); + var deviceIp = Environment.GetEnvironmentVariable("BOKKEN_DEVICE_IP"); + if (string.IsNullOrEmpty(deviceId) || string.IsNullOrEmpty(deviceIp)) + return; + + int mappedPort; + try + { + mappedPort = QueryMappedPort(deviceId); + } + catch (Exception ex) + { + Assert.Fail($"Failed to ask {kMappedPortUrl} which port is mapped to device '{deviceId}': {ex.Message}"); + return; + } + + Runtime.LiveStream.ForwardLocalPort = kMappedLocalPort; + Runtime.LiveStream.TunnelHost = deviceIp; + Runtime.LiveStream.TunnelPort = mappedPort; + Console.WriteLine($"Live stream tunnel: forwarding tcp:{kMappedLocalPort}, connecting to {deviceIp}:{mappedPort}"); + } + + static int QueryMappedPort(string deviceId) + { + var request = (HttpWebRequest)WebRequest.Create(kMappedPortUrl); + request.Method = "POST"; + request.Headers["Authorization"] = "Bearer bokken"; + request.ContentType = "text/plain"; + + var body = Encoding.UTF8.GetBytes(deviceId); + request.ContentLength = body.Length; + using (var stream = request.GetRequestStream()) + stream.Write(body, 0, body.Length); + + string answer; + using (var response = (HttpWebResponse)request.GetResponse()) + using (var reader = new StreamReader(response.GetResponseStream())) + answer = reader.ReadToEnd().Trim(); + + if (!int.TryParse(answer, out var port) || port <= 0) + throw new Exception($"Expected a port number, got '{answer}'"); + return port; + } + + [SetUp] + protected void Init() + { + Cleanup(); + ConfigureLiveStreamTunnel(); + + // Every test here pushes the server to the device, so without a jar the whole + // fixture fails one slow timeout at a time, saying nothing useful. It is a + // build output and is not committed, so a fresh clone has none yet. + FileAssert.Exists(AndroidLogcatLiveStream.GetServerJarPath(), + "Build the live stream server by running 'gradlew dexJar' in External/UnityLogcatServer."); + } + + [TearDown] + protected void Deinit() + { + Cleanup(); + } + + private void Cleanup() + { + // Leaving a stream running would hold a mirrored display on the device and + // make the next test fail with "Already streaming". + Runtime.LiveStream.StopStreaming(); + } + + [UnityTest] + public IEnumerator CanStreamDeviceScreen() + { + var result = AndroidLogcatLiveStream.Result.Failure; + var stopped = false; + + Runtime.LiveStream.StartStreaming(Device, r => + { + result = r; + stopped = true; + }, maxSize: kMaxSize, maxFps: kMaxFps); + + Assert.IsTrue(Runtime.LiveStream.IsStreaming, "Expected to be streaming right after starting"); + + // Starting a second stream without stopping the first should throw + Assert.Throws(typeof(InvalidOperationException), () => Runtime.LiveStream.StartStreaming(Device, null)); + + // The texture, not the frame count, because this test is about the texture + // being there to draw. Everything else uses WaitForFirstFrame. + yield return WaitForCondition("Waiting for the first frame", + () => Runtime.LiveStream.Texture != null, + kDefaultTimeout, + () => Runtime.LiveStream.Errors); + + Assert.AreEqual(string.Empty, Runtime.LiveStream.Errors, "Did not expect any errors while streaming"); + + var texture = Runtime.LiveStream.Texture; + Assert.IsNotNull(texture, "Expected to have a valid texture"); + Assert.Greater(texture.width, 10); + Assert.Greater(texture.height, 10); + // max_size caps the longest side, so neither side may exceed it. + Assert.LessOrEqual(Math.Max(texture.width, texture.height), kMaxSize, + $"Expected the longest side to be capped at {kMaxSize}"); + + // Written out so the frame can be eyeballed: a channel-order or row-order + // mistake still produces a texture of the right size. + ReportArtifact("frame.png", texture); + + // Note there is deliberately no assertion about a frame rate here. A mirrored + // display only produces a buffer when the screen changes, so a device sitting + // on a static screen legitimately sends nothing at all - see + // StreamsFramesWhileScreenChanges. What matters here is that the stream stays + // up rather than dying once the first frame is through. + yield return WaitFor(2.0, "Letting the stream run"); + + Assert.IsTrue(Runtime.LiveStream.IsStreaming, "Expected the stream to still be running"); + Assert.AreEqual(string.Empty, Runtime.LiveStream.Errors, "Did not expect errors while streaming"); + + Log($"Received {Runtime.LiveStream.FramesReceived} frames at {texture.width}x{texture.height}"); + + Assert.IsTrue(Runtime.LiveStream.StopStreaming(), "Failed to stop the stream"); + Assert.IsFalse(Runtime.LiveStream.IsStreaming, "Expected to have stopped streaming"); + Assert.IsTrue(stopped, "Expected the stop callback to have been invoked"); + Assert.AreEqual(AndroidLogcatLiveStream.Result.Success, result); + + Assert.IsFalse(Runtime.LiveStream.StopStreaming(), + "StopStreaming should return false, since it was already stopped"); + } + + /// + /// A mirrored display hands over a buffer only when composition changes, so frame + /// delivery is driven by the screen rather than by a clock: an idle device sends + /// roughly nothing (measured: 1 frame in 5 seconds), and a screen that is animating + /// saturates the max_fps cap. This makes the screen change and checks that frames + /// follow. + /// + [UnityTest] + public IEnumerator StreamsFramesWhileScreenChanges() + { + Runtime.LiveStream.StartStreaming(Device, null, maxSize: kMaxSize, maxFps: kMaxFps); + + yield return WaitForFirstFrame(); + + var framesBefore = Runtime.LiveStream.FramesReceived; + + // Each of these animates for a few hundred milliseconds. They are sent before + // waiting rather than interleaved because the reader thread counts frames on + // its own, so the count has already moved by the time we look. + SendKeyEvent("KEYCODE_APP_SWITCH"); + SendKeyEvent("KEYCODE_HOME"); + SendKeyEvent("KEYCODE_APP_SWITCH"); + SendKeyEvent("KEYCODE_HOME"); + + yield return WaitForMoreFrames("Waiting for frames produced by the screen changing", + framesBefore, 5); + + Log($"Received {Runtime.LiveStream.FramesReceived - framesBefore} frames while the screen was changing"); + Assert.AreEqual(string.Empty, Runtime.LiveStream.Errors); + Assert.IsTrue(Runtime.LiveStream.StopStreaming()); + } + + /// + /// Injected touch is verified by its effect: a swipe up from the bottom of the + /// screen changes what is displayed, and nothing else is touching the device, so + /// frames arriving afterwards can only be the result of our own gesture. + /// + [UnityTest] + public IEnumerator CanSendTouchToDevice() + { + // Start from the home screen so the swipe has something to act on. + SendKeyEvent("KEYCODE_HOME"); + + Runtime.LiveStream.StartStreaming(Device, null, maxSize: kMaxSize, maxFps: kMaxFps); + + yield return WaitForFirstFrame(); + + Assert.IsTrue(Runtime.LiveStream.ControlSupported, + "Expected the server to report that it can inject input"); + + // Let the home screen settle, so the frames counted below are the swipe's. + yield return WaitFor(1.5, "Letting the screen settle"); + + var framesBefore = Runtime.LiveStream.FramesReceived; + Runtime.LiveStream.SendTouch(AndroidLogcatLiveStream.TouchAction.Down, 0.5f, 0.85f); + for (var step = 1; step <= 10; step++) + { + Runtime.LiveStream.SendTouch(AndroidLogcatLiveStream.TouchAction.Move, + 0.5f, 0.85f - 0.55f * step / 10.0f); + yield return Waiting(); + } + Runtime.LiveStream.SendTouch(AndroidLogcatLiveStream.TouchAction.Up, 0.5f, 0.30f); + + yield return WaitForMoreFrames("Waiting for the screen to react to the injected swipe", framesBefore, 5); + + Log($"Injected swipe produced {Runtime.LiveStream.FramesReceived - framesBefore} frames"); + Assert.AreEqual(string.Empty, Runtime.LiveStream.Errors); + + var texture = Runtime.LiveStream.Texture; + ReportArtifact("after-swipe.png", texture); + + Assert.IsTrue(Runtime.LiveStream.StopStreaming()); + SendKeyEvent("KEYCODE_HOME"); + } + + /// + /// Same reasoning as the touch test: an injected key changes what is on screen, and + /// nothing else is touching the device, so the frames that follow are its effect. + /// + [UnityTest] + public IEnumerator CanSendKeysToDevice() + { + SendKeyEvent("KEYCODE_HOME"); + + Runtime.LiveStream.StartStreaming(Device, null, maxSize: kMaxSize, maxFps: kMaxFps); + + yield return WaitForFirstFrame(); + + Assert.IsTrue(Runtime.LiveStream.ControlSupported, + "Expected the server to report that it can inject input"); + + yield return WaitFor(1.5, "Letting the screen settle"); + + // Recents animates in, so it is a visible effect that needs no app installed. + var framesBefore = Runtime.LiveStream.FramesReceived; + // SendKeyPress is what the toolbar's Back / Home / Recents buttons call. + Runtime.LiveStream.SendKeyPress(AndroidKeyCode.APP_SWITCH); + + yield return WaitForMoreFrames("Waiting for the screen to react to the injected key", framesBefore, 5); + + Log($"Injected key produced {Runtime.LiveStream.FramesReceived - framesBefore} frames"); + + // Text goes through a different path on the device - KeyCharacterMap rather than + // a keycode - so it is worth exercising separately. It needs somewhere to land: + // neither the home screen nor Recents focuses anything that takes text, so + // typing there changes nothing and proves nothing. The settings search opens + // with its field focused. + Device.ActivityManager.StartAction("android.settings.APP_SEARCH_SETTINGS"); + yield return WaitFor(2.5, "Letting the search screen settle"); + + // Unique per run: the field keeps what was typed into it last time, so a + // fixed word would pass on a leftover value even if nothing arrived. + var typed = "unity" + UnityEngine.Random.Range(1000, 10000); + framesBefore = Runtime.LiveStream.FramesReceived; + Runtime.LiveStream.SendText(typed); + + yield return WaitForMoreFrames("Waiting for the screen to react to injected text", framesBefore, 2); + + Log($"Injected text produced {Runtime.LiveStream.FramesReceived - framesBefore} frames"); + Assert.AreEqual(string.Empty, Runtime.LiveStream.Errors); + + // Frames only say the screen moved. This says the characters arrived, and + // arrived as typed - uiautomator will not dump while the window is still + // animating, hence the retries. + var contents = string.Empty; + for (var attempt = 0; attempt < 3 && !contents.Contains(typed); attempt++) + { + if (attempt > 0) + yield return WaitFor(1.0, "Waiting for the search field to settle"); + contents = DumpWindowContents(); + } + StringAssert.Contains(typed, contents, "Expected the injected text in the focused field"); + + ReportArtifact("after-keys.png", Runtime.LiveStream.Texture); + + Assert.IsTrue(Runtime.LiveStream.StopStreaming()); + SendKeyEvent("KEYCODE_HOME"); + } + + /// + /// Scroll goes in as ACTION_SCROLL from a mouse source, which is a different + /// path on the device again - and one that needs a hover in front of it, see + /// `ScrollInjector`. Settings stands in for "something long enough to scroll", + /// since it is on every device. + /// + [UnityTest] + public IEnumerator CanScrollDeviceScreen() + { + Device.ActivityManager.StartOrResumePackage("com.android.settings"); + + Runtime.LiveStream.StartStreaming(Device, null, maxSize: kMaxSize, maxFps: kMaxFps); + + yield return WaitForFirstFrame(); + + Assert.IsTrue(Runtime.LiveStream.ControlSupported, + "Expected the server to report that it can inject input"); + + yield return WaitFor(2.0, "Letting Settings settle"); + + var framesBefore = Runtime.LiveStream.FramesReceived; + + // Left of centre and low down, which is inside the list on every device tried - + // the middle of the screen can be covered by a picture-in-picture window, which + // reacts to the hover and then has nothing to scroll. + for (var i = 0; i < 5; i++) + Runtime.LiveStream.SendScroll(0.3f, 0.7f, 0f, -3f); + + yield return WaitForMoreFrames("Waiting for the screen to react to the injected scroll", framesBefore, 3); + + Log($"Injected scroll produced {Runtime.LiveStream.FramesReceived - framesBefore} frames"); + Assert.AreEqual(string.Empty, Runtime.LiveStream.Errors); + + // Written out because a frame count only says the screen changed, not that it + // scrolled - the artifact is what shows the list moved. + ReportArtifact("after-scroll.png", Runtime.LiveStream.Texture); + + Assert.IsTrue(Runtime.LiveStream.StopStreaming()); + SendKeyEvent("KEYCODE_HOME"); + } + + /// + /// A device whose screen is off composes nothing, so a mirrored display produces no + /// frames and the view sits blank - which is why starting a stream wakes it. The + /// fixture wakes the device before every test, so this one puts it back to sleep to + /// have something to prove. + /// + [UnityTest] + public IEnumerator StreamsAfterWakingASleepingDevice() + { + Device.Sleep(); + + yield return WaitFor(1.5, "Letting the device fall asleep"); + + Runtime.LiveStream.StartStreaming(Device, null, maxSize: kMaxSize, maxFps: kMaxFps); + + yield return WaitForFirstFrame("Waiting for a frame from a device that was asleep"); + + Assert.AreEqual(string.Empty, Runtime.LiveStream.Errors); + Assert.IsTrue(Runtime.LiveStream.StopStreaming()); + } + + /// + /// Waits for the stream to deliver its first frame, which is the earliest a test + /// can tell that the server is up, connected and mirroring. + /// + /// Frames rather than Texture: the texture outlives a stream, so a restart + /// would see the previous one and wait for nothing. The frame count is reset by + /// every start. + /// + /// + /// Returns the wait instead of yielding it, so that callers keep the single level + /// of enumerator the test runner drives. + /// + /// + private IEnumerator WaitForFirstFrame(string what = "Waiting for the first frame") + { + return WaitForCondition(what, + () => Runtime.LiveStream.FramesReceived > 0, + kDefaultTimeout, + () => Runtime.LiveStream.Errors); + } + + /// + /// Waits for the screen to produce another frames, which + /// is how a test sees that something it injected actually did something. The device + /// only sends a frame when the screen changes, so this is the effect, not a clock. + /// + private IEnumerator WaitForMoreFrames(string what, int framesBefore, int count) + { + return WaitForCondition(what, + () => Runtime.LiveStream.FramesReceived >= framesBefore + count, + kDefaultTimeout, + () => $"Frames before {framesBefore}, now {Runtime.LiveStream.FramesReceived}. " + + $"{Runtime.LiveStream.Errors}"); + } + + /// What the device's windows hold right now, as uiautomator's xml. + private string DumpWindowContents() + { + const string onDevice = "/sdcard/unity-logcat-test-ui.xml"; + try + { + Runtime.Tools.ADB.Run(new[] + { + $"-s {Device.Id}", "shell", "uiautomator", "dump", onDevice + }, "Failed to dump the device's window contents"); + + return Runtime.Tools.ADB.Run(new[] + { + $"-s {Device.Id}", "shell", "cat", onDevice + }, "Failed to read the device's window contents"); + } + catch (Exception ex) + { + Log($"Failed to dump the device's window contents: {ex.Message}"); + return string.Empty; + } + finally + { + SafeDeleteOnDevice(Device, onDevice); + } + } + + private void SendKeyEvent(string keyCode) + { + Runtime.Tools.ADB.Run(new[] + { + $"-s {Device.Id}", + "shell", + "input", + "keyevent", + keyCode + }, $"Failed to send {keyCode} to the device"); + } + + [UnityTest] + public IEnumerator CanRestartStreaming() + { + for (var attempt = 0; attempt < 2; attempt++) + { + Runtime.LiveStream.StartStreaming(Device, null, maxSize: kMaxSize, maxFps: kMaxFps); + + yield return WaitForFirstFrame($"Waiting for a frame on attempt {attempt + 1}"); + + Assert.AreEqual(string.Empty, Runtime.LiveStream.Errors); + Assert.IsTrue(Runtime.LiveStream.StopStreaming()); + } + } + + [UnityTest] + public IEnumerator LiveStreamHandlesUnknownDisplay() + { + var result = AndroidLogcatLiveStream.Result.Success; + Runtime.LiveStream.StartStreaming(Device, r => result = r, + maxSize: kMaxSize, maxFps: kMaxFps, displayId: "12345"); + + yield return WaitForCondition("Waiting for the stream to fail", + () => result == AndroidLogcatLiveStream.Result.Failure, kDefaultTimeout); + + var errors = Runtime.LiveStream.Errors; + Assert.Greater(errors.Length, 0, "Expected an error explaining why the stream failed"); + Assert.IsFalse(Runtime.LiveStream.IsStreaming); + + Log(errors); + ReportArtifact("errors.txt", errors); + } +} diff --git a/com.unity.mobile.android-logcat/Tests/Editor/Integration/AndroidLogcatIntegrationLiveStream.cs.meta b/com.unity.mobile.android-logcat/Tests/Editor/Integration/AndroidLogcatIntegrationLiveStream.cs.meta new file mode 100644 index 00000000..907ec0d4 --- /dev/null +++ b/com.unity.mobile.android-logcat/Tests/Editor/Integration/AndroidLogcatIntegrationLiveStream.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f8b3067bcd99e9b46aa40e89fa178628 \ No newline at end of file diff --git a/com.unity.mobile.android-logcat/Tests/Editor/Integration/AndroidLogcatIntegrationScreenCapture.cs b/com.unity.mobile.android-logcat/Tests/Editor/Integration/AndroidLogcatIntegrationScreenCapture.cs index 10402144..8ac43dc3 100644 --- a/com.unity.mobile.android-logcat/Tests/Editor/Integration/AndroidLogcatIntegrationScreenCapture.cs +++ b/com.unity.mobile.android-logcat/Tests/Editor/Integration/AndroidLogcatIntegrationScreenCapture.cs @@ -5,6 +5,8 @@ using UnityEngine; using UnityEngine.TestTools; using System.IO; +using System.Linq; +using System.Text.RegularExpressions; [TestFixture] [RequiresAndroidDevice] @@ -30,6 +32,11 @@ private void Cleanup() AndroidLogcatUtilities.KillScreenRecordProcess(Runtime, Device); SafeDeleteOnDevice(Device, AndroidLogcatCaptureVideo.VideoPathOnDevice); SafeDeleteOnHost(VideoPathOnHost); + + // Start from an empty folder. Leftovers from an earlier run are still listed, + // and they carry another device's prefix or a name a test is about to reuse. + foreach (var screenshot in Runtime.CaptureScreenshot.GetScreenshots().ToArray()) + Runtime.CaptureScreenshot.DeleteScreenshot(screenshot.Path); } /// @@ -55,7 +62,157 @@ public IEnumerator CanGetScreenshot() Assert.Greater(texture.width, 10); Assert.Greater(texture.height, 10); - CopyToArtifacts("screenshot.png", Runtime.CaptureScreenshot.GetImagePath(Device)); + var path = Runtime.CaptureScreenshot.GetLatestImagePath(Device); + CopyToArtifacts("screenshot.png", path); + + var info = AndroidLogcatScreenshotInfo.Load(path); + Assert.IsNotNull(info, "Expected details to be saved beside the screenshot"); + Assert.AreEqual(Device.Id, info.deviceId); + Assert.AreEqual(Device.APILevel, info.apiLevel); + Assert.Greater(info.displayWidth, 0, $"Expected a display size, got {info.displayWidth}x{info.displayHeight}"); + CopyToArtifacts("screenshot.json", AndroidLogcatScreenshotInfo.PathFor(path)); + } + + /// + /// The screenshot list view depends on three things this checks: that a capture + /// shows up in the list at all (the cache has to be dropped, or the list never + /// grows), that the list is ordered by number, and that the newest capture becomes + /// the selected one. + /// + [UnityTest] + public IEnumerator ScreenshotsAreListedInOrder() + { + var prefix = AndroidLogcatUtilities.SanitizeFileName(Device.Id); + var before = CountScreenshotsOf(prefix); + + for (var i = 0; i < 2; i++) + { + yield return CaptureScreenshot($"Waiting for screenshot {i + 1}"); + } + + var screenshots = Runtime.CaptureScreenshot.GetScreenshots(); + Assert.AreEqual(before + 2, CountScreenshotsOf(prefix), + "Both captures should have appeared in the list"); + + // The whole order: files that still carry a device prefix first, grouped by + // device and ascending by number, then renamed ones by name. A renamed file + // has neither a prefix nor a number, so it takes part in neither comparison. + for (var i = 1; i < screenshots.Count; i++) + { + var previous = screenshots[i - 1]; + var current = screenshots[i]; + var previousRenamed = string.IsNullOrEmpty(previous.DevicePrefix); + var currentRenamed = string.IsNullOrEmpty(current.DevicePrefix); + var pair = $"'{previous.Name}' before '{current.Name}'"; + + if (previousRenamed != currentRenamed) + Assert.IsTrue(currentRenamed, $"Renamed screenshots should come last, found {pair}"); + else if (previousRenamed) + Assert.Less(string.Compare(previous.Name, current.Name, StringComparison.Ordinal), 0, + $"Renamed screenshots should be in name order, found {pair}"); + else if (previous.DevicePrefix == current.DevicePrefix) + Assert.Less(previous.Number, current.Number, + $"Numbering within a device should ascend, found {pair}"); + else + Assert.Less(string.Compare(previous.DevicePrefix, current.DevicePrefix, StringComparison.Ordinal), 0, + $"Devices should be grouped together, found {pair}"); + } + + foreach (var screenshot in screenshots) + { + Assert.IsTrue(File.Exists(screenshot.Path), $"{screenshot.Path} should exist"); + Assert.AreEqual(Path.GetFileNameWithoutExtension(screenshot.Path), screenshot.Name, + "The list label should be the file name without its extension"); + } + + var latest = Runtime.CaptureScreenshot.GetLatestImagePath(Device); + Assert.AreEqual(latest, Runtime.CaptureScreenshot.SelectedImagePath, + "The newest capture should be the selected one"); + } + + [UnityTest] + public IEnumerator CanDeleteScreenshot() + { + yield return CaptureScreenshot(); + + var path = Runtime.CaptureScreenshot.GetLatestImagePath(Device); + Assert.IsTrue(File.Exists(path)); + var before = Runtime.CaptureScreenshot.GetScreenshots().Count; + + Assert.IsTrue(Runtime.CaptureScreenshot.DeleteScreenshot(path), "Delete should have succeeded"); + + Assert.IsFalse(File.Exists(path), "The file should be gone from disk"); + Assert.IsNull(AndroidLogcatScreenshotInfo.Load(path), "Its details should go with it"); + Assert.AreEqual(before - 1, Runtime.CaptureScreenshot.GetScreenshots().Count, + "The list should have lost the row"); + // It was the displayed one, so the image is cleared rather than left pointing at + // a file that no longer exists. + Assert.AreEqual(string.Empty, Runtime.CaptureScreenshot.SelectedImagePath); + Assert.IsNull(Runtime.CaptureScreenshot.ImageTexture); + + // Deleting the same path again is not an error, it is just already gone. + Assert.IsTrue(Runtime.CaptureScreenshot.DeleteScreenshot(path)); + } + + /// + /// A renamed screenshot no longer matches <device>_<number>, so this also + /// covers the scan listing files that do not match the pattern - without that, a + /// rename would make the file disappear from the list. + /// + [UnityTest] + public IEnumerator CanRenameScreenshot() + { + yield return CaptureScreenshot(); + + var path = Runtime.CaptureScreenshot.GetLatestImagePath(Device); + var prefix = AndroidLogcatUtilities.SanitizeFileName(Device.Id); + var countBefore = Runtime.CaptureScreenshot.GetScreenshots().Count; + var ofDeviceBefore = CountScreenshotsOf(prefix); + var newName = "renamed-by-test"; + + Assert.IsTrue(Runtime.CaptureScreenshot.RenameScreenshot(path, newName), "Rename should have succeeded"); + + var renamed = Path.Combine(Path.GetDirectoryName(path), newName + ".png").Replace("\\", "/"); + Assert.IsFalse(File.Exists(path), "The old name should be gone"); + Assert.IsTrue(File.Exists(renamed), "The new name should exist"); + + // Still listed, still the displayed image, but no longer attributed to a device. + var screenshots = Runtime.CaptureScreenshot.GetScreenshots(); + Assert.AreEqual(countBefore, screenshots.Count, "The list should still hold it"); + Assert.AreEqual(ofDeviceBefore - 1, CountScreenshotsOf(prefix), + "A renamed file no longer counts towards its device"); + Assert.AreEqual(renamed, Runtime.CaptureScreenshot.SelectedImagePath, + "The displayed image should follow the rename"); + + Assert.IsNull(AndroidLogcatScreenshotInfo.Load(path), "The details should not be left behind"); + Assert.IsNotNull(AndroidLogcatScreenshotInfo.Load(renamed), "The details should follow the image"); + + var entry = screenshots.First(s => s.Path == renamed); + Assert.AreEqual(newName, entry.Name); + Assert.AreEqual(string.Empty, entry.DevicePrefix); + Assert.AreEqual(0, entry.Number); + + // Renaming onto a name that already exists must refuse rather than overwrite. + yield return CaptureScreenshot("Waiting for a second screenshot"); + var other = Runtime.CaptureScreenshot.GetLatestImagePath(Device); + + LogAssert.Expect(LogType.Error, new Regex("already exists")); + Assert.IsFalse(Runtime.CaptureScreenshot.RenameScreenshot(other, newName)); + Assert.IsTrue(File.Exists(other), "The file should be untouched after a refused rename"); + + LogAssert.Expect(LogType.Error, new Regex("not a usable file name")); + Assert.IsFalse(Runtime.CaptureScreenshot.RenameScreenshot(other, "bad/name")); + } + + private int CountScreenshotsOf(string devicePrefix) + { + var count = 0; + foreach (var screenshot in Runtime.CaptureScreenshot.GetScreenshots()) + { + if (screenshot.DevicePrefix == devicePrefix) + count++; + } + return count; } [UnityTest] From 6f1baf6ffdf3c4b654396cb5483ee38a8c8e652f Mon Sep 17 00:00:00 2001 From: Tomas Date: Wed, 23 Sep 2026 15:40:11 +0300 Subject: [PATCH 04/19] CI: build the server jar before packing the package The jar the live stream pushes to the device is a build output and is not committed, so a clone has none. A build_server_jar job produces it and the pack job now depends on it, which is also what puts it in the tarball the test jobs install. Co-Authored-By: Claude Opus 5 --- .gitignore | 4 ++ .yamato/build-server-jar.yml | 44 +++++++++++++++++++ .yamato/wrench/package-pack-jobs.yml | 2 + .../CI/Settings/UnityMobileLogcatSettings.cs | 9 ++++ 4 files changed, 59 insertions(+) create mode 100644 .yamato/build-server-jar.yml diff --git a/.gitignore b/.gitignore index 6a3db807..84800a9b 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ [Tt]emp/ [Ss]treaming[Aa]ssets/ [Ll]ogs/ +LocalTestResults/ **/UserSettings/** .utmp .vs @@ -31,3 +32,6 @@ .vsconfig packages-lock.json Tools/CI/bin + +# Built from External/UnityLogcatServer by "gradlew dexJar"; CI produces it on demand +com.unity.mobile.android-logcat/External~/unity-logcat-server.jar diff --git a/.yamato/build-server-jar.yml b/.yamato/build-server-jar.yml new file mode 100644 index 00000000..fffc4f34 --- /dev/null +++ b/.yamato/build-server-jar.yml @@ -0,0 +1,44 @@ +build_server_jar: + name: Build live stream server jar + agent: + type: Unity::VM + image: package-ci/ubuntu-22.04:v4 + flavor: b1.large + commands: + # The Android module ships everything the build needs: platforms/android-36, + # build-tools/36.0.0 and OpenJDK 17. Nothing else has to be provisioned. + - unity-downloader-cli -u 6000.0 -c editor -c android --wait + # One entry, several lines: Yamato writes each entry to its own script, so an + # `export` reaches the lines below it but not the next entry. + # + # The SDK and JDK are located rather than hardcoded, because the editor layout + # differs between platforms. Absolute paths, from $PWD: Gradle resolves a relative + # ANDROID_HOME against the project directory - External/UnityLogcatServer - rather + # than against the directory this runs in, which is what made the first attempt + # fail with "Android SDK not found". `find -L` because those directories can be + # symlinks into the editor's own layout, which plain `-type d` would skip. + # + # Run through `sh` rather than as `./gradlew`, so the job does not depend on the + # wrapper's executable bit surviving in git. It is set, but this repo is worked on + # from Windows where `core.fileMode` is false, so the bit is invisible there and a + # wrapper upgrade can drop it without anyone noticing until this job fails. + - | + set -e + export ANDROID_HOME="$(find -L "$PWD/.Editor" -type d -path '*AndroidPlayer/SDK' | head -1)" + export JAVA_HOME="$(find -L "$PWD/.Editor" -type d -path '*AndroidPlayer/OpenJDK' | head -1)" + # Echoed so that a layout change shows up here, rather than as a puzzling + # failure fifteen seconds later inside Gradle. + echo "ANDROID_HOME=$ANDROID_HOME" + echo "JAVA_HOME=$JAVA_HOME" + test -d "$ANDROID_HOME" || { echo "No Android SDK under $PWD/.Editor"; exit 1; } + test -d "$JAVA_HOME" || { echo "No JDK under $PWD/.Editor"; exit 1; } + sh External/UnityLogcatServer/gradlew -p External/UnityLogcatServer dexJar + artifacts: + # The build copies the jar into the package; this is the path the pack job needs + # it at, and Yamato restores a dependency's artifacts into the same relative + # location in the dependent job's workspace. + server_jar: + paths: + - "com.unity.mobile.android-logcat/External~/unity-logcat-server.jar" + # No triggers: this runs as a dependency of the package pack job. Giving it its own + # branch trigger would just build the same jar twice per push. diff --git a/.yamato/wrench/package-pack-jobs.yml b/.yamato/wrench/package-pack-jobs.yml index e891afa1..20259e7c 100644 --- a/.yamato/wrench/package-pack-jobs.yml +++ b/.yamato/wrench/package-pack-jobs.yml @@ -25,6 +25,8 @@ package_pack_-_mobile_android-logcat: packages: paths: - upm-ci~/packages/**/* + dependencies: + - path: .yamato/build-server-jar.yml#build_server_jar variables: UPMCI_ACK_LARGE_PACKAGE: 1 WRENCH_LOCALAPV_URL: https://artifactory.prd.it.unity3d.com/artifactory/stevedore-unity-internal/wrench-localapv/1-3-18_814805bc36916a15e7c4fffd9156635086c96203ca783d5e2fb2e47f160d4eca.zip diff --git a/Tools/CI/Settings/UnityMobileLogcatSettings.cs b/Tools/CI/Settings/UnityMobileLogcatSettings.cs index ec22088b..f36091e2 100644 --- a/Tools/CI/Settings/UnityMobileLogcatSettings.cs +++ b/Tools/CI/Settings/UnityMobileLogcatSettings.cs @@ -20,6 +20,15 @@ public class UnityMobileLogcatSettings : AnnotatedSettingsBase { IsReleasing = true }, + PackJobOptions = new PackJobOptions() + { + Dependencies = new List() + { + // External~/unity-logcat-server.jar is a build output and is not + // committed, so it has to be built before the package is packed. + new("build-server-jar", "build_server_jar") + } + }, CustomChecks = new HashSet() { new Dependency("upm-ci", "test_all_trigger") From 5aced5d39a83bc3b92af3faf26a743715bfb19bb Mon Sep 17 00:00:00 2001 From: Tomas Date: Wed, 23 Sep 2026 15:40:11 +0300 Subject: [PATCH 05/19] Document the live stream and update the changelog Co-Authored-By: Claude Opus 5 --- com.unity.mobile.android-logcat/CHANGELOG.md | 8 ++ .../Documentation~/TableOfContents.md | 1 + .../Documentation~/android-logcat-settings.md | 17 ++- .../images/capture_screenshot.png | Bin 276894 -> 219453 bytes .../screen-capture-live-stream.md | 52 +++++++++ .../screen-capture-screenshot.md | 13 ++- .../screen-capture-window-reference.md | 104 ++++++++++++++++-- .../Documentation~/screen-capture.md | 5 +- .../Documentation~/tools.md | 2 +- 9 files changed, 183 insertions(+), 19 deletions(-) create mode 100644 com.unity.mobile.android-logcat/Documentation~/screen-capture-live-stream.md diff --git a/com.unity.mobile.android-logcat/CHANGELOG.md b/com.unity.mobile.android-logcat/CHANGELOG.md index cfe34db8..9afc0b9e 100644 --- a/com.unity.mobile.android-logcat/CHANGELOG.md +++ b/com.unity.mobile.android-logcat/CHANGELOG.md @@ -8,6 +8,14 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Changes & Improvements: - Unity 6.0 or later is required. + - Screenshots are now saved to `Library/AndroidLogcat/Screenshots` as `_.png`. Previously each capture overwrote a single file in the project's `Temp` folder, so earlier screenshots were lost. + - The Screen Capture window can be opened from **Window** > **Analysis** > **Android Screen Capture**, as well as from the Android Logcat window's **Tools** menu. + - The Screen Capture window lists every saved screenshot by file name, next to the image and separated by a draggable splitter. Click a row or use the Up and Down keys to cycle through them, or the cross next to a row to delete that screenshot. Double click a row to open the image, or right click it to show it in Explorer, open it, save a copy elsewhere, or rename it. F2 (Enter on macOS) renames the selected screenshot and Delete (Command+Backspace on macOS) deletes it. + - Ctrl+Shift+S, or Cmd+Shift+S on macOS, captures a screenshot while the Screen Capture window has focus. It appears in Edit > Shortcuts under "Android Logcat" and can be rebound there. + - Capturing a screenshot also writes a `.json` file beside it, recording the device it was captured from and when. It is renamed, deleted and saved with the screenshot, including through **Save As**. + - The details beside a selected screenshot show the device, its Android version and display size, along with the image size, the file size and when it was captured. The device details read `Undefined` for a screenshot saved without them. + - The screenshot and the live view can be zoomed between 100% and 4000% with Ctrl+Wheel (Cmd+Wheel on macOS), and the zoomed image moved with a Ctrl+middle mouse button drag or with the scrollbars that appear. + - The device screen can be viewed live from the Screen Capture window: select the "Live" row at the top of the screenshot list. Clicks, drags, the scroll wheel and typing are sent to the device as touch, scroll and key events, and Ctrl+A, Ctrl+C and Ctrl+V (Cmd on macOS) select all, copy and paste on the device using its own clipboard, and Back / Home / Overview buttons sit beside the image with the stream details. The details beside the image include the device's display resolution next to the streamed one, so it is clear how much the stream is scaling down. The stream's size, JPEG quality and frame rate cap can be changed in Preferences > Analysis > Android Logcat Settings. Streaming stops when another row is selected or the window is closed, and right clicking the "Live" row offers Reconnect for a stream that stopped on its own. ## [1.4.7] - 2025-12-12 ### Fixes & Improvements diff --git a/com.unity.mobile.android-logcat/Documentation~/TableOfContents.md b/com.unity.mobile.android-logcat/Documentation~/TableOfContents.md index 657a421f..e2bb5701 100644 --- a/com.unity.mobile.android-logcat/Documentation~/TableOfContents.md +++ b/com.unity.mobile.android-logcat/Documentation~/TableOfContents.md @@ -13,6 +13,7 @@ * [Device Screen Capture window reference](screen-capture-window-reference.md) * [Capture a screenshot](screen-capture-screenshot.md) * [Capture a video](screen-capture-video.md) + * [View the device screen live](screen-capture-live-stream.md) * [Stacktace Utility](stacktrace-utility.md) * [Stacktrace Utility window reference](stacktrace-utility-window-reference.md) * [Set up Stacktrace Utility](stacktrace-utility-set-up.md) diff --git a/com.unity.mobile.android-logcat/Documentation~/android-logcat-settings.md b/com.unity.mobile.android-logcat/Documentation~/android-logcat-settings.md index aeb20b2d..afe0bb91 100644 --- a/com.unity.mobile.android-logcat/Documentation~/android-logcat-settings.md +++ b/com.unity.mobile.android-logcat/Documentation~/android-logcat-settings.md @@ -7,6 +7,7 @@ To open the Android Logcat Settings window in the Unity Editor, go to **Edit** > * [Message Colors](#message-colors) * [Memory Window](#memory-window) * [Packages](#packages) +* [Live Stream](#live-stream) * [Stacktrace Regex](#stacktrace-regex) * [Symbol Extensions](#symbol-extensions) @@ -48,6 +49,20 @@ Use the **Request Interval ms** setting to specify a time interval to request me Use the **Max Exited Packages** setting to specify the maximum number for the applications selected in the Package Selector that are now closed. This allows you to restrict the number of entries in the Package Selector dropdown for closed applications to prevent overpopulating the dropdown. +## Live Stream + +Use the **Live Stream** settings to control the [live view of the device's screen](screen-capture-live-stream.md). Streaming a display uses the device's CPU to compress each frame and the connection to your computer to carry it, so these settings trade image quality for both. + +|**Setting**|**Description**| +|---|---| +|**Max Size**|Specifies the longest side of the streamed image in pixels, between 256 and 2048. The device's display is scaled down to fit. The default value is 1024.| +|**JPEG Quality**|Specifies the quality of each streamed frame, between 1 and 100. Lower values produce smaller frames and use less bandwidth. The default value is 70.| +|**Max Frame Rate**|Specifies the highest number of frames per second the device sends, between 1 and 120. The device only sends a frame when its screen changes, so this is a limit rather than a rate. The default value is 30.| + +These settings apply when a stream starts. To apply them to a stream that is already running, right-click the **Live** row in the [Device Screen Capture window](screen-capture-window-reference.md#capture-list) and select **Reconnect**. + +Use the **Reset** button in this section to restore the three Live Stream settings without changing any other setting. + ## Stacktrace Regex ![Stacktrace Regex](images/logcat-settings-stacktrace-regex.png) @@ -66,4 +81,4 @@ For more information, refer to [configure stacktrace regular expressions](stackt Use the **Symbol Extensions** setting to specify file extensions which are appended to symbol file names during stacktrace resolving. -For example, if the symbol file name is `libunity` and the specified symbol extensions are `.so.sym`, `.so.dbg`, the Stacktrace Utility tool looks for `libunity.so.sym` and `libunity.so.dbg` symbols. \ No newline at end of file +For example, if the symbol file name is `libunity` and the specified symbol extensions are `.so.sym`, `.so.dbg`, the Stacktrace Utility tool looks for `libunity.so.sym` and `libunity.so.dbg` symbols. diff --git a/com.unity.mobile.android-logcat/Documentation~/images/capture_screenshot.png b/com.unity.mobile.android-logcat/Documentation~/images/capture_screenshot.png index ced35dd75b37af49132c75817a181e5fcbc658f1..32d8196c8b882a9368f0fcec5f629351eb952622 100644 GIT binary patch literal 219453 zcmZ5|1yohr_BV135Jf};R0M&egoFYDl2Q`V(v5U?3#gQYq;yFu-5t{1NQZQHOMP?S z_wIY||J^YdS2(rzS~Gqz*YTDV7rc4>{&h4ow41_0{L*M>=*ehkf3ag+g}=mH`s54$ zyJRIT$cvWUMYIgRT-M_e<3U5q3&1+nyaK;tnhPmfp`l^dBR`j#&Aw}+pR-8@V_Ir+0mC8eg8JzMW}i-ha_(bjZ*Gr{HFGl}yKiexV0 zd%SNFyKg<;Kc}xM`TIfSSzP$29JgB}(LCXJ-uyuKvR?S<;$09djGyZuYeqsh=|D2%1UBJhHr2%?&kWQ>;XLEwBPlQgb7*tD%+hq zcT}q1N9N@{PaA6HRaCq;buxKqf3jZk(rUr)@SvI3#^%K}Y@%;Jeqag*+i(58L_nwV z`~2)gEvM%0(#A$=PEJ5uo5;I7Lc7h$`P1WF8ag`1DlUB6jd5Wb{Mm)h=t<>xD$|Mb zd7GVomZs%%bu||n*U|64HfiUYnwne}ttIh1s+weaIqYA-l{g)4=)8X) z6B>Fq?NAV&ch$(qXuQHMV1M5R?%#tz&Hf`lS*@~JRpb8Z5EUJr?qXN0N{!1yS=p*d zM&4kQ^;yBxvEk}qR^`!*FFX*tyV%Xh#U<|K#GaLv1%H@WJFTt zi0J5Dw&Q>HL%U&Rg&GSBt6|n+GpobBu%;${dRo(Tva)q;jmFK*jp@Y;DLJ{OSa!Rg zg>4VHU1BCG?A|IWwsv&f@bK`6;cy7H=P*@1!zN<=Ia%dYX0wVf=ubq7>-~(ITf)GA zs@eacmWIZM>})z~RXtl<{0|2QwsDRtRAYb2%FEk!cJdh`VP~yQk1WLFxjK7#aDs%~ zVJ&22ALDxG=H>CgZ8Qgv=v|zjF)=aa=I7V7wOywWkI{e|-a9<(9~x>FByr}~)1#2! z+?R<`M?UC8O-n1u+3e(CJ%-idlaJ5!xc584<>loH%F0>>2CboTAN1m#!=hQtb{3+| z@=Hrw;70rV`-wR01CNg#78Vyr%B&~^1Bi7tC##rPSPCjDJK#g%?Phxt_y&IcvY2bR zJvurHZ%2;nz2#JM==3!_JS09|!pw|bK3iq_!PL>!`T2Qf9-H&?dhSy`ODijfKg(%9 zva;s8V%hih_bp}`F#nvK{P_M|!_kpVOKZChQuANg6ClXL!*j`Xo4~c!m%h3sBd0p5 ziIJg;w9_5pL`q)%+RtK>F;3-O1( zKIyTu2Jbs_3k#M9Yl^Q01z$SspkBOqAtNtuwKFHItEUICew#RaHk{ z|1;!hfz_foH8piaRMgDcNC6EEjijn-=a08(5s{J89g&PnSgBFM!8UA;SJ7-2OOq)hsVxM%s4wB~f07Y#=q)N)l4hJK8Wv&-oX%g|T;n~C-`X{uMlxV-l%d9f9vbH-Iy91-6 z+kgLlBucJ z3@nz>?2qTe?-3L0LKL0ux}J9*AC%OH2?}0|;J3H12tr<7TgyYIQu?zqnx(a~^U5P! zZ}an02d>jCzR|I<$cP9HbMwHIl*f}!o1ATJZTbcV2~}0G+uIhVQ`II@PwDAP`jb}K z^txiEo4!1Fe>CkSBO?(=^_mrxlP)JFya_l^E3zGu0@%Fv;8u`#Q>k(c%~CGesl7(>jG4LV^ppb% zPf}76Iqj|gHV1;IPoJK)yB^aYhhOZd>&BcPx41J=PZEFlub-)I`dNK_y-+a!+qZW*J3Eme^7h6I&;IlYJuE!jq@C(#%A0UPV&YVI zd3iaT@*&CjG)W?*NR#X`1b5}}LiGEKlc~jK?(^pm2uJ~%nR&OfyX(zQRy-9Md5=!D zT)SKS7gJ|-IOL?WbJfE|lCxeC(sqVv^N6}S-uw6Ot1JhhTE!(8A`3gaMivsA-aSYA zRQv4^f7+ao^m1ckBjo6I)uwa6=KDqVy}iBCQ(9Wu+h1N^Qczddv#{9K3VCfdX}314 zxwr}S`4t8aE0L|o_CJOH2(`4dlzY=lje~&{!br!`5?9n{dA>dTxb~LI&s#2Af4Lmh zlk9}M9*2vHiRD3cf$f1O78VvJD+*qMHE3;bx4NAU!I++r;r%+v@5`5wa@uXWQv*}e z;zcvVsHUSM*3GIz;snXhu#btolnxFK#TRgEY;0_Oo&}fSFR)SBN9Q~A7r_r$Oreg} zwzLQ}IR*H@`aF5^MCI+hXI?uO$J`f-);2c16BA-ksV`10&TDoTUC$R)$}Ah_S-82U zio-;L`CVM9#UvSP%T&XyS|)wdy6uOxgRsn6GI&Pqzj)Ex+gn@E&GklAHC8NmW1>P3YUItEH{I(sp#UBamQ?G6R8`n*_DxQT>*zd& zxFF7Y_WXG*)U%Vr&9w6JsL4sS>f=r`-0L2tcALbo4{*Uj;o*Yv@&p$%>Ze$+M5=61 zvzMX!LzhlXeG(NFHC$mw53$nG-Ob3sA*!WC4j++PSs8PF?sE0&RR*Q!UY?%%W@c#x z1tFD{9L2^Xb#^r;s_E(JP?Zu33i^qgY$u(F-tYAa60w?paJzO(T3%jIS@{7{T%bQe zDGm~Sa+~+tDx0jVtnpZJ=Upyt?s!h8gJE`JxHYHV;PiATAH)3^a&mHO49lCFcAXRZ zGteI)nk3cLCDhc2;gS|s)i3^}m0x838xGCdJwQquHuk8IdSy##TQ%HJaWOMg{MS%> zdiB2|MI$KaHrf*k3e2l+YZDdWsui{gl-KpTEaRxmxull4VsY#wpUJeb|3WP zI8G-@Dk`K^j8{1gRhJkI(H*Rf@L5C~@rKF^4;blKEGRTRr z-%3l@{rriRl9Cd`SCs;Z#3 zZT+tO>lrsT)FkNdS^!osNLlSRh+rxG2lPB^+9v;vqPHn~n7$0DIUzrtFKl{vN1Kj5 z7=34t6dkpCR0Y89)uW$HO`eDN$H&LetjcJDAtw#6oS^r6H_t*(46i^5&&|*0K}h$e zFT2}_gxDETijo;GTae*hPnkC=V9nCp`SnXyp2u-_?rhzIrX6-ASO~>ndP`PDhMxwX z{Qj3w{C?+?1Eg&Qxa^UOym_Mtq4Xg8mIv=;^h@$w5Ic%WN@PUXV>VyoA%=K{wi}U-^y&sUl8K3z7Dbf0qxbe zTbRq?XeFi-ZT1@(|A6;q`Ab}+`~Q@^t!e7fG%ng&FU`#%faY%=@ZNixdx-1( z`{!HnoPR+#{~8+V5L>gSprn*oS~|RX8tQ5Ge=c<<2y;39Y$Ser^Wv=LknQ9@pS!i~ z9T*yTaCo@8(@y_ZRrTg8F|nIPMMY@tyrgXG>`bqOORnA@+0(Rq`SRtWYq@7)q7wjqdwV;8?epKa&Ofw=(25T#MAh=%FK4@Te16c^72%alv`|Xm6SxF3P4!V(9=7axxOnbF2?=xTKGxG zq_Tm&iAhRwGSbx{lA$M~8Bdgl0tAG@SjCf1MtGxdV4z`UCh-s-QjCe2nao|o#H7<{ zEYu$$417YB8Zo9%V$b-v@hUYH6)E8jUB5ewliCcCa^V0B6zgLFNJDTARl&s-{sH!r z3W=Y^aUBcGz{KP+5w>3D#o(aa_3PI^^OMn)KrW1q-iI;|xVU1cw6t`Ix?YlUj=CN~ z5{Q~{EUYJhmD0Mq1O(*m3=bYWux0HC`UF%@ThVsD?E800EiP@v)T*ip@$fsabOVEf z!JQ$d>}N2c=|@IJTIe6Y3tBG2=Y={V0-F_;ni4uq;DKBz8*EU! zk7)PgY+`n{Ka@T^fz~6J3kD4>EjL);oLwzasM`QM@C1ZcFRCf|lcX#yEi1bM{3I#) zpY+^Ud_P+cwTB++HoVjOD+3m zB_9nwpA;Vafr_3!t-3l6+VaA}!gv&C%ib20&)uRN=P&R#Xga*WT7a0w8(us3V)h=o z4Ds-sB_k2Ltsiit`wt$B`4-D|bGC@&8|Gk_Rp9;h`F_8>fRXx-d$RUpXfwzT4 zMHZ`rv`k`r7`4bP>gwu7#K$8|==Y!f)$i$s;r#@dn^q68y^fn$s(Ik;paUU$0TE6g z!%sj!@Hg^Z9m?U}X+K655SnOq04WKVi}G*h1LA8Se%zrD&xIa|tls7(1rEkDF0PIJ zKa$YOf!!V|oXw_rONaY&=4|NT2WCL;6sqmWz`E6=0|Nl61+m~Ko88!;I)#{ z(!2oW;6bteN;U510PK~Ejd_AmVPRpFB_vn|_2rk7o(ioZ**W7qumwvwg>FDHSU}h#5i~{lvqRPiJ2;R&dSau1CTkw8B zm{RhNO~#5XHYYjNT#j`R(c$A?*A!G#P?4gz-uy_QLf-!PL4^iNi#N_E&_v)pm)F(` z`=PWn0~1qqXCl0@GviCYlc9d*W3||oS6$r&_@UHsKb`z;Pk(=XkG@(sic0z!g38F_DW^PVRIwHkpT6cP+fOwhBfZubGE zc+SK$M;3c_b_O@R-L8Hf3~&l4GJ?|dOH$I}U7`R`lDcaE{e~his$EBxyuQAUfRkGn zTepzhKz`7Sr>a4O+1P@GlE!VrXP^yjpW^glrAG#pmYP@9AyO@BXfKz|)W|%FPV~P>P^MlrY}iyU*F!d~iNN zQG~2S=sYJUXJ$?g_ugMyyPporOaXSMrh3Mot?8*$*nZ(B3eBuUa%2R`4C791+TSL z7*MJ3E%pf~aU{P`KVbfXV=6N2MZc zij@cl91(;c<-E@C$N>()Wkt2tkvkT&H3?zCrk&Psj@+GE#4g=SkD<5>z9_kt4fq- z7Zex2mXZom)$`{61Vs@F%6ef~XlT&iSddLXKmd9!4z?Hc(R;#<@Q(R3W1hmkdw>z3 z#UZj&p2AuJQIM#Wke;62vBbqP_cr%M_XXo-<*xr>@fRUf-Py_Ey$26Y6s&|-S6AU* zi1Mk?C3yDR?UpgF6{uRpW>eTd0f$3-&HSkuVcWewRRW`4n;EsTl{Z1-6G(u70G+eeW(v!QkPZ3=5PG=!$hf$L-?eVY$^or__yVD&XcnK> z9K=F)F*Q)OaBo~)_csSk@0_gN6RvM%CH+jYq_7a@x<{Z+B&0)cU*9K`a15J`50n`P zH#gy#-JP8^d(f6zAewt@Vj)a{5vrU=M@Juz4pqN?gp*59zFiDC| zy;{`CsbaO!2Cf&1M!`x9C}=CcGN7pdci{ni0q=+gE%Yt0OZW|XJ%}MBA3)-PJ^7KI zo|vBQ1Ha&UUj~Q-ZC46}IEXRsquN^#A*!lk!ouF|pSYQr8nRU@ka{*jBPt=`n(A~5 zn0ENZ7Rfo^>yZk(oFS+CGO{TE93Y(le;vVg9Yxn1KR}CfShxqZ8Hd*#6hYWK@n?jE zX`z60k$M2{2@3>juhmiyDSPHGTk#lH9!NfDS)gK%qV^jJ)RUn+1Mm}%WfNeCO#bo1 zJ4rBLba|}E2mEmchHAw5`2MQZ!0E_wRSa9-0>mzNlnfaN z%DXoxvZI@^P#nABIDOO8fhwDWeD_Q+55an9kT9&~ztI4tf}{{4!R3t-&enTOcmu&k zC!FKsOn1N@9KxJS!3lgL+TPYx0ytc&+DX)jt)r~nafX>jSUTX zF?aw;00hwxxA~r#$vMmgD)6`^tM$HEi8maP;e;L+1i?rl=PQyFkBkc zBPTZPTS#E&2(B>X*EWYjfA2b5Lv?OQ&;hrrrFfOn`e_BlO$f1>&Q z`}bV-?*NnmYA-D>Pk&*V{Jpo_k7$>mw7~_8fCQRTbIyhcmB7FcaxFl%r~v`Rel@G4 z)NAwVEna{>;fQfVIqnnteOrW(kU zuY`p$0eT~G4?cqBblnx8L#k}F(A1#fw?W@t0*nax+L9lWSC0j?c(N)Q!XY>$L`#_& zkdVWA(U5|I!Z*Og^6Ji^B~vcZU{w^@tjguw2bz2w!hL+_d{5%yEB9GHcS>R5SCD=X zPXI7=J=h-tc6KZYk}cT%u>H`}?PtHRAPOs^i!&rk(rWpctgO0vHw0~|`Shourw<=K z1o71Eg&VG5KQ6DOfjl*AX>i0A~78uOWsa=)0js zyng+ncE~ZTs=_BOgFUNm3_|*9wavxj_Mei-~(+=wT7I3xWzF?so3%FaTW2 zow(E$&)p3*AJeOz?obHzZgINcXQMAce`+L}O1ZT+pbN*?e)Gkyhm#JA474xzl?#+HN){YSB?t00TE;t~d<@b+|cOZJ{ z!-w-TjlRr^;X091rwc5V=YLj_iUD=T)RYeH4GP2V!I;_D@onC%QKOvgKdU)bvrRWo zsuEV&=&SZ{%__IAf^Pl|B(eT9iNDM*&Yhj2JZ_Q1KjvC4IAq1}sy7&{0KvMcxfw+5 zg{+dvch=TlLBx_)Q!_n5Y#)Hwvk;5Wm_78F47($_?KWcgly%`^YNliDCNzxg)opHA=H}GH1J6@P}o4Vdj~?d5DJ<;9mr%*l%Yw3rd~8;41}Bk1Vz}If`S4N zU{dxu!^Zmhf{n;8UOoDN5(YsC9uFF<(cz2o*xRl9^QT-@(VM?64i{{VH;~D_`UAwD z)Idi7ehvHpXr=KX$WawILqkI*t179jBS6VPyEWhX&Euq|oO%smXaKN57DM1vzvs%N z>xJ{PECoogf~PHg6%g?9S_dWV%}~!@UXn?oSdB9koZ&gnm-veGdbrgIRM9?SXX2Mx(7?cBB;xpb&a}Sbe_un z6^3RSVwzQ6oS$T09Rth_%m|9oz`(#(mYFlixGR79+Pb?-yh^#jaCk<0Whh(KDpc#u z8(-)3#$Oro>!&(SR15R-q{6|mNI#x*T%`pAM^siebg1GBkY{FQX83s6r|=g)$$qqI z_l3%}Pf#1>RCusVy$=C5;2aCW4)oKXw#{oXnF(4H49=DBM~{FePe&EJhv;|N_Ej%E z)po=A6u|Z8GlB?Dx4gKu0my<26$1Dk_Tp^K1@R)P-`^uLDF>hla>a=voBh@!03ZMW z$lP-$GMCxp6jrrhG2L;-OD)_0i$Y63LY%kg%9V1{@S1s+?ihMqO%Rx8uSGyeU*l?p zkpBES$$+E+6lGYG;iT&zRf#)oDs6Vd=EA-8SsPznec2605fL`P54{I=WI>btFLtN7Q{Xd;kdbKs6SKr@YT;mg>{bzz!#3!eQPI)M zOG}6aghfCnDJl6Ao&wAe`mVD?MtXWgT%0Z_xaO>)s;Unol1&^PM|J;%H8S3*1=Z}G zqhnP3`Ci)T`qVisIXU?~T2n?w#?uw~nwg>@wf2ZK2-?Kea?a)_xZd9=ubWlv<8z-a zOO)BJE6KH6vJx$nEyf|}@Zj0P+?;mPLo}!x>(<&)`ozx{3n67cDdJDQOvVpxO+LG# zMcbFVQVbXn!0%9?1qwHBAK-U+bs%kKBs+})-#qvnpbWsB2?A;b)_<^N0IoY!@M6GY zcd)&H(}Ri02>o3-`PrBpAPf+5li&@ZmlqNw5y+i01f6I+YXM#ezEZLJcW`?Vduy!3 zj1i1+REleKXjoVusB-{tBV%KAY;1m+YJq-*_%q-S4-9-=H_aN3kBroW;2a%Qa>u#s z#selMEMY3_6k-!WB0$u@%C#N6LncZoac={rc;0x<#M{6 zUTc>#HXu%R9yafw6(EWtV)qQGyK=6|;CI+UA2AJ)G;%2e@$~ZF0S}EM3Cs~kXJy(yzG*?ri>(;0%A-vB4F z8?)mnVD~^A$oujVm@Y7&A@-k9E?~?8VgunDTrz|}!fQAnNjuH=1z<$MiC=NZ#;F-) z6t@WQ6}pT$ZK{6+xf#$n+sUL}N~ja#l@1|5ZgIT%`|xAJzkWrSYD2?ikjFqW7;a$3 z!7ztzb@ke{^@E*f$+U*h9A+Z*;-*_E;!!LtEVElI3*&*%4l3L__|s#y#D5lhN(PW{ zBWM$dH{h@>XnqByrJr#=kqi1m8nys1WOX{Aflm+$ZU7M*%(c{v3|~gQuHpI>WWoTb zKj@4IGFeIrSQ8Kfr3`^I;ECpIH6xAziSu62>Qh~K9&F6eGtLEcOj%h_`#E+y7!jMY zqqDPjYRZg0@ulS)2I#JcIRlMsWyNqbF%=jkKz<}n0r?_6D`LRdd;qfC(bbhoOO`J* z0>P-LtXz;K40Rhopv6MRz3?ImB5cH}vy>lfJ3z zFQBl1wjkkQ#9(qz7L1lZf7k$4mOr$UkO(l63Q12tAQH!d{6REpKu}0-KEnBpz!K1v z)ds9V(SeL#1_iOSGy(!2+`e^ln6S~XwjK}&i-&;>fY+dREkYIp9tX*s72*X_4iO|^ zr%lI8YoSY5*&D+WL2M&PiEN?a0u+!wu!|6wXTMDbd2IXOJ&fys*#~=t&^i!RT4rX* zz&+H{*QcCq9!NtBa9H5d_s5n>X|wK!Ws}3h8UR*+Um$eec5S#8z!{=c03q%+1q}}t z^O1hGaTO$3d3KUP)C4oo^i~L6$U(?+f1;PXAa24|L5a^TE^dOmFM~`?PtONI6PVt} z@bK@JAaWQL$%797^|c;`Wx#8jal6I!h&TWcEDzKD`J@1@#Omrv7Z&IX=707Kz_o?@ zhl&;=`h>eT5sQS2_!`OKh!YXS(a2^TsBN~Jlb!2hC1sZL*RNc;g2+(-RGrS}01giq zn>+vdwjSbrIA6#2tTt8%^&Li0U}!)CcazTx8>UJG zVYguk4dxD|wuSLuWaZ=lTLa-D8B`1iR|p<}VF#x@(0zfIo76|V5J-Tq1yu|x>@X}R zD24Dm0OBAi9h{2k#hSeI@4 z7(f%2odV6U*6Gwhf+1Unv8rOu{EL1Y7#nvyS@uaBwi1Es12rcRc)_nvXkwG0yjE&WF$tn-biV-L-;l%aa2Wc1Bns*nsWxlTA=JG?h6r8>vP#BF(D4|M-yr zK?^|v`K5}V4doos8e(H@)-Ndm46809N!r)R2b7kYnhK~Y0X`92*6mr6i(xgBn(}fH zP+y_hgATT}WgaD51w{jN$)OeVj?j8gUO>?Ts>qpU40zY}J~WAz?ruFz&5t7^io6T_ zlK`Q^={l~+flnwZF0PBhhrt^tamlx5LB?Yevr;q#MhV0LT2IQ0_X1M-MnUK{XQL|N^czGu)%sD;7xklb>7UfS<$}*gb(kc?n9~`K4G)`Ft-&M?Oh-(1)bHT22|kcQhGC%pT3K1qwc7{?T!Ebeo?7ZT4kZ#MUU-IVHYTf#7RADJU?v9m z0;KhDw>OTA)d3Mqwh3w$;Jy6Z+@BCFql|+iBL>}y;0`1uCpS#4^I-7k>7|{~ zAVOby`dKET0byJQQdG2frsT_#89)b$dvxIPh?5FHb!3bP%&?3a1AYD6lTdJDpjIIQ zer@Pe`9PGn0?h&gI+#wl*j`{h#EES|X9pt{wkc2uMM+P;2m+{W1mH7Z84&OR9L>+} zKxXL2 zZJ>XFmji8Od)kX+XQN`%vFi8;?>5F|`;D?iu)tMbzgwT}N7Q0Obz6LX!Th_xB^w;! zpnLI$1$wvp0tzS&^t>h90(IR4gh)aqouiJD-S^r*7m}U;5hDwFM1;M&*Dt}yz)%OP zy0(rD*8xW6x8mY3=m)so4df;#d%~Us#8+6%CQ8o$7!QKbAcTNrQ?-sh+x z;&h%wQcZ2cW})W7&E%jc)nKXIKYR6qI}SSO<>0xP7l|YCp4|Pizqj>P`rX?*`@F*x z1Mct=YT8&c3IBD&b>vjfZQ=8(l*TdvhPJA3MTz36bklbtokusS?rAOzc@!Q=4`uHR z_4OxXrENBQWv@c18FITLr`&qE!e8uRdiwox>xZ&KYqp8$)amKL12VzsKB=oq<(}CO zrh}t=(jQzgeE2d(6y@C<@;%*@cqd(x+JL?{z?(B@L9~*XjD>Xq} z^mE4R6CaIDS}|4og51%%*{Q~Yf_&-&b|3z}5p6ltX*X8iuUQ+ZyT}N1c_Ykuy}nug zCd^c9dq3Zvst&aX7`d3fRk3blmlo(~P=P6|OZEdRATXpX&X!yshJh7E)3+QHdRJDdSw)ok>8$ z9)r}Tt`EeY`&X%ozNJ$`$>J0GasoZrF!ceB?`tvMNEETew{*5v{$OZn(qb@+;@x~@ zb@l$XeXur}u&L>#$Bm6LLj#g3Dh+@Rz4_5)fAuikm3=GxUAV`_O)?Vow&jsFra({- zYUEJ_?;|WsMIoVlcbcay`NEVQ!aXS8h6DbgI zxv8zT@$GZRMgW%TPOw2gXZy9ZuhR~7yD=$!AQUHO9}$I@&vMSa$3H(MU|C0!)(|Gq z10?*6-S?(Wx3Nz~SAO~t*b79Yj0kjTsJzJh}$cMA)W2HqN+7iy$5<7UuhGMR>{rB(E= zWG}PbugeuTyh0={{t_!up}wDO2}x zH6x;~5GG3#hKZ933+XD!ioKv&@i7jRAjQ!obi-Krz{6Xc8*yDz;Z>GVdwhwC4XuF^ z3vIr>dw&RKj|~KNur^1I+@!W5Gi@a{r@sEe*;iR9L5zuC*)*$}{WDa;b-kWnjNA%S zTe7m*r|wYMV`@L)@F7{X`Mn>#?)-@T^kqE<9jQ&VSIpL6h{wf#PL4es3pi@~>2e?4 z=Xc~pim^e9%?VoEsBB$4QO*I(-Q-bahNnNvdie1bnt;?=0{>?Fuw@9Uo=w|ZOxtE+ zsggD$puT2)VcpT#E`U{2F-@B^K`5X0l44%t^2T1g7)t8{zW3MtcASqi?gk?w-l5m% zX>b#?4x-e89y4i*8ug$)#_B}FcCLU=2O1ND>+Q6`!9Jgye?1U%z0iZ zBlR}NvBblmV!NbBL22NQ*Mj-`4@s~MdhqL4eHg7cUv1EN$sft!CETyk>Fi0s;Jw5n zc~xLA2=$Ou##&WiC`4b0NLK8dfp97eeuc)#Jr3t)_-Pif`B|W{EolvFS zQ7ubPCG0Lrktg^@(EJC3vzvsbWE#FwdQ@1s1=*_G_HhRNqA^c+!;H5l+fl{UV!w^k zMgo6yI!=%X1TY3=b@pMa{nrY>Wq-5GWhmrWTx+!GO@iF<86#-Fdey8V5DHEj3J(K zT93|{*pt}LDJkt#yvf%a$axtuwMH86U$ymp(O~p>T0*EPH}7s(=C-5I_q+0P7yf%} zb!=x&?5Y!mT`Q?6H2sp*DfN#S@(oA}J?rn{y?iB!jVtr%@*J9vq@?>N8Y*3OMlNeV zTfMIZG?*c2ghLVhvfs#hf;>EX?kpLi3(NDoNzAaYruFX$Y5CrwPpMDID|q|cH_{|B zrn>_uC5Dgq0SOd$Jk>87O>u45bX7Wa?%LfJBy`m`9aiEJad5iKbQ~z+fFAa$$ zu|;)8-=uOXt8mKdaT`t-t^XpQNRb(Rre&vY=>GI<26ox<&ze7WXqN5Ert6|<;~!RHYn^bh{!DvnA!l&$g+N`4i4M@NS5 zbhgZpu{JgctuqgiCR1#vTe_S@Q2wr~W;d8gYeU5+S2&o*F-V%N zeIrqkFe)mZOuS!w;OMS7Mepe9pwF(vn$3v^zh)O>ZpYUd63p=+Thg@wz0ImW_cNA zuE5O`u`3%(;v5z_`P;^SiWf)5FW_}6Dp@X4Nlvo$xsT>RlGLOc*0;B7ddkTsGArPFVX5@yEyduzo%Opf`5x^0WT<5xY}nW65X`Q&VbAKv zi!01)RSos+V|1y01%YS0=pj~P7X5k3VdTy zS)CPTUtU_wTm~fp=77MpxbzAnB;U|0)73q$H-VL^G4JfZjfH9qpVf= z^bv>j@hc(Bz&kgB?_iLzWBPZlWmZyQ2=laD!nt0aM@_9WZ!2adC7B#Zn~y=}`)zxy zaN=6Zhd1bCI%o3kysrrHbreNzziOW`5G%7#;>|hA%Rzp?sV6Z6-@ZVTxl zp~UEZacyhitB*fOqBmW+y;1hO)zx=cj}-mf`4+t^|D*BuOzg zF`0+JL*^FYj}0+`PkuewiIh&yAn^ItjmfGZI5+*+;NtcvZsnYtQa#i zQk@p4^>b2QcSqqmov>MAXH`W0#)F| zd?C&{+p?!8oBF)a_~=D;EY=&ptbny?y&F$|L^nl3-DK5A8e86$vra{Cy6oxW=Yq-!a*_j>`^cE6i3u_w2KE$`JY*OK zBo}Z;VLFY7&H6JGH85lCw;KswS})-shXouQB4LUVwz+w?o4Xr|CY%kJg;Sg$`D~3_ zb%Pj>xbnSBU-aS}JVE)qed8)9BNizJ5GSXTn`g+Gj8quV2VJ{=YAQe*cNFpD;V{sM zCD`F`Zs-U`gqmQ|0VXlu>FRod>=!=SjgCxM%E}@JDHL8r;sC`EM0XgYFn;F@)1$!F zK_mTL=Ya*Pdx2gzv8SgeGRgvK4dh5ZsQJh+CY3175Y|+VFE2EHWM%^S(oYjBw=BSb^3KNrsGrgvzUF!e}kbhsen4fOHxi zOMeqWc%`A}#K@XuQA(aTG3{}HJ@0H=4>j$tm!kAfmJGUPCH&>BtOYTX7@r%q`Q*QeLGI5{&jpK4Jz1WK^Bhnkv@kKQ5&7<0l(Fx?;Pl{ce-*aph zUaJoXy7m;?3F|RI?envUeJY1kZ-saDm7+niZV{s;vD2Bh(=G7@L^O$-9=l=QLAnLT zj02$wLkVM~T~l4=k=BGWe%!J-;uvqk``HW?n^bhP>sl%b){|FWg=zN(N2)TUu!lsG zE+4Yo$xz|`!D_=+eN82p`Y)~8;d)etc!BeqIJ-GrB;`Ruo|8Ct2MZBYZ_uEwgB6Zw zuHZUHf*phgT1gkZ>+u`p+zf0D;uKtf<}9DBUeg7?2kAtD_O0f6W>bA}wh4A5jJM_2 zpTn%v!Y_IC`QbdR%7am()3d1yPKd83EJIbV%Hd!Sa;&B1w7mxP_i(=URCGkdZxH5Q z)SU0Wu)BZDa@J9PuNZAKwgEbyF|iaFc=3Lh6ljm zg$XIhhxLSW2wjjX!JE@i5~NoxpYyQ;WCABN)!uIlsM$|n0adol`J}kLJN#zAWSy7_ ziQ?==!_|pS2V=9Y#hohIK`rWhl;n%p(C>!rEuvpT_mky40;X=a_+JqfmtI+^>?FuC z%^ojW2vjt;{bSE|E^*yVPsjT5Mxn!%Yu4QBTv%7;3tn$~EgX9+%E*r1S=h zny=W))ajQgUSz!=F?dcJxa`YFOdBib5~HJgHptXDDKYR=Toqr_JoQ0AbrzGdxtiWn z3YBx|F_L>>{W7OvHP#lTPNx_lYYy>P>=LPJ_3?`0`Nry4q$+GxxqFK9tB>E}CorM} z9BJOq1AozxvQ!Q_UeRl@s(Z%6ZuhVy7Q0wC+7Ux9qv8b&p znmb2wO7fNv4`T9?ArnI!Q!1ISgYG6c6 z&$Wht1dB}RfMpKj%pf`LK&65M*Pic8Pjoy~6%{pMv;IDR_4%yJ?j4LTfBbj}1~EDi zkEbjI4Qvq@#{zRj434my)toVdI|5@a$ho`L5DIWi+DfZ_>wSdK0B`kZmit_*`eb4g zPCW}Tl)Vfe0ow?)%>|g-fpfiZ%6YT;gbtzviick`%Uh=wI3fzi36{x9yZ+d4nSn!# zf&&v^kPRPRf|x?4biok^YXhVMuzBdX)tTRCQtTx;W$YEs6=XdRZ$I>V%~^(%R!!E> z8T8_Oql4zc+|<7^u;X-RA#`ar1522J#@}`^s2xjA_nX4;vaXY?nJ2cY?5C{l?EA*a7)dWOR}1s+^Oe`-Df1q9 zaLKV%nMO7U2R|moxrY%HdoDKm!$zHTWv@R>bpG(zC%3WdseNWjK)AS`g4qK{Jmlm# zjF!W}-D705{Ao^Q9bo6mNfkIGX3xwu0Vbd9-MDa( znKn4rErPg~;_pJsDRn+!&Z+)Gjm&7F zfnu*_#ti+$9?p|H?EjKiwR)Eo?;Tf|zD3$04B4S6sHt7GQv1HI9;O4w_P`3I z2ol=rG;;ylmKv%BtHq2vr^ny3gK$b(rPTZ*Oe)KBs52+u?mPEKKM$ZE80njc;bPfp z+oCop($po#1YC2;+{*e(zkJwHe@M~ka_jx`&Y=gxgI}9xeDeNGHg6Jxkjk!$CGDxn zxT>?huU8Ypoy1K(+2Kx|!Ftg^E_!QgZpc!iKU6p^=|-i_fx+jJI~}OOnXs<{;tcGQ zGLeKE8H$ZZ)4deJKX&pb7|+Vs%zQ5!hc(Fv(i0~Xl$r?T#+Enu>jNEJ-ddMar4)$8KxDP%Z{ z1ZYnGV)_DJA?!FZk%>6;9UUJOy{64szf?B7dk)kpl9uv4tU}r;-_@14u3*IGw zrk=jOd@6%;hM#H!DECL-g)&XQ(?u%zCAECA=Up6(cpho5qx$%}&^WRB;<@#JoUM+2 zXi5?4lHxl{t|odod&|5^um2~Vd@M1Q!tQ~UyY=c3f5vRMJ7;(w*K_8|Ud?S4l@jGX*%s^TyX%AG$WZV{{u)z~|OnXl``uASa)2B(hMRYk6Y0 z@iL%`t&zt*b866ab+nCLS2ekKFK>nsGci;mVazu?W*PrO4^wdK<#OGawq&Dp3)~Rh zn5(HzWM}tCf3YSAzga=e+;4S%O-V>bPw&+?!|Q{!D~y`?Zip+!DCdu*`FtId+rq&;WqxR+XNWKnoA_*o4q-13qVNL)I z`EnD)xt*$hC?JI#b%lvlWDaqCQ~<;TI6?}b515mC28OW2 zZAn>}X1fam1+U>~HS&!peJO9?6b;Uo*RB8Z%i+u!7~e2Ptz~NJ4^0CCsSdguGR?BP zr3l}e5h(fu0uedf1AP)ss60Gzf$!`9Z@!`;8U~%^N5jLzmp3+a5%LD-mH5dt=?7Le zHwD9V#>~KahOs9^EzlO=_^G5? zdC3SnfoG2BuCCg3D{9ZjbP>DMRk7&>F|j?J4ryTu7Rthd7E66!b{n&%s6t==p?%oJ zI4?_E)LX7=T4{>Yfy%S@1J=WI|8b;fuxR@C^w(rTxsM~6x^g5MWSE)XHOyjO_qF_y zPMuOv5DMok!{p@^ras@6&_~JqqEwk^DImLsdHK_i&;#t?8B{W>P`Rqwf|~pfb2*o{ zJ%uugn9WVAU8R}%Q<=nDlPnjj*?gFOdOsaqXlf>z1AXeZY06Kvr%opnxgso( z9}g}A_dPI2ujjJe-ozSybM>)ROXn{KCFjrP@fwLyg7_kRNw+SI&6wM**p;(;&Bwe8 zx@J~skg+J%I@cWCEQtHYt2zChq=4_&mtKbq-sAEj5w>3a6dwgd(tsj=Vj6H>651iS=Np= ztnH%@n(G^)bv%q><{7>L7JH@5%A$s8$WbW-;hzC(fxFi$-(>UVTnL-71pnqNI; z$6`Bzg5Iw;T??vFq#LTfSPfY7^6VU(e7?;-Gk`X*+=&$cMj_m ziG!2QV>a+(%5Ml$_;x+xWo^bB&)u09OIl-H7%DGbxsW2|Pp{0HvMuM(`7K&8&oZ{F zF=3~sJl&FeGm=qFkKI9q)ke2}*19|FYL0e$+WZ38miJt+4!0v~Po&RE-zmn$xYwqd9;;Fm2hdf3@4ejM3tFqJeB-V9~}3JP0+{;5jvwxf`o0$vTPw zG~6R>3Qo0eJxi+$%*&$jMOIx!(%55KUS%?_Fg7lCE2qjS%vRdoQ)F)Wo=C{Ib#*y6 z^&X*#Owe8QOMEfMb}RT~vTA{&X1FoRr!VhT%jDg$Ia zHdYyrpHbvQQSf*VjMIy;5b$Fp4KebT-(Y)DiDowM9txZaYezQMJ`rPKP-Yd|C?)!=(8%8-EvzB>Tl7o2i2tV+YU7H!d6dFK=} znC~7~Ff-3IBt91r+4+%9m6n$mmfwdPCMTz$JoTy{Wvz%42qw!1nx}+bx!0Qwjg!vW z^0n`Xx9==f9dvgnUyagkNLN0#DeAv*W#vPOI1LANYhl~w#X(K=Ow~LD+*K~pvxkjvoPOJWe4oq( z4}%ors$2H1Pr>cJi=m6-)3XLWa1Q(#v=3Dp`>{Vtj=S9-hheL=M~@JU3dJ;cuZ8Li!YSD;yz(V zu;bcqveGo0G6WWV`*Kn4zp!O?o0;N9)z$41wkgqbbL*(cK6>}N@lMm8+0g}>ogR|- zK}<5qZU2v@vka?p>$0$U?3$S(t;ogNSAa-D;?4x z_08wJ-w)4q;lb@@yPmbyoO6tO2qmlX{Hh8p6e!o}8{PR3{y3`uxFeB2Vs5CA($**z z*_Jk_72mfV64KUGvMq8+9o1T@XJKJ^+fWem@1K5DRJ5Ly zNk55qQ}Cr#t0MG|yCk2w#~3mS-04s3+CT3((5mL zr{AV>CR`^md=!FKY?a`o5*5nvJ|VP}1&tw?&E4I!IzVMy(Y9DcHMF?>k-}qQTznn+ z0}Dcx_$uP4DmEs)TdSq$F*$e^D)K|a5}&TQ)6%-%(^6MQ)w;)qQeAo*AD^(^CDnr= zGS7~lo-)|V|JiENq_*XtWu6MDo!%g&%t`;=ZkiV3x!ToSdXp-gDwgv^LvvD~Jxc(a zo~32}q_CI>^t+%T2fmZ!AsFWeok~coc%V?lCKSAkbaW&z*IjUbRZV6fh57E?dveOq zf@}4}X&wp2#1B_p(pGNk8s$iKD#@Ye1}k6F!XxS}ds|dWN*uc?9oBh{%4dVB@?x=t zBIHK?^RPjFv!56}i7fOikqRQE0w0L)tx*({N;04F)p`We5%uHl&RKJ}Z7(t&5OUwEc#hsr*n5-;GG4wHOSp7aVEYh~;wWKp-tbb>)-PoFiI`eN(hJJI9 zQ*arH6l|<(5?c`G4wj$yUL2%wy7bu5;we;AA4z&C5KEIXcDQhKM^F+kXthn|Dk4WCm+_)P1DRx zin!I;5NB)T_b!wAHR0P;nzaxvtTWQ+$>h>pHu79=k}(vDhP-#rvcAs}v_E^v5fiUd zzKAo}`;*FP#?sfQ>7@C*(Aeic2>}eR9520$_rz#DK<* zOD(gr8gGpkU9?H{=G`4bYx&qh^Xj*m7Scks2|P!w#0r&?<7lhb=?MyI+?dJ&)E+<8 zQn67%mHoqC%GO5|EjyShmSXY%Q~X7Ch<@#MVAA?>S&Fun#*^_bIlk|<77>l-W}Z~O zY25|vnj`#Aj11(Bq;Bn35z&t_SH7;a(9^y}OV6h$m+tm#ZVEN27aT|C=1cA#_T~=! zkHjcsFeqsmqb`KiplJXq2+8zHgR6q368{$e@Zkk7!i z|3s>ggt59B6>;C@Vd(wc=W=u^?u6H4^KuE2lj(_5wFszLn;r6Qsy3s!e++ zE&Hs&VRFo)cjbN)iFK%!e5IRj`@Q+Y{SQrC0VgNLw5+sSYisZRH^5725unKLYq3L0r^sFJ~f2cl&=yY?R(dF3#8VPp`_)j^{47kXp@Rn z16>Gshm+gPDOA|mOUs?`qaEHRN+y-vV3#vqCNWQp@k4bjTW z@#xmifH`uf;y`u!Rwc<_VI5L9v6DfodhCwd0%mKTgzRE%=T0 z#{6>1!EP-VRxBc8~miwj5M|Ps-QoK_San_ zsm*8Ow{R*it$S$~;aY={pv9PJa&|c4R*#c7 zsENyhR}69Wcp#)6gt+l6YgwfJ+Wg1|4cOzs8nCrgB`5cbNeNoTuF&%X&s&2BcCQ8= z;z|JV!2kNebUi#k&153RdZMXm(F1@_@N(Q0_f3J>9=twi?_sF*L|3;HOqC5E!70=a zV^KtgOBD~uqdq{&Kp*NUIHX{bgxJEtI|#ii@U0_$2EYYvE!Ba46KO&MF9do7L(|he zo13L7{%T+m2Wte#;K6DR9%WEq2RzdS*FT7gp&f89Q2|{40Cyw-=er5v5T&Rm7uc!6 z@zt}v`tvh+%L%>Xchjqi=P+3|ZG^?(DPsOlk1CIWVRo^bg z|IoxxmR|1R(3H@WP)bsLt63Y}QI`~VvB36zVmSG7p}ekvp_CTMy4|#H)@u_V)1+TR zkCJw^(yZhLmslTKb!3u%QS$eQZ0WXg-EZlQeacu~9d$mn6*JS+-oDPWVb@bCOPWwE zgeB5IT;27Y>$X~_>+`AFvQ@gyb=#EB#e@kAAk0fZ#frvO;uEMzP-u(n5a=cHkBOV> zjOP-Hz@(K-%Fanj5$G5+jL6)vBn<5oZ7n#fxbU@q(C-!e<-yRQiD$7@r)CGcde{$E zZSgy2HU$`&`AXxsC0T;m;lu@me1Tk#5$hcH( z@3Yc!at>rT726hR{>&BY=^OPl(YfqCYn%N0ZXJ+R46+6ZkDOahi>@x1y5R)WbCGG*hvl zkm^%Ir7{;84O1SMXaJr-E(YymhSY?tc{8c7vv;@_lqgxW?OcslLRhn{t2H}9*)qmOC|&Gyh@ zs{P*6vD~Sk5D&5#Sevlu020zSig|c+gp4eJ7zvZA((*eUk%&bT=D9!{yn;!H<0mi% zypwqW=+3wRe_d78I2A%{EG&Cz-}Mm|5cmJ|$N_L6ydqFi|Hp(uykGzCmlPo1fY~V^ z6965T1#@HoG5i3lAavA}m6Z{q4p`{HDbK*k84q1s@c*|0VFg|hrhYI!JNeRlCW;6a z?%o9_S~{$I5FjY=WFm7Pu%gcT@2h|VNCsFRmX?+vIY%Zl@ao=c`RSiMw>FMg4z~2gI-Dj$Z)s=?|Z|+Q_9Z8e4s3_#%>nVKjs&X`yU6SZq=}JHzUT^YiX&lR`zHqyK|92RdXka;&^_2QJORml7Xw67>AQNqB z_F7FXd8=5lIy&FWAB)f^b8V5@!)^f&IM`n$LBp)cui2OJ{#lB{eKpmMqADEqAhM zReU~ger4mcml@dD&dCOB+$yHXV!qERGfc?VFK%MGcng~-)c&CkrX7!>p-ifWE1^sO z?T2K2dQuqXam9{N_dh&yCFBpKw|KtuwY;gCMj&IzK0=oz- zqN!&aPN=X)BdB12v4Be)!G0cx<0Gd4Ob}uI2rPzArwQTEME!bL=JXQ~D=@d(s$YM= zbI+l)u&z#U$ysdK*%|zBAh&@_68L{i=HR85zyMtJB3VnThMEl<_({)}Lr|Cy;=$?u zilJkCH0Z`Y8a07mtE9(p+ykuGi1-0)en*2jw*fZ{CM_bIn{b(W3x;}lgwn&0L81Y@ zWqh2QA7J$0@Bb_C+lv=3z>$@oo4feV^hHF(34$P+9x7&z5*K@B8V~@j>(z~osu`*X zn5ggVzq$Gq$P5Sp9XtsvFor%YS%E&b;W71XkhvxjPm=C5iYQ6)zQE$Q(3@BcU{$J& zNw^_RfI*Iu^iVP>f#JGT=3#>J-B?|^M~*(UruF&_&6{5>uD|E+E4=Ly>AatHt5RJd@Cjv! z681w<>x|61GBgUMA4UY+bGr!prt9#T`zSQ- zgjMy^q?ZLSv2zb^JK$BO3^`#oMA5s8I-2KK(P}p)4JIlW_9T5;;!(}y>6T8U*O{`! zY}GH@P$-W3U7cY=!$)bTML>aONiK^)OiMdBSe+*SkW4nNcqO-DT zLT}$;?1FzV{hC5j92@*6Lh?q^vYYA4Kk`ZL!wr`wxf|fT${c>8V%O+0rx2Yimj3{Y zjc_MC*}Zul>5ZhEwA^(Rx?5cgV@qyfN>Qt``@}V6eqEeJQcptA+>}_#Y^;^$ zOxH!eOg<)h_`V0jo!Ia#x@7`=_1znK7=xCBBz%Ta<0OM5#43z$AE9YYvMZA75p@>R z2BZD{aigXJ|7u2#T7Lcb-3pp+I#J4R9rY(wlzLbM#_@FbVrprE>GV8`$Pbw`4YCi@ z2;V=Dx}nL(Zn`PlbULwa%-T>$9hUt08!;VXwaWjXXh zDo&VnUjy`ctpPLfqYd-de%r!2Vv_p40GYXc8-XB!#m)x+D-+E@5@4?5kbnVu0ZckT zN&=;WuXj1Upd4sx zB09khILwv@R!ex=4FF;XcmlA$a*2v=WLcBr+=N-o68J$8-2hzApp1gLL~z!-_3#i8 z7J%swZlrZHpbA0E_p@PeM*aaS>!-44pz*+Q3TQPT!$4L3MZp@ji>v~Guzj_eC=%AG z0ig?&KEA%b2#`(uMs8UduHksS&psni`pm$b3@7{xeFgqLp-?~IWP?MxD&WlXZ#q_M|K8gxmd_vidwGRhKn!M8xgjZFkYYX&=0C`aPUA1vjiW}d!j z-eOV?=1r#Ji6#M-Hxx18m;oEWX(o5I1>Z)(v)a8~M|!7}&}lmJ(>k_3RWB96WoZi1 zo=r0;-T}0_`4Oj!x;94gxRdOK?8B8Nr&Av?`^t5_9D6arTKK6$o09>zMc!nu*3EA}2RF)0L^QZX>d{+^OKYN+q{XnI(+oS={2QcdC4-D=>8 zcg7wjd7G|mRxorpUMF3Uqercv!8OfJz}v$r`M{rC^f9yR%g2rx`S~nVF~*jzi&$OCCNO5$Nwz0*_rl#>02tgAv;du*Jgl$nu7@J9~b072}>Noq{#%GY%V)-Jr?W%d~M zuiY${Pznq<`pK3DI5GsRmu}=62^uB9WrF{487QnUM|6fe8>}^`QV@a^VrT@W6C7X6 z%*^v@Ak_jJGd4UM;C%brMx+MO29khqg1ektnk8sex?oC#wa6D0=R+j z5Eygh)YJ$J8{`D#g5cSgG&Q9Kq3Wj@=z4U)^%sPIUwd|1-wLVzecYS;L?CoO5cUta zZ$fQWpr=~(-FLw%O8%(##{SprLmXCZcJEdcFx7(>6@bCH@7@Ii*k=3!bU!YqdzN6; z=M8*f2^>>%5LAMf6KXZN$_z||NCawxg-Po-e?YfH&QAMAAe+;`8hzEn%kx(f7bv#J zxouj;7kz)Sc88gNYo>_qWdRn-qic${k~D9mlCYZNNCPaEQ+@ZCR4t|fm+y*+iGk^-F`^IO9SgrmpsX zd@_QwObrCwrEiidP$M$^y&QRdPqOw4#2o%ib?KBa$aIK;-mm*GE&q@40Ra~XG3b2LS^`iZ$sn2r=70*UwxC0u zpdZNchawA%1$%9dWUL6ro=%Yvp40R56^Z|V{BYg@T^PBMWdn{cKIq&Wa0tNMng{G1 zLhZK()?t(1v9DGj2lM^=mAIDIKz72R^JO8c)^Ij z3t+#g%8H7GLo=|Ohk@MfEZP>N2_Rf>0hAT;Kx$|t3%mwHZ=FH>-*u zR6U1>{Mz?ei9PO`Y<$B$knlm#8_T4;lgCA7{`bAH%W?NB40b6Gt$Pd3NK2$k0Cv+m2>Fgw;)TYy_wJM_4R*z^}Zp`EpW!W8)CvFNfpuVz}dzn z!7F9p$D5UAAx>rK5fCo3VW>H zQi>i8UTdg0E*$n!XxBr}sHF4%Ltf{Eu8T#bQeBN7jq71a^ z|4PsLKM%JSsG6vIwEkP8?~1@2Rr!|V)5hks(Z=acNlV@lCUTprtI~{$JFB=^@|)1` zY!s`8Z;oXquC~E$5;buHw)+E=>&c%&x$VhVyf=UJ3CKI$~*6)~$5 zhNIE36me{s4a_=KS}NgPPeMCjzAhd|V{=#XZRmZaPHD!sVfd~IR!tedKF1Vej}d=Y ze~gcbHAWm6mY1C39C@E6We~H&qlG)?S00VvEn&rsK9x#!oQlUGzutCVyh>MKQ=#pl zNU~RX$JNvK^qE!UzOZMM;6VQoZLe&Skwlsp2Q)U>NkOo(8Mp^mGC+3z1*C<#v9Z%} zAFL*XIP&R}Bp-#PqhtSUkp2^5AhbTwN(E>TB5xlWB7|K(E&~@NYREDH;uA1SpxFnN zz9LxugC)N?G66aZFcH9QQ-wzY6smau3thS#dviP6K}f@|_BA!Ok;K>(dGA+}^$$RdsDbV-9kb7C{Liq~oqpv-1MVbS*h{m_REW(>`Dza0rS&LtzCx zHgKS=Ea66%B;>=h|MN{emQ!JdB3sbxZ6|?>R?Ogn&S#Zj3Hy2fbl^@Y3W|fFR|8(?{#Ef0umFasa>zONzCl9*_3Z_ zAN&-yVsxw$6a9X%vBMj9CPq)1;7(#%MkdeWb!{*qA1!LaB+xf(t&1BJpb31LhofYb zx!l6O=z7tF#Bbly05$6CUtNKmKXk7s)9b|O@e+5_%Kp42}oBf=%HW;&d1(U$wu@zChnKwWwwi`hnXiu`(>`<;x_R;|ER}gA~`wn z+~?&s?N*o11NPL{an7y*b@q}PjPDUKbEGW2DRN#Em0u+Kg|{-@6~{)>RnEOHl*mhG zj9mU5Mr{~H9KmtWkP^zls!$on#)KJ;%KQ%hk?Mm=Vo6ew%DmvxcdYnh3<L~k(`ie*O|9{aYXf&S&ISI0YsY`MI; zm`S}`tU7u*-p@I5SLtl}FWlqZz4y<#DyGt_nk@YLReYW{9*!9xa(m<#M@X2>bDzu8 z6+L6)6@+vJj*yRMuV77UIYh{5$91yZvH+jIsj{q zZEU##KCsdbR~B%qb_QKQ7lanLLx~O4Nk|z;z;TCOv2tasyArT}aH|SD?J?d1>51L!dx%JQli0z=0cj9MK7UByWQ5t06@>A?0|wJVc)Af>3tYwE9~~5> zD{vc*iH{!!urT6&f?qOlu-)b~a$kE5D;*@g0D1|?)v^Y~H-elJ1BN?tbA|Y)*U)6~ zYr2kb76B=PdmWAu#vQ%}{fLHdB)8DKi#<5bTDc`NX_Af+2z z(Gg}l!iZ7$XN3$4V4p&42f)n#@%r9BmxZknp2**;7&$qH1#ttDiP*G*mY9Y~k^o|0 zpkW}`m90kK;q_YbSa!_0*T5A*58`Z^JTx%Gg($S?FzRJ{r{{kVd>Iq?ZDnD9u64%QL z+Dx5T0~g9O_86ji52RdMap{6g;h4$AT;w|ErlF<8)PHx#~mFs^)b`LoXYtHE}I88 zX9zx_bmAZiib@Fn^{ialORm{oYI+0VO6~sOL!Mh@sV)}zDWP^h?&@+rN^afwfm2H2 z=3bLgD0tu7sw}3w1ozx)m;K-)aq=r1X}*Zu5A>lF4bIfMrVdFveZ#G7#i%7uskM*a zFw$2!0H6*+6YgyN!a3fVEBx~1j><6Ls{y(E&Yq{2O_2~VocZ|-Kvvq~$H^)n0Gt%8 zb!bsQO@@FqAsq@hu+S_oFCMr7{l%2jR5-s7DLmqef-X5IMt80*cOX0r1g7~=ts!Dh z;9rf5XtoDT=Kx=5^H+T`)OFBXfGHD*T*IA$&ZdC^_CFGM=bNN=+dUC6(+^Dbdtj`J z0IXVQdR(8;LXHZaHfW*Cn#JCC-=X@{{hKsg)vJ1!ZG}0$O8w5;g(RTDZ=Xo%y>G7 zVI|X@jfQ@hJw)Y#V5POQ69bw`+sIzv&^f>uodx%W&p<1K;h$%w#Vfj9h3Kr; z>x!|3q7M~X$SURJb+vh}N7#w*G{xMYamO`(Pqjqvv$Xoad{rx**j-UTM3R;^EF=MC zHAynr-F(i@B8-YpyF#hG_Tk&NN?4tQ4GDucRtby9u(jx`mPWYy$K{6l4p?b!B>cWs ziB=IStG(Qzn@ujIE*LXfE&Wz8$!5VVnWw~!E_(D)QZMf3J|EA1ttHhx6NdsPwhW$^ zB_y+i=EouK(x&0blwr~>6U_uOx=kFI!GpLw5n3J`6(TE|pnCI(Xwqx?_>LX#9dRCM zsc;VygZ3o3&nO>>iq2LjT8y@3EysS{pYfye56`S#hv5q-j`cab#xb*bnabIf0v#GL zD%mF%t}WMLNW=V!UUvy91y)A!~OfBVCTX_~~I>^{l#LND42C$W+BfWa>O zLHl>S<(f}z^;5l;a^?z8>b6jy-sa&;wGIH(bWIukn zVgf@#F{I^Tf?QcbU|EQaEeU#Z>ZTU!WKOAxT4hvI*Zm`glF35tD&vyn=i04bElB)E z?|XLiOs1Ba*p+5T^D9W+R*;q_QN*WEFZP)r4O*JqYkWU6_0b^vvhlKN;m>fylO;?rGEJDPZ z0Ou3lbhXnz2`Kb{Mca4_D3M;BH)fbbECHxxaH{sLApR7LQD5N-L~jN=60)qmjf z1rDbQxX=Nl33TZy(~s8nAu8!6Xf5Cxh`{{7*Lw;`awJLspmN9nPCx)=#Hme18^8^A z(R;#OH`m?Q_XoTcP|5*CzY7N1P}c!J4Y@^vEe>Gs|HEIy0e-%-nag;^cE(8ytrlKY zafoLaXh4~Zgxv^Y0Tw+1*{Z5e8Rqa*sm%xH51&hC zM`D%NMm;F`C^c6;=-mt+cE|18evZ4BvaYOQ`I>#E|Kxzp0Mk0Yn@YzIK4AmyJFS(p;`m%q>ZP!?tnEt0p!v7BDo-KQ>Va`Gi^?a@aw+*;t zlMVcC)ar)Jt4Z8qPC+=Ggq3%>%Ek9_Q&aLsPHD{|{|pq%)Ar(}@S)tR@4k96Z|~Gz z6K6%K_v*TKy~sP!sSLrb?E}l>X7aGz9}O%|sY#bLu@*AMZBJcV$m^;uEJ8_U|2d^* z9*gfQCbHvRwO(DU7%@>B6KZN{?IJ;bSLbi8_L(TiFYhl62SoY%bC6L}uRwurv&U?4 zupd^ZQQ0%Wt3VEm{#oCtj?b;b)l4&U(K)#r4bsc0DA z;2e&gTHD_GO(olCGr>07x41X!6~&vAk(17#N;&zf%$bF7iSfNrSDM^Pw#Ib)e%L)V zAK%E=AMdozY5QiMx)K^4Uue#V?EhiI8@8tS(5rbfqW{3vW5d-zkN3w0fFi`wZYh;+ zy(yiG46}^opDtx1!a>`T#ezz>5wpk4(N%RJ=GC(1cslAabEqtOVKKb4)DsR&!N8-cH>YDiRp#sd&Pf5{_Uw6Z2Y~%8 zpgFl6CK!5b`A;Zm>&K-c8eV-5{j4gh1_jSr1x9$PlhcW^FO@7?jw)sUoY9pH+Q{&N zh)(&Jk2!%)Z9J2)S%Y4>v*s+U{9Ny+`#8DOx9#}-RFtIotnN3hzLB9(PR6CZ`Umoo zJ$AFG62qQlF8`>97^bTK_&oGJO}*guQb#@e&9Kx)zhEOcyKzvdz$vlh<*Vn%ARbdE z7DMaGB4cnI5s=~C`arqSl(*h#eT92yJ$AaN@PKPf+@P>9rpcG5%jzzU}4m)c?Xe~Kq8m(^_?d3qWE7@l zKa}JsV%f9R?@Zje#N}b`J^eW5KbYsUr!GcS)%sS3kCcBov3;p%mtN8B!3TaO&0)R~ zizJJuVCfBo&`n3jTltnZ;3}?eU|`(=9J(0cJoRf~^#;Lg_b^R2RVY#tNig-EJk{2x zC8nR8crnCMNjJ@U1cjtC5gB#^N8?7@(EKg)bFcMllq%0m^gCvbD_i$UL|-=Z&h-2C z-}Ex#sl#S!3@klj$n0+s3uhr}T&rlYdK9XqHfHv@BU~^?Rd*n3Gh<`@(0sx8!Wcfv zy@e%K)c?41opK6SL03CL%N{5=A?Du?bNhz~c@rhB4H)f`)7~v9%K2BdcHpUw*ZN*L z;IAh~zv`@yL!KhKT}2v~_HIE!w{xw#e$M?ghGA?&d9|#69{WO1h>D$w)IvY4nf$98 z`tT}jq(4=mEJ~hmb=iz5xT32rzo!^|rH1!`wVtl?@-X=XUj!QG!nE#%i1REywg$-foysYjucEV_$6nc88NiiaJG zM{%TD2d;tv`G+x`?nh;v~)XWgE&-e1pF>ELs_vf9%qh znHFEtinT%+H>VuN^;)Cw6_L>uSZ)iNz~J-WL&^TDW962U{9i5?)g!N{abw1=n_$2= zy{b;2d-x%CGRMVl#l$L9(4NtUST~T}Y<-kgSe4DUn#Zer(DPx6>wdz$LZOAt(j09q z`#r~qWLe*DvHAq3T*s$Re-k)Y%!qqGS63hS5=)@Xy6&c>3gQ}7 zoHulDa4Wtd%2J5rz&vXf?Cl_N5}}rDG;M6A)}kWqKf6q{G#3fic~Q41nB3u4OI5Xd z@^_aZ6!H`OIlNQSi;w@s7P7Z~;2M&dZMVcHFob3M$fH|7mClULKxMd8MTa;IiHl}l>q%BkO77ippHR&p-^3DDlBBB_jT$QwD&mA#)zO#XH; zO-@$nTrRv}ZT)-G`%~#Ns*SlNIt`{H7n-}Qbvb6KE{uZZqRWj>tY5S3E)N^LNJ|~Q zBj?4IR53sL=g{sqQD;r`1BjK#s|?bDD-8Vu)ZBQdbDuT6jEOYv**a0f>|;#{1gaW{Zq(O=Me zXVT*@L(BWkw#C*LM0)YJ0GRb8acgz(s5GAdZcEb;Z?p)&p*2UTC8r==xXm8 z-JDukx@?P^@1ft3Y)!OE0Hf8s*v$pgi9v8tZB4}GQ15h=5?p0Ky+(X?+^iBJ?z zp!D+;8Qu=#4a%??>?(_)ijaOiC8r!91i`(z(wStY3Z(I(lR@t^BnR31q91*Uo@-8XiCk>W$r{uM=tI0SNm!NWNET$uefT%A0-lq(RXnee=*vUo+j?+ z%A_~QS${2O*6}7>(`w9Y-qhw3Th1%R+P`UE9QBKHw&PI?`|SssG@3QC4-c3_m>zUV z$+35muRl$qzuX?Do(dFz0U#(auquVr{ z29F0;1}W#pl#OZSqWkO|d@|o3ec9I++QTDbI$v%1CD4WMj%k>FZ3+LnQnuy7R&}X+ zVO%0uXylSoV%#)64AE6&S1Bq7F%|F=Zd})UtDwsMRzaOY(W5|SRYZC;L38OuP7nP? za0m?zeTXz8GdZCokC9}{L^=^zQ7Fz_yO&RwE92qL=V z1wQF220vyNOIqOFe=6c~cO#4_NfgI^Duz5xwCJ1V9TAzH*(-maq`72oUs_e!*t_11 zwX2Jxm-N_zT#pcq{+{7=JsNCE*_Ho_T8+4$wiFZFU=7fiK_^|d}4_R=yLvT%n!*4hIz z|Gm#Gg^LPKSF@k`?U*VFxSS@`Bd z)BtLN*jQZ1wx9eO02?*Si3azI=d2r7{t`PYCmP%Xny4$ylDa7x(!gbU$qfK(Wgr}p;tycfc6{}*|; zwS`c3z>Ff=&xz`f{ULq;r~kH%z;Q=v$7q$F{5&?H~& z3GuXgiUPeZQ~;30K;`MSe7ICgZhcva+haW^$KsZ0!CKNg#hV_E|3TnhWnMJSK)}Bp zweo32r8#Sw{>uH@C3zCova$X7>ZGZ_-hdZPrcJ(7=*TDlc547{buwxI>IIS^UN@ga zH=6*Ry>gl#BKxR;1tjZ&k zhRvx|pYHJ$M6?34!_7IE*nrMusu_B<079xOyu-%90ibwEa5{j>2)>vKOotRGeTC~t zLYuuk8WQaRNkOe1&CqXpb9KJ*U&;+Mo}qBMj<5=pIGfrA0*`nhb8Z6GD)g~nT#wM5 z+#vSs%g3+ECkL}Q5B$C712P}LUg){58nTR=tk@VvL&W{*7kg!L?18t3?@W_O6(-dX zOPHxkrKb1AMBrhHk+rV1e)gwrpUA`;={HhF65g>D;`vZ0=n?R4-2h?9j<{1+&RWf$ zb;8dSqe5fOp>9T*OasS$F;QB@_BfRO08MtGCHI11MFj@M%G*fh#n?EmG$4XyN8?1z zsT$J+y!`eqZ<SO5XdtQTA=*e+A*qGLtWi@SpVQzB8Ys5FiSwK1nPIVCxGz#(@I=id^{vQ!-E6u zD;{X?0n-f@5j;4bhv4-(V7?5Ji3RBJ)sCw2AMeJB_IpB9JzN5i+ysCH+8=YGKmn?` z(!v`{mrO0-g8msI$6zU<`3sUWV=5O>o?{Hdp;4enk$T|EXvQDFVew~;%Y(Gk{_kEZjv4m=KW*cVVl|5IB z<@n0z)P=-Udz*`)H>){L#Lm3I+q<4t@6A^jC7BwRE#~nTdju}czzGl zEw%5yZ(n5YqA!SA8excbW{EPpD_|n+rHaj^_<=W0KAc1qV>m0VqO4GYQ#wO~6Nv34 z@=m(b<@EV$1N8lkKKq$_>49^ssyUPMqi?z{l3x<3nq}iowpfMMZSr(2t-CM6dD*z% zFWUHTy#%_b$Q~8V`Lz>h5HN5s^Y)&&(-v;Q6S+Cz*iBasvQPM@fO8TKT2lyBg`o+2 zF@#|QTnP{6<)dfKTR;r*?EAyU!s5c-5BU$~5P(#hMM_Nk7(7BSnuK00NAxonmx`XL z^)^s@!Vc^1=?Uo&t4%rDNBy$NsuIP;JV5$Ka_J!|RuLql17iCzTPr;w|Nl8>b83}T z9X%4bieG$GTZTVxjppT_r_4{hd@DJUR%hg5P=1kpFZ(ZR$5pJ)-v~Kxs z!p+EUVQZ&tOcZ=gqzN$$5?-&hJ(9 zqFwI)2J-ez=^{rK8OnuL#PkP}jx+aaO_eGahWGYu7EGyC{bLTid+3t=38kkXZ4xs2 zVEG}gV{m3bUme&?odrN^jERj!Tv7-f#mT8${MRicN)MbHaAH})9td4_=#I}*e7p%! zR8|l}10q8(vc%heJ@zm}3|q#=S69|M18>-cKkh$1FvzSqCikNne1;PnNpl_LEsZmy z>=QzVCp=|#FD!*yl1Sn{-P`00=fU3ej@5>KBZ4^tws zB0ieJ^Ol&K6tPtOpS`p`9?L8j>(_XWQS}e5I*yE2{M*b)ZS79gOP%ZQPMwSj;+@Y= zH);W`2a?`8sszXG!i`@+R~IK|(7%CE!1+O;#1Am5g#!s}zLgrrjNVJQNGvpR-2MHI z7l^+Dp_YGtC#x-j@IOZsy_0R_Uc6Wca2MN++9#{5caiT=6Wc|bJ^p$;$~$7+pZy(O z;zUa9U{J;zBv89>crOjVx#SC6OAo|^L=;Hx*<)XusP@L&`Dw0-FU>w*OiF3w{m9Rr z$!VQjn!`tdiPMsRlImN{J_eC~9KCQwl~Yld4C*NrXY_6NCEUKEsoBM+qjaxFB$u`* z#Y?n4$IATNpJLeATUD9GS0m{|)^c`g4>H zyWoY4SI#vH&DAVJsQsuv&mN#X)c)PM-$@|-&91yD0wz>Q4N!J&VYrF} z+bzKtC$P$5VQhm48?HTvfZfG`tMh?f$WJ2#F;USlrhuTJ!ysPi^4v-4+9z^5lJX7Y;%;tkj!cVojXmj&xozxE5HGfeK^1WD@am}+#T9o}u2n{Jdy5TUB}aR{8sOS8BX5}4-+Bzjha>6fddI@fD& zmeB?LbIBW6YZb>MQLrzgy%Dhh<@qPhg+_K= zFG{p-;}$gBGCT(TBr5SZ@3P5RR>UR2!w)lPsUi-_RyWEn4y|))S^MX%jIU%b>O1_1 z)Wi>ox0|m5&%Xp6?`-B9P@Rg_$j75Tr_!x{)+sa5uBX}Xc7OcSnydxskfo8}`rj+aBQI}5c{(X#FXYQ_Eoy$Ru&tU2c!%N!S=|-g^ ztS*B&YwQ^}TPvU1-$4(*PvkjvHn^HpA7jKQ+zzfe#jfTMQJ!WJBuk|DRQl1- ztY>J>;c3nrwJPU&9@hrUO_MT@n!{0_HFuGxCTFS_hCaE|{(rvEggs9U$TUPk{j(elEBMr8fQ&@tv2^&*-3ga^o zlVWV{qFz$tYOEqpUf@)E@aGM;+l;&MINW|XP{cY;r$l05`~-KcWKU-fbx7y;mocR} z#q_U7U*59*S{`3&ibd$AjqKL)KZ%B@USM84AI(Moa-pC@E)sWZBdV&XlPW>LpX#T` zvkSLzgWPcitG(3f{kI&PGB@d|U+shyxi{PzcF*X%hlz7K; zJLwU9MOrfTG?Jb7$&z~7%uy&{H-j5w`;fZ3y=zosSH=5WndvmS@)M%>swGkdx1Qj| ze>b^So-GrWJ>4i<_))||n5D*j_0hC#q5qW6pw`ETryE20>}V@w{o$Cj-8~jm$+?jq zwpk$^L&Sm7De6+(w{iUE+zs(txJTD>k}o8w76k^fdt=g1R}97MX1;jeQb~zu!_OVB zd+GI+l=5RZVJ1UH@&~I6rO?28zHeJ`)I8a3NxLVE@fz!;#-rqPK1Zl<@~DZ{-t^$N zqkrf=g_D$5;X}wjyY6Zj_mE-9fx2nYubYCQV;oNLW{G#Tr z|Hz|C0>$rO_2*lrJoq_W-o~Q)@GNRer)K^b3iW=Rt4CVTmz=y;(mEgVCKRa#bcA<6TBA63&XOOy|ssf>JH)a?<*@817*Lwlu>2uld3Q}Fe&ocjZZ z_-QLod9l)^$(24Y_7t(BXu2t>fnpDW`n$G-&xTg7>rTlm_IR+9@_gI4?yrB|P-flB zp{PH-ZDGVMgHb;ulisI1f8X~j9#%_tH@!ak~NpG#si;oWNwdpKk{C#-%5ryt3@a4y+4mLj&LnH61u!f|)II%dD zeCGLHAt2@D_jl4-u>{h3g$!oiYD8;H421iNbC$5FZLZH5LfSx$d^>tXOo0=M9T^9$mzl6#eroXzKdDrmM>;c&FiC!l)m? zg@b;CYQIaSqYmu}-d}h(0=K_RpI8_bit@9HIvGsrw4kV?J-#F)$ar5x z$ROQNTN?quNSvFY+TySN@mJZ1yb&HPNv!H93vbN1{r%D{Bi6@WtmI06qIUS=T4rF` z{?31I$UWX0HaQ|VXvlV~d%aIKq@LpKWzqMBP-4(4uZ;6E_o8+wZ3x-bn&*BcpRvzL zTz6cO)fl$zn}Bvb?5|ILqIR9e{fhwK~^~jY!^CQ ze(rEtjmID2+A_VxdxFLHBojUBvrPrwaj18v5|wa^$&!1dhhv70paG|yVDQsdau4jY z8_wfSNcGX}++G#p*8Q}K)GrQ>@Cub!~u_4>{a?h&& z+4h<%*#tGs=*CltPj$vyiTmEY#;3Rz!pI;=u{FABD}z#iXTKFJ2#5$s35axejL|iamJS8!?ygaSfOIpuyW_q4y^nwRJaZCv_ndRTpM339JWQ}l z+@SDow2N6TxA;f-rS?bfsoa)*Tc0$p%kG^A+s`viBaw=5da}zR=>#?Bt6Fsa;yNjc zX7^RVd)aCKFl9fx;=2mQpzEhQ@oYwTAv+K+uF^lj{i8;G51j!htXk6!lg?uWX#t3n z6!Kty?3BL7@Bj=c_7Hoox9t$G^BIg!<*!KvYQvQ|``VYh9o}Hblbi?e@?zGb8T-$$5d%EMkZ88AUg_Usq;2hxm5#p14J~0?=f~t&WaEj%o-O-5DvBtdLu|NJQ zgV4>GB`9D{%9Q%MmMu$5;z7938wQ0}Q>m<&24%L-`}bqA_g>xfyH_q7^K=;V6xM&N z8j&*v?&5LTQI)A1AyvF{P6|zf`eIi?+J2;UIWf~J1-%1PgTq{`u`w&;mnvniX;Fly zm>CX-87ya5Yi2R#v|saX^qx5U2u3$*J~v-X)JO83YW0|1e}0Mm$!)7{`sHzIdZjcbt#+qfazI zu70Dl#?KrKHz68)yYF1pr2*`KmhrU;uEu-J?KYkR~7mwAIzV zrxu~@Kos?(2K7uH>^YE=@ab|IZtuI=ePMYQJB@Eqn5y)J?(njifgUTMarW5YPt4#E zx1IXi$9~(; zDuG?MM3fYXqKM2HmpCdXQR*CWtNxV2BT7fqaQ9Jg}y3=VtNCxi9naE1bVSem^y7{`mgn7 zXR9pz^~V~3hp|)NzBL#zsObW3Fh>ARGj?_+Zog}8 zkHnz&AwYn^VSp8qyu9_2Dk8T-8n9K8xG%br``sk_Q{qdW6Ck2605$kZoHAYK@bEkxHfdM6t z0w(Q65mRpc02ZX+$nQcP4-aruliFPg<1tJG{R<=dkiLf4WUJ? zdw9*^(t3;iBhz0C3F`_35G~ic2M8^qWM8yDp{4cbAfHCjCzKQ=nQvR%);h?4e z&}~Fa&M}1k9%OVgsJp*0kB8{_mQ}c3Tz)Y0IdsnI2K+q;7#igp`otQL2=w3kz1y$6 zfl;MHS^8F!;g3bzB3@23H2N*tkh1*V|#U5eOkB$s~zCIx! zoc0^xr(fn*K)Jz?$9^TuVcGX;6(49-IX-%NXos0WB||XiJV5l1$Dym~-3U20+}h}l z3iu)E@)k?MK1X|FaL`{xJeAfpQW!qv%mqVcyysuitmxzu&Qy0}q6}A`jL&N`dTqa7 zFw5>IOfc#ucL$W|CdT$Vh?Uk>k~aRbR7A7YSD(|`1?Q*rM0@6C z?!@ycz-|P&JHCnw-Lp9Skgq7eX{6Q74G)luT^i-i7A64wx z{Lo~RH{VkHAjq>+-0y-bM5q?FWDK$`kREu!5Pp~VKyCQ*PSp#z+StYMha*PZwd54W!O*D&cmL-$1; zm_Go10CwArXU$o_yAa3;_k9=lidNPw38L&eUCb2=KnJ_Axm*5&J^-)dGr%>HD7IJ{ zlo@;3z_?AtdEPyR$KH4?OugUn(rHE{O!gahg)P55^=k<=t{!z${#GIF`1iSWTkRvP zx>6jWxtZr?9;)qY@qy9~bxAz3ac*1b##zRzADJiq+;AY9 zz6$}00GJ)R|0%0~p!6eLx(`F@7zxvRN~=$0^#^LX+84A2QIdPj!vng@>J>4H<9}|U;us@q#Z9pTfpH*%{TFLqt8@I zlDzw0%X>ln{GlJlMeA@amXerq<9Um?rmgXQOUYu30XF`;H`UvQ(gwL05=d5Uyx+%^ zuJpt{RfP*g{+8Sm>`ZhryDvJ)%nBE(w6lpDD>n>&=-d}@q z0TCfyL2%%RR}c~X4hM6BKKo|$-6;4H|Lw#8bmT*8#1s?&1Zzv&A9o|z)f1q1eoC6| zKL`{c$F65b{X!7f80>E8N(%A6_Y6KbROkIS%-x!Bwm(uK^S+j2ZfoOezg_hEXK|F%HrUwWOD(-vgJGq`KH>)4rF z_gsIj;#ukf2D_Wt)AHD znf=q6*XnPPxq5~-E>y|gyGY4SK#@}-^Ogaf1~d5V7|%f}zyKsV5K55pju$+@)G>+N zLrVxEw^VutVi)1T5+QlZw!#w-*&1!&``Ncd3{w1VnlWXAMpJs4D6~N>MX{v5*6j1X zq!P)*Zd)AjyheXXrNty`z$MH52a831C&OjP<>SPRM!JmWOVPJMXvl>O9VlQqeK|c< zv+6oS{n0u!2jH%xMg;+W?{gjxV0WpuhCXfs8~HR!I9*t_N&wFDr1WnI=Ccv>aO9u{ zjhD>hdffy{sV8eZqHHLj#FJYeW7LuM+@Atw=vwV%;D1y67z5C-aWakg%eZ?{KPy9G z0mq;cJ%>n%udTM8xMOyHoMD-U{j-dgOpDTMGK-nD303(hdATWs4nYEDUBoX-Bkf0Hc_b1UU!ZR4>WVuY zWUVV)(JYP}58+tjkjSE`cA?LDvFfPGz3tuEE77kZW-Y4wZ%^^U#_2`o0llO`!VmTf zB=a-91C|P3<8lT?DRNoe8^hJ6@>xID?Kj0^q@fd3#`*WItxj$iZF<7xtDm5y*UW_v z$*v-x`^zWz)!yh`FM_LH(_g+N%LMRW@87UMgs{Z#uHK*e3Fzk?B3m^wGJ;7zZ9UNd zM{av4V6v+pKTqjd(+HuH+zetN7c$6a6g~itKPN9cYc$Mx{g(WjKD+nZNNM~Rts~`& zpS`(HegZS(~6&1L3Imr#%R&Lzd5=U;iCf_C|TYP#P- z9}qye5GLq&x43*Rn~rw-nH5wXLO_uM9v&gFI{NaVoKf)wz1ruEoe@sUcy1xgxzu_{ z!1lLi2`nEzH5tRV+n@g#{^X1uuNV1yh@g2y-zYgf>V?1IuPL?t)~^{Z;(y+3eTnym zD9-y(mH73qAH`3LWLvCH(5Ka1R*lxQAHrOv!UL@D#HR22XH;qRucF@A&)d*ZM*wkE zmAMn)UsWWim(VhxwOOww`i{OobnHTEIKxHDOp@+5yfBeYH-BLpHn|2Lk^2Ki{+ZDj zIs!yb)_o`ay{xqx$)J9F7HtN;B;$eO*I0}~7P(8=rHhJ5l;{}wDsvKH&k#z;&Or>> z$+nE`*-J;KiaPtAz6I)Ut$eq8r++`OA0Gzp`KrJuqLnVtZ<9z4FckQ#y?8D*(EMXv zWOqeM%bH5Kx(az`>rbCQ+*`;S!eT!UI6G?uvV?mBbMI-x&EX+kJ+9NbvP!UDD`%GA zIf_BqBxE8T1uh$C8P?mmCuqe4rmI04ww?AQ!ua7srezWier4U>zcp*PR8wU+oAK2N z%ADcftftkI@N=DZ{Kv$P*cc_uZ$n8bQp`Vct;s*RX2$v4ZtT?kO|j65R1DLJ37f5{ z%W%&1Z&|V_+)J4a&vEs|YgTKY%Yz+61LwMkKoG%7ScL$MsR%_!fo{s_?qHnQVP!@Q znoxPyfT)L2A^*Zl*Nqpuzsn}R&&B$G=23ixS4i{jcKdHE@qoY6F(Y%e$;42=f*|oX zIBaxG{8N^+1{cvpnU8?YY`kOhGkJB+eL-sO_%FFMFC?uke>r;Rc@;xA@hgWYUD}YM zK=>gj-AL&c?4oVoqxtiqyS3R=gB(+1o?O`E!yUt_f4(ovoSfL$t%}>(I*|J3Q+}4{ zC+o$PXg%t2fF>Qi8-_PkN99$gH9m~8C~VEEe6efISN-j1ELLd*cBj;n4b=oQOt<}&=<>i8!GHPrKN1G;U- zjHTzfV}dHR;h*_m&{Mfw{`x4SDD0Y3!~71-i8MvQ#t@HuZc3O#W!5&c?qAUJpnz{m zw1S-}%i(N&W|L2AkNI(^ul1J1uX6*Or4IDHcw(D2!X`|*zH6&}xMDx+_%$Gj|00v0 zHS1M`f#`$+)7Aa>C|fbKH4_qJc2F@bcDe1yVREW|1U&LG;#;TG<_nF;;@4qhEVmH| zm!USFr;3bxT4MORHf0M`fK=>#E0BzCU1(9Sf4(XR&Zvy@ReyCv3yitI;2eQKqPV%u zL<}ON>(Z4q1^6pe)Va<|US(`~9k%JAPN=2?F-s>=94Mk{dFMn(N87yr!B_?_woTbo zR2QaRA}zokzr6GPHCshKmIIIpr2nm-zxeMT9P9}5U$~*0E`^p4zgw61$ZW5M(~skF zhDSvdnQC2^Kk;TD7cyKF>s%;PxblwoAIr`GxY+vdn9wI2-nMnU(Q~#%+eRXdBkS4d zfqVUpLP~|P#VO6Q0en)sKe0+K4`JXc*9^;3ZSvFK1HaFS$AbTOUe)5&woYuV)6!l< zS^0`Rci^E2D4Z1@7Y&uw?6_+X2bZNy>B_HdUrxFW@WHKku5?}vto|~DT|Q*bt3|fV z{X{;$rWzdv8pzssj)zg(@dZUw0uCO)FoaZBIWl51# z-}|sM)gIy>G|W7h!)Qh0CIZNP%sE(XOZiVc7(db_4+7>5(q0tQaoN^9!+CG`i5F*} z(PW!}x_>4}kTG+dUJjEY`bQhndJgAA(|DCaq1>nCh0l3j)r`}uJ$UIiCIu#UO37b| z5&>#puZiu;PB5tzzz-$ym%yM=w{mJ`$;G^2V(m%DC`yqIvsYT?}E*v`tWoLL3j>qGTFB( zDlfSYSST{|!;pG_VE&bWPBG-9%38@c<@E5IW89aCGyxqQg$A7z$`xK~pE+q;iN#w2 z_r#+#F$+a-J>GuZ)MM7gaQN}M^unqJ-mqI`o0x#c|BlzJ8Hd6VOe7ywd|mY8nK3FV zI&u=hJ-eH{OE(lHYgmkM)04OeW9TwlRFq;=&gL$KOE^V;`*b~?DNvWcmCu{yMaQM! z;ueu@=~+~mm8fW;0+Cj3QEpFsPG6xM+Vj9H*vp@Jc80Dj0^e%W@++rZ1RPy5sP6=Y zQqWanFWCdj_*~OIs(4Iaw02ygaYV{sTB#lXagD$a`}JDeH-)-@+nV3D9)P-)&y_*(89h7iMm%=xv+}tfqFpf{-~Dp*8)qPmc-mrXUmRT&q5u0JL1k7 zt}>w}?%qN450n1AJ9$W41cQ^#4M$xC$Ad=Fk=FM9v<1+zPN+t}qD6k@dPgAv8z_d* zgWy>XHN*-VjBR7b4L^iEq8BZ`l6WY63h_SVO&ENq%Y;MM=?ZQcttCznIl` zyHia;s9g0v`uK8>d!;nFEs{x<35Pv9TSprca|TT_*l|^MgD6A?JZPWCsYH>W3}Tm+ z3P4%$cxDV;=`+S+z;bN-rZ_{1wtvlBlGTb~IpPZvpB6q@FnZ)2$viDAl%W)o6$w7W z_aPc$jaf}Ix?@_XtN~yhOu0{&gC{u7h0cG?9Y%0t7+c*&53q-{ENWd+&e3R>-|&l5 zLdi;tM67AYqY{R_22OI!Zw-=|mGTJP+}$UlEQXbN=%Bn@z@Z9bQ#R8!4?h{TT~U;vsqowz$I z`y)j$N;y=FahwE-m)PL+w$K?b_-c%JzIS?u4^B4!;!%c>I>MF`=l#;wxZg4!hblfkm%py{gU`fgT|fQN)+hINc1fI_|3 zqxO$Jy1#h}R_3PZ9(Tax`8lhL+;RNv_~1F~51fBzbL<%g)hLZ2%*08cuVeYz#P1nV zWL3WEaDW9yZJ;)|a|^^9CcQj8f>eWJ0d^PQ9~8%(#tO>~@$ zwI;}m^nwcX>KH64PiLDXVl|o8-;E4znI1^PQB~XHe9)>fcL3ZFu+fiXO3pu@sHgr< zegPUFp{FP-Q9e!@p-H$1Rv%lWv*I~?6gK`w$MsOb$5LnU$IXEXNNVE$DFG4h+J zO5DB=AJIM>bsulv@lvJt{(L2Hr}Z5LBLD>q`Ntm@_>MsvErg?>qFdGD_D;IT5SHxl ztsy$=elq#^T=+@6tlgP#2_>&%rjrld`fBw$6;|o8FS~#I%q9ktS(gna&$9?VSbMRw z^hvSu){m3ko215%eu)ylk{@qJkRH<5<)*XNpX&Tk$_>4|<&msTnK{rbs#_?mj}3;T ztRWdi>@FEnoF;y~mUXY2F6~SPF{LD-2sVo?ekUrY7)y0W*~WLwLfgOU1pKpkL1YEc>+6_+Xas?gC2|}Y!*5*?>KIfFOt=6K zjG102s-RU#LvLizo9Z&&jf&;AhqIEhC33r_9z11amf7}msA8x2G=p46XYuk&4eTKD zu=y8&%;xT`7Ikl|a#rJrNwDH7VlpiCUT*3TV8S#Oz!`?n$y)IhkAMRIYr}*MvKXLr zg<3p_=VRC4u49YqiFrvW{yP$7hs`qlHDE+XX4QD0QP1!r!k4}jcDP@-tEe}yQMh1?|?b%XDU04cGGtPFdtD&go@H$sscv-*`GXA)H0c#nFcR36izr3{UdX_ zh%0{5)CZoAl;8-}2Dmzu_lN;UeWeUTI^3K7Rv;$bhyJkX>9xe|%vPn_I-$Y*=dQjH ztizj*Er;7KOUEk=KePh+d$t%O4CKl`Hn$D8b>SR0{YL8f+IvhVrZhKcyJSK8u=_7bwVXp< z%>@L=b#-+Bh#4L?-118z2uIbE>b>-f);+#GZ$=FpiYNlA=Dilz2mN<$lePi*p}2d2 zQ<`76`!8N{h~Y)GZg%E2&5Eg22itO_v~k>S*}ORUdH6kaiSMnS$_}M&ng+QSpO**F zDv1ivQ9uLTv1nN0Xe~cN`_8lUC8A5V+?@IFn&xK|Mj5$ zi6QYFWdhHwi(Ngvi8^PYcaOV00vrFHW+mx3kKPYu>qrXQsALU*vU|t0tVR4TA3RnI zmV>)l4%@Cw(#4)IGkp&geeO7(D7o8jiKYNNCDnQBc#4|5vau54eC105gDwYWNj~AU zooqefCNFzXZXGpXSi{uKTB;+H{Z4(;MH>UV2*WUpi)6yAMMb%~dTNVxc^p(ld|{sH zBHr9n8q2{yCz%@j4zLK^G{?jan~vZgKS_n!Ka6t2F_!P1bG1JJyN@?2tNH>M$V?@i zc7J2w@ubZ2Q7q!XI{A2#`;qXo_W>(KS?S7pYBLWVKUcde;huaT9BY`44y2RzQBS|G z^{N%WS-jcfrkCFAV4F&P`HbX)?kI$9rRN0cu;I*(M$!>qsLrjz^@05Z1}cUgMClt? zQTR(my3m&q{_I^O1N>XjIN7F5B%SiTJ&}-qyES5&K?8WWIYk|eJ+!2QSURMV`{tXj z5B*|*YawLS0mM_$S`9gA2)aV^(KP0vn3|Us-S8|Qh-CRZ7RRYE64dZ-{m)Omz5U<% z2|Y5)>TjTjWY$DAhrKv+H-ADE;i`9?GwP>fH#>E8DFp^XFSJ5OyPkU~xoo9!94$X4 zx7WzNN-z%xn2-4t>Ij5L6p(=e63(ht7vuln&&PXDYM-yye?z5$5F7-H--fOqn)K6| zG!#K4DFh+HXO$#L77A}4cgr8y5!?;}70qyZdbon$Y-QEI#z&2pZudSHL9L-5Uij|O z!dNeHlD4;-n$eQ3h^1>%^MIG)&P!9)jjO)WUs*lVa*Oxwb7$|gUtlfMUg14oOonJ^ z5vSwB9B}fYcehd5@WD{5jkn3OC3=o?c(hG>0uG#)`) z8g?rSC)OT2v*o71ZxfT%hH+#tuY`#jij3mK*3eb?6Im6H!3mVqu|d_J)ipQJ+);Qe z{d6w9w*0W?AKrdHCA^BhC*pjC;b6T|A4Ev4biL0X^cr|F!H`75dK zMa(d#un5=6p#!m(49LgVd!D96&)7B2&g|S+&Rat(q*LtN764HFx{JIm0FeXN=O9v( zY_I3DMx51Q|F~%n{C$lIpyqZ!{VWpw(>3fQt^FnqA(}MLTOOytLBGB*db;?{M}cEg zg(9z^;!Q(0p2T`va=?bvqe;UnqRmhSis6sKGcbZi3Q!vK>T#HM#LKT@;aK4+dZNu! zmz&-6i_)~8p>!Ar3>~$A^SWvGKl@SkL^*HKcihG~&&)1>Y>m2O16EI;{mt&+emqrn zJnGKsl*IQzh5D>)IqXCWACJu28}qzqkOfCuAFb^FCZ!Q4s%R1GGPa5u^ANTRUl;Dc zNoa|Rn^!v4k&sJ3m(c-Df`X8ypk-arpJAhI5A?^w!cR&5E_s9`H1+$Gy zGR0yFq%J%cyjLeYR&tG#HooX~u zLo&eX~#k$8X(zAJUUn6rL|kHNGlR)ADwLeJ8{A#UF6r zysnlzZJ=}nEI9Xl_V?)jG2ZQud+jkm*!3J+JtvSs57qF$oe*)|O=t~@XVq8(s8t*; zg9c;niy5YL-0d-Vh)m!1d8{4nhRRrY5KX7rEM|OaWy`wb&V}wf9IS=A4*9|sm^JqU zCTuDMP(WKxm#-~h&?!~AV5R9NBSm~J%{#&CGY>EK-6*~uyLu$fyeWQ)qW8VhIL@D-{KI6oXVL+ABi+RV1hJzj?LmF6ILCbEViX3hZ)=D$LAK<1hvu`#;U8q#_5iy+xq75n zzU%Yv!f$^hZTN#r<2vN90aE_(VRc1Q2d!^|Ac_E9$aWT?*9hjh^x;8SPK`3dwfchC_Y-#s*H-qo(qN14V zUNqpfCKH}P$KYb!GKAq|W^N(S8L#^%Bf!6FlAr}xJbP235g$nqskh!mB%}HzELVN_ zB%#V6T_4TRbswue?xQxwJpI)ix1ea^PqsBS_v#fuU~oMTbaue&{qO2e02-AJV8-gB zord55fz}OV^w~qKfn+(!20;8_;{cU3JrVy2XnPf=Axk4<>noTHT$P>=L~@PMomH@@ z5my@{e>7!XbP6x%Q1a(c4hf&i2#%wcz%G7tx`x{kYYLnIsNZ$`M}2Wf-kznyR)+iP z08}E_tRTj?g2=)4Ot2(ND#lytn1t(y4o0>Z+`N4C5(iyX#(}MvF+|mUW$DV7=1S_? z(ZwcU-%^3Vgc!dO?{66^%$a}(x5@W2hn zf0-!gL?N|#1t(x-I#{UmBO#4s6EZu++o;t+F}jo+jR^_~o1$9NTV zVpnA+7Ezt&i-*$mCpbZU*rVto;ki)edadx=UrZ6wF<}JwG=&stY4aXigF5^BhYE6H z6viSnxyMrSrrMc<=?87gJyzpF)8Jdr{5W4k4j%9i+I|EF^X~$o3;27O0)%5GzUkPOGIi}b9|&1 zF=##4GVtG0l<-)Fc&u$b;VnH~m#?j|ND&IUG{>I8t?Qh*wtgM|gXn165fRBKP~OqsHE84$IwHJ#hL* zagX%@quw!M_tn~DzmU@8%udPTplQEz`F*?Slm1a(bo%T5ayW|gmFI%%^62VrA0C%| z8^lSZYv#z*OgrbJbfmKMrKry_ARSEgKI~3(=UPq7dH}(ouev?u7?4wPlO>3g3}tHX z@H~8Iy91Gy0C9>BHGG$9>8dC6q(|8wcZ>dBq)rIM?;cXVw$LcpgR4PHGgm<4id$l% zqM4j+)-gp8_)=ZwhsT_Ym@U`BW@&r#dZ!&6Ghh1s!2^x^hcGduZWHiDtso8t3XsjT zMf%=9QS9vubE$8F!%L<%+%R*YX==kSuLBiZpulrmU~PuX;cIbkYuhwc>v^xFuiHWv zF+)s61o(QO-qIcyKw7De4~{PGwtUUimeAYBXqRM|Z84N{8b5kkKbY~mXbMP;Q4gax3)tsq|egssWGP~W_vp~w2fP3D%9IV1Q6xqsN*p$M3i%2=jjbDMps(S;Cz?97g@Z5Lek*+R6D zAw=ZMKD73&PK5etM=OKkM7>-!*|a#=o`?HE37*i=O|wr*S9y`x}Ep9JD5K1ZoehtYCk6$$uzDw z6LG(apP8HM&~3Y34j5x8GxDP4emcLq-obAN!;688cUm9W6`nA>*KdyvveyU^&;H!) z$7VE!CNz3TO4Pb1yQ80b`x1vd?n;x7r==fwGaovqE5&>;05TLg*YT764*b)gXkWL1 z_aR!-qBE*&b~u>D*K1Uh)^g2T1y;!ZJogOSid&13c*7%Vagnfy9fVo}j2iu8Iwj?$ zrskfMke|#X5N461cQ_%AX3q5FPvYdQ2k>78Iex+1zLMXMR33lY@h-aX(H%il3}hA+ zCUQA4>s(!eA|0I^1uYCmb2wgO4v7AZ2%Ks+k3^lfB%9 zNosD!z&p3h_0|rXkNN;1+5t1D1Mo41mHS;3BMKv0U9uZAFMJV(u(qq#QS|y_K&gfb zD8|xpr3lXX0Tny`0;A(w`(VXUi*GGWYE*BaUKuefE0iDIf-Ypkb!=8p$VW`gtzNbj zDRtadbY=Tc7wB><_)qI`dWPn>Q;bs-e0XNvi>@@?9-2|S++F!|$m9GmUc}u7*LvOY z8&6Lo@Q^)kpWSpx6LYJ3axG5>(-n4j~n{e;Kurj00AY=sMzH zy98|8Scf9308&VmGy|`37irecZTjzvN+k_#owPMSbI;V1m2Gyo{lb|^V{EVVk%$j_ z4ZL)!ph3&2LT*in&lnuwj>n-YU&8gOo3*Qz)B*p=gaD2=%>SYMNwDoS zv7Bc2gT@g$LUxEqrR@gXQg+;{rS(f)x^1VV0Jf%j`5r2no5grgY40);>j!8%$;52s zC=D%WFfkcDMLD2W@7@-?7~u|Q_=C(BMk|B2gd&g6*|=Rv6E=bK4ZM-tF&?Wa!XTog zh}VOLg&v|9Jh@>`qo?1w>jX9-9KeWI-oRvg!}$uMq!h2Rt}4)kx1)lMK*Np(Sjjpq zC*x2DSU59{comits5w9e)DQ0Ob_TEhHSztk+W!N#>kt5@?qCWS01tpMDah!Gi-$z2 zT7qf=R~IpV(yz_+ua00Gc28a6EqPrOh`3jEjJbxc&hdTSUZGXy_99481tE3v&JgyC zlLW)ELH)e_o&lgEln)oADti*O2Lcj`itWZx9Q#9wKgBx@-BFLUIfiOCPkrm7W*b}r@20wKC7N_r-KQidu z)aPF9n$7!o8U>=Sx5&NZutM6HqI0^lxz%G(koy6tt7QStU5XAjas7RvRS`oRIHF+8gJTrp^Yev$Woo*>}` zUGUYh9q1_XlSZSRJ4x(>&o|Ru+7--np`k5N%bJbMzb}R^-FJiyuMBjrb5qK>71mhX z2&s2(-x!)^4U`NlVB|~eu!;@$O+4tFJ8~ViF*u?!_MGkYUcQ&c&6qxVlzwV2wI%~v zg04F-q>LfU^>3Wj5-m?ToIs(ewP?`jb*xQB~HEL=CFeyFU)d; zqK>LM$NQ*OT^Mh;k`!VqZpB(@aX1@`Ezaq3!74j_rYfyr>~}qQp-&t7T4`C$#?EfZ zfzONSWP{tE(g-NUC>S(}(?mSiHskW~Vi5CcBJ|+*erBv(OuM$hwpKD!= z?bv2Ex*+>5&aq%vHyfn6^p1_|B>jo!lTJS$!7j0AE?&>Ty9nvo<->nL=RBVp!Ri;K zzNz}gX=BeaR#hCmpI<3n)0QdPAa#O)zX9+iE$k<)rT~7z#`_GkJp{!kzh&@gu$=AOT0NP49nTlyI8T@n+)a> z|7SvZx4v!xp6Pg;oObp7DapzEHLj&bs`6N#BpBmoe0fpCp57P%#c+W0iR*2biiMlS zJV&(WKCS1!5|Q`=;a7g-HMm>gT3T4IFS+IBauQiKIJT+2GMBbV*%~L+CCO4o7+`*~%~1*U z87*bRrLCR^SQc|qcofVmYLK^2$7fQCE*h?xfDgGfQ)d zwfbxQa|EpFWoy?1Od`&g0waLVG=@ep#IctmS~bC-ixf|>67>kngMK=!sb;y5Kx2z0 z{pz?3l%por!}SI48IVa$c1pKSD<{E5!YJUz)Z^Mi)}*%HW?Vh>zCJRB+6n$Q3Feh7sL_FPPpV7!uK zj!t0ydvo6nNb7b-4H5cuAThY_190msAZ{IBGflao9Qu_@BzB1D)e4{J%%>WR;Fz56 zzEt}l84Gb_9ySewJ3a^#jVox^ zGHJ7ECYdF`c?TDXHtfR34k_lT#b+9tAf=_eMH#$P(=_UtpF4LZV2&_a_q9y#qu#kV zvzfW*7xfBg?C*%*KVN>Hzm~2bC-l;;W%-`RYQBqTJVp0Kov`|!gz^$b3htT zfe3$vz!HuB+@9SEc7tJC|U30T%tKx!o)7}lMZO;Au)?Fe{G2@$5>Blh(i8~PDp zQwGAXv_D2!#*uQ$3K*pg-DdFD+VbOsXuh=7BRAdR^J@&}3a*v@KLjeI3G1B zVbg}qEv;Vq6_vmA@ltoOZBEm!!%S?droMY+0PfLPp0WY}B)4$HA{n#~j{k+&lfQsk z<N70zA z*?7pAqgu$MZd)YX2Myfc)ekgsFDi*P(<7{+rc$$(We-YvAAIwSWX0EI?N!jvDh zf)%j;nktu=OtIZ^tYj=!c6g`HdRJ>&+AOqCmoDGZD4`V@rj=#t;dL?`W;p?5Tb1YA z%v5qa{i#Ou9*N_-XyjYh$zD^p^7zl(H)@;n zLK=r+KWkeq2VeZ~<4qm?JZ3&bC+W2w=U;Tb?HCptTE#-(mF;X5FkPVs5S(#pg` zh^*W*tCKbb&Fv9=9C7cO;>iF&F*y< z%G1?=#RdaK(-@!ys3w?TkP@>a1JN5C=z~~nC^=X%iFNv?cnnyBaqLs&EJ_2vBZw@ zy2dLK=xrc589klf_Jkd4u74c3zO&hmelqISIu}%Xv@z^)j84@I#(GzNd==>SWOXQ- zmQ|DEgFZK}YW3hMRqDL}YZsC@+@Y2Ux~1`8UI2v=zh0 z(QINu8(LgZliiaYJhfL#7x!iq!ZQZVylbL3=F!URyra7K+=|U@_VG?eF8P+0L<5J! zIU4H3JGk(9E#y+F9)?jfVhJ6QXFI6=1SDA?ztkM1MEPpBBB?SXYk>Z>6iU|;oc-zh z+)rr|r11*^IV%jW&Fy>v*N!cbEp^m)YMf>bC_FS=CZ1N$Agcty&=I-QZmd$lA`DA? zb!##d7`;UmuQ%RV&2PJSPX@<=4cqcR5qSqm6Ut@rpVYJOAkos?yXJUW`Pg-Kjbew& z^$+<6WAG1hSB6u0FtsRwnu1hp&#}+o;(+K3Mxi0Wl1x7W)#-CU>bA+6D0R z5*_?tPoGUbIM$+A#8w7+p6g#wQbCGod2~n6*UvGIn1a`W{a->^;zTH)2Cq4>-(>J&>=YZXFk%dJ0Zfh_kvN8a_nslJ}@f zjdi5IzkcDb`;=i!JdfvrEY3E_u&kisncDehb4svcN#!jQ%>;1G++FBYm(9!HY6)j( z=w>>`=ef9%F^;&2fiNAG%*@RxfkqBMd(;hdXE?Ea>nBzyuc6g0R%3~smW32D9?1Qg zzxb*MP*Ql+Hr5lnB7FMR@NK7Nm%po@YoY%%{Mce|x>!eKwI90UWjzO>{+ut0{aSN3TR$wru2gRox;4N2VP)Ovnzh3p=}# z475%oeOyyD>YiA>dpQ*&89-b>k90FJ^HTTN^69}kyAx}v&4*NH;~gh$r_sX-rNl$4 z{pu{eA33+goj?PXpepYB#DkSYG=8~0XCr^s=hwMmYjaDJ7sKy!Gi^SnX}ljtcgy~R z+fdD;_Zg)$OJz09Hax$?b8ylz?D@0F8*2;}@b-s-R2eU{bd}#{I7aUt=29l+-W*{A z!18q$1SOBNxarTXl-*qMlrAZCo?v-$+Of|^Ow)M_CDFF781q>H!@q7-RwW0lE^(vZ zW41! z3EdicE*1&P>@f`5KCRv+!B(~@_s0puNlmmr07}HDAzB-Nd-EeLw!VT#PpjJ4Cp*|h zsaR8D1{G1QoYNk`Zcpxx|FqwW$$=z3@EijIjL*Ho?Kh+)6V`=gts(WFy=eDf>hQrt z)sK4E*Z%+$?8(=lldl*GaXzg;j`p#5xv7X3%FwEqI<0=NJ80bMH3shNsj|hI6Xf&{ zx|L-?Oz-)CwZT!I)m@jsKhKDX@6X9ayL3jo+(y)$45n5=N9KF^DsPaoi^e(4ck|$U z88ZntgpLG%gNh@47I*)Sg47P1)`0X4_>>ZY&!(#J7v)IBh=;`CsQkfsPfDRH+&5G7 zfiR?i_ms7=8}`m5Y*91##3Sfk%sU-%%ndxH4Kk%X&@ZN$1(yB8q_IX!Qe@pinPUiC z#P3!%p&7*osAKHBqxU7ErVctOLs@aSKYv!j39W2;^HGmJw@8SWeYtC5`GLRXdf)xz z!QSuL)+jAXqle3SC7iXgsV*?F7Eq<*u6C@vn=Bu(1joi`eR;8kTWMjo=$|!{lne1wa}8^GcXH{;kaP;w{DmA-vex-9$Rpw%Wtn<3Q%qg;O?fH zUj<*^F5hj(!m&j^ObEsZSCz_EiIP>SvQJMb8lQ#3=9Q5DR5i;xeUES1T!Q1W?*SHANS?gc=}D|9XL+jGHNsDdt#YTDtX4n<@Q)!@PAf`o@nTIf^R^mLYN5o z=nXnen1V!~I2}hZ{_4yuw2RhT`h$8aJ?zkf#QgONU%()diG-Xem*xi?D&^6em4J5y zN;=`}j+jnC2ZJUD3urbrc5BW4CyFgMr^O$oJ;_HT&ly{MZ`c9M{+Wi~^@NDyQGw%T zTYp4VTC4yL%b4s%^a$RY|(k)Y(32soLp+@&Tu#Tw5f5dEFaM?BLw3Gh5daD$Rt)+^r&;wQvl3#GHQ?<$b^d;+){;&1M z&hg0~V!6RMnRR2^r(i z4${FBJY?iI3gdE}dFuTvoVjn=AqwjO^^w@s9kKY~%hH?NBs znJvTM#SpSnp*tJH8=8DZ{9zf=qNa8oxzFR3rE*SGi((e%Vm7Q^LsWzFv{f1vGphZY z(Lsm)pDrN=^J}q#yTGB0xFQQgVFqucho6~|Q1F^)Gall8iXj|a{6VAeoa))@7wA$W zBuUhm8|X<%=;4@AYf+}6GKEPM+9hV56%msg$bROOQAl-zSk}dO&C|;ri5zK|j4Rgu zw^$M2E+;UZ(Y}g;_SlhizYWN>dZ^0I2+qDhT1JWhk-QC@t(v3(AT|)}e z-QC^YDJTNc-3%q2A}t{Jo?iF&eA{;Z066A|wbot>*B2qvEVL!1C?%3JAJ#ud&--n( z(F?r#RRdY*RW&x-i}c$%4Q3cHYa*?s7)&N33KbU*5q*_(_6ZtI!k)|46jf(E7XFv` zk@*tb4>^C9oS;k7_kaeglf_SZeJ`T)Y{0=hzkPIYNEHQM^xMyAc@r9=_^&1uYu=@o}^~ctcQ0d~VWhUGIl*mNO%M@xpKgcS-*U_Ga%7E%e{j2jG2*f#w^`y~X^8 zJ%t(3P&c6n5Wx%UpNtClxhq8=45G*W?Y4q+WD@^fXdRhWWy@d!4>o=P@8E_w2P$&8{K5dIt} zmiJVbk#xn*&}KVzkQ32itvIdck67NL7G^!3?oiJ+jsodbrLQh_YBUE!1x>9vLK;3g zZch%+b)=tlzveBNkDQE4WG;XIrzH8ui`qz`vUuBe3;{YAf)p(e3r8e{wqMp-rMZ^BaaFpn!E*pW{L*+I+`ZpH}O31DSM+NQ!`Y>uh&14+lgq6bcnr`CT3Dl zrVHTxpjb63I(xTR1Ulx7C{My{!q5 zFlhU^-qGWtl&eP5N({oUR7ixvK9l(R-DX7$&9oUv6xe*t<9K^GQCsWt z*zK~nPBLS4bn3AB@rcgR6rhIbn-BlITj5&wffoV%5sVu}Lsd9lu#Pm)f9;oIS~#s0 zyCNjQYN8LQGR9!*Wj5?w4`1$_nZL?>yovpbXiV@a26OY%n-LIxM)kMl^iJ1<_#@ZX zbK+%v&{#3u^bYU~P=Msy{n0rjp2_k=+TpG-RAJ_k{%DmfC{3^v74sI;hQPQY&skb8 z7jZly$YP#=K+|0@p7g^v2L9rs>=2#UELR(rIjtV_V`mQ5*q4lKkU|X z($Jg74xXia14JbQvbw#j-ymf91qlXnKD63DCP`!@pJV-}BbbY7q*?x++{dv|T~J*V z#y0K&{j13Tq~+rI_zlD51Exse439~4U_2q)(S_pYl|=f-g2+3McxS)^KVc8T>hdLM z>DpEh$LyP%A9`g>te}_=?vWn*-dr!4_{)IEuhkdZrZ$8o1|2-CKZN@N*m)p*7J~yg z+m$yP{?6!_o2?lg*vWHIQd`Dz4D<_HqJ1|aM;rz5S2012=CB^M%_s0M;mBcmH%jF}EvGu?UjRIN z2_+PQpqO4R9W+<8#I1QZV>b7o8@H42bDf$PK;;Cr#@Zvr^a$|mT_?fSj+(iiRq`M4A_kuHj*=k2qKeVbV_eN%+3WvCVn zSkm}|?dldc-D+PkLZX^m1R^Uog*5*pM}6G3vcc-D8xo&G9w?^>tT3lb?#lCa1s*iM?u8BS1t79T@W4Vz(oi zd?yg^)q8Na*mUt3`Mze)%#~)Mr3%_?1?6!X?4eKtZ;k-#*E->w;66zv_lmfitcQX8p%cR1FnR2_@S>-ROl z0sY%#m9!-O_o{D%l=3@orrkcO5yFvz1UW^yM2Gda;Y4_fLEQC;bc!J+dEmR#@sV#B zHSL~Qa?~L-ZKUbMxoQ!7E9-z!D~>|ymptT~rpMDi?v~e^>s0y`tC&�ppGh^qDCX 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
cEMIqfQ)okRRJ%K|6PD@TxP)&h1Z5pJ_BEG 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 z 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

!4U-piac*zlB3Tv0!E>AQZOxujlL znoAy32G`DdceWG7&MPa`dadMnr~wbU(6*aZ&#|=CrTY1^3zKPj^UhwmQrf(5HrFk9 zYcITb{kS{TztbQs1E7khp?dJa0Y2fTwD+G$VRL?6$)m?keyMu*FG%N2 zs;fF44lRoWs3cEyan1vN@NIs~ac^948}CtqVGxW*BYt3o2ZNR6g(n{Wz`yuf{K7ra zAu@!EGa3zMllSc7)mm7zEXQ^{%P!q>>MzP%; zPJ{5``DG=_*f$P`G%u>nYN=A%JLz=+^7LCG{XoM5z_z5Ko>a>O<-PLQW$>eWZ{6G7 z+SxxkR5gvS5X9=r;zEB~O#EbJxoN2R#f^Gl&3nh1F91>LsZ`yC#26n>2`S+!F z=El)+WVSRjvuZ~@T0+~DKd_-adFBuMG)t$NNDP?I#phJ2b482PN+D^uV0*UbaE<3E z4y$GF%Guh+X6@t8eBeVL|InF>>sPK^)>UP1|9EkAp;E1w_IG+ia9$1>y*ZsHt>!WAAv?q;zP1^Zc>EJI&F`UnLqf7#+;a)JZ>O(Zs%(OK}mxsaR zYtO%Ra6GZf)=&J%BY)%1e(X#Gn4@C%p1|#@k{| z{+AzJooceSuwXQrZym~hEV`!N3+#8ke*R6lFqU$?#$CYXA7C4fk|>w1C3&8Jh{L!e zJ}fh*n(>9u(RaCrZ*4QhnifC)Nx{@m^B_n!OwbE>J8s^*g)`(T(vyZgtDrg!<_ zbH|6ho#X!A-r>ettIa)w-sJ>}3gmdS;rzW{y?rv|bb@YgQ1)DC2Z8NB7*JpH&vy=u zI_}nL<;Fs@+-jB#DeoN|O-EB%*4fF*Sy$AiaPIH`h&C5HWN!>0A_650j6p*_WwVlN zl;eYb_W%BT^#A;wKkW13y?2!KJa6C1A&|~3cfyb_Lx&-ZVCMVnn)A%#i%&haDHrg6Yhoh~?tcnZ_^~H1{Pd?Ex(q+L zY8i@B@y5mvfVxP!T9H$ zi{kISADQ_YaN^4^J|#q;85-DSya|xF3x{D}H)EFT#ev14Lw< zAeW@FEni(xuPiIy?eoxzvRr#_4Zka2NE`$Qej|<{x|S+0Hp=JMYS%8V#ZfvQ`}gl3 zPiKLc=L~t3o2_Q2)2&q?Y+Up7JA`+z{qBz{*+u+c{LU-?&Hvc5_TF`4A%&3?+8p(7<{uo2xeh^ax&i8n?U=p z(nJa8vW)P;+3KA#R}t2~IRN)g1$-M`pc%N$i+D-?U11)He>ELGHUP_Y7g17Tov0+P z(Jt_{ks@8GG%1o0A1-bi{=uzqkty6pfn)bc5<8}_{k$@d@Xmk9p+`2Ggn&@1Jt zZfb`Iy>g`*<-z{m;q6;nFFf~J5Kh}IFG;3oo6XJkXP4 zVVdR~>s?`U*;!~+;1?-H9{SPF)^5KyyuE#YG#$NtYdhvvE=07L+@j7^iy{}=yFF5( z8zMxbKIaaet$gCL_UUW-AN>5#!}^arrhoQPeYO5wYgjIFwcvOsQ_T`N3u>OevC`;| zquyw?yVvjb$6ybpVX*UJp=>$&;i3c-S~%n+QcOXcrOh8gjjCmn&Kx^z&d8`%{s~9|#bjEZ^Nb zIM>82-+a`!{!4}`J-PuIJ{*marFTxhb8s3~7Z;v-;sc&-F*|wQC_6v>W1o!t>8L+A zKIzQ-88Qf?qj}{Rc~2ECM)bXl?I6kQN_7?%gHAWoinrdp`@+{=>2@crRu$a3*B>di zwRhZyPa>&B$yA1;3A`gW@15R14}=%&q^7v-y^-?Y{qwiD7zj{H*uki=~fT^geRQ`M|7Tx|fBxC;@cHGJ zVnIg!u%Hx)?04`qOVcW@xv|n-TPoKo_L=pzWtwYi&8I&6h@`4`6l~eA{Py!-{l<;u z^|cQ_by1bSOJ~d%Vax`n=WnES1=M z!+1RDkH)Yt1yzok zJD~jdJX_6QKE8EnNm{D1LWs!sRt&ycdht__7jm?#WZ!v%%P`Tn7l>GB3B{BPS>pl@ zx|Gqha%Dok1E1Jt9!|T{(MjshbWI&}$K%fKX%ZsLpUw}z|*sJNbow^KVa!A;NnzE~QB_xOY1}>F9A$(yR}h-T0HAdLkQlKp&$-ZZ?{- zr1*aN!mC?p62(!R%Tg-K>|Xm%6284X{^LV{n&IAyX=}CF+wDAY?c&G2|D(F8fS-@2 zerGT{?u?F)`nsXcW@%?I4ddke=Gvn1UTm`g#Sn;QOJ4i=Ta&-_|9y4)h&s4rtAF`Z zm4EPOtAF`p%Ab5(ePsPT1hr&qk1m6ry@#1!uy!k+X}fx*YOk!;&s|uq)E!lmN-jWE zTs>b^vhbugigGnWtLLHvmfLYAHF+>k;a!0MntQyKA=MnI@|`{nP7?W66UOiA?SChj z*{C9o;0`)^zTEcCZr0oFGSUra{_5&tsa(+=J(>lhQTTgb_{Nu>fAdSvz1BM!S;%9` zU9!GIVAj6%F|*{ae(sn555N8kDh#SvlD(%JvuFN-{^-AQHvX1sefucdJPZcI(O}5V zDllAOBn@3D*X*I6?H~L7S8@WD5!8;!W+#hJt ze}DVeJtz3gH7+b8PJb&PXPP4Y=%dAjcBV|8SMt&6g?AF*pCXJcm{QtpTJD02s)2LE zR)cM2sV--ZmYG_jgKB9S{IdIZ@0)H()77K9uZwg}12ZOqIF$Ex_x}Dr{9itJrug%p zG*;`Py$Y#p$v^WU{U@JLe*T~Q<8Qq965CNUrMT-op?9=r8p`HU{rjJ|^w`<8Ral-V z(4l#B^NTOMb@$F5xadKDU{y<{M#(hPsUJcY`Qd+x0WgI3e|-BBAG-F$2OjcVbAPLI zaCc|W?^eCq>f-X@QMWgV$9@uLNx9J|WM%vA;r_{BuRF=(>51?3+((6Yelze;{Hl5( zOZ$i2*KYSdaK2V88M-PrJoVwF;`^>uJ?Gos2EBhWd-hHOn?oBbQuwLX^H<7)9P~FU zyt3!ocC~7kJiEPAsg=ASjPKs-oISG|M1dmQH_&qYQ>5Y~scseL-?I_}R7RfG_1R~h zXgh{-d0BlYuJC;m==+7V`G-~PY;tDm>TW*nie_8z`e|GR&u^4U+TZeuR2-!VM*wXc8fcfSzDkUuUaM;s_w zt!gJx>XvGT?Zzp1x_0B{$=2QwTD;vT>y~ZV&Mb_syWjGb=caKU28lmSfJ2Dr^qK038Q|($!Rh zElfeYQZ+Y+gMO)6QDm+|tfZ+Q1}hJL>>WM(^%q{ear4$3r8oyYaqr%}H{N*TM?dw* zPdrunzN-ez_5bQa0Lef$zshQ9`p^F9Kl$hX;$QJ0!bh9mUaMAr>L-7EevEMUjh6;T z+jhNToBCp-TrHP1MGa@6W*Ys`^mv+78r9r%I^(HVZPY8(*WSJphH@0A+JD?D%zw=A z{$u;czV9(bRZ0~Ur?PTpWqEUb^X#fpWZ*rsAl~gvuHQJ=-tDF^KUp>y`{N*=`q?bZ zrnM(>_1&X8^D3pN$~s5Xj=SUEfAIh|vsp1MjS9S0Ex+45&cmI<$?v`e;seK+6Gc2_ z`qwXft!(oZd8f9^RK;m{6GEDt$tb(Q*KUuby%Ix6uV z7nOYful&j{|6l(3&#PG$C{pzJRsApinZ>{U7mS6Li2H|yzxVh5|J3~nv~1~h9)_KH zKBwlYTX(+q%|p-K=mtQ51PGF%NSd;S$cmN{ON!#yT8Wj&UiON$Y}qS`6)h!nVp(!5 z$xEYUNfakh1VDh88t6vP-ESW6d~e;FhcnOl_J1EhkdiDVeyz1|UcI_ir~dPg``i25 z|M=H?y&)YB2-rwa5it7DlV$AY({VT)E{a0Qb0vrhK@cmt1gi^()>^eHFTO1W@!1@) zAGpqdwBz;NH2m?cr60SXEjh%`&$r80w#(oDQgLN<@#Xtp+w%WTTRr0=-;aTPC~1=3 z(P%m2*eEG^O$2c24#C$vRe9Evik1PNDU%qQrzmMJMAWe;%!WN@?W*BC83}v)op(CL0KC0S{y}Lni-BGtEwuiSs@d-t|MYikJ+EPo@)WLN6aDVXlaBwno7hZfinhnR(rS8(* zM~6dNR9Glw7+0^Q`fpDmV%PW44RWq=qUw46yLbDq-xwVA-K~{cxB0s#NQZIyU;M+z z$1dptW+eGf+Bbgh<_M6aQ)2TB&6OvKB=WG{jzeb~wHmcPu*Iw}&xTqwm7JP3@h zkktC}g)=#sO=quv`#Wb6bCv)_#KS8N?>~I_-uoZC^Uiy>@7$fu=Rmb2(tKAI>a0ZN zPyED>zxs(MGo#0+hxgw63Z#ZB%6@OSzOkw~7N;xVnI+^b%I@qO-Z`4=?vL&~*eew& zN{XtceCEY#!{H>P?XW-g>*?=d{P%w0&xo=pX(luo^%o`SWIFxQZ@zKs;YpchQj(3m z1S+k_QjnPOXy%5QB=Z$hk6WKiU;DqJYMw;&{fkDqU@d9a)H06>f53$k+QyL2FR$7^ z^~%aCSK7-BLln5)IQ*Mm-T%@N{_<;`fxGbCxd**F=#S$lF$@VZ zP;E8la~EQJd@%gRn~!FBbl3}CxxBo!((t0F)oH1!a(7z&>+!$yWDyIR7;>FO94tgI z;QaoRX>7kOkw0)jteD_%T8+1sIN5@Fg6Srfmj#<2{zpH1DSGj_^HmTARZFtOFfC0p zVKC1+e<4@n(eR&q>Dv!ZCP$-%DD$>q*n;%j_4Cg?yWQ-rKl`J9Ow)gR_zL;>^Rx0V zPO?Ax>tFs)|JvWobg}&Lm)HNyA6Gk1CZ+vLuOvzS_@DaU-?{w&HIt?BeBniD44I}` z8K#tkX%x})YrqB+l#V}=NFi4ssFvd{|~f-@{Zzft`VanJ|M)DDkM(-`*#4{k#h+9ydpMeZ?aSYJ`Q>xH z{a$Bv^@H1cJI4ceJQZk}LH=McrE_y=UrIXo4*wWW75Gp5pQZD^?a%!7#X3;V;7tgJ zg@_hq8gN-mhwrlCD?DC;^cqdUXmUUi9V;PzT7Bz(v+>=n6$gR~vn_Js?xRD`kK72F zGh1Kl-o3ql{!)AI@$j2>MsAwy^@czB!g-jZx#wTKx>a*XL;cd?^KXk^IP0tBG-FoCIA1PAj!hWR@$hLIi}QTd5GS4}5R(*!QW(lh5@`{&8k_pa}O`nNBF_P_W#+JF4^ul-HAj9}j3 zTyjaC@wp5MO_Fy%eE6wXu1TugpNwIl-+tV$7DnI?{YtV!L+28&4lZZaf z>*;gypZ@Gizxa>7{9E66YcL#-PLJ(+7nB|Es0ff8=^o zRkU93w7b%>Y)dsQC@(?NXnqw>XF-NhwzjoY1YsDLejK61ev+kW)-bKLwKi1D&G&Cu zwWVf<%n@aY=g!693%%p+AOAO6|BK&aZm-d;f8}duclW>iOTR#i%;-!~sM<14QrJev z)StV&V&Hqp(I$9hp~~<+0m&@QxrrA9c?z8i{+h)_&5%2OS*+Qf{@dj12VwJlc$0<1 z^KsVUi~s7`%!ajla{Ufq&pqYw$puTV(`@{l7WY7j5Q{5PO)3|Y5uAp*5B4m9U(EbF z50Ah5_QT7Umvv2t0gzOKqa%b0*zto0Hxu4!EU-+)BM>>(yH2OK(4X z64%FhJ$-Cn-Dto4-J3xiU*51CLw)J8*WxklsPp4j16p8>MmWOc$kM2nyBz22W z$Jdg|y}A~U&F5n7pPe!dKvAy-JwScn^dgW0HUuH|l2uNGxdw`a3P1giy8pwqRk%$O zol1>|1u={ho);?>quHrKP~$N6{g5`)@;1K+CW2N@+r0*w%q9|9^meyC6;Niac&36xW zZ(o1q)4K75nS&oTUbw8Sb_C^jPPF`&U7qLt`Txsb`0m^9lPx~$>Jx=D2CtWzj=HvF z)hx-j4b_lpwiyTUg6(_?B1Ma9O4`Gm`l!pSRWXey-8yx5TUw$2?mYY;u)(3YB$LzZ zFFzwZ=X`&`BMb07T@a_jz5V5)SOy=a?lX=i|D*mTA=MRfur+_r6$QqxJa{n_h9(zU;E(E-n60{-G*uFYNKYh>XoGiG=Nd7n!ob;-6zp~ zoY&LG_NBG@{@xMH&nwSvPZv>t=xRa=D0p#xGWASFmL(1<8wMQY>d7o*f;MOJ+@JdV z<)8aZw`sR&IXg701PjDAXLMu!#386(;rX&_Byw>n7ROAMj}g- z95lR&L%qa!hG^rKUsa@N`mCyWPl=1XN{oNbKv!SLGdjoGek1UbP~$~?sz&_g2d*>JqKG5`arQH{^3R@&K-|9f z%Wnfah{U^lt4Y4Ct15-Ze?CVWQs6Qzk_=1%KJ#+7YnbFitgbIvHVmi`#Hp8*HAnY? z?A~tgtFM3i?#anse=wvuyu01Ctyb%I>|iDB7kRVt=t7#ea5dHdyW-FXt@$9X+{Z2y}- z_1gWL4|pyG_qGjfeWiK+;_}Q(4*Fi26^)7p0TxSPwD4(XFiyyrvnQ9um74a4f9}QA z?X@*)(GEYjzo-Yo?_R`17o?B9*u`K51wk+)TZ-3`aPsQOU%06E9_;i^dJ`!9(D%)1 zwUh!ZU^l-25PW!iR+*n@U>U4kC z5W~OHb^qa`|KLCVbFaVgc1|blGUtf?kri5BY5er(t~9jt0_d&B_FM>Su=unu` zg+~L_q)mV{dPq}6_%R)huS>%FV=tUX<)aDLG5N-mnML2jE<-kKeww%V;y*o~ZsT>I)7dCsnQGXI3b@;##DwwM4%hf;r zGcPumYMiR8rrA`2jrhHJs(M^4EorRsN$kJldIEB0!0BZR-n04Z|H-v)6sM1tTaB&r zE6F_4W%=66S7b>{;-p%uE(Y#L@7{gp`qt|9QoU2pv!vOs3T3gsbA0(?x7E-mBQKAW zFo>%)_;I|V35r5vmZ~J5@5tBmhl^BQa22-E5|M}>$i_eOV%gR?_bUJ4pKATel{N=Q zT9RZE?<^sBXL+sB0GGBZ=E7Ydhl}YV3_`nJg;Vq4`!^rn+qdnFDg-C~ZHX@8^Gl^7TN`^T0bq&2NnB~}x36;L5*26+E`z4*7+Qt51_8bdYy$BEDz8aH>gWn)Ew zXOApF>lC08LLmux6lQV6i=w6}3STNBugIn4*dTzWZGk_aZh<=Rh!bD>m0$cPoXWXj z=z0M)o+Jxm;Rn;#zww*%*=%iX%e3r&mAb+e1pe(CAN;NV<}Y&dljT-bk%Zpq5P531 z8eR~ruCIh?oFv)7(Lkbed8rW(4o`z5SCk@5(v#DZ<#yA6LAOjc%x&t+tpglUTW68 z`TXLQZCU1IMbs6QqpdUKOIJ5EAYNAEIOGb>TZF@r*J)RwTvf;@U!D%8jk=>qVw%9T zYL;a-0ji3v=<;eye^z_g<#x-&^>ZzzMO6R%Y#~>ba(IRR@C(K_f3kIZwQ0j5)0qd< z9YmAOVUQGs)^Do1E~}#F#qioxL(X_!HfXncRZ^#?J;+B~q;=cWRJCf`^?EJzlRW2F zmTGW`k52n$)#A$R@Zkr0_ii5?om8q-%dUKXVD@)iz~RyH$v^qxm;UR&^56Z9zx8() zen`Nkv$p7PRg|61j1Z~kG4OoXTL37>$J6ONNRoW+hVXnKnnO2$0>C4TPD6>6iX>GO z+7dm@i$0MIl#+PM<|xS?jdMTYRH>u`%*beSS!Nf-FI>)-we$?txZFTEIJF-hbb8|r z+pH6?A)Ro`&pKmx+LSzx{nVdU>$YyHc|o&la_aNTG}A;GP&9JmHT_@^RaUnBBzye$ zG1W7aLdnT8?ZH;$oS{kw_wPKs^+B*$pmFVL4FY(Uhky2(O~>!O{hfdED}Voszw-B5 zCU^b928^?A>MLt)r)m%SvrErh3DYPHv-=PBZag@EYP`JF$+E0nvno|REQ`JVcw?o# z33l#4(V8hph(${e|!#5jtv8} zm`u$^B?~jl(TU^nV(5h@hyBi4hlgV4#qnsKWSQrJ!Nrq_3p*g@+0uHa*{A^dDOfau z(INHu-tqjwiT}{EZiUyP+Ot!>Lp^P9_luxb4wm_YOVa%feX`{6jxH*IDV@~}Jw^u{ zkfU0Z05&}FqvL)l$lcA>+>hS++MDOryFrxJJJq?D#-Tqx>fJv%NQL6s#g#mPzZYLS ze|4$Tk|Z*C^LhMtfBnnro6BL~UtDRg`|PWqdFJ`&*VeZIbr`283TKni zaqsw_{Ki**^S9m@PUz5Cnqfz?PykWD2%;~+iH4ZNnx$DPmc`0Svxw69)UR1~yP}R} zi>ju%QS#t)3@t#*Gsy7KJU&yEw&8%0dzIavEEaT93Z2Jvt!5m#LCQ(BhPM6c%0n$5 zIjW}%f9`_t?``;L$}N0pFi}oMb{JPp-O*JI*#LDQi%kZYlo4Ba#~CsoPe=3V*ltxd z+sTVu)J2(Brh`en-IQfLNus1IrsL=|(CcfZ;PJJGbsU-dz93MTtzkB1|okw>M77Nv+e*dke zz0tIVoR9tN&A0A7|Jj!XS!{P&$Ai(M-J^#OcA?T%n${ou!u24?vZ8$F_Wj30w^p%# z{N-oXms&E^dI{DeFFgPM^jE%k29}TYdivOYafJsV-#eP_?DU^K-}>~6Tah1GmS$V_ z{?71V6n*!j)8o^@mF>zWuD4!({#t+HzWe^peC9fqzI|zJeCn=jE%j$pE$6o`Z-F{C zT8&cVRbD+EoWkD4X~BRuGIZnp8+Rt2S2whppPODvuT^9@= zC^BqKm8DsKRBKj;Cxhl{7lIAxoR8+GL+{#iTUnaVCUdw&dwV@qRaVwJC�cqn=|K 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

P=_285=oRK*9m!5fh57BiUNOotH05;bX5kw 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 z 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 [!NOTE] +> Nothing is exchanged between the device's clipboard and your computer's. Ctrl+C copies on the device, and Ctrl+V pastes what was copied there. + +## Change the size, quality and frame rate + +Streaming a display uses both the device's CPU, to compress each frame, and the connection to your computer, to carry it. To trade quality for either, go to **Edit** > **Preferences** > **Analysis** > **Android Logcat Settings** (Windows) or **Unity** > **Settings** > **Analysis** > **Android Logcat Settings** (macOS) and use the [Live Stream](android-logcat-settings.md#live-stream) settings. + +The settings apply when a stream starts. To apply them to a stream that is already running, right-click the **Live** row and select **Reconnect**. + +> [!NOTE] +> If you connected the device with `adb connect` rather than by USB, the stream shares the device's Wi-Fi connection with everything else adb does, including the message log. Lower **Max Size** and **Max Frame Rate**, or connect the device by USB, if the connection struggles. + +## Additional resources + +* [Device Screen Capture window reference](screen-capture-window-reference.md) +* [Capture a screenshot](screen-capture-screenshot.md) +* [Capture a video](screen-capture-video.md) +* [Connect to a device](connect-to-a-device.md) diff --git a/com.unity.mobile.android-logcat/Documentation~/screen-capture-screenshot.md b/com.unity.mobile.android-logcat/Documentation~/screen-capture-screenshot.md index 79ef3de8..09a0cc53 100644 --- a/com.unity.mobile.android-logcat/Documentation~/screen-capture-screenshot.md +++ b/com.unity.mobile.android-logcat/Documentation~/screen-capture-screenshot.md @@ -5,10 +5,17 @@ This page explains how to use the [Screen Capture tool](screen-capture.md) to ca 1. Open the [Device Screen Capture window](screen-capture-window-reference.md). 2. In the [Toolbar](screen-capture-window-reference.md#toolbar), use **Device Selector** to specify to device to take a screenshot of. 3. Set **Screen Capture Mode** to **Screenshot**. -4. Select **Capture**. The Screen Capture tool takes a screenshot of the connected device and displays it in the [Capture preview](screen-capture-window-reference.md#capture-preview). -5. Select **Save As** and use the file explorer to save the image file to your computer. +4. Select **Capture**, or press Ctrl+Shift+S (Cmd+Shift+S on macOS). The Screen Capture tool takes a screenshot of the connected device, displays it in the [Capture preview](screen-capture-window-reference.md#capture-preview), and adds it to the [Capture list](screen-capture-window-reference.md#capture-list). +5. Select **Save As** and use the file explorer to save a copy of the image file elsewhere on your computer. + +Every screenshot you capture is kept, so you do not have to save one before taking the next. Screenshots are stored in your project, in `Library/AndroidLogcat/Screenshots`, and named `_.png`. That folder is local to your machine and is not part of your build, so use **Save As** to keep a screenshot somewhere permanent. + +Each screenshot is saved with a `.json` file of the same name beside it, recording the device it came from - its name, id, Android version, API level, ABI and display size - and when it was captured. The [Screenshot details](screen-capture-window-reference.md#screenshot-details) beside the image read it, and it is renamed, deleted and saved along with the image, so a copy you keep elsewhere still knows where it came from. A screenshot without one still opens; its device details read `Undefined`. + +To rename or delete a screenshot, or to show it in Explorer or Finder, use the [Capture list](screen-capture-window-reference.md#capture-list). To look at part of a screenshot more closely, [zoom into it](screen-capture-window-reference.md#zoom-into-the-image). ## Additional resources * [Device Screen Capture window reference](screen-capture-window-reference.md) -* [Capture a video](screen-capture-video.md) \ No newline at end of file +* [Capture a video](screen-capture-video.md) +* [View the device screen live](screen-capture-live-stream.md) \ No newline at end of file diff --git a/com.unity.mobile.android-logcat/Documentation~/screen-capture-window-reference.md b/com.unity.mobile.android-logcat/Documentation~/screen-capture-window-reference.md index a5bcd513..5ff54215 100644 --- a/com.unity.mobile.android-logcat/Documentation~/screen-capture-window-reference.md +++ b/com.unity.mobile.android-logcat/Documentation~/screen-capture-window-reference.md @@ -2,19 +2,23 @@ This page introduces the Device Screen Capture window's interface. -To open the Device Screen Capture window: +To open the Device Screen Capture window, from the main menu in Unity select **Window** > **Analysis** > **Android Screen Capture**. + +You can also open it from the Android Logcat window: 1. Open the [Android Logcat window](android-logcat-window.md). 2. From the [toolbar](android-logcat-window-reference.md#toolbar), select **Tools** > **Screen Capture**. -![](images/capture_video.png) -> The Device Screen Capture window. +The window is split into two: a list of captures on the left, and whatever the list has selected on the right. -| **Label** | **Description** | -| ----------------------- | ------------------------------------------------------------ | -| ![Label A](images/label-a.png) | [Toolbar](#toolbar): Contains options for the Device Screen Capture window. | -| ![Label B](images/label-b.png) | [Recorder settings](#recorder-settings): Contains settings for video recording. | -| ![Label C](images/label-c.png) | [Capture preview](#capture-preview): A preview of the screenshot or video captured from the device. | +| **Area** | **Description** | +| --------------------------------------- | ------------------------------------------------------------ | +| [Toolbar](#toolbar) | Contains options for the Device Screen Capture window. | +| [Capture list](#capture-list) | The live view and every screenshot you have taken. Drag the divider to resize it. | +| [Recorder settings](#recorder-settings) | Contains settings for video recording. | +| [Capture preview](#capture-preview) | The screenshot, video or live view that the list has selected. | +| [Screenshot details](#screenshot-details) | Information about the selected screenshot. | +| [Live view details](#live-view-details) | Information about the live stream, and the device navigation buttons. | ## Toolbar @@ -27,10 +31,33 @@ The toolbar contains options to control the Screen Capture tool. | ----------------------- | ------------------------------------------------------------ | | **Device Selector** | Specifies the Android device to capture the screen of. | | **Screen Capture Mode** | Specifies the screen capture mode to use. The options are:
• **Screenshot**: Switches the Screen Capture tool to screenshot mode. When you click **Capture**, the Screen Capture tool takes a screenshot and displays it in the [Capture preview](#capture-preview).
• **Video**: Switches the Screen Capture tool to video mode. When you click **Capture**, the Screen Capture tool begins capturing a video of the selected device. When you click **Stop**, the Screen capture tool finishes capturing the video and displays it in the [Capture preview](#capture-preview). | -| **Capture** | If **Screen Capture Mode** is **Screenshot**, this captures a screenshot from the Android device. If **Screen Capture Mode** is **Video**, this begins video recording. | +| **Capture** | If **Screen Capture Mode** is **Screenshot**, this captures a screenshot from the Android device. If **Screen Capture Mode** is **Video**, this begins video recording.
Ctrl+Shift+S (Cmd+Shift+S on macOS) captures a screenshot while this window has focus. | | **Stop** | Stops video recording.
This option only appears while the Screen Capture tool is recording a video. | | **Open** | Opens the screen capture using the application associate with the file extension. The file extension is `.png` for screenshots and `.mp4` for videos. | -| **Save As** | Saves the screen capture as a file on your computer. | +| **Save As** | Saves the screen capture as a file on your computer. A screenshot's details file is saved next to the copy. | + +## Capture list + +The list on the left of the window holds the live view and every screenshot you have taken, from every device. Select a row to show it in the [Capture preview](#capture-preview), or use the Up and Down arrow keys to move through the list. Drag the divider between the list and the preview to resize the list. + +| **Row** | **Description** | +| ------------------ | ------------------------------------------------------------ | +| **Live** | The first row. Select it to view the selected device's screen live. Refer to [View the device screen live](screen-capture-live-stream.md). | +| A screenshot | Named after its file, without the `.png` extension. Screenshots are saved automatically when you capture them, so every capture stays until you delete it. | + +Screenshots are stored in your project, in `Library/AndroidLogcat/Screenshots`, and are named `_.png`. They are not part of your build, and deleting the `Library` folder deletes them with it. + +To work with a screenshot in the list: + +| **Action** | **Result** | +| ------------------------------------ | ------------------------------------------------------- | +| Double-click a row | Opens the image in the application associated with `.png`. | +| Click the **×** at the end of a row | Deletes the screenshot from disk, after asking you to confirm. The Delete key (Cmd+Backspace on macOS) does the same to the selected row. | +| Right-click a row | Opens a menu with **Show In Explorer** (**Show In Finder** on macOS), **Open**, **Save As** and **Rename**. | +| Press F2 (Enter on macOS) | Renames the selected screenshot. Enter confirms the new name and Escape cancels. | + +> [!NOTE] +> Renaming a screenshot to something other than `_` keeps it in the list, but it no longer counts towards that device's numbering. ## Recorder settings @@ -48,9 +75,62 @@ Contains settings for video recording. The Screen Capture tool contains default ## Capture preview -After you capture a screenshot or video, this section of the window displays the screenshot or video captured from the device. You can use this to check the quality of the screen capture before you save it as a file on your computer. +This section of the window displays whatever the [Capture list](#capture-list) has selected: a screenshot, a recorded video, or the live view of the device's screen. You can use this to check the quality of the screen capture before you save it as a file on your computer. + +### Zoom into the image + +A screenshot and the live view are both fitted to the window, which can be too small to read a log line or see a single pixel. To look closer: + +| **Action** | **Result** | +| ------------------------------------------------------ | ------------------------------------------------------------ | +| Ctrl+Wheel (Cmd+Wheel on macOS) over the image | Zooms between 100% and 4000%, around the pointer, so whatever you point at stays where it is. The current zoom appears in the corner of the image while it is above 100%. | +| Ctrl+Middle mouse button drag (Cmd on macOS) | Moves the zoomed image, to bring another part of it into view. | +| The scrollbars | The same, and they appear as soon as the image is larger than the space for it. | + +Zooming and moving the image only change how you see it. In the live view, the device still receives your clicks, drags and keys at the place on its screen you are pointing at, and the wheel on its own still scrolls the device rather than the view. + +The zoom of the live view and the zoom of the screenshots are separate, and both go back to 100% when scripts recompile. + +## Screenshot details + +This section appears to the right of the image while a screenshot is selected. + +| **Property** | **Description** | +| ------------------ | ------------------------------------------------------------ | +| **Device** | The device the screenshot was captured from. Hover over it for the device id. | +| **OS** | The Android version and API level the device was running. | +| **Display size** | The device's display resolution when the screenshot was taken. This differs from **Image size** if the display was rotated or its size overridden. | +| **Image size** | The size of the image in pixels. | +| **File size** | The size of the `.png` file on disk. | +| **Captured** | When the file was last written. Hover over it for the full date and time. | + +**Device**, **OS** and **Display size** come from the details file saved next to the screenshot, so they read `Undefined` for a screenshot captured before this package wrote one, or for an image added to the folder by hand. + +## Live view details + +This section appears to the right of the image while the **Live** row is selected. + +| **Property** | **Description** | +| --------------- | ------------------------------------------------------------ | +| **Display size** | The resolution of the display being mirrored. Compare it with **Stream size** to see how much the stream is scaling down. It follows the device, so it changes when the device is rotated or a foldable is opened. | +| **Stream size** | The size of the streamed image. This is the device display scaled down to fit the **Max Size** setting, not the device's own resolution. | +| **Frame rate** | How many frames per second are arriving. The device only sends a frame when its screen changes, so a device showing a still screen sends almost none. | +| **Bandwidth** | How much data per second is arriving from the device. | +| **Input** | Whether the device accepts the touch, scroll and key events this window sends it. Devices that refuse input injection still stream. | + +Below the properties are the device navigation buttons, which work while the live view is streaming and the device accepts input: + +| **Button** | **Description** | +| ---------- | ------------------------------------------------------------ | +| **◄** | Sends the Back key. The Escape key does the same once you click the image. | +| **●** | Sends the Home key. | +| **■** | Sends the Overview (recent apps) key. | + +For how to interact with the device and how to change the size, quality and frame rate of the stream, refer to [View the device screen live](screen-capture-live-stream.md). ## Additional resources * [Capture a screenshot](screen-capture-screenshot.md) -* [Capture a video](screen-capture-video.md) \ No newline at end of file +* [Capture a video](screen-capture-video.md) +* [View the device screen live](screen-capture-live-stream.md) +* [Android Logcat Settings](android-logcat-settings.md#live-stream) diff --git a/com.unity.mobile.android-logcat/Documentation~/screen-capture.md b/com.unity.mobile.android-logcat/Documentation~/screen-capture.md index e97ca8a4..029d15df 100644 --- a/com.unity.mobile.android-logcat/Documentation~/screen-capture.md +++ b/com.unity.mobile.android-logcat/Documentation~/screen-capture.md @@ -1,9 +1,10 @@ # Screen Capture tool -The Screen Capture tool can capture a screenshot of the [selected device](connect-to-a-device.md) and save the screenshot as a file. +The Screen Capture tool can capture a screenshot or a video of the [selected device](connect-to-a-device.md) and save it as a file. It can also view the device's screen live and send touch, scroll and key input back to the device. | **Topic** | **Description** | | ------------------------------------------------------------ | ------------------------------------------------------------ | | [Device Screen Capture window reference](screen-capture-window-reference.md) | Understand the Screen Capture window interface. | | [Capture a screenshot](screen-capture-screenshot.md) | Capture a screenshot of the connected Android device and save it as a file on your computer. | -| [Capture a video](screen-capture-video.md) | Capture a video of the connected Android device's screen and save it as a file on your computer. | \ No newline at end of file +| [Capture a video](screen-capture-video.md) | Capture a video of the connected Android device's screen and save it as a file on your computer. | +| [View the device screen live](screen-capture-live-stream.md) | View the connected Android device's screen as it changes, and control the device from the Unity Editor. | \ No newline at end of file diff --git a/com.unity.mobile.android-logcat/Documentation~/tools.md b/com.unity.mobile.android-logcat/Documentation~/tools.md index ada6cfda..95f476a5 100644 --- a/com.unity.mobile.android-logcat/Documentation~/tools.md +++ b/com.unity.mobile.android-logcat/Documentation~/tools.md @@ -4,7 +4,7 @@ The Android Logcat Package contains additional tools to help you debug your appl | **Topic** | **Description** | | ------------------------------------------- | ------------------------------------------------------------ | -| [Screen capture tool](screen-capture.md) | Capture screenshots and videos of applications running on a connected Android device. | +| [Screen capture tool](screen-capture.md) | Capture screenshots and videos of applications running on a connected Android device, or view the device's screen live. | | [Stacktrace utility](stacktrace-utility.md) | Resolves stacktraces and displays custom logs. | | [Memory window](memory-window.md) | Displays the memory allocated for your application. | | [Inputs window](inputs-window.md) | Displays input injection window for your application. | \ No newline at end of file From 5db42b1317744ea80abff3d96ae16c70d057cd50 Mon Sep 17 00:00:00 2001 From: Tomas Date: Wed, 23 Sep 2026 16:06:37 +0300 Subject: [PATCH 06/19] fix preview going out of bounds --- .../Editor/AndroidLogcatScreenshotList.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs index 016245e8..b3f330f7 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs @@ -61,6 +61,7 @@ internal static GUIStyle SelectedRow const float kMinWidth = 150; const float kMaxWidth = 400; const float kSplitterWidth = 5; + const float kMinPreviewWidth = 100; const float kScrollbarWidth = 16; const float kDeleteButtonWidth = 18; const float kDeleteButtonMargin = 2; @@ -290,7 +291,8 @@ internal void OnDeviceChanged(IAndroidLogcatDevice device) internal Rect DoGUI(Rect rc, IAndroidLogcatDevice device) { var settings = m_Runtime.UserSettings.CaptureSettings; - var width = settings.ScreenshotListWidth; + var width = Mathf.Min(settings.ScreenshotListWidth, + Mathf.Max(0, rc.width - kSplitterWidth - kMinPreviewWidth)); var listRect = new Rect(rc.x, rc.y, width, rc.height); var splitterRect = new Rect(listRect.xMax, rc.y, kSplitterWidth, rc.height); From f87a4dddef8ba8e0ec212af64eea8a0028106509 Mon Sep 17 00:00:00 2001 From: Tomas Date: Wed, 23 Sep 2026 16:08:31 +0300 Subject: [PATCH 07/19] handle virtualDisplay being null --- .../java/com/unity/android/logcat/server/ScreenStreamer.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/ScreenStreamer.java b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/ScreenStreamer.java index a51617e5..b287eba4 100644 --- a/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/ScreenStreamer.java +++ b/External/UnityLogcatServer/src/main/java/com/unity/android/logcat/server/ScreenStreamer.java @@ -164,6 +164,10 @@ private void startSession(DisplayInfo info) throws IOException { try { virtualDisplay = displayManager .createVirtualDisplay(VIRTUAL_DISPLAY_NAME, width, height, info.getDisplayId(), surface); + if (virtualDisplay == null) { + // Refused rather than thrown, on some devices. + throw new IllegalStateException("createVirtualDisplay returned null"); + } Logger.d("Mirroring " + info.getSize() + " to " + videoSize + " via DisplayManagerGlobal"); } catch (Exception displayManagerFailure) { // Expected on some devices and Android versions - the fallback is From 7123543ca7bd66dc299bf33f714f156026e18199 Mon Sep 17 00:00:00 2001 From: Tomas Date: Wed, 23 Sep 2026 16:12:23 +0300 Subject: [PATCH 08/19] Fix save as for screenshot --- .../Editor/AndroidLogcatCaptureScreenshot.cs | 9 ++++ .../Editor/AndroidLogcatScreenshotInfo.cs | 22 ++++++-- .../Tests/Editor/AndroidLogcatGeneralTests.cs | 53 +++++++++++++++++++ 3 files changed, 81 insertions(+), 3 deletions(-) diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatCaptureScreenshot.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatCaptureScreenshot.cs index 966414b4..61478204 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatCaptureScreenshot.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatCaptureScreenshot.cs @@ -254,6 +254,15 @@ public bool RenameScreenshot(string path, string newName) return false; } + // Checked before the image moves, so the two cannot end up apart. + if (!AndroidLogcatScreenshotInfo.CanWriteBeside(target)) + { + UnityEngine.Debug.LogError( + $"'{Path.GetFileName(AndroidLogcatScreenshotInfo.PathFor(target))}' already exists " + + "and was not written by Android Logcat."); + return false; + } + try { File.Move(path, target); diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotInfo.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotInfo.cs index 0c2df34c..fa334046 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotInfo.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotInfo.cs @@ -79,20 +79,36 @@ static bool IsDetails(AndroidLogcatScreenshotInfo info) return info != null && info.version > 0 && !string.IsNullOrEmpty(info.capturedAt); } - static bool MayReplace(string path, string what) + static bool IsFree(string path) { if (!File.Exists(path)) return true; try { - if (IsDetails(JsonUtility.FromJson(File.ReadAllText(path)))) - return true; + return IsDetails(JsonUtility.FromJson(File.ReadAllText(path))); } catch (Exception) { // Not readable as ours, so certainly not ours. + return false; } + } + + ///

+ /// Whether details could be written beside , for a + /// caller that has to know before it moves the image there. + /// + internal static bool CanWriteBeside(string imagePath) + { + var path = PathFor(imagePath); + return path == null || IsFree(path); + } + + static bool MayReplace(string path, string what) + { + if (IsFree(path)) + return true; UnityEngine.Debug.LogWarning($"Not {what} '{path}': it was not written by Android Logcat."); return false; diff --git a/com.unity.mobile.android-logcat/Tests/Editor/AndroidLogcatGeneralTests.cs b/com.unity.mobile.android-logcat/Tests/Editor/AndroidLogcatGeneralTests.cs index de63fba3..8eddc458 100644 --- a/com.unity.mobile.android-logcat/Tests/Editor/AndroidLogcatGeneralTests.cs +++ b/com.unity.mobile.android-logcat/Tests/Editor/AndroidLogcatGeneralTests.cs @@ -80,6 +80,59 @@ public void InvalidateScreenshotsPicksUpExternalChanges() } } + /// + /// A rename moves the details with the image. When something else already holds + /// the name the details would take, the rename is refused rather than leaving the + /// image under one name and its details under another. + /// + [Test] + public void RenameIsRefusedWhenTheDetailsNameIsTaken() + { + var runtime = new AndroidLogcatTestRuntime(); + runtime.Initialize(); + try + { + var captureScreenshot = new AndroidLogcatCaptureScreenshot(runtime); + + var directory = AndroidLogcatUtilities.GetScreenshotsDirectory(); + System.IO.Directory.CreateDirectory(directory); + + var image = System.IO.Path.Combine(directory, "unittest-rename_1.png").Replace("\\", "/"); + var taken = System.IO.Path.Combine(directory, "unittest-rename-taken.json").Replace("\\", "/"); + var renamed = System.IO.Path.Combine(directory, "unittest-rename-free.png").Replace("\\", "/"); + const string keep = "{\"keep\":\"me\"}"; + + System.IO.File.WriteAllBytes(image, new byte[] { 1, 2, 3 }); + System.IO.File.WriteAllText(taken, keep); + + try + { + LogAssert.Expect(LogType.Error, new Regex("was not written by Android Logcat")); + Assert.IsFalse(captureScreenshot.RenameScreenshot(image, "unittest-rename-taken"), + "The rename should be refused"); + FileAssert.Exists(image); + Assert.AreEqual(keep, System.IO.File.ReadAllText(taken), + "A refused rename should leave the other file alone"); + + Assert.IsTrue(captureScreenshot.RenameScreenshot(image, "unittest-rename-free"), + "A name nothing else holds should rename"); + FileAssert.Exists(renamed); + } + finally + { + foreach (var path in new[] { image, taken, renamed }) + { + if (System.IO.File.Exists(path)) + System.IO.File.Delete(path); + } + } + } + finally + { + runtime.Shutdown(); + } + } + [Test] public void SettingsRangeTests() { From 076c7de08c1bf37a4b766c16dd4ab928772f7878 Mon Sep 17 00:00:00 2001 From: Tomas Date: Wed, 23 Sep 2026 16:12:30 +0300 Subject: [PATCH 09/19] shorten changelog --- com.unity.mobile.android-logcat/CHANGELOG.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/com.unity.mobile.android-logcat/CHANGELOG.md b/com.unity.mobile.android-logcat/CHANGELOG.md index 9afc0b9e..89fec163 100644 --- a/com.unity.mobile.android-logcat/CHANGELOG.md +++ b/com.unity.mobile.android-logcat/CHANGELOG.md @@ -10,13 +10,13 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Unity 6.0 or later is required. - Screenshots are now saved to `Library/AndroidLogcat/Screenshots` as `_.png`. Previously each capture overwrote a single file in the project's `Temp` folder, so earlier screenshots were lost. - The Screen Capture window can be opened from **Window** > **Analysis** > **Android Screen Capture**, as well as from the Android Logcat window's **Tools** menu. - - The Screen Capture window lists every saved screenshot by file name, next to the image and separated by a draggable splitter. Click a row or use the Up and Down keys to cycle through them, or the cross next to a row to delete that screenshot. Double click a row to open the image, or right click it to show it in Explorer, open it, save a copy elsewhere, or rename it. F2 (Enter on macOS) renames the selected screenshot and Delete (Command+Backspace on macOS) deletes it. + - The Screen Capture window now lists every saved screenshot. Click a row or use the Up and Down keys to cycle through them, or the cross next to a row to delete that screenshot. - Ctrl+Shift+S, or Cmd+Shift+S on macOS, captures a screenshot while the Screen Capture window has focus. It appears in Edit > Shortcuts under "Android Logcat" and can be rebound there. - - Capturing a screenshot also writes a `.json` file beside it, recording the device it was captured from and when. It is renamed, deleted and saved with the screenshot, including through **Save As**. + - Capturing a screenshot also writes a `.json` file beside it, recording the device it was captured from and when. - The details beside a selected screenshot show the device, its Android version and display size, along with the image size, the file size and when it was captured. The device details read `Undefined` for a screenshot saved without them. - - The screenshot and the live view can be zoomed between 100% and 4000% with Ctrl+Wheel (Cmd+Wheel on macOS), and the zoomed image moved with a Ctrl+middle mouse button drag or with the scrollbars that appear. - - The device screen can be viewed live from the Screen Capture window: select the "Live" row at the top of the screenshot list. Clicks, drags, the scroll wheel and typing are sent to the device as touch, scroll and key events, and Ctrl+A, Ctrl+C and Ctrl+V (Cmd on macOS) select all, copy and paste on the device using its own clipboard, and Back / Home / Overview buttons sit beside the image with the stream details. The details beside the image include the device's display resolution next to the streamed one, so it is clear how much the stream is scaling down. The stream's size, JPEG quality and frame rate cap can be changed in Preferences > Analysis > Android Logcat Settings. Streaming stops when another row is selected or the window is closed, and right clicking the "Live" row offers Reconnect for a stream that stopped on its own. - + - The screenshot and the live view can be zoomed with Ctrl+Wheel (Cmd+Wheel on macOS), and the zoomed image moved with a Ctrl+middle mouse button drag or with the scrollbars that appear. + - The device screen can be viewed live from the Screen Capture window: select the "Live" row at the top of the screenshot list. Clicks, drags, the scroll wheel and typing are sent to the device as touch, scroll and key events, and Ctrl+A, Ctrl+C and Ctrl+V (Cmd on macOS) select all, copy and paste on the device using its own clipboard, and Back / Home / Overview buttons sit beside the image with the stream details. + ## [1.4.7] - 2025-12-12 ### Fixes & Improvements - Periodic device queries no longer occur when no devices are connected and Logcat window is unfocused. From 6508758b024a117203ec6f70676e99380d0b6a1c Mon Sep 17 00:00:00 2001 From: Tomas Date: Wed, 23 Sep 2026 16:18:18 +0300 Subject: [PATCH 10/19] Try to fix panning on OSX --- .../Documentation~/screen-capture-window-reference.md | 2 +- .../Editor/AndroidLogcatImageViewer.cs | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/com.unity.mobile.android-logcat/Documentation~/screen-capture-window-reference.md b/com.unity.mobile.android-logcat/Documentation~/screen-capture-window-reference.md index 5ff54215..f9688b07 100644 --- a/com.unity.mobile.android-logcat/Documentation~/screen-capture-window-reference.md +++ b/com.unity.mobile.android-logcat/Documentation~/screen-capture-window-reference.md @@ -84,7 +84,7 @@ A screenshot and the live view are both fitted to the window, which can be too s | **Action** | **Result** | | ------------------------------------------------------ | ------------------------------------------------------------ | | Ctrl+Wheel (Cmd+Wheel on macOS) over the image | Zooms between 100% and 4000%, around the pointer, so whatever you point at stays where it is. The current zoom appears in the corner of the image while it is above 100%. | -| Ctrl+Middle mouse button drag (Cmd on macOS) | Moves the zoomed image, to bring another part of it into view. | +| Ctrl+Left or middle mouse button drag (Cmd on macOS) | Moves the zoomed image, to bring another part of it into view. | | The scrollbars | The same, and they appear as soon as the image is larger than the space for it. | Zooming and moving the image only change how you see it. In the live view, the device still receives your clicks, drags and keys at the place on its screen you are pointing at, and the wheel on its own still scrolls the device rather than the view. diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatImageViewer.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatImageViewer.cs index 414708eb..d90665aa 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatImageViewer.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatImageViewer.cs @@ -7,7 +7,7 @@ namespace Unity.Android.Logcat /// /// Zoom and pan for an image drawn into a rect handed down by a window - the live /// view and the saved screenshots both draw through it. Ctrl and the wheel zoom, - /// Ctrl and a middle mouse drag move the zoomed image, and scrollbars appear with + /// Ctrl and a left or middle mouse drag move the zoomed image, and scrollbars appear with /// it. Everything else is left alone, because the live view forwards clicks, the /// plain wheel and keys to the device. /// @@ -56,6 +56,7 @@ internal static GUIStyle Badge // because a step that is a sensible move at 100% is invisible at 4000%. const float kWheelDeltaPerNotch = 3.0f; const float kNotchesPerDoubling = 4.0f; + const int kLeftMouseButton = 0; const int kMiddleMouseButton = 2; const float kBadgeMargin = 4; // Deliberately more than a scrollbar takes. It only bounds how far the image can @@ -221,7 +222,11 @@ void HandlePan(int controlId, Rect area, float aspect, Rect box, Action repaint) switch (e.type) { case EventType.MouseDown: - if (e.button != kMiddleMouseButton || !IsViewModifier(e) || !IsZoomed) + // The left button as well as the middle one: a trackpad has no + // middle button, so on macOS there would be no way to pan at all. + // The modifier is what keeps a plain drag going to the device. + if ((e.button != kMiddleMouseButton && e.button != kLeftMouseButton) + || !IsViewModifier(e) || !IsZoomed) break; // Not while something else is being dragged - a touch being held on // the device, say. From b2e6c2fdfe462ea9b7a9c169ed874df57845c672 Mon Sep 17 00:00:00 2001 From: Tomas Date: Wed, 23 Sep 2026 16:35:11 +0300 Subject: [PATCH 11/19] update screenshot --- .../images/capture_screenshot.png | Bin 219453 -> 217897 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/com.unity.mobile.android-logcat/Documentation~/images/capture_screenshot.png b/com.unity.mobile.android-logcat/Documentation~/images/capture_screenshot.png index 32d8196c8b882a9368f0fcec5f629351eb952622..ba9a2fc4b30856b603889f253e82a136ab180b5b 100644 GIT binary patch literal 217897 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%0AxS$w)Kv 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 z
cEMIqfQ)okRRJ%K|6PD@TxP)&h1Z5pJ_BEG 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 Date: Wed, 23 Sep 2026 16:36:07 +0300 Subject: [PATCH 12/19] apply review fix --- .../Editor/AndroidLogcatLiveStream.cs | 42 ++++++++++++------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs index d6c94492..19049163 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs @@ -244,7 +244,13 @@ static class Styles int m_ForwardedPort = -1; Thread m_ReaderThread; - volatile bool m_Stop; + /// One per stream, so a reader cannot outlive its own session. + sealed class ReaderSession + { + internal volatile bool Stop; + } + + ReaderSession m_Session; volatile string m_ReaderError; volatile bool m_StreamEnded; @@ -370,7 +376,8 @@ internal void StartStreaming(IAndroidLogcatDevice device, m_Device = device; m_OnStopLiveStream = onStopLiveStream; - m_Stop = false; + var session = new ReaderSession(); + m_Session = session; m_ReaderError = null; m_StreamEnded = false; m_ControlSupported = false; @@ -442,7 +449,7 @@ internal void StartStreaming(IAndroidLogcatDevice device, // Connecting is retried until the server has created its socket, so it // happens on the reader thread rather than stalling the main thread. - m_ReaderThread = new Thread(ReadFrames) + m_ReaderThread = new Thread(() => ReadFrames(session)) { Name = "AndroidLogcatLiveStream", IsBackground = true @@ -473,7 +480,10 @@ internal bool StopStreaming() ///

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 RPE8Cz;OXk;vd$@?2>?5~07d`+ literal 219453 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�ppGh^qDCX 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

void Shutdown(Result result) { - m_Stop = true; + var session = m_Session; + m_Session = null; + if (session != null) + session.Stop = true; // Whatever was waiting for a pid is not getting one now. m_ShowLogcatWhenServerStarts = false; @@ -791,14 +801,14 @@ int SetupPortForward(IAndroidLogcatDevice device, string socketName) // Reader thread // ------------------------------------------------------------------ - void ReadFrames() + void ReadFrames(ReaderSession session) { try { - var stream = Connect(); + var stream = Connect(session); var header = new byte[kFrameHeaderSize]; - while (!m_Stop) + while (!session.Stop) { ReadExactly(stream, header, kFrameHeaderSize); // Bytes 0..7 are the presentation timestamp, unused: frames are @@ -815,6 +825,9 @@ void ReadFrames() var payload = RentFrameBuffer(size); ReadExactly(stream, payload, size); + if (session != m_Session) + break; + lock (m_FrameLock) { // Only the newest frame is kept: if the Editor cannot keep up, @@ -839,12 +852,13 @@ void ReadFrames() { // A read failing after Stop was requested is just the connection we // closed ourselves. - if (!m_Stop) + if (!session.Stop && session == m_Session) m_ReaderError = ex.Message; } finally { - m_StreamEnded = true; + if (session == m_Session) + m_StreamEnded = true; } } @@ -854,7 +868,7 @@ void ReadFrames() /// not anything is listening on the device yet, so an early attempt shows up as /// a connection that is immediately closed rather than as a refused connect. ///
- NetworkStream Connect() + NetworkStream Connect(ReaderSession session) { var deadline = DateTime.Now.AddMilliseconds(kConnectTimeoutMs); var addresses = string.IsNullOrEmpty(TunnelHost) ? AdbServerAddresses() : Resolve(TunnelHost); @@ -863,7 +877,7 @@ NetworkStream Connect() // reachable is the whole diagnosis when this times out. var failures = new Dictionary(); - while (!m_Stop) + while (!session.Stop) { foreach (var address in addresses) { @@ -877,7 +891,7 @@ NetworkStream Connect() client = new TcpClient(address.AddressFamily) { NoDelay = true }; lock (m_ConnectionLock) { - if (m_Stop) + if (session.Stop) throw new OperationCanceledException(); // Published before connecting, so that a Stop arriving now can // close the socket and break us out of the attempt. @@ -917,12 +931,12 @@ NetworkStream Connect() } } - if (m_Stop || DateTime.Now >= deadline) + if (session.Stop || DateTime.Now >= deadline) break; Thread.Sleep(kConnectRetryDelayMs); } - if (m_Stop) + if (session.Stop) throw new OperationCanceledException(); var reasons = failures.Select(f => $"{f.Key}:{port} - {f.Value}"); From f1d921f5cd0595e7a0306632ac66a31f5fcfb58b Mon Sep 17 00:00:00 2001 From: Tomas Date: Wed, 23 Sep 2026 16:36:12 +0300 Subject: [PATCH 13/19] apply review fix --- .../Editor/AndroidLogcatScreenCaptureWindow.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenCaptureWindow.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenCaptureWindow.cs index 9795b8dc..7ba57cd6 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenCaptureWindow.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenCaptureWindow.cs @@ -116,7 +116,10 @@ private void ReloadCaptureAssetsIfNeeded(IAndroidLogcatDevice device) m_LastDeviceUsedForAssets = device; m_VideoPlayer.Play(m_CaptureVideo.GetVideoPath(device)); - m_Runtime.CaptureScreenshot.LoadImage(m_Runtime.CaptureScreenshot.GetLatestImagePath(device)); + + // The screenshots are not tied to a device, so losing one keeps the view. + if (string.IsNullOrEmpty(m_Runtime.CaptureScreenshot.SelectedImagePath)) + m_Runtime.CaptureScreenshot.LoadImage(m_Runtime.CaptureScreenshot.GetLatestImagePath(device)); m_ScreenshotList.OnDeviceChanged(m_DeviceSelection.SelectedDevice); } From c58dc0f0509c3553d9b59355bd6111f95431bebd Mon Sep 17 00:00:00 2001 From: Tomas Date: Wed, 23 Sep 2026 16:48:02 +0300 Subject: [PATCH 14/19] Apply review fixes --- .../Editor/AndroidLogcatCaptureScreenshot.cs | 20 ++++++++++++++++++ .../Editor/AndroidLogcatLiveStream.cs | 21 ++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatCaptureScreenshot.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatCaptureScreenshot.cs index 61478204..dbb3a091 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatCaptureScreenshot.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatCaptureScreenshot.cs @@ -363,6 +363,21 @@ private static IAndroidLogcatTaskResult ExecuteScreenCapture(IAndroidLogcatTaskI }; } + static void DeleteQuietly(string path) + { + if (string.IsNullOrEmpty(path) || !File.Exists(path)) + return; + + try + { + File.Delete(path); + } + catch (Exception ex) + { + AndroidLogcatInternalLog.Log($"Failed to delete '{path}': {ex.Message}"); + } + } + private void IntegrateCaptureScreenShot(IAndroidLogcatTaskResult result) { if (m_CaptureCount > 0) @@ -377,6 +392,11 @@ private void IntegrateCaptureScreenShot(IAndroidLogcatTaskResult result) captureResult.info?.Save(captureResult.imagePath); + // A pull that failed part way still leaves what it had written, and the + // rescan below would list that as a screenshot. + if (string.IsNullOrEmpty(captureResult.imagePath)) + DeleteQuietly(captureResult.reservedPath); + // Drop the cache so the new file appears in the list, and so a failed // capture's entry disappears again. One rescan per capture, rather than per // repaint, which is what the cache is there for. diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs index 19049163..4df15364 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs @@ -1766,6 +1766,20 @@ void HandleKeyboardInput(int controlId) return; } + // AltGr is reported as Ctrl+Alt on Windows, so a chord carrying a + // printable character is someone typing @ or a currency sign, not a shortcut. + if (e.type == EventType.KeyDown && IsPrintable(e.character) + && (e.modifiers & EventModifiers.Control) != 0 + && (e.modifiers & EventModifiers.Alt) != 0) + { + // The character already says what the layout produced, so the device + // must not be holding Alt when it arrives. + SyncModifiers(e.modifiers & EventModifiers.Shift); + SendTextMessage(e.character.ToString()); + e.Use(); + return; + } + // Every other Editor shortcut keeps working: Ctrl/Cmd combinations are not // forwarded, so Ctrl+S still saves rather than going to the device. if ((e.modifiers & (EventModifiers.Control | EventModifiers.Command)) != 0) @@ -1784,13 +1798,18 @@ void HandleKeyboardInput(int controlId) // only the character knows about the keyboard layout, so letting the device // work out the keystrokes from the character is what makes punctuation and // non-US layouts come out right. - if (e.type == EventType.KeyDown && e.character != '\0' && !char.IsControl(e.character)) + if (e.type == EventType.KeyDown && IsPrintable(e.character)) { SendTextMessage(e.character.ToString()); e.Use(); } } + static bool IsPrintable(char c) + { + return c != '\0' && !char.IsControl(c); + } + /// /// Presses and releases modifier keys on the device so that what it holds /// matches what the user holds. A text field extends a selection while shift is From b5bf9178bc2d5476dff6741123b77e767126287e Mon Sep 17 00:00:00 2001 From: Tomas Date: Wed, 23 Sep 2026 17:23:34 +0300 Subject: [PATCH 15/19] Track keys which were held --- .../Editor/AndroidLogcatLiveStream.cs | 42 ++++++++++++++++++- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs index 4df15364..84bf9c94 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs @@ -296,6 +296,10 @@ sealed class ReaderSession bool m_TouchDown; // The modifier keys the device is holding because the user is holding them. EventModifiers m_HeldModifiers; + // The keys the device is holding because their key-down was forwarded, so that + // their key-up can be forwarded too even when the event that carries it no + // longer qualifies for the path that sent the down. + readonly Dictionary m_HeldKeys = new Dictionary(); bool m_ControlWriteFailed; Texture2D m_Texture; @@ -385,6 +389,7 @@ internal void StartStreaming(IAndroidLogcatDevice device, m_ControlWriteFailed = false; m_TouchDown = false; m_HeldModifiers = EventModifiers.None; + m_HeldKeys.Clear(); m_FrameWidth = 0; m_FrameHeight = 0; m_DisplayWidth = 0; @@ -1738,9 +1743,11 @@ void HandleKeyboardInput(int controlId) { if (!CanSendInput || GUIUtility.keyboardControl != controlId) { - // Focus moved away, or the stream went down, with a modifier held: let - // go of it rather than leaving the device holding shift. + // Focus moved away, or the stream went down, with something held: let + // go of it rather than leaving the device holding shift or a key whose + // release we will never see. SyncModifiers(EventModifiers.None); + ReleaseHeldKeys(); return; } @@ -1752,6 +1759,17 @@ void HandleKeyboardInput(int controlId) // long as the user does. SyncModifiers(e.modifiers); + // A key the device is holding is released on its own key-up, whatever the + // modifiers say by then. The user can let go of Ctrl before the C in Ctrl+C, + // and the paths below would no longer recognise that event. + if (e.type == EventType.KeyUp && m_HeldKeys.TryGetValue(e.keyCode, out var heldKeyCode)) + { + m_HeldKeys.Remove(e.keyCode); + SendKeyMessage(KeyAction.Up, heldKeyCode, MetaState(e.modifiers)); + e.Use(); + return; + } + // Select all, copy and paste act on the device: they are text editing where // the text is, and they do nothing in this window otherwise. The device's // own clipboard is what is copied to and pasted from - nothing is exchanged @@ -1762,6 +1780,8 @@ void HandleKeyboardInput(int controlId) // modifier, and META_CTRL_ON is what a text field acts on. SendKeyMessage(e.type == EventType.KeyDown ? KeyAction.Down : KeyAction.Up, editingKeyCode, MetaState(e.modifiers) | kMetaCtrlOn); + if (e.type == EventType.KeyDown) + m_HeldKeys[e.keyCode] = editingKeyCode; e.Use(); return; } @@ -1789,6 +1809,8 @@ void HandleKeyboardInput(int controlId) { SendKeyMessage(e.type == EventType.KeyDown ? KeyAction.Down : KeyAction.Up, androidKeyCode, MetaState(e.modifiers)); + if (e.type == EventType.KeyDown) + m_HeldKeys[e.keyCode] = androidKeyCode; e.Use(); return; } @@ -1810,6 +1832,22 @@ static bool IsPrintable(char c) return c != '\0' && !char.IsControl(c); } + /// + /// Releases every key the device is still holding. Used when the window stops + /// being the one the keyboard talks to, where the key-up that would have + /// released them is never delivered here. + /// + void ReleaseHeldKeys() + { + if (m_HeldKeys.Count == 0) + return; + + foreach (var keyCode in m_HeldKeys.Values) + SendKeyMessage(KeyAction.Up, keyCode, 0); + + m_HeldKeys.Clear(); + } + /// /// Presses and releases modifier keys on the device so that what it holds /// matches what the user holds. A text field extends a selection while shift is From 68f39939fee9ea4cc71e9e8c2d8059f0935ccb03 Mon Sep 17 00:00:00 2001 From: Tomas Date: Wed, 23 Sep 2026 17:36:11 +0300 Subject: [PATCH 16/19] show live view when opening the window --- .../Editor/AndroidLogcatScreenshotList.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs index b3f330f7..0ce5a532 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs @@ -339,14 +339,14 @@ void DoListGUI(Rect rc, IAndroidLogcatDevice device) } } - // With no screenshots to look at, open on the live view rather than on an - // empty pane. Once per window, and only when the list is empty: deleting the - // last screenshot deliberately leaves nothing selected rather than starting a - // stream, and that has to stay true. + // With nothing selected - an empty list, or a domain reload, which does not + // remember the selected screenshot - open on the live view rather than on an + // empty pane. Once per window: deleting the last screenshot deliberately + // leaves nothing selected rather than starting a stream. if (!m_InitialSelectionDone) { m_InitialSelectionDone = true; - if (screenshots.Count == 0 && !m_LiveSelected) + if (selectedRow < 0) { SelectRow(screenshots, 0, device); selectedRow = 0; From 638bbef48720cacd734a736f2af2df08716ed26c Mon Sep 17 00:00:00 2001 From: Tomas Date: Wed, 23 Sep 2026 18:05:14 +0300 Subject: [PATCH 17/19] Decouple layout viewer from screen capture --- .../Editor/AndroidLogcatCaptureScreenshot.cs | 56 +++++++++++++++---- .../Editor/AndroidLogcatLayoutViewerWindow.cs | 2 +- .../Editor/AndroidLogcatRuntime.cs | 21 +++++-- .../AndroidLogcatScreenCaptureWindow.cs | 2 +- .../Editor/AndroidLogcatScreenshotList.cs | 17 +++--- .../Editor/AndroidLogcatUtilities.cs | 17 +++++- .../Tests/Editor/AndroidLogcatGeneralTests.cs | 6 +- .../Tests/Editor/AndroidLogcatTestRuntime.cs | 2 +- 8 files changed, 91 insertions(+), 32 deletions(-) diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatCaptureScreenshot.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatCaptureScreenshot.cs index dbb3a091..b65a5b56 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatCaptureScreenshot.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatCaptureScreenshot.cs @@ -30,6 +30,11 @@ internal class AndroidLogcatCaptureScreenCaptureResult : IAndroidLogcatTaskResul } private AndroidLogcatRuntimeBase m_Runtime; + // Where captures are kept, and whether previous ones are kept with them. The + // Screen Capture window numbers its screenshots and keeps them all; the Layout + // Viewer has its own directory holding one. + private readonly string m_Directory; + private readonly bool m_KeepHistory; private Texture2D m_ImageTexture = null; private int m_CaptureCount; private string m_Error; @@ -123,17 +128,19 @@ public string GetLatestImagePath(IAndroidLogcatDevice device) /// /// Reserves the next free path, <device_id>_<number>.png under - /// , and makes sure - /// the directory exists - adb pull will not create it. + /// the capture directory, and makes sure it exists - adb pull will not create it. /// private string AllocateImagePath(IAndroidLogcatDevice device) { - var directory = AndroidLogcatUtilities.GetScreenshotsDirectory(); + var directory = m_Directory; Directory.CreateDirectory(directory); var prefix = AndroidLogcatUtilities.SanitizeFileName(device.Id); var screenshots = GetScreenshots(); + if (!m_KeepHistory) + return AllocateSingleImagePath(directory, prefix); + // Numbering is per device, so only this device's entries count. var number = 1; foreach (var screenshot in screenshots) @@ -148,18 +155,42 @@ private string AllocateImagePath(IAndroidLogcatDevice device) // exists from picking the same number - the list is counted from, not the // directory. It is both recorded and added to the live list, so it survives // a rescan and is visible to the next allocation either way. The completion - // handler releases it. The Layout Viewer can queue captures without waiting - // for the previous one, so this is reachable. + // handler releases it. m_ReservedPaths.Add(path); m_Screenshots.Add(new Screenshot(path, prefix, number)); m_Screenshots.Sort(CompareScreenshots); return path; } + /// + /// The single slot of a capture that keeps no history: always the same file, + /// with everything captured before it - including a capture of another device - + /// deleted, so the directory holds one screenshot and no more. + /// + private string AllocateSingleImagePath(string directory, string prefix) + { + var path = Path.Combine(directory, $"{prefix}_1{GetImageExtension()}").Replace("\\", "/"); + + foreach (var screenshot in GetScreenshots()) + { + // Not a capture in flight: that file is about to be written. + if (screenshot.Path == path || m_ReservedPaths.Contains(screenshot.Path)) + continue; + DeleteQuietly(screenshot.Path); + AndroidLogcatScreenshotInfo.Delete(screenshot.Path); + } + + m_ReservedPaths.Add(path); + // Rather than editing the cached list: the deletions above have already + // made it wrong, and the rescan puts the reservation back. + InvalidateScreenshots(); + return path; + } + private List ScanScreenshots() { var screenshots = new List(); - var directory = AndroidLogcatUtilities.GetScreenshotsDirectory(); + var directory = m_Directory; if (!Directory.Exists(directory)) return screenshots; @@ -319,9 +350,11 @@ public string GetImageExtension() return ".png"; } - internal AndroidLogcatCaptureScreenshot(AndroidLogcatRuntimeBase runtime) + internal AndroidLogcatCaptureScreenshot(AndroidLogcatRuntimeBase runtime, string directory, bool keepHistory) { m_Runtime = runtime; + m_Directory = directory; + m_KeepHistory = keepHistory; } public void QueueScreenCapture(IAndroidLogcatDevice device, Action onCompleted) @@ -411,11 +444,10 @@ private void IntegrateCaptureScreenShot(IAndroidLogcatTaskResult result) /// Records which screenshot is selected without touching /// , for a window that shows the image itself. /// - /// The texture here is shared with the Layout Viewer, which draws its node - /// bounds over it while holding a hierarchy queried against a particular - /// screenshot. Loading a historical screenshot into it from the capture list - /// would leave that overlay drawn over an unrelated image, so the list keeps - /// its own texture and only the path is shared. + /// The texture here is the last capture, which is what a window drawing an + /// overlay over it has queried against. Loading a historical screenshot into it + /// from the capture list would put that overlay on an unrelated image, so the + /// list keeps its own texture and only the path is shared. /// /// public void SelectImage(string imagePath) diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatLayoutViewerWindow.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatLayoutViewerWindow.cs index bab4da5a..f2a155b4 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatLayoutViewerWindow.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatLayoutViewerWindow.cs @@ -48,7 +48,7 @@ private void OnEnable() m_Runtime = AndroidLogcatManager.instance.Runtime; m_Runtime.Closing += OnDisable; m_DeviceSelection = new AndroidLogcatDeviceSelection(m_Runtime, null, nameof(AndroidLogcatLayoutViewerWindow) + "_DeviceId"); - m_CaptureScreenshot = m_Runtime.CaptureScreenshot; + m_CaptureScreenshot = m_Runtime.LayoutCaptureScreenshot; m_QueryLayout = m_Runtime.QueryLayout; LoadUI(); diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatRuntime.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatRuntime.cs index 7e479973..01bc571a 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatRuntime.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatRuntime.cs @@ -13,6 +13,7 @@ internal abstract class AndroidLogcatRuntimeBase protected AndroidTools m_Tools; protected AndroidLogcatDeviceQueryBase m_DeviceQuery; protected AndroidLogcatCaptureScreenshot m_CaptureScreenshot; + protected AndroidLogcatCaptureScreenshot m_LayoutCaptureScreenshot; protected AndroidLogcatCaptureVideo m_CaptureVideo; protected AndroidLogcatQueryLayout m_QueryLayout; protected AndroidLogcatLiveStream m_LiveSream; @@ -60,6 +61,17 @@ public AndroidLogcatCaptureScreenshot CaptureScreenshot { get { ValidateIsInitialized(); return m_CaptureScreenshot; } } + + /// + /// The Layout Viewer's own capture, separate from + /// so that neither window's captures show up in - or replace what is on screen + /// in - the other. + /// + public AndroidLogcatCaptureScreenshot LayoutCaptureScreenshot + { + get { ValidateIsInitialized(); return m_LayoutCaptureScreenshot; } + } + public AndroidLogcatLiveStream LiveStream { get { ValidateIsInitialized(); return m_LiveSream; } @@ -75,7 +87,7 @@ public AndroidLogcatQueryLayout QueryLayout protected abstract AndroidLogcatSettings LoadEditorSettings(); protected abstract AndroidTools CreateAndroidTools(); protected abstract AndroidLogcatCaptureVideo CreateScreenRecorder(); - protected abstract AndroidLogcatCaptureScreenshot CreateScreenCapture(); + protected abstract AndroidLogcatCaptureScreenshot CreateScreenCapture(string directory, bool keepHistory); protected abstract AndroidLogcatQueryLayout CreateQueryLayout(); protected abstract AndroidLogcatLiveStream CreateLiveStream(); protected abstract void SaveEditorSettings(AndroidLogcatSettings settings); @@ -98,7 +110,8 @@ public virtual void Initialize() m_Tools = CreateAndroidTools(); m_DeviceQuery = CreateDeviceQuery(); m_CaptureVideo = CreateScreenRecorder(); - m_CaptureScreenshot = CreateScreenCapture(); + m_CaptureScreenshot = CreateScreenCapture(AndroidLogcatUtilities.GetScreenshotsDirectory(), true); + m_LayoutCaptureScreenshot = CreateScreenCapture(AndroidLogcatUtilities.GetLayoutViewDirectory(), false); m_QueryLayout = CreateQueryLayout(); m_LiveSream = CreateLiveStream(); @@ -177,9 +190,9 @@ protected override AndroidLogcatCaptureVideo CreateScreenRecorder() return new AndroidLogcatCaptureVideo(this); } - protected override AndroidLogcatCaptureScreenshot CreateScreenCapture() + protected override AndroidLogcatCaptureScreenshot CreateScreenCapture(string directory, bool keepHistory) { - return new AndroidLogcatCaptureScreenshot(this); + return new AndroidLogcatCaptureScreenshot(this, directory, keepHistory); } protected override AndroidLogcatQueryLayout CreateQueryLayout() diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenCaptureWindow.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenCaptureWindow.cs index 7ba57cd6..e715c3ae 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenCaptureWindow.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenCaptureWindow.cs @@ -373,7 +373,7 @@ private void DoScreenshotGUI(Rect rc) Repaint(); } // The list draws the image, not AndroidLogcatCaptureScreenshot: its texture - // belongs to the Layout Viewer as much as to this window. + // is the last capture rather than the selected row. else if (!m_ScreenshotList.DoPreviewGUI(imageRect)) { var message = m_DeviceSelection.SelectedDevice == null diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs index 0ce5a532..d877e1ee 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs @@ -11,10 +11,9 @@ namespace Unity.Android.Logcat /// splitter that separates it from whatever is being shown on the right. /// /// One per window rather than one per runtime: the scroll position, the splitter - /// width and which row is selected are all view state, and - /// is a runtime-wide singleton shared - /// with the Layout Viewer. Files, numbering and the image itself stay there; this - /// only decides what to look at. + /// width and which row is selected are all view state, while + /// is runtime-wide. Files, numbering + /// and the image itself stay there; this only decides what to look at. /// /// internal class AndroidLogcatScreenshotList @@ -92,10 +91,9 @@ internal static GUIStyle SelectedRow int m_ListControlId; // The selected screenshot, drawn by this window and nothing else. It is - // deliberately not AndroidLogcatCaptureScreenshot's texture: that one is shared - // with the Layout Viewer, which draws node bounds over it, and swapping it for - // a screenshot picked out of this list would put that overlay on an unrelated - // image. Only the selected path is shared. + // deliberately not AndroidLogcatCaptureScreenshot's texture: that one is the + // last capture, and swapping it for a screenshot picked out of this list would + // lose it. Only the selected path is shared. Texture2D m_PreviewTexture; string m_PreviewPath; PreviewDetails m_PreviewDetails; @@ -733,8 +731,7 @@ void SelectRow(IReadOnlyList screensh /// Deleting is confirmed first: the button sits next to the row one clicks to /// select it, and the file is gone for good afterwards. The deletion itself is /// AndroidLogcatCaptureScreenshot.DeleteScreenshot; what belongs here is the - /// prompt, which the Layout Viewer sharing that instance should not inherit, and - /// picking what to select next. + /// prompt and picking what to select next. /// void ConfirmAndDelete(string path, int row, IAndroidLogcatDevice device) { diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatUtilities.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatUtilities.cs index b711e6ce..281b29f3 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatUtilities.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatUtilities.cs @@ -181,7 +181,22 @@ public static string SaveFileAs(string sourcePath, string title, string startDir /// public static string GetScreenshotsDirectory() { - var path = Path.Combine(Application.dataPath, "..", "Library", "AndroidLogcat", "Screenshots"); + return GetCaptureDirectory("Screenshots"); + } + + /// + /// Where the Layout Viewer keeps its screenshot. Its own directory, not the one + /// above: that capture belongs to the layout it was queried with and is replaced + /// by the next query, so it has no business in the saved screenshot list. + /// + public static string GetLayoutViewDirectory() + { + return GetCaptureDirectory("LayoutView"); + } + + static string GetCaptureDirectory(string name) + { + var path = Path.Combine(Application.dataPath, "..", "Library", "AndroidLogcat", name); return Path.GetFullPath(path).Replace("\\", "/"); } diff --git a/com.unity.mobile.android-logcat/Tests/Editor/AndroidLogcatGeneralTests.cs b/com.unity.mobile.android-logcat/Tests/Editor/AndroidLogcatGeneralTests.cs index 8eddc458..78644973 100644 --- a/com.unity.mobile.android-logcat/Tests/Editor/AndroidLogcatGeneralTests.cs +++ b/com.unity.mobile.android-logcat/Tests/Editor/AndroidLogcatGeneralTests.cs @@ -30,7 +30,8 @@ public void InvalidateScreenshotsPicksUpExternalChanges() // Built directly rather than taken from the runtime: the test runtime has // no screen capture service, and the two calls used here only read the // directory - nothing is queued, so nothing needs a device or a dispatcher. - var captureScreenshot = new AndroidLogcatCaptureScreenshot(runtime); + var captureScreenshot = new AndroidLogcatCaptureScreenshot(runtime, + AndroidLogcatUtilities.GetScreenshotsDirectory(), true); var directory = AndroidLogcatUtilities.GetScreenshotsDirectory(); System.IO.Directory.CreateDirectory(directory); @@ -92,7 +93,8 @@ public void RenameIsRefusedWhenTheDetailsNameIsTaken() runtime.Initialize(); try { - var captureScreenshot = new AndroidLogcatCaptureScreenshot(runtime); + var captureScreenshot = new AndroidLogcatCaptureScreenshot(runtime, + AndroidLogcatUtilities.GetScreenshotsDirectory(), true); var directory = AndroidLogcatUtilities.GetScreenshotsDirectory(); System.IO.Directory.CreateDirectory(directory); diff --git a/com.unity.mobile.android-logcat/Tests/Editor/AndroidLogcatTestRuntime.cs b/com.unity.mobile.android-logcat/Tests/Editor/AndroidLogcatTestRuntime.cs index ee51fcb5..37722bea 100644 --- a/com.unity.mobile.android-logcat/Tests/Editor/AndroidLogcatTestRuntime.cs +++ b/com.unity.mobile.android-logcat/Tests/Editor/AndroidLogcatTestRuntime.cs @@ -35,7 +35,7 @@ protected override AndroidLogcatCaptureVideo CreateScreenRecorder() return null; } - protected override AndroidLogcatCaptureScreenshot CreateScreenCapture() + protected override AndroidLogcatCaptureScreenshot CreateScreenCapture(string directory, bool keepHistory) { return null; } From a280502bef59c6dff4eb3638ff7584d85493e91a Mon Sep 17 00:00:00 2001 From: Tomas Date: Wed, 23 Sep 2026 18:06:24 +0300 Subject: [PATCH 18/19] LayoutView->LayoutViewer --- .../Editor/AndroidLogcatRuntime.cs | 2 +- .../Editor/AndroidLogcatUtilities.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatRuntime.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatRuntime.cs index 01bc571a..3730e4fc 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatRuntime.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatRuntime.cs @@ -111,7 +111,7 @@ public virtual void Initialize() m_DeviceQuery = CreateDeviceQuery(); m_CaptureVideo = CreateScreenRecorder(); m_CaptureScreenshot = CreateScreenCapture(AndroidLogcatUtilities.GetScreenshotsDirectory(), true); - m_LayoutCaptureScreenshot = CreateScreenCapture(AndroidLogcatUtilities.GetLayoutViewDirectory(), false); + m_LayoutCaptureScreenshot = CreateScreenCapture(AndroidLogcatUtilities.GetLayoutViewerDirectory(), false); m_QueryLayout = CreateQueryLayout(); m_LiveSream = CreateLiveStream(); diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatUtilities.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatUtilities.cs index 281b29f3..1794a09b 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatUtilities.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatUtilities.cs @@ -189,9 +189,9 @@ public static string GetScreenshotsDirectory() /// above: that capture belongs to the layout it was queried with and is replaced /// by the next query, so it has no business in the saved screenshot list. /// - public static string GetLayoutViewDirectory() + public static string GetLayoutViewerDirectory() { - return GetCaptureDirectory("LayoutView"); + return GetCaptureDirectory("LayoutViewer"); } static string GetCaptureDirectory(string name) From 3243bee6d107651bb890898d0978fa03f4140b63 Mon Sep 17 00:00:00 2001 From: Tomas Date: Fri, 25 Sep 2026 12:01:17 +0300 Subject: [PATCH 19/19] apply design changes --- .../screen-capture-live-stream.md | 2 +- .../screen-capture-window-reference.md | 14 +++--- .../Editor/AndroidLogcatCaptureScreenshot.cs | 9 ++-- .../Editor/AndroidLogcatImageViewer.cs | 2 +- .../Editor/AndroidLogcatLiveStream.cs | 47 ++++++++++++++----- .../AndroidLogcatScreenCaptureWindow.cs | 8 ++-- .../Editor/AndroidLogcatScreenshotInfo.cs | 12 +++-- .../Editor/AndroidLogcatScreenshotList.cs | 6 +-- 8 files changed, 65 insertions(+), 35 deletions(-) diff --git a/com.unity.mobile.android-logcat/Documentation~/screen-capture-live-stream.md b/com.unity.mobile.android-logcat/Documentation~/screen-capture-live-stream.md index c001475d..58957e21 100644 --- a/com.unity.mobile.android-logcat/Documentation~/screen-capture-live-stream.md +++ b/com.unity.mobile.android-logcat/Documentation~/screen-capture-live-stream.md @@ -12,7 +12,7 @@ The live view mirrors the device's display into the Unity Editor. Unlike a scree The stream stops when you select another row in the list, close the window, or disconnect the device. Selecting a different device restarts the stream against the newly selected one. -The device only sends a frame when its screen changes, so **Frame rate** in the [Live view details](screen-capture-window-reference.md#live-view-details) drops to almost nothing while the device shows a still screen. This is expected: the last frame stays on display. +The device only sends a frame when its screen changes, so **Frame Rate** in the [Live view details](screen-capture-window-reference.md#live-view-details) drops to almost nothing while the device shows a still screen. This is expected: the last frame stays on display. If the stream stops on its own, for example because the device restarted, right-click the **Live** row and select **Reconnect**. diff --git a/com.unity.mobile.android-logcat/Documentation~/screen-capture-window-reference.md b/com.unity.mobile.android-logcat/Documentation~/screen-capture-window-reference.md index f9688b07..8f3f5fb4 100644 --- a/com.unity.mobile.android-logcat/Documentation~/screen-capture-window-reference.md +++ b/com.unity.mobile.android-logcat/Documentation~/screen-capture-window-reference.md @@ -99,12 +99,12 @@ This section appears to the right of the image while a screenshot is selected. | ------------------ | ------------------------------------------------------------ | | **Device** | The device the screenshot was captured from. Hover over it for the device id. | | **OS** | The Android version and API level the device was running. | -| **Display size** | The device's display resolution when the screenshot was taken. This differs from **Image size** if the display was rotated or its size overridden. | -| **Image size** | The size of the image in pixels. | -| **File size** | The size of the `.png` file on disk. | +| **Display Size** | The device's display resolution when the screenshot was taken. This differs from **Image Size** if the display was rotated or its size overridden. | +| **Image Size** | The size of the image in pixels. | +| **File Size** | The size of the `.png` file on disk. | | **Captured** | When the file was last written. Hover over it for the full date and time. | -**Device**, **OS** and **Display size** come from the details file saved next to the screenshot, so they read `Undefined` for a screenshot captured before this package wrote one, or for an image added to the folder by hand. +**Device**, **OS** and **Display Size** come from the details file saved next to the screenshot, so they read `Undefined` for a screenshot captured before this package wrote one, or for an image added to the folder by hand. ## Live view details @@ -112,9 +112,9 @@ This section appears to the right of the image while the **Live** row is selecte | **Property** | **Description** | | --------------- | ------------------------------------------------------------ | -| **Display size** | The resolution of the display being mirrored. Compare it with **Stream size** to see how much the stream is scaling down. It follows the device, so it changes when the device is rotated or a foldable is opened. | -| **Stream size** | The size of the streamed image. This is the device display scaled down to fit the **Max Size** setting, not the device's own resolution. | -| **Frame rate** | How many frames per second are arriving. The device only sends a frame when its screen changes, so a device showing a still screen sends almost none. | +| **Display Size** | The resolution of the display being mirrored. Compare it with **Stream Size** to see how much the stream is scaling down. It follows the device, so it changes when the device is rotated or a foldable is opened. | +| **Stream Size** | The size of the streamed image. This is the device display scaled down to fit the **Max Size** setting, not the device's own resolution. | +| **Frame Rate** | How many frames per second are arriving. The device only sends a frame when its screen changes, so a device showing a still screen sends almost none. | | **Bandwidth** | How much data per second is arriving from the device. | | **Input** | Whether the device accepts the touch, scroll and key events this window sends it. Devices that refuse input injection still stream. | diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatCaptureScreenshot.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatCaptureScreenshot.cs index b65a5b56..60ce1f89 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatCaptureScreenshot.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatCaptureScreenshot.cs @@ -270,7 +270,9 @@ public bool RenameScreenshot(string path, string newName) if (newName.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0) { - UnityEngine.Debug.LogError($"'{newName}' is not a usable file name."); + UnityEngine.Debug.LogError($"'{newName}' is not a usable file name. " + + "File names cannot contain \\ / : * ? \" < > | or control characters. " + + "Choose a different name."); return false; } @@ -281,7 +283,8 @@ public bool RenameScreenshot(string path, string newName) if (File.Exists(target)) { - UnityEngine.Debug.LogError($"'{newName}{GetImageExtension()}' already exists."); + UnityEngine.Debug.LogError( + $"'{newName}{GetImageExtension()}' already exists. Choose a different name."); return false; } @@ -290,7 +293,7 @@ public bool RenameScreenshot(string path, string newName) { UnityEngine.Debug.LogError( $"'{Path.GetFileName(AndroidLogcatScreenshotInfo.PathFor(target))}' already exists " + - "and was not written by Android Logcat."); + "and was not written by Android Logcat. Choose a different name."); return false; } diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatImageViewer.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatImageViewer.cs index d90665aa..3a45412e 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatImageViewer.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatImageViewer.cs @@ -20,7 +20,7 @@ static class Styles static readonly string Gestures = $"{kModifier}+Wheel over the image zooms between 100% and 4000%, " + - $"{kModifier}+Middle mouse drag moves the zoomed image."; + $"{kModifier}+Left or middle mouse drag moves the zoomed image"; internal static GUIContent Zoom(int percent) { diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs index 84bf9c94..20cc7f81 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatLiveStream.cs @@ -162,13 +162,13 @@ internal static string GetServerJarPath() static class Styles { - internal static readonly GUIContent DisplaySize = new GUIContent("Display size", + internal static readonly GUIContent DisplaySize = new GUIContent("Display Size", "Resolution of the display being mirrored, as the frames report it. The streamed " + "image is this scaled down to fit Max Size, so the two rows together say how much " + "detail the stream is giving up."); - internal static readonly GUIContent StreamSize = new GUIContent("Stream size", + internal static readonly GUIContent StreamSize = new GUIContent("Stream Size", "Size of the streamed image, which is the device display scaled down to fit max_size."); - internal static readonly GUIContent FrameRate = new GUIContent("Frame rate", + internal static readonly GUIContent FrameRate = new GUIContent("Frame Rate", "Frames arriving per second. A mirrored display only produces a frame when the screen changes, so an idle device sends almost none."); internal static readonly GUIContent Bandwidth = new GUIContent("Bandwidth", "Megabits per second arriving over adb."); @@ -202,19 +202,21 @@ static class Styles "Local TCP port adb forwards to that socket."); internal static readonly GUIContent ServerOnDevice = new GUIContent("Server", "Where the server jar was pushed on the device."); - internal static readonly GUIContent ServerPid = new GUIContent("Server pid", + internal static readonly GUIContent ServerPid = new GUIContent("Server PID", "Process id of the server on the device, for adb shell kill or ps."); - internal static readonly GUIContent RebuildJar = new GUIContent("Rebuild server", + internal static readonly GUIContent RebuildJar = new GUIContent("Rebuild Server", "Run 'gradlew dexJar' on External/UnityLogcatServer, which also copies the jar into the " + "package, then restart the stream so the device picks the new one up and point the " + "Logcat window at the server that comes back. Only available in the package's own " + "repository, where that Gradle project sits next to the package."); - internal static readonly GUIContent KillServer = new GUIContent("Kill server", + internal static readonly GUIContent KillServer = new GUIContent("Kill Server", "Kill the server on the device, so the stream fails the way it would if the " + "server died on its own."); + internal static readonly string NoDevice = + "No device selected. Connect a device, then select it from the device list."; internal static readonly GUIContent Reconnect = new GUIContent("Reconnect", "Start the stream on the device again."); - internal static readonly GUIContent ShowServerLogcat = new GUIContent("Show server logs", + internal static readonly GUIContent ShowServerLogcat = new GUIContent("Show Server Logs", "Open the Android Logcat window filtered to this server's process."); } @@ -1265,15 +1267,36 @@ internal void DoGUI(Rect rc, IAndroidLogcatDevice selectedDevice, Action repaint // stream but leaves the last frame behind, and a still image of a device // that is no longer there says nothing about why it stopped updating. else if (selectedDevice == null) - EditorGUI.HelpBox(rc, "No valid device selected.", MessageType.Info); + EditorGUI.HelpBox(rc, Styles.NoDevice, MessageType.Info); else if (m_Texture == null) - EditorGUI.HelpBox(rc, IsStreaming - ? "Starting the stream on the device..." - : "The live stream is not running.", MessageType.Info); + DoStatusGUI(rc, selectedDevice); else DoStreamGUI(rc, controlId, repaint); } + /// Why there is no image yet, and the one thing to do about it. + void DoStatusGUI(Rect rc, IAndroidLogcatDevice selectedDevice) + { + if (IsStreaming) + { + EditorGUI.HelpBox(rc, "Starting the stream on the device...", MessageType.Info); + return; + } + + var message = new GUIContent("The live stream is not running. Select Reconnect to start it again."); + var height = EditorGUIUtility.singleLineHeight; + var messageRect = new Rect(rc.x, rc.y, rc.width, + Mathf.Min(Mathf.Max(0, rc.height - height - kNavigationSpacing), + EditorStyles.helpBox.CalcHeight(message, rc.width))); + + EditorGUI.HelpBox(messageRect, message.text, MessageType.Info); + + var buttonRect = new Rect(rc.x, messageRect.yMax + kNavigationSpacing, + Mathf.Min(kReconnectButtonWidth, rc.width), height); + if (GUI.Button(buttonRect, Styles.Reconnect, EditorStyles.miniButton)) + RestartStreaming(selectedDevice); + } + /// /// What went wrong, where the image would be, and what can be done about it. /// @@ -1306,7 +1329,7 @@ void DoErrorButtonsGUI(Rect rc, float y, float height, IAndroidLogcatDevice sele if (gradleProject != null) { var buttonRect = new Rect(x, y, Mathf.Min(kBuildJarButtonWidth, rc.width), height); - if (GUI.Button(buttonRect, new GUIContent("Build the server jar", + if (GUI.Button(buttonRect, new GUIContent("Build Server Jar", $"Runs 'gradlew dexJar' in {gradleProject}, then starts the stream again."))) { RebuildServerJar(gradleProject); diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenCaptureWindow.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenCaptureWindow.cs index e715c3ae..98cd2360 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenCaptureWindow.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenCaptureWindow.cs @@ -377,8 +377,8 @@ private void DoScreenshotGUI(Rect rc) else if (!m_ScreenshotList.DoPreviewGUI(imageRect)) { var message = m_DeviceSelection.SelectedDevice == null - ? "No screenshot to show." - : "No screenshot to show, click Capture button."; + ? "No screenshot to show. Select one from the list." + : "No screenshot to show. Select Capture to take one."; EditorGUI.HelpBox(imageRect, message, MessageType.Info); } } @@ -402,7 +402,9 @@ private void DoPreviewGUI() // while none is selected. if (m_DeviceSelection.SelectedDevice == null) { - EditorGUILayout.HelpBox("No valid device selected.", MessageType.Info); + EditorGUILayout.HelpBox( + "No device selected. Connect a device, then select it from the device list.", + MessageType.Info); break; } diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotInfo.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotInfo.cs index fa334046..2fd7290d 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotInfo.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotInfo.cs @@ -110,14 +110,16 @@ static bool MayReplace(string path, string what) if (IsFree(path)) return true; - UnityEngine.Debug.LogWarning($"Not {what} '{path}': it was not written by Android Logcat."); + UnityEngine.Debug.LogWarning($"The screenshot details were not {what}: '{path}' already " + + "exists and was not written by Android Logcat. Rename or remove that file if Android " + + "Logcat should manage it."); return false; } internal void Save(string imagePath) { var path = PathFor(imagePath); - if (!MayReplace(path, "overwriting")) + if (!MayReplace(path, "saved")) return; try @@ -157,7 +159,7 @@ internal static void Move(string fromImagePath, string toImagePath) { if (!Both(fromImagePath, toImagePath, out var from, out var to)) return; - if (!MayReplace(to, "overwriting")) + if (!MayReplace(to, "moved")) return; try @@ -176,7 +178,7 @@ internal static void CopyBeside(string fromImagePath, string toImagePath) { if (!Both(fromImagePath, toImagePath, out var from, out var to)) return; - if (!MayReplace(to, "overwriting")) + if (!MayReplace(to, "copied")) return; try @@ -201,7 +203,7 @@ internal static void Delete(string imagePath) var path = PathFor(imagePath); if (path == null || !File.Exists(path)) return; - if (!MayReplace(path, "deleting")) + if (!MayReplace(path, "removed")) return; try diff --git a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs index d877e1ee..b339800a 100644 --- a/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs +++ b/com.unity.mobile.android-logcat/Editor/AndroidLogcatScreenshotList.cs @@ -30,11 +30,11 @@ static class Styles "The device the screenshot was captured from, as its details file records it."); internal static readonly GUIContent OS = new GUIContent("OS", "The Android version the device was running."); - internal static readonly GUIContent DisplaySize = new GUIContent("Display size", + internal static readonly GUIContent DisplaySize = new GUIContent("Display Size", "The device's display resolution at the time, which is not the image size when the display was rotated or its size overridden."); - internal static readonly GUIContent ImageSize = new GUIContent("Image size", + internal static readonly GUIContent ImageSize = new GUIContent("Image Size", "Size of the image in pixels, which is the resolution of the display it was captured from."); - internal static readonly GUIContent FileSize = new GUIContent("File size", + internal static readonly GUIContent FileSize = new GUIContent("File Size", "Size of the file on disk."); internal static readonly GUIContent Captured = new GUIContent("Captured", "When the file was last written.");