[TOOL] ADB-Overlay [2.2.2.0 - .Net 6]

Search This thread

k1ll3r8e

Senior Member
Mar 4, 2011
727
679
Delmenhorst
HTC Sensation
HTC One (M9)
Heyho together,
after my P9-Lite and P10-Lite toolkit i thought, it's time to build a more generic version. Here it is, the ADB-Overlay!

The main point of this project is to serve a GUI for ADB. Currently, there is a File-Explorer, Remote-Desktop, Shell interface and APK installer implemented. You can also READ the contacts if your device is rooted and has sqlite3 installed. But a picture tells more as 1000 words... So here is a preview of what you'll get.


attachment.php

But anyways, i'm not responsible for any damage done to your device! For example, if you delete some files/folders on root lvl etc.

Component Info

Remote-Desktop:

Left-Click = Touch
Right-Click = Swipe with duration
The keyboard is nearly fully supported, i have written a kind of WPF -> Android key-mapper. So even combos like SHIFT+A-Z, SHIFT+0-9, ALT+A-Z and ALT+0-9 should work. The base for the key-mapping is a 102 keys keyboard with en-GB or de-DE layout. If you have another setup, some keys may on other positions.
The screenshots will be created under "ADB-Overlay\Screenshots\Screenshot.yyyy-MM-dd_HHmmss.(bmp | gif | jpg | png | tiff | wmp)".
-
If the device is booted in the recovery, the Remote-Desktop is only a viewer, because the recoveries doesn't support "input tap x y" nor "input keyevent XXX".

Shell:
The input box supports CTRL-A-Z, so you'll have the ability to send for example CTRL+C to stop a remote process. If you want use Copy & Paste onto the input box, use the Right-Click menu.

Tested OS
Win 7 | 8 | 8.1 | 10 | 11 (32Bit/64Bit in VM-Ware)
Win 7 | 8 | 8.1 | 10 | 11 (64Bit Native)

Tested Devices
Android Emulator some Versions (min. 2.x) in AVD
Android x86
HTC Sensation -/ XE (non-/rooted)
HTC One M9 (non-/rooted)
Huawei P9 Lite (VNS-L21, 22, 23, 31, etc.) (non-/rooted)
Huawei P10 Lite (WAS-LX1A, etc.) (non-/rooted)
Huawei Mate 9 (THX to @Tecalote)
Huawei Mate 10 Lite (THX to @Chisetdel31260)
Huawei P9 (EVA-al10) (THX to @reynard1)
Sony Xperia X (THX to @FoxTheLegend)
Pixel 4 (THX to @squabbi)

Requirements
Android: min. 2.x
Platform: x86/x64 (Windows)
Frameworks: min. .NET 6 / .NET 6 Desktop Runtime x86/x64
(Installed ADB/Fastboot driver)

Download
Mirror: See attachments
Mirror #1: My FTP [USR/PW=ADB-Overlay]
Mirror #2: GoogleDrive
Mirror #3: Dropbox
Mirror #4: Mega

DO NOT MIRROR MY FILES! DO NOT COPY MY THREADS!
 

Attachments

  • AO_android.png
    AO_android.png
    109.6 KB · Views: 5,660
  • 2021-01-12.2252.Net.5.zip
    5.7 MB · Views: 140
  • 2021-07-25.1743.zip
    10.3 MB · Views: 63
  • 2021-11-29.1039.Net.6.zip
    10.5 MB · Views: 54
  • 2022-04-11.1704.Net.6.zip
    10.5 MB · Views: 13
  • 2022-04-27.1716.Net.6.zip
    10.5 MB · Views: 10
  • 2022-04-30.1612.Net.6.zip
    10.5 MB · Views: 268
Last edited:

k1ll3r8e

Senior Member
Mar 4, 2011
727
679
Delmenhorst
HTC Sensation
HTC One (M9)
Bug-Tracker
If you can't use the SDK-Updater or the Version is 0.0, just close the ADB-Overlay delete the "platform-tools" directory and restart the ADB-Overlay.

If the device won't connect via W-/Lan, check which version of android you are running... the latest version "SP2A.220505.002, May 2022" seems to break "Developer settings -> USB-Debugging -> Debug over W-/Lan"... To get it working anyways, just open a cmd prompt in the "platform-tools" folder, connect your device via USB and execute the following command: "adb tcpip 12345" (or some other port). After that, you should be able to connect your device via W-/Lan.


App Freeze
If the ADB-Overlay freezes during startup or by connecting a rooted device, the solution is to update the su binary. I encountered this problem yesterday on an older device running Android N. After an update to Magisk Canary [build 21005] the problem was solved.
 
Last edited:

k1ll3r8e

Senior Member
Mar 4, 2011
727
679
Delmenhorst
HTC Sensation
HTC One (M9)
Changelog

DD.MM.YYYY | (A) = Added | (C) = Changed | (D) = Deleted | (F) = Fixed | (R) = Recoded | (U) Updated
----------------------------------------------------------------------------------------------------------------------------------------------------
30.04.2022 [2.2.2.0]
(F) The SDK updater.

27.04.2022 [2.2.1.0]
(F) A freeze which occured on some FTP-Servers which doesn't implement RFC 959 properly.

11.04.2022 [2.2.0.0]
(U) General improvements in terms of speed and connectivity.
(U) The FTP config is now AES-256 encrypted for better security.

29.11.2021 [2.1.0.0]
(U) To .Net 6
(U) General improvements in terms of speed and connectivity.

25.07.2021 [2.0.2.0]
(A) ADB-Sideload
(U) ADB and Fastboot binaries.
(F) Some transfer issues (Binary <-> Socket)
(F) The platform-tools updater.

12.01.2021 [2.0.1.0]
(F) All freezes on the Tree-/ListView.
(A) ColumnHeader sorting on the Explorer and Apk-Manager ListView.
(A) Sort options for all header not only Name, Size, Date and Type.
(C) Sorting happens now in the background (So no more freezes here too.).

.-Older changes-.

12.12.2020 [2.0.0.0 - .Net 5]
Switched to .Net 5.0
(F) FTP-Updater timeout issue
(C) Brotli compression to .Net native

17.09.2020 [1.18.46.0]
(A) sendrecv_v2 for Android 11
(A) Brotli compression for file transfers on Android 11

29.03.2020 [1.17.46.0]
(A) Cut (via Context-Menu and "Ctrl+X")
(A) Copy (by default and via Drag'n'Drop by holding "Ctrl" during drop)
(A) Move (via Drag'n'Drop by holding "Shift" during drop)
(NOTE: Move is now enabled for on-device, device-to-device, local-to-device and device-to-local transfers.)
(C) The copy window, it will now display "Copy" or "Move" depending on the current operation.

16.03.2020 [1.16.46.2]
(F) The updater buttons, now they are also disabled during an download/check.

15.03.2020 [1.16.46.1]
(F) File/Folder interaction with those which contains "\s _ - ' , * & ~ | < > ( ) [ ] { }" in their names.

07.03.2020 [1.16.46.0]
(C) The synchronous IO to fully asynchronous IO.
(A) The Edit-Window, this will temporary download the file and open it locally in an application defined for this file type or with the "OpenAs" dialog.
(C) The UI, buttons which can't be used are now "grayed out".

12.02.2020 [1.15.46.1]
(F) The re-connection bug on the FTP-View. (Which also caused the updater to fail.)
(F) The (2 sec) freezes after copy/delete/tar.
(C) The info bar, added the modify date.

31.01.2020 [1.14.46.0]
(F/A) The timestamps for access, changed, modify.
(C) The "Properties Window", added the mentioned fields and resized the height a bit.
(A) Create File on the FTP-View.

30.12.2019 [1.13.46.0]
(F) The FTP TLS/SSL problem, now all procedures (implicit/explicit) should work without problems. (I tested this the last days with multiple servers, also the proxy's socks4/a|5 should now work with TLS/SSL.)
(U) All 3 explorers, they relay now on an shared generic base explorer which implements most of the features for all 3 views. So it's guaranteed that all views will behave the same.
(U) All 3 explorer views, changed the spacing's and the "edit textbox" (on rename) a bit, so that they look a bit more like the default explorer.
(A) IComparable<T> and IEquatable<T> to all List-/TreeViewItems so you get a pre-sort during item parsing. (I thought it would work a bit nicer, but hey, now it's implemented^^)
(R) Optimized the item (file/folder) parser for both Android & FTP.

18.12.2019 [1.12.46.1]
(F) The broken SDK-Updater, where you saw in the log file a "BindingException".
(F) The "SocketException" on app close. Reason for this was, that i disposed the "DeviceMonitor" after i killed the adb-server, but the monitor tried to check in some cases (10 sec refresh rate) for changes, after the server was already down.
(A) The "remount" option for mounts to the properties window. (You'll get also a little warning, each time you attempt to remount a mount point.)
(C) Resized the properties and the updater windows a bit.

17.12.2019 [1.11.46.0]
(F) The remote desktop for 16-Bit devices.
(R) Root detection
(R) Mount detection (added support for Android 2.x)
(R) The properties view, as mentioned, there is now a more valuable overview.

14.12.2019 [1.10.46.0]
(A) A version banner to the title bar.
(R) Nearly the whole caching logic inside the local ,Android and FTP explorer.
(R) The mount ([Device]) overview, now you'll see all mounts returned from "mount" and the assigned "df" data, if available. (The next build will include a more valuable overview in the PropertiesWindow. Like the mount options etc.)
(R) The remote desktop, i moved the "color correction" inside the pixel-buffer copy process. This will save a lot of time and boost the FPS in my TWRP up to 80++ per sec.. (That was so much, that .Net even couldn't dispose the sockets so fast as i requested a new one... This ended in an waiting queue overflow... So i decided to limit the FPS to 30-40 this is enough to have a clean view.) - Also NOTE: BOOTED IN ANDROID, WILL DECREASE THE FPS TO 2-3 DEPENDING ON THE RESOLUTION OF YOUR DEVICE! THE ONLY SOLUTION FOR THIS IS, START ADB WITH ROOT RIGHTS. (I added a internal switch, which will detect if adb runs as root, if so, i don't relay on the frame-buffer-service of adb. Instead, i use the bare metal (/sys/class/graphics/fb0/) to get the correct buffer values and then i read directly from "/dev/graphics/fb0".) AGAIN, NOTE: THIS WILL NOT RAISE THE FPS UP TO 80++, BUT THE FPS WILL INCREASE UP TO 15-25.

11.12.2019 [1.9.46.1] (HotFix)
(A) The mistakenly removed overwrite protection on item rename. (Android)
(R) The Copy & Delete view, the media-scanner, if activated, will now only run once at the end of an copy or delete action.
(R) Sym-/Directory/File detection, there was in rare cases a wrong detection where a SymDirectory was treated as an SymFile.
(F) The "Create New Textfile" action. (Android)

10.12.2019 [1.9.46.0]
(F) An ArgumentNullException which was raised during "mount" parsing. (On the "device" view.)
(F) The renaming issue, where you got, "The element couldn't be renamed!", if the name hasn't changed.
(A) Windows shortcuts to the TreeView of the Windows explorer. (Even the original one hasn't that feature :) )
(A) Hiding the ".lnk" extension on any Windows shortcut.
(A) Internal auto updates to the remote explorers (Android/FTP). So you have a kind of "pseudo" FileSystemWatcher.
(A) The re-sorting of the items after an rename action.
(D) Some code duplication. (Saved all together ~12 kb)
(R) Unnecessary refreshes and replaced them with internal cache logic's.

02.12.2019 [1.8.46.0]
(F) An ObjectDisposedException which was sometimes raised after symlink parsing and/or file transfers.
(C) The channeling on the ADBSocket, from an ConcurrentDictionary to an simple array with locks, this increased the transfer speed.
(U) The dlls to the latest versions.

24.07.2019 [1.7.46.0]
(R) The config files, both, the config.xml and the config.ftp.xml got an structure update. The old/current config files will be migrated to the latest version. So there should be no data loss in any way.
(A) A version banner to the Android and FTP view
(C) The adb directory from "ADB-Overlay\adb" to "ADB-Overlay\platform-tools"
(A) The SDK-Updater
(A) Auto-SDK-Update - If activated, this will check once every 24h for an update, but only on startup of the ADB-Overlay. (NO Tasks or something)
Info
The updater will only check "https://dl.google.com/android/repository/repository-11.xml". This XML gets downloaded and parsed, if the "platform-tools" version is newer as the used one, you'll get an popup which offers the download for the latest version.
The Auto-SDK-Update is by default disabled.

28.06.2019 [1.6.46.0]
(F) A memory leak which occurred by removing a device (Android View -> Closing an tab)
(F) A memory leak which occurred by removing a server (FTP View -> Closing an tab)
(R) Improved the directory parsing speed
(A) A progress bar to the copy window (green during transfer and on completion | red on failure or cancellation)

04.06.2019 [1.5.46.0]
(C) The versioning:
1 = Major
5 = Minor
46 = Framework Version (4.6)
0 = Hotfix
(A) A few speed improvements to the Remote-Desktop.
(A) The updater/-menu
(A) Auto-Update - If activated, this will check once every 24h for an update, but only on startup of the ADB-Overlay. (NO Tasks or something)
Info
The updater will only check my FTP for a ".version" file. This gets downloaded and parsed, if the version is newer as the used one, you'll get an popup which offers the download for the latest version. (NO logs and NO telemetry!)
The Auto-Update is by default disabled.

28.05.2019 [0.0.0.5]
(A) The "APK Manager" to the Android -> Tools menu
(A) {<-} & {->} buttons to the addressbar
(A) The "Install" option to the remote explorer -> ListViewItem context menu (only shown if the item is a apk)
(R) Added the missing options to the APK Installer (e.g. Downgrade, Test-Package, etc.)
(R) Optimized the "symlink" parsing

01.05.2019 [0.0.0.4]
(F) An exception which was raised after you tried to open any "Tool" on an disconnected device.
(A) A Battery Monitor to the Android -> Tools menu

29.04.2019 [0.0.0.3]
(A) Remote-Viewer when booted in the recovery
(A) A screenshot format selector (bmp | gif | jpg | png | tiff | wmp) to the Remote-Desktop
(A) A color correction switch to the Remote-Desktop
(A) Links to the German forum post

20.04.2019 [0.0.0.2]
(F) An issue during item renaming - Reason was maybe the switch from .NET 4 to .NET 4.6, seems the UI updates on textboxes are no longer only on focus got/lost, instead they are now after any change.
(A) Contextmenu (Listview) -> New -> Text Document
(A) Replacements for "New Directory", "Group (New)", "Server (New)" to the german language, so you get now after such an action the correct "Neuer Ordner", "Neue Gruppe", "Neuer Server".
(C) The FTP Copy/Delete action, you can now close the control connection and leave only those windows open until they are done. Both, the Copy and Delete action using now their own connection which is no longer bound to the control connection.
(C) Moved the "Keep Alive" checkbox (FTP -> Servermanager -> Account) to FTP -> Servermanager -> Connection

13.04.2019 [0.0.0.1]
Initial release
 
Last edited:

squabbi

Senior Member
Jul 20, 2012
1,744
1,603
Sydney
I'm flattered to be in your contacts screenshot ;) I was still using your prototype you had sent to me years ago!
Works very well on my Pixel 4!
 
Last edited:
  • Like
Reactions: k1ll3r8e

k1ll3r8e

Senior Member
Mar 4, 2011
727
679
Delmenhorst
HTC Sensation
HTC One (M9)
I'm flattered to be in your contacts screenshot ;) I was still using your prototype you had sent to me years ago!
Works very well on my Pixel 4!

Hey Bro :)
long time not seen. Hehe yeah the good old Multi-Explorer ;p - Still using it my self, it's more or less my playground before i implement things in this tool.

If you want and have some spare time we can modify this beauty. I also reworked nearly the whole AndroidCtrl.dll, there you have now solid filestreams, strongly typed FilesystemInfos (Like the one from the .NET fw) and lots of other handy stuff. Like framebuffer access in Android and recovery mode. I also implemented a ADBridge class which is an instanced wrapper for the 2 static ADB classes (binary/socket).

Best Regards,
Sebastian
 

reynard1

Senior Member
Dec 10, 2012
187
25
Urmia
this is what im looking for a while

Thank you very much

here is some suggestion
1.better ui
2.edit build prop in the realtime

btw my phone is Huawei P9(eva-al10) rooted android 8.0 work very well
 
Last edited:
  • Like
Reactions: k1ll3r8e

squabbi

Senior Member
Jul 20, 2012
1,744
1,603
Sydney
Hey Bro :)
long time not seen. Hehe yeah the good old Multi-Explorer ;p - Still using it my self, it's more or less my playground before i implement things in this tool.

If you want and have some spare time we can modify this beauty. I also reworked nearly the whole AndroidCtrl.dll, there you have now solid filestreams, strongly typed FilesystemInfos (Like the one from the .NET fw) and lots of other handy stuff. Like framebuffer access in Android and recovery mode. I also implemented a ADBridge class which is an instanced wrapper for the 2 static ADB classes (binary/socket).

Best Regards,
Sebastian

Sounds great! I'm looking to get back into toolkit making later this year, I'm keen to see the improvments to your library! :good:
 
  • Like
Reactions: k1ll3r8e

skyrail01

Member
Feb 10, 2011
17
5
paris
Great job. we can navigate and copy files efficiently.
Only one thing is missing. Why not keep file timestamp for last access and modifie dates? or let us choose the option to keep it or not.
 
  • Like
Reactions: k1ll3r8e

k1ll3r8e

Senior Member
Mar 4, 2011
727
679
Delmenhorst
HTC Sensation
HTC One (M9)
Great job. we can navigate and copy files efficiently.
Only one thing is missing. Why not keep file timestamp for last access and modifie dates? or let us choose the option to keep it or not.

Heyho,
which Android version are you using and on which action (pull/push) does the timestamps get lost?
Normally i preserve the timestamps but on some Android versions the "timestamp" field in the ADB-Protocol is ignored.

Maybe i can set the timestamps on an other way, but therefore i need to know the version. :)

Regards,
Sebastian

PS:
Some code where i set the timestamps ;)

Upload
Code:
 public void Close(DateTime fileCreationTime)
        {
            if (_ch?.IsConnected ?? false)
            {
                if (CanWrite)
                {
                    int o = 0, w;
                    byte[] d = new byte[8];
                    d.SetUInt32LE((UInt32)SyncCmd.DONE, 0);
                    d.SetUInt32LE(ToUnixTime(fileCreationTime), 4);
                    //...
                }
                _ch.Close();
            }
        }

Download
Code:
//...
                using (FileStream dfs = destination.Open(FileMode.Create, FileAccess.Write))
                {
                    using (AFileStream sfs = OpenRead())
                    {
                        sfs.CopyTo(dfs, DMAX, msg, cancellationToken);
                        ct = sfs.CreationTime;
                    }
                }
//...
            if (msg.State == TransferState.Done)
            {
                destination.CreationTime = ct;
                transferEventHandler?.Invoke(Client.ID, new FileTransferEventArgs(Client.ID, msg));
                return true;
            }
//...
 
Last edited:
  • Like
Reactions: skyrail01

skyrail01

Member
Feb 10, 2011
17
5
paris
Hey,

I am operating under lineageOS 16 on Galaxy S5 (klte), using adb 1.0.39 on windows 10 64-bits, either via wifi or usb connect.
I check file dates under Windows, in console mode with far manager (M: last write time, C: creation time, A: last access time).
I am using linux command ls -l under adb shell from Windows command line to list files pushed to Android.

When pushing files from Windows to Android, only M is preserved, with a 2 hours offset (ES file explorer tells it is modified date) Maybe daylight issue or bad timezone.
When pulling files from Android, only C is preserved
When I pull back to Windows, files pushed to Android, all original date is lost.

But I am pretty sure we can preserve last access, modified and creation date as I could see Adbexplorer (another project) pull files keeping M and A (adb pull -a).
Hope I give you enough details.


Heyho,
which Android version are you using and on which action (pull/push) does the timestamps get lost?
Normally i preserve the timestamps but on some Android versions the "timestamp" field in the ADB-Protocol is ignored.

Maybe i can set the timestamps on an other way, but therefore i need to know the version. :)

Regards,
Sebastian

PS:
Some code where i set the timestamps ;)

Upload
Code:
 public void Close(DateTime fileCreationTime)
        {
            if (_ch?.IsConnected ?? false)
            {
                if (CanWrite)
                {
                    int o = 0, w;
                    byte[] d = new byte[8];
                    d.SetUInt32LE((UInt32)SyncCmd.DONE, 0);
                    d.SetUInt32LE(ToUnixTime(fileCreationTime), 4);
                    //...
                }
                _ch.Close();
            }
        }

Download
Code:
//...
                using (FileStream dfs = destination.Open(FileMode.Create, FileAccess.Write))
                {
                    using (AFileStream sfs = OpenRead())
                    {
                        sfs.CopyTo(dfs, DMAX, msg, cancellationToken);
                        ct = sfs.CreationTime;
                    }
                }
//...
            if (msg.State == TransferState.Done)
            {
                destination.CreationTime = ct;
                transferEventHandler?.Invoke(Client.ID, new FileTransferEventArgs(Client.ID, msg));
                return true;
            }
//...
 
  • Like
Reactions: k1ll3r8e

k1ll3r8e

Senior Member
Mar 4, 2011
727
679
Delmenhorst
HTC Sensation
HTC One (M9)
Hey,

I am operating under lineageOS 16 on Galaxy S5 (klte), using adb 1.0.39 on windows 10 64-bits, either via wifi or usb connect.
I check file dates under Windows, in console mode with far manager (M: last write time, C: creation time, A: last access time).
I am using linux command ls -l under adb shell from Windows command line to list files pushed to Android.

When pushing files from Windows to Android, only M is preserved, with a 2 hours offset (ES file explorer tells it is modified date) Maybe daylight issue or bad timezone.
When pulling files from Android, only C is preserved
When I pull back to Windows, files pushed to Android, all original date is lost.

But I am pretty sure we can preserve last access, modified and creation date as I could see Adbexplorer (another project) pull files keeping M and A (adb pull -a).
Hope I give you enough details.

Heyho,
THX for that info, i'll check the "adbd" source which LOS uses, maybe there is the prob. According to "adb pull -a" i'll also have a look at the adb source, because i think they do some "touch" stuff. Because the ADB-Protocol it self only supports creation/last modified time. In the source is a another "struct" for "STA2" (stat 2) command. But i have never seen a adb binary which supports this. (All binaries use the "STAT" command.)

EDIT 1:
Just checked the adb source again, seems they changed it a bit...
(This is the current STAT (v1) header)
Code:
# cmd name STAT or STA2                 // 4 bytes
st->st_mode = msg.stat_v1.mode;     // 4 bytes
st->st_size = msg.stat_v1.size;            // 4 bytes
st->st_ctime = msg.stat_v1.mtime;    // 4 bytes
st->st_mtime = msg.stat_v1.mtime;  // 4 bytes
My HTC-One M9, Sensation, VM-Ware (Kitkat - Nougat) none of them has a 20 byte header. ALL of them return a 16 byte header.
Code:
CMD       // 4 bytes
Mode     // 4 bytes
Size        // 4 bytes
CTime    // 4 bytes

So it seems the protocol is highly inconsistent... I'll check how much time gets lost by calling touch on each file, because, currently i open a sync channel via an smart-socket, transfer the file and read all data provided by the protocol header. This is really fast, but if i have to spin up each time another channel to get a shell for the touch, this will increase the time each copy needs. Because, a shell depending on the version (v1, v2), has a lot checks you need to perform, specially the shell_v2 because it's like a ssh protocol.

EDIT 2:
Just for completeness, i'm pretty sure your device also sends only a 16 byte header for the stat v1 command, because:
(This is a cut of my implemented "Stat(byte[] bytes)" class)
Code:
if (c == (uint)SyncCmd.STA2 && bytes.Length >= 72)
            {
                ID = SyncCmd.STA2;
                Error = bytes.GetUInt32LE(4);
                Dev = bytes.GetUInt64LE(8);
                INode = bytes.GetUInt64LE(16);
                Mode = bytes.GetUInt32LE(24);
                NLink = bytes.GetUInt32LE(28);
                UID = bytes.GetUInt32LE(32);
                GID = bytes.GetUInt32LE(36);
                Size = bytes.GetUInt64LE(40);
                ATime = bytes.GetInt64LE(48);
                MTime = bytes.GetInt64LE(56);
                CTime = bytes.GetInt64LE(64);
            }
            else if (c == (uint)SyncCmd.STAT && bytes.Length == 16)
            {
                ID = SyncCmd.STAT;
                Mode = bytes.GetUInt32LE(4);
                Size = bytes.GetUInt32LE(8);
                CTime = bytes.GetUInt32LE(12);
            }
As you can see, the both structures differ in there field order, if your device would send a 20 byte header, the test (bytes.Length == 16) wouldn't match. And you couldn't download a file. ;)

EDIT 3:
After playing a while with "stat" and "touch" on some Android versions, i decided to rely on those functions. The next build should restore and write the correct timestamps.

EDIT 4:
Well, setting timestamps on the SD-Card doesn't work, also, setting timestamps on the "internal" SD-Card doesn't work either. Seems that it's related to the underlying FS. If i try to set the timestamp on an ext4 partition, it works. So it doesn't make sense to rewrite the push/pull functions because the return of touch for 99% of the time will be "touch: '/sdcard/TWRP/test.pdf': Operation not permitted". So it's simply a time waste during the copy procedure. BUT, i'll implement it at least for the download, so u'll get the correct timestamps on Windows.

EDIT 5:
Added a screenshot of the new "Properties Window" which also proves that the download timestamps are now correct.
(Btw. C doesn't mean created - it means changed)
Code:
stat /sdcard
  File: `/sdcard' -> `/storage/self/primary'
  Size: 21	 Blocks: 0	 IO Blocks: 512	symbolic link
Device: 1h/1d	 Inode: 4432	 Links: 1
Access: (777/lrwxrwxrwx)	Uid: (    0/    root)	Gid: (    0/    root)
Access: 1970-01-01 01:00:00.000000000
Modify: 1970-01-01 01:00:00.000000000
Change: 1970-01-01 01:00:00.360063176

Little update about the "creation time". After a bit research i found this post on Stack Exchange, there is explained that the so called "birth time" is stored since ext4 as part of the INode field. But it seems you need a special version of "stat" to read this info, it's called "statx". But so far i could see, Android doesn't support this feature, maybe some kernel does but it seems that it's more the rare case.

Regards,
Sebastian
 

Attachments

  • timestamp.png
    timestamp.png
    73.4 KB · Views: 83
Last edited:

squabbi

Senior Member
Jul 20, 2012
1,744
1,603
Sydney
Thanks for the update!

I was wondering what could be causing a small delay in copying files over, once the progress finishes, the transfer dialog remains frozen for a 1-2 seconds. I'm copying over a photo, so around 2MB.
 

k1ll3r8e

Senior Member
Mar 4, 2011
727
679
Delmenhorst
HTC Sensation
HTC One (M9)
Thanks for the update!

I was wondering what could be causing a small delay in copying files over, once the progress finishes, the transfer dialog remains frozen for a 1-2 seconds. I'm copying over a photo, so around 2MB.

Heyho :),
yup i still working on it. It seems that the "Task.Delay()" isn't performed inside the Task itself, instead it's executed on the main thread. The reason for the freeze is, that i try to show the last result, otherwise the copy window would close immediately after the last element and you couldn't see if it's transferred or not. So i keep it like windows, wait 1,5-2,5 sec before closing the window.

The delay you might feel extremely is the "Media-Scanner". It runs on the end of each copy/delete action, the reason for this is, that files pushed/copied by adb are not reported to the MTP interface. So you couldn't see those files if you connect your device after such an adb copy via MTP. Also files/folders deleted by adb are also not reported to the MTP interface. So you will see those elements via MTP if you don't perform manually the "Media-Scanner" lookup. - But if you work only with adb for example, you could turn the "Media-Scanner" off. All device based explorers and of course adb will see those files/folders at any times. (But if you need those files/folders for exchange you should keep the "Media-Scanner" on ;) )

EDIT:
This is executed for every file which is copied/pushed/deleted.
Code:
_adb.Device.Manager.ActivityManager.Broadcast("android.intent.action.MEDIA_SCANNER_SCAN_FILE", "-a", string.Concat("-d 'file://", remotePath, "' > /dev/null"));

EDIT 2 (a bit off-topic):
You could also simply use the "Media-Scanner" with my AndroidCtrl.dll. The calls are:
Code:
//"_adb" is a instance of "ADBClient"
_adb.Device.IO.MediaScanner.CreateScanList(string remoteDirectory, MediaScanMode mode);
_adb.Device.IO.MediaScanner.CreateScanList(string remoteDirectory, MediaScanMode mode, CancellationToken cancellationToken);
_adb.Device.IO.MediaScanner.CreateScanList(string remoteDirectory, IList<string> files, MediaScanMode mode, CancellationToken cancellationToken);
_adb.Device.IO.MediaScanner.ScanDirectory(string remotePath, MediaScanMode mode);
_adb.Device.IO.MediaScanner.ScanDirectory(string remotePath, MediaScanMode mode, CancellationToken cancellationToken);
_adb.Device.IO.MediaScanner.ScanDirectory(IEnumerable<string> remotePaths, MediaScanMode mode);
_adb.Device.IO.MediaScanner.ScanDirectory(IEnumerable<string> remotePaths, MediaScanMode mode, CancellationToken cancellationToken);
_adb.Device.IO.MediaScanner.ScanFile(string remotePath, MediaScanMode mode);
_adb.Device.IO.MediaScanner.ScanFile(IEnumerable<string> remotePaths, MediaScanMode mode);
_adb.Device.IO.MediaScanner.ScanFile(IEnumerable<string> remotePaths, MediaScanMode mode, CancellationToken cancellationToken);
_adb.Device.IO.MediaScanner.ScanObject(ITransferMessage message, MediaScanMode mode);

EDIT 3:
Found the bad boy, seems "Task.Delay()" only works when used in "async" context. Now the "freeze" is gone, you can move the window until it vanishes. So, in the next update those "freezes" are gone.

---

Little Update:
@squabbi
The next update includes a little editor as suggested by @reynard1. A screenshot can be found as attachment.

Regards,
Sebastian
 

Attachments

  • editor.png
    editor.png
    55 KB · Views: 37
Last edited:

squabbi

Senior Member
Jul 20, 2012
1,744
1,603
Sydney
**snip**

EDIT 3:
Found the bad boy, seems "Task.Delay()" only works when used in "async" context. Now the "freeze" is gone, you can move the window until it vanishes. So, in the next update those "freezes" are gone.

---

Little Update:
@squabbi
The next update includes a little editor as suggested by @reynard1. A screenshot can be found as attachment.

Regards,
Sebastian

Woohoo! Thanks for digging into it! :D I'm glad you found the culprit haha.

Looking forward to that editor feature! Do you know if it's possible to integrate with Windows Explorer? It's probably a little harder, but something like how WinSCP can drag files from the remote to a local Explorer window.

If that's a little difficult, would this be possible to implement? If I drag and drop a folder/file onto the local pane, it will change directory (and highlight the file if a file was dragged onto the local pane). Just to make it easier to work with folders I have already open.

Still using Windows 7? ;)
 
  • Like
Reactions: k1ll3r8e

k1ll3r8e

Senior Member
Mar 4, 2011
727
679
Delmenhorst
HTC Sensation
HTC One (M9)
Woohoo! Thanks for digging into it! :D I'm glad you found the culprit haha.

Looking forward to that editor feature! Do you know if it's possible to integrate with Windows Explorer? It's probably a little harder, but something like how WinSCP can drag files from the remote to a local Explorer window.

If that's a little difficult, would this be possible to implement? If I drag and drop a folder/file onto the local pane, it will change directory (and highlight the file if a file was dragged onto the local pane). Just to make it easier to work with folders I have already open.

Still using Windows 7? ;)

Heyho :)

Yes its definatly possible, we need to use the so called "VirtualFileDataObject". I tried to implement it some time ago, but doesn't worked as expected. But i'll give it another try. ;)
-
Yup, i still use Win 7 as my main system, but i have some VMs running, like my Debian server which serves the documentation and some test sites for my php projects, a few Android x86 Versions and of course a legit Win10 installation to test If everything works.

*Never change a running system! ;) - Currently my main hdd has a uptime of 2689 days with 216 restarts, i think that tells a lot ;) *

---

Little Update:
As the screenshot shows, the editor is working fine so far. (Added also a few more controls.) The only problem i still have is, that if ADB doesn't run as root you can't edit for example the "build.prop". Because ADB can't write the file directly back, so i need to build a kind of "tmp" file. The next problem will be, that you (the user) have to remount the mount point, before you start editing those "root" and "write protected" files. There is also a problem with "binary" files, because the "RichTextBox" screws up when it gets "binary to ASCII/UTF8" transformed data, which ends in an app freeze... So i have to check on some way if the stream contains really text-data, the file extension doesn't help here much because, you know, linux uses also a lot of txt files without any extension.

Update 2:
Just got the "binary" files running... With a super BIG drawback, 248 kb (4069 rows) text results in 269,364 mb memory utilization by the "RichTextBox". - The prob here is, that the ADB filestream doesn't support seek, so i need to load the whole doc in one, which is quiet to much for the "RichTextBox"...

Update 3:
Soo, i wrote a kind of paging for the "RichTextBox" which works so far really nice, at least when it comes to the memory (even during scrolling, with free running wheel, only 15 - 27 mb increase), there is now a fixed amount of rows (40) which will be shown, all other rows are hidden from the "RichTextBox". This opens a few new issues^^ - Currently there is no selection possible which goes beyond the 40 rows. Also insert and delete are a little challenge because, i need to "overwrite" the default behavior with the some "PreviewKeyDown/etc." events... - Looks all a bit hacky, but lets see if it works in the end.

Update 4:
Well, the "RichTextBox" is out of the race^^ - It triggers events more or less random instead when you expect it, it removes blank lines (for example you have 3x "\n", this gets wrapped to 1x "\n") and the best, you remove "\r" during stream reading and the RTB adds it again, also random (some paragraphs get an "\r" some not). Editing text in a solid way without losing something isn't possible with this thing... So i'll try the "TextBox".

Last Update before release:
So, after testing the "RichTextBox" and "TextBox" i ask myself why those controls are there^^. Both can't edit text with more than a few hundert lines, the "TextBox" is at least much better as the "RichTextBox" but it also screws up when i comes to more as 250 kb text. So the "Editor" will be one of your installed applications. I add a little tool window, which offers the temporary download to the windows temp folder, after that i launch the windows "OpenAs" dialog that you can choose the editor you want. Also, i'll attach a "FileSystemWatcher" to the file that the upload automatically happens when you press save in your editor.

Little Info:
It take a few more days for the "edit" update, because i started also to implement the TAP pattern, this increased for example the download speed by factor 6. But to implement it the right way, i have to rewrite a lot of code in the AndroidCtrl.dll and AndroidCtrlUI.dll.

Regards,
Sebastian
 

Attachments

  • editor1.png
    editor1.png
    68.2 KB · Views: 41
Last edited:

squabbi

Senior Member
Jul 20, 2012
1,744
1,603
Sydney
Heyho :)

Yes its definatly possible, we need to use the so called "VirtualFileDataObject". I tried to implement it some time ago, but doesn't worked as expected. But i'll give it another try. ;)
-
Yup, i still use Win 7 as my main system, but i have some VMs running, like my Debian server which serves the documentation and some test sites for my php projects, a few Android x86 Versions and of course a legit Win10 installation to test If everything works.

*Never change a running system! ;) - Currently my main hdd has a uptime of 2689 days with 216 restarts, i think that tells a lot ;) *

** snip **

That'll be great to see haha, and that does make sense keeping your system as is, if it works, it works.

Thanks for your hard work in checking out what's best for the new edit function. Maybe there's a library out there that can implement a text viewer better? I'm not familiar with WPF libraries, or how many there are. :p
 

k1ll3r8e

Senior Member
Mar 4, 2011
727
679
Delmenhorst
HTC Sensation
HTC One (M9)
That'll be great to see haha, and that does make sense keeping your system as is, if it works, it works.

Thanks for your hard work in checking out what's best for the new edit function. Maybe there's a library out there that can implement a text viewer better? I'm not familiar with WPF libraries, or how many there are. :p

Heyho,

i have had a look on Avalon Texteditor but on StackOverflow is also a discussion about how to open a file bigger than 20 mb. It seems WPF is not that great for such things. I found also another one, written by a lonely dev like me :p, but it's not maintained since 7 years. So the best way might be, open a installed App which is well designed for that purpose.

A bit off-topic
I nearly finished the TAP implementation for the AndroidCtrl.dll, so far it brought a great speed increase. Also, it consumes less CPU time, for example the remote desktop uses only 3-7% on an Intel I5 with 32 GB memory (but up to 36% on an single-core Intel Pentium M with 1,5 Ghz and 1 GB memory - my old well working Laptop, also with Win7 :p ). So you might be happy to see all the new "real async" overloads in the lib. (I implemented all from scratch, so there is NO Task.Run() or Task.StartNew() in those functions.)

Edit:
Soo, after a few horrible days, the TAP pattern is now fully integrated! But there is still a little issue with the Remote-Desktop recovery viewer. It seems that everything got a speed boost except the recovery viewer, the viewer is currently nearly 4x slower as before... After i fixed this last problem, i'll release the new asynchronous version. ;)

Regards,
Sebastian
 
Last edited:

Top Liked Posts

  • There are no posts matching your filters.
  • 10
    Heyho together,
    after my P9-Lite and P10-Lite toolkit i thought, it's time to build a more generic version. Here it is, the ADB-Overlay!

    The main point of this project is to serve a GUI for ADB. Currently, there is a File-Explorer, Remote-Desktop, Shell interface and APK installer implemented. You can also READ the contacts if your device is rooted and has sqlite3 installed. But a picture tells more as 1000 words... So here is a preview of what you'll get.


    attachment.php

    But anyways, i'm not responsible for any damage done to your device! For example, if you delete some files/folders on root lvl etc.

    Component Info

    Remote-Desktop:

    Left-Click = Touch
    Right-Click = Swipe with duration
    The keyboard is nearly fully supported, i have written a kind of WPF -> Android key-mapper. So even combos like SHIFT+A-Z, SHIFT+0-9, ALT+A-Z and ALT+0-9 should work. The base for the key-mapping is a 102 keys keyboard with en-GB or de-DE layout. If you have another setup, some keys may on other positions.
    The screenshots will be created under "ADB-Overlay\Screenshots\Screenshot.yyyy-MM-dd_HHmmss.(bmp | gif | jpg | png | tiff | wmp)".
    -
    If the device is booted in the recovery, the Remote-Desktop is only a viewer, because the recoveries doesn't support "input tap x y" nor "input keyevent XXX".

    Shell:
    The input box supports CTRL-A-Z, so you'll have the ability to send for example CTRL+C to stop a remote process. If you want use Copy & Paste onto the input box, use the Right-Click menu.

    Tested OS
    Win 7 | 8 | 8.1 | 10 | 11 (32Bit/64Bit in VM-Ware)
    Win 7 | 8 | 8.1 | 10 | 11 (64Bit Native)

    Tested Devices
    Android Emulator some Versions (min. 2.x) in AVD
    Android x86
    HTC Sensation -/ XE (non-/rooted)
    HTC One M9 (non-/rooted)
    Huawei P9 Lite (VNS-L21, 22, 23, 31, etc.) (non-/rooted)
    Huawei P10 Lite (WAS-LX1A, etc.) (non-/rooted)
    Huawei Mate 9 (THX to @Tecalote)
    Huawei Mate 10 Lite (THX to @Chisetdel31260)
    Huawei P9 (EVA-al10) (THX to @reynard1)
    Sony Xperia X (THX to @FoxTheLegend)
    Pixel 4 (THX to @squabbi)

    Requirements
    Android: min. 2.x
    Platform: x86/x64 (Windows)
    Frameworks: min. .NET 6 / .NET 6 Desktop Runtime x86/x64
    (Installed ADB/Fastboot driver)

    Download
    Mirror: See attachments
    Mirror #1: My FTP [USR/PW=ADB-Overlay]
    Mirror #2: GoogleDrive
    Mirror #3: Dropbox
    Mirror #4: Mega

    DO NOT MIRROR MY FILES! DO NOT COPY MY THREADS!
    3
    Changelog

    DD.MM.YYYY | (A) = Added | (C) = Changed | (D) = Deleted | (F) = Fixed | (R) = Recoded | (U) Updated
    ----------------------------------------------------------------------------------------------------------------------------------------------------
    30.04.2022 [2.2.2.0]
    (F) The SDK updater.

    27.04.2022 [2.2.1.0]
    (F) A freeze which occured on some FTP-Servers which doesn't implement RFC 959 properly.

    11.04.2022 [2.2.0.0]
    (U) General improvements in terms of speed and connectivity.
    (U) The FTP config is now AES-256 encrypted for better security.

    29.11.2021 [2.1.0.0]
    (U) To .Net 6
    (U) General improvements in terms of speed and connectivity.

    25.07.2021 [2.0.2.0]
    (A) ADB-Sideload
    (U) ADB and Fastboot binaries.
    (F) Some transfer issues (Binary <-> Socket)
    (F) The platform-tools updater.

    12.01.2021 [2.0.1.0]
    (F) All freezes on the Tree-/ListView.
    (A) ColumnHeader sorting on the Explorer and Apk-Manager ListView.
    (A) Sort options for all header not only Name, Size, Date and Type.
    (C) Sorting happens now in the background (So no more freezes here too.).

    .-Older changes-.

    12.12.2020 [2.0.0.0 - .Net 5]
    Switched to .Net 5.0
    (F) FTP-Updater timeout issue
    (C) Brotli compression to .Net native

    17.09.2020 [1.18.46.0]
    (A) sendrecv_v2 for Android 11
    (A) Brotli compression for file transfers on Android 11

    29.03.2020 [1.17.46.0]
    (A) Cut (via Context-Menu and "Ctrl+X")
    (A) Copy (by default and via Drag'n'Drop by holding "Ctrl" during drop)
    (A) Move (via Drag'n'Drop by holding "Shift" during drop)
    (NOTE: Move is now enabled for on-device, device-to-device, local-to-device and device-to-local transfers.)
    (C) The copy window, it will now display "Copy" or "Move" depending on the current operation.

    16.03.2020 [1.16.46.2]
    (F) The updater buttons, now they are also disabled during an download/check.

    15.03.2020 [1.16.46.1]
    (F) File/Folder interaction with those which contains "\s _ - ' , * & ~ | < > ( ) [ ] { }" in their names.

    07.03.2020 [1.16.46.0]
    (C) The synchronous IO to fully asynchronous IO.
    (A) The Edit-Window, this will temporary download the file and open it locally in an application defined for this file type or with the "OpenAs" dialog.
    (C) The UI, buttons which can't be used are now "grayed out".

    12.02.2020 [1.15.46.1]
    (F) The re-connection bug on the FTP-View. (Which also caused the updater to fail.)
    (F) The (2 sec) freezes after copy/delete/tar.
    (C) The info bar, added the modify date.

    31.01.2020 [1.14.46.0]
    (F/A) The timestamps for access, changed, modify.
    (C) The "Properties Window", added the mentioned fields and resized the height a bit.
    (A) Create File on the FTP-View.

    30.12.2019 [1.13.46.0]
    (F) The FTP TLS/SSL problem, now all procedures (implicit/explicit) should work without problems. (I tested this the last days with multiple servers, also the proxy's socks4/a|5 should now work with TLS/SSL.)
    (U) All 3 explorers, they relay now on an shared generic base explorer which implements most of the features for all 3 views. So it's guaranteed that all views will behave the same.
    (U) All 3 explorer views, changed the spacing's and the "edit textbox" (on rename) a bit, so that they look a bit more like the default explorer.
    (A) IComparable<T> and IEquatable<T> to all List-/TreeViewItems so you get a pre-sort during item parsing. (I thought it would work a bit nicer, but hey, now it's implemented^^)
    (R) Optimized the item (file/folder) parser for both Android & FTP.

    18.12.2019 [1.12.46.1]
    (F) The broken SDK-Updater, where you saw in the log file a "BindingException".
    (F) The "SocketException" on app close. Reason for this was, that i disposed the "DeviceMonitor" after i killed the adb-server, but the monitor tried to check in some cases (10 sec refresh rate) for changes, after the server was already down.
    (A) The "remount" option for mounts to the properties window. (You'll get also a little warning, each time you attempt to remount a mount point.)
    (C) Resized the properties and the updater windows a bit.

    17.12.2019 [1.11.46.0]
    (F) The remote desktop for 16-Bit devices.
    (R) Root detection
    (R) Mount detection (added support for Android 2.x)
    (R) The properties view, as mentioned, there is now a more valuable overview.

    14.12.2019 [1.10.46.0]
    (A) A version banner to the title bar.
    (R) Nearly the whole caching logic inside the local ,Android and FTP explorer.
    (R) The mount ([Device]) overview, now you'll see all mounts returned from "mount" and the assigned "df" data, if available. (The next build will include a more valuable overview in the PropertiesWindow. Like the mount options etc.)
    (R) The remote desktop, i moved the "color correction" inside the pixel-buffer copy process. This will save a lot of time and boost the FPS in my TWRP up to 80++ per sec.. (That was so much, that .Net even couldn't dispose the sockets so fast as i requested a new one... This ended in an waiting queue overflow... So i decided to limit the FPS to 30-40 this is enough to have a clean view.) - Also NOTE: BOOTED IN ANDROID, WILL DECREASE THE FPS TO 2-3 DEPENDING ON THE RESOLUTION OF YOUR DEVICE! THE ONLY SOLUTION FOR THIS IS, START ADB WITH ROOT RIGHTS. (I added a internal switch, which will detect if adb runs as root, if so, i don't relay on the frame-buffer-service of adb. Instead, i use the bare metal (/sys/class/graphics/fb0/) to get the correct buffer values and then i read directly from "/dev/graphics/fb0".) AGAIN, NOTE: THIS WILL NOT RAISE THE FPS UP TO 80++, BUT THE FPS WILL INCREASE UP TO 15-25.

    11.12.2019 [1.9.46.1] (HotFix)
    (A) The mistakenly removed overwrite protection on item rename. (Android)
    (R) The Copy & Delete view, the media-scanner, if activated, will now only run once at the end of an copy or delete action.
    (R) Sym-/Directory/File detection, there was in rare cases a wrong detection where a SymDirectory was treated as an SymFile.
    (F) The "Create New Textfile" action. (Android)

    10.12.2019 [1.9.46.0]
    (F) An ArgumentNullException which was raised during "mount" parsing. (On the "device" view.)
    (F) The renaming issue, where you got, "The element couldn't be renamed!", if the name hasn't changed.
    (A) Windows shortcuts to the TreeView of the Windows explorer. (Even the original one hasn't that feature :) )
    (A) Hiding the ".lnk" extension on any Windows shortcut.
    (A) Internal auto updates to the remote explorers (Android/FTP). So you have a kind of "pseudo" FileSystemWatcher.
    (A) The re-sorting of the items after an rename action.
    (D) Some code duplication. (Saved all together ~12 kb)
    (R) Unnecessary refreshes and replaced them with internal cache logic's.

    02.12.2019 [1.8.46.0]
    (F) An ObjectDisposedException which was sometimes raised after symlink parsing and/or file transfers.
    (C) The channeling on the ADBSocket, from an ConcurrentDictionary to an simple array with locks, this increased the transfer speed.
    (U) The dlls to the latest versions.

    24.07.2019 [1.7.46.0]
    (R) The config files, both, the config.xml and the config.ftp.xml got an structure update. The old/current config files will be migrated to the latest version. So there should be no data loss in any way.
    (A) A version banner to the Android and FTP view
    (C) The adb directory from "ADB-Overlay\adb" to "ADB-Overlay\platform-tools"
    (A) The SDK-Updater
    (A) Auto-SDK-Update - If activated, this will check once every 24h for an update, but only on startup of the ADB-Overlay. (NO Tasks or something)
    Info
    The updater will only check "https://dl.google.com/android/repository/repository-11.xml". This XML gets downloaded and parsed, if the "platform-tools" version is newer as the used one, you'll get an popup which offers the download for the latest version.
    The Auto-SDK-Update is by default disabled.

    28.06.2019 [1.6.46.0]
    (F) A memory leak which occurred by removing a device (Android View -> Closing an tab)
    (F) A memory leak which occurred by removing a server (FTP View -> Closing an tab)
    (R) Improved the directory parsing speed
    (A) A progress bar to the copy window (green during transfer and on completion | red on failure or cancellation)

    04.06.2019 [1.5.46.0]
    (C) The versioning:
    1 = Major
    5 = Minor
    46 = Framework Version (4.6)
    0 = Hotfix
    (A) A few speed improvements to the Remote-Desktop.
    (A) The updater/-menu
    (A) Auto-Update - If activated, this will check once every 24h for an update, but only on startup of the ADB-Overlay. (NO Tasks or something)
    Info
    The updater will only check my FTP for a ".version" file. This gets downloaded and parsed, if the version is newer as the used one, you'll get an popup which offers the download for the latest version. (NO logs and NO telemetry!)
    The Auto-Update is by default disabled.

    28.05.2019 [0.0.0.5]
    (A) The "APK Manager" to the Android -> Tools menu
    (A) {<-} & {->} buttons to the addressbar
    (A) The "Install" option to the remote explorer -> ListViewItem context menu (only shown if the item is a apk)
    (R) Added the missing options to the APK Installer (e.g. Downgrade, Test-Package, etc.)
    (R) Optimized the "symlink" parsing

    01.05.2019 [0.0.0.4]
    (F) An exception which was raised after you tried to open any "Tool" on an disconnected device.
    (A) A Battery Monitor to the Android -> Tools menu

    29.04.2019 [0.0.0.3]
    (A) Remote-Viewer when booted in the recovery
    (A) A screenshot format selector (bmp | gif | jpg | png | tiff | wmp) to the Remote-Desktop
    (A) A color correction switch to the Remote-Desktop
    (A) Links to the German forum post

    20.04.2019 [0.0.0.2]
    (F) An issue during item renaming - Reason was maybe the switch from .NET 4 to .NET 4.6, seems the UI updates on textboxes are no longer only on focus got/lost, instead they are now after any change.
    (A) Contextmenu (Listview) -> New -> Text Document
    (A) Replacements for "New Directory", "Group (New)", "Server (New)" to the german language, so you get now after such an action the correct "Neuer Ordner", "Neue Gruppe", "Neuer Server".
    (C) The FTP Copy/Delete action, you can now close the control connection and leave only those windows open until they are done. Both, the Copy and Delete action using now their own connection which is no longer bound to the control connection.
    (C) Moved the "Keep Alive" checkbox (FTP -> Servermanager -> Account) to FTP -> Servermanager -> Connection

    13.04.2019 [0.0.0.1]
    Initial release
    3
    Woohoo! Thanks for digging into it! :D I'm glad you found the culprit haha.

    Looking forward to that editor feature! Do you know if it's possible to integrate with Windows Explorer? It's probably a little harder, but something like how WinSCP can drag files from the remote to a local Explorer window.

    If that's a little difficult, would this be possible to implement? If I drag and drop a folder/file onto the local pane, it will change directory (and highlight the file if a file was dragged onto the local pane). Just to make it easier to work with folders I have already open.

    Still using Windows 7? ;)

    Heyho :)

    Yes its definatly possible, we need to use the so called "VirtualFileDataObject". I tried to implement it some time ago, but doesn't worked as expected. But i'll give it another try. ;)
    -
    Yup, i still use Win 7 as my main system, but i have some VMs running, like my Debian server which serves the documentation and some test sites for my php projects, a few Android x86 Versions and of course a legit Win10 installation to test If everything works.

    *Never change a running system! ;) - Currently my main hdd has a uptime of 2689 days with 216 restarts, i think that tells a lot ;) *

    ---

    Little Update:
    As the screenshot shows, the editor is working fine so far. (Added also a few more controls.) The only problem i still have is, that if ADB doesn't run as root you can't edit for example the "build.prop". Because ADB can't write the file directly back, so i need to build a kind of "tmp" file. The next problem will be, that you (the user) have to remount the mount point, before you start editing those "root" and "write protected" files. There is also a problem with "binary" files, because the "RichTextBox" screws up when it gets "binary to ASCII/UTF8" transformed data, which ends in an app freeze... So i have to check on some way if the stream contains really text-data, the file extension doesn't help here much because, you know, linux uses also a lot of txt files without any extension.

    Update 2:
    Just got the "binary" files running... With a super BIG drawback, 248 kb (4069 rows) text results in 269,364 mb memory utilization by the "RichTextBox". - The prob here is, that the ADB filestream doesn't support seek, so i need to load the whole doc in one, which is quiet to much for the "RichTextBox"...

    Update 3:
    Soo, i wrote a kind of paging for the "RichTextBox" which works so far really nice, at least when it comes to the memory (even during scrolling, with free running wheel, only 15 - 27 mb increase), there is now a fixed amount of rows (40) which will be shown, all other rows are hidden from the "RichTextBox". This opens a few new issues^^ - Currently there is no selection possible which goes beyond the 40 rows. Also insert and delete are a little challenge because, i need to "overwrite" the default behavior with the some "PreviewKeyDown/etc." events... - Looks all a bit hacky, but lets see if it works in the end.

    Update 4:
    Well, the "RichTextBox" is out of the race^^ - It triggers events more or less random instead when you expect it, it removes blank lines (for example you have 3x "\n", this gets wrapped to 1x "\n") and the best, you remove "\r" during stream reading and the RTB adds it again, also random (some paragraphs get an "\r" some not). Editing text in a solid way without losing something isn't possible with this thing... So i'll try the "TextBox".

    Last Update before release:
    So, after testing the "RichTextBox" and "TextBox" i ask myself why those controls are there^^. Both can't edit text with more than a few hundert lines, the "TextBox" is at least much better as the "RichTextBox" but it also screws up when i comes to more as 250 kb text. So the "Editor" will be one of your installed applications. I add a little tool window, which offers the temporary download to the windows temp folder, after that i launch the windows "OpenAs" dialog that you can choose the editor you want. Also, i'll attach a "FileSystemWatcher" to the file that the upload automatically happens when you press save in your editor.

    Little Info:
    It take a few more days for the "edit" update, because i started also to implement the TAP pattern, this increased for example the download speed by factor 6. But to implement it the right way, i have to rewrite a lot of code in the AndroidCtrl.dll and AndroidCtrlUI.dll.

    Regards,
    Sebastian
    2
    Bug-Tracker
    If you can't use the SDK-Updater or the Version is 0.0, just close the ADB-Overlay delete the "platform-tools" directory and restart the ADB-Overlay.

    If the device won't connect via W-/Lan, check which version of android you are running... the latest version "SP2A.220505.002, May 2022" seems to break "Developer settings -> USB-Debugging -> Debug over W-/Lan"... To get it working anyways, just open a cmd prompt in the "platform-tools" folder, connect your device via USB and execute the following command: "adb tcpip 12345" (or some other port). After that, you should be able to connect your device via W-/Lan.


    App Freeze
    If the ADB-Overlay freezes during startup or by connecting a rooted device, the solution is to update the su binary. I encountered this problem yesterday on an older device running Android N. After an update to Magisk Canary [build 21005] the problem was solved.
    2
    Works for my Xperia X - and thanks for your help!