voidremote 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. voidremote/__init__.py +31 -0
  2. voidremote/adb/__init__.py +28 -0
  3. voidremote/adb/client.py +385 -0
  4. voidremote/adb/device_parser.py +286 -0
  5. voidremote/cli/__init__.py +5 -0
  6. voidremote/cli/main.py +987 -0
  7. voidremote/config/__init__.py +37 -0
  8. voidremote/config/settings.py +203 -0
  9. voidremote/controllers/__init__.py +5 -0
  10. voidremote/controllers/app_controller.py +222 -0
  11. voidremote/core/__init__.py +1 -0
  12. voidremote/core/automation.py +184 -0
  13. voidremote/models/__init__.py +31 -0
  14. voidremote/models/device.py +263 -0
  15. voidremote/network/__init__.py +1 -0
  16. voidremote/network/discovery.py +116 -0
  17. voidremote/services/__init__.py +13 -0
  18. voidremote/services/device_service.py +340 -0
  19. voidremote/services/input_service.py +181 -0
  20. voidremote/services/monitor_service.py +198 -0
  21. voidremote/ui/__init__.py +1 -0
  22. voidremote/ui/app.py +70 -0
  23. voidremote/ui/dialogs/__init__.py +6 -0
  24. voidremote/ui/dialogs/connect_dialog.py +149 -0
  25. voidremote/ui/dialogs/pair_dialog.py +189 -0
  26. voidremote/ui/main_window.py +371 -0
  27. voidremote/ui/theme.py +529 -0
  28. voidremote/ui/views/__init__.py +15 -0
  29. voidremote/ui/views/dashboard_view.py +233 -0
  30. voidremote/ui/views/files_view.py +305 -0
  31. voidremote/ui/views/monitor_view.py +236 -0
  32. voidremote/ui/views/settings_view.py +257 -0
  33. voidremote/ui/views/shell_view.py +234 -0
  34. voidremote/ui/widgets/__init__.py +14 -0
  35. voidremote/ui/widgets/device_card.py +259 -0
  36. voidremote/ui/widgets/log_view.py +159 -0
  37. voidremote/ui/widgets/metric_gauge.py +90 -0
  38. voidremote/utils/__init__.py +28 -0
  39. voidremote/utils/logging.py +120 -0
  40. voidremote/utils/security.py +216 -0
  41. voidremote-1.0.0.dist-info/METADATA +578 -0
  42. voidremote-1.0.0.dist-info/RECORD +46 -0
  43. voidremote-1.0.0.dist-info/WHEEL +5 -0
  44. voidremote-1.0.0.dist-info/entry_points.txt +5 -0
  45. voidremote-1.0.0.dist-info/licenses/LICENSE +21 -0
  46. voidremote-1.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,578 @@
1
+ Metadata-Version: 2.4
2
+ Name: voidremote
3
+ Version: 1.0.0
4
+ Summary: Wireless Android Remote Controller over ADB
5
+ Author-email: V0IDNETWORK <ilianothingg@gmail.com>
6
+ License: MIT License
7
+
8
+ Copyright (c) 2024 V0IDNETWORK <ilianothingg@gmail.com>
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ of this software and associated documentation files (the "Software"), to deal
12
+ in the Software without restriction, including without limitation the rights
13
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ copies of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included in all
18
+ copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
27
+
28
+ Project-URL: Homepage, https://github.com/V0IDNETWORK/VoidRemote
29
+ Project-URL: Documentation, https://github.com/V0IDNETWORK/VoidRemote/wiki
30
+ Project-URL: Repository, https://github.com/V0IDNETWORK/VoidRemote
31
+ Project-URL: Bug Tracker, https://github.com/V0IDNETWORK/VoidRemote/issues
32
+ Project-URL: Author, http://voidNetwork.ir/
33
+ Keywords: android,adb,remote,wireless,scrcpy,mirroring
34
+ Classifier: Development Status :: 4 - Beta
35
+ Classifier: Environment :: X11 Applications :: Qt
36
+ Classifier: Intended Audience :: Developers
37
+ Classifier: Intended Audience :: End Users/Desktop
38
+ Classifier: License :: OSI Approved :: MIT License
39
+ Classifier: Operating System :: OS Independent
40
+ Classifier: Programming Language :: Python :: 3
41
+ Classifier: Programming Language :: Python :: 3.12
42
+ Classifier: Programming Language :: Python :: 3.13
43
+ Classifier: Topic :: Utilities
44
+ Classifier: Topic :: System :: Hardware
45
+ Classifier: Topic :: Communications
46
+ Requires-Python: >=3.12
47
+ Description-Content-Type: text/markdown
48
+ License-File: LICENSE
49
+ Requires-Dist: PySide6>=6.7.0
50
+ Requires-Dist: click>=8.1.7
51
+ Requires-Dist: rich>=13.7.0
52
+ Requires-Dist: adb-shell>=0.4.4
53
+ Requires-Dist: Pillow>=10.3.0
54
+ Requires-Dist: psutil>=5.9.8
55
+ Requires-Dist: pydantic>=2.7.0
56
+ Requires-Dist: pydantic-settings>=2.3.0
57
+ Requires-Dist: cryptography>=42.0.0
58
+ Requires-Dist: appdirs>=1.4.4
59
+ Requires-Dist: requests>=2.32.0
60
+ Requires-Dist: numpy>=1.26.4
61
+ Requires-Dist: pyperclip>=1.8.2
62
+ Provides-Extra: dev
63
+ Requires-Dist: pytest>=8.2.0; extra == "dev"
64
+ Requires-Dist: pytest-asyncio>=0.23.7; extra == "dev"
65
+ Requires-Dist: pytest-cov>=5.0.0; extra == "dev"
66
+ Requires-Dist: pytest-mock>=3.14.0; extra == "dev"
67
+ Requires-Dist: black>=24.4.2; extra == "dev"
68
+ Requires-Dist: ruff>=0.4.7; extra == "dev"
69
+ Requires-Dist: mypy>=1.10.0; extra == "dev"
70
+ Requires-Dist: types-requests>=2.32.0; extra == "dev"
71
+ Requires-Dist: types-Pillow>=10.2.0; extra == "dev"
72
+ Requires-Dist: types-psutil>=5.9.5; extra == "dev"
73
+ Requires-Dist: types-appdirs>=1.4.3; extra == "dev"
74
+ Requires-Dist: pre-commit>=3.7.1; extra == "dev"
75
+ Provides-Extra: docs
76
+ Requires-Dist: mkdocs>=1.6.0; extra == "docs"
77
+ Requires-Dist: mkdocs-material>=9.5.0; extra == "docs"
78
+ Requires-Dist: mkdocstrings[python]>=0.25.0; extra == "docs"
79
+ Dynamic: license-file
80
+
81
+ # VoidRemote
82
+
83
+ <div align="center">
84
+
85
+ ```
86
+ โ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—
87
+ โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•”โ•โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•”โ•โ•โ•โ•โ•โ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•”โ•โ•โ•โ–ˆโ–ˆโ•—โ•šโ•โ•โ–ˆโ–ˆโ•”โ•โ•โ•โ–ˆโ–ˆโ•”โ•โ•โ•โ•โ•
88
+ โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•”โ–ˆโ–ˆโ–ˆโ–ˆโ•”โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—
89
+ โ•šโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•”โ•โ•โ• โ–ˆโ–ˆโ•‘โ•šโ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•”โ•โ•โ•
90
+ โ•šโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ• โ•šโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•‘ โ•šโ•โ• โ–ˆโ–ˆโ•‘โ•šโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ• โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—
91
+ โ•šโ•โ•โ•โ• โ•šโ•โ•โ•โ•โ•โ• โ•šโ•โ•โ•šโ•โ•โ•โ•โ•โ• โ•šโ•โ• โ•šโ•โ•โ•šโ•โ•โ•โ•โ•โ•โ•โ•šโ•โ• โ•šโ•โ• โ•šโ•โ•โ•โ•โ•โ• โ•šโ•โ• โ•šโ•โ•โ•โ•โ•โ•โ•
92
+ ```
93
+
94
+ **Wireless Android Remote Controller over ADB**
95
+
96
+ [![CI](https://github.com/V0IDNETWORK/VoidRemote/actions/workflows/ci.yml/badge.svg)](https://github.com/V0IDNETWORK/VoidRemote/actions/workflows/ci.yml)
97
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12%2B-blue.svg)](https://www.python.org/downloads/)
98
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
99
+ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
100
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
101
+
102
+ [Features](#features) ยท [Installation](#installation) ยท [Quick Start](#quick-start) ยท [CLI Reference](#cli-reference) ยท [GUI Guide](#gui-guide) ยท [Architecture](#architecture) ยท [Contributing](#contributing)
103
+
104
+ </div>
105
+
106
+ ---
107
+
108
+ ## Overview
109
+
110
+ VoidRemote is a cross-platform desktop application for **wirelessly controlling Android devices** through ADB (Android Debug Bridge). It pairs with Android's built-in Wireless Debugging feature โ€” no root required, no third-party server software, no cables.
111
+
112
+ Built entirely in Python with a modern PySide6 GUI and an enterprise-grade CLI, VoidRemote is designed for developers, testers, power users, and anyone who needs reliable, scriptable remote control of Android devices.
113
+
114
+ ---
115
+
116
+ ## Features
117
+
118
+ ### ๐Ÿ”— Device Management
119
+ - Discover USB and wireless ADB devices automatically
120
+ - Pair devices via Android 11+ Wireless Debugging (no USB needed after first pair)
121
+ - Auto-reconnect trusted devices on startup
122
+ - Full device info: model, Android version, CPU ABI, resolution, battery, IP, RAM, storage
123
+
124
+ ### ๐Ÿ–ฅ๏ธ Screen Mirroring
125
+ - Low-latency screen streaming using `screenrecord` + `screencap`
126
+ - Resizable mirror window, fullscreen support
127
+ - Screenshot capture (CLI + GUI)
128
+ - Screen recording with configurable bitrate and resolution
129
+
130
+ ### ๐Ÿ–ฑ๏ธ Input Control
131
+ - Mouse click, double-click, long press
132
+ - Swipe and drag gestures
133
+ - Keyboard text input with Unicode support
134
+ - Hardware key events (Home, Back, Volume, Power, etc.)
135
+ - Clipboard paste
136
+
137
+ ### ๐Ÿ“ File Manager
138
+ - Browse device file system
139
+ - Upload local files to device
140
+ - Download device files
141
+ - Subdirectory navigation with history
142
+
143
+ ### ๐Ÿ“ฆ APK Management
144
+ - Install APK (with replace/downgrade options)
145
+ - Uninstall packages by name
146
+ - Batch install via CLI
147
+
148
+ ### ๐Ÿ–ฅ Shell Terminal
149
+ - Embedded ADB shell with command history
150
+ - Up/down arrow navigation through history
151
+ - Colored output (errors in red)
152
+ - Per-device terminal sessions
153
+
154
+ ### ๐Ÿ“Š Real-time Monitoring
155
+ - CPU usage with sparkline graph
156
+ - RAM usage (used / total)
157
+ - Battery level and temperature
158
+ - Live metric cards with circular gauges
159
+
160
+ ### ๐Ÿค– Automation
161
+ - Record macro sequences (tap, swipe, text, keyevent)
162
+ - Play back macros with speed control and repeat
163
+ - Save/load macro library as JSON
164
+ - CLI integration for scripting
165
+
166
+ ### ๐Ÿ”ง Enterprise CLI
167
+ - 25+ commands with colored output
168
+ - JSON output mode (`--json`) for scripting
169
+ - Verbose and debug flags
170
+ - `voidremote doctor` for setup diagnosis
171
+
172
+ ### ๐ŸŽจ Modern GUI
173
+ - Dark theme with professional typography
174
+ - Sidebar navigation with 7 panels
175
+ - Device cards with live battery/state indicators
176
+ - Real-time log viewer with level filtering
177
+ - Settings panel with live save
178
+
179
+ ---
180
+
181
+ ## Screenshots
182
+
183
+ > _GUI screenshots will be added after first public release._
184
+
185
+ | Dashboard | Shell | Monitor |
186
+ |-----------|-------|---------|
187
+ | ![Dashboard](docs/screenshots/dashboard.png) | ![Shell](docs/screenshots/shell.png) | ![Monitor](docs/screenshots/monitor.png) |
188
+
189
+ ---
190
+
191
+ ## Requirements
192
+
193
+ | Requirement | Minimum Version |
194
+ |-------------|-----------------|
195
+ | Python | 3.12+ |
196
+ | ADB (Platform Tools) | 1.0.41+ |
197
+ | Android | 11+ (for Wireless Debugging) |
198
+ | OS | Windows 10+, macOS 12+, Ubuntu 22.04+ |
199
+
200
+ ### Python Dependencies
201
+ - **PySide6** โ€” Qt6 GUI framework
202
+ - **click** โ€” CLI framework
203
+ - **rich** โ€” Terminal formatting
204
+ - **pydantic** โ€” Settings validation
205
+ - **psutil** โ€” System metrics
206
+ - **Pillow** โ€” Image processing
207
+ - **cryptography** โ€” Secure config storage
208
+
209
+ ---
210
+
211
+ ## Installation
212
+
213
+ ### From PyPI (recommended)
214
+
215
+ ```bash
216
+ pip install voidremote
217
+ ```
218
+
219
+ ### From Source
220
+
221
+ ```bash
222
+ git clone https://github.com/V0IDNETWORK/VoidRemote.git
223
+ cd VoidRemote
224
+ pip install -e ".[dev]"
225
+ ```
226
+
227
+ ### Verify Installation
228
+
229
+ ```bash
230
+ voidremote doctor
231
+ ```
232
+
233
+ ---
234
+
235
+ ## Quick Start
236
+
237
+ ### 1. Enable Wireless Debugging on Android
238
+
239
+ 1. Go to **Settings โ†’ About Phone** and tap **Build Number** 7 times to enable Developer Options
240
+ 2. Go to **Settings โ†’ Developer Options โ†’ Wireless Debugging**
241
+ 3. Enable **Wireless Debugging**
242
+
243
+ ### 2. Pair Your Device
244
+
245
+ ```bash
246
+ # Interactive pairing wizard
247
+ voidremote pair
248
+
249
+ # Or provide all arguments at once
250
+ voidremote pair 192.168.1.50 37001 123456
251
+ ```
252
+
253
+ In the Wireless Debugging screen, tap **"Pair device with pairing code"** and enter the IP, port, and 6-digit code shown.
254
+
255
+ ### 3. Connect
256
+
257
+ ```bash
258
+ voidremote connect 192.168.1.50
259
+ ```
260
+
261
+ ### 4. List Devices
262
+
263
+ ```bash
264
+ voidremote devices
265
+ ```
266
+
267
+ ### 5. Launch GUI
268
+
269
+ ```bash
270
+ voidremote-gui
271
+ ```
272
+
273
+ ---
274
+
275
+ ## CLI Reference
276
+
277
+ ```
278
+ voidremote [OPTIONS] COMMAND
279
+
280
+ Options:
281
+ -v, --verbose Enable verbose output
282
+ --debug Enable debug logging
283
+ --json Output as JSON
284
+ -V, --version Show version and exit
285
+ -h, --help Show help
286
+
287
+ Commands:
288
+ devices List connected ADB devices
289
+ pair Pair via Wireless Debugging
290
+ connect Connect to device over TCP/IP
291
+ disconnect Disconnect a wireless device
292
+ info Show detailed device information
293
+ screenshot Capture a screenshot
294
+ shell Execute ADB shell command
295
+ tap Tap at screen coordinates
296
+ swipe Swipe between two points
297
+ text Type text on device
298
+ keyevent Send hardware key event
299
+ install Install an APK
300
+ uninstall Uninstall an app package
301
+ push Push file to device
302
+ pull Pull file from device
303
+ reboot Reboot device
304
+ battery Show battery status
305
+ wifi Show WiFi information
306
+ doctor Diagnose setup issues
307
+ version Show version information
308
+ logs View application logs
309
+ config Manage configuration
310
+ ```
311
+
312
+ ### Examples
313
+
314
+ ```bash
315
+ # Take a screenshot
316
+ voidremote screenshot 192.168.1.50:5555 ~/Desktop/screen.png
317
+
318
+ # Type text
319
+ voidremote text 192.168.1.50:5555 "hello world"
320
+
321
+ # Tap center of a 1080x2400 screen
322
+ voidremote tap 192.168.1.50:5555 540 1200
323
+
324
+ # Swipe up (scroll down)
325
+ voidremote swipe 192.168.1.50:5555 540 1500 540 500 --duration 400
326
+
327
+ # Press back
328
+ voidremote keyevent 192.168.1.50:5555 4
329
+
330
+ # Install APK
331
+ voidremote install 192.168.1.50:5555 ~/Downloads/app.apk
332
+
333
+ # Run shell command
334
+ voidremote shell 192.168.1.50:5555 getprop ro.build.version.release
335
+
336
+ # JSON output for scripting
337
+ voidremote --json devices | jq '.[].serial'
338
+
339
+ # Battery info as JSON
340
+ voidremote --json battery 192.168.1.50:5555
341
+
342
+ # Debug mode
343
+ voidremote --debug connect 192.168.1.50
344
+ ```
345
+
346
+ ---
347
+
348
+ ## GUI Guide
349
+
350
+ Launch the GUI with:
351
+
352
+ ```bash
353
+ voidremote-gui
354
+ ```
355
+
356
+ ### Sidebar Navigation
357
+
358
+ | Panel | Description |
359
+ |-------|-------------|
360
+ | ๐Ÿ“ฑ Devices | Dashboard with device cards |
361
+ | ๐Ÿ–ฅ๏ธ Mirror | Screen mirroring launcher |
362
+ | ๐Ÿ–ฅ Shell | ADB shell terminal |
363
+ | ๐Ÿ“Š Monitor | Real-time performance graphs |
364
+ | ๐Ÿ“ Files | File manager |
365
+ | โš™๏ธ Settings | Application settings |
366
+ | ๐Ÿ“‹ Logs | Live log viewer |
367
+
368
+ ### Keyboard Shortcuts
369
+
370
+ | Shortcut | Action |
371
+ |----------|--------|
372
+ | `F5` | Refresh device list |
373
+ | `Ctrl+Shift+C` | Open Connect dialog |
374
+ | `Ctrl+Shift+P` | Open Pair dialog |
375
+ | `Ctrl+Q` | Quit |
376
+
377
+ ---
378
+
379
+ ## Architecture
380
+
381
+ ```
382
+ voidremote/
383
+ โ”œโ”€โ”€ adb/ # ADB subprocess layer
384
+ โ”‚ โ”œโ”€โ”€ client.py # AdbClient โ€” raw command execution
385
+ โ”‚ โ””โ”€โ”€ device_parser.py # Parse ADB output into typed models
386
+ โ”œโ”€โ”€ cli/
387
+ โ”‚ โ””โ”€โ”€ main.py # Click CLI โ€” all 25+ commands
388
+ โ”œโ”€โ”€ config/
389
+ โ”‚ โ””โ”€โ”€ settings.py # Pydantic settings with JSON persistence
390
+ โ”œโ”€โ”€ controllers/
391
+ โ”‚ โ””โ”€โ”€ app_controller.py # DI root โ€” unified facade for CLI + GUI
392
+ โ”œโ”€โ”€ core/
393
+ โ”‚ โ””โ”€โ”€ automation.py # Macro recording and playback engine
394
+ โ”œโ”€โ”€ models/
395
+ โ”‚ โ””โ”€โ”€ device.py # Pydantic device models
396
+ โ”œโ”€โ”€ network/
397
+ โ”‚ โ””โ”€โ”€ discovery.py # Subnet scanner for ADB device discovery
398
+ โ”œโ”€โ”€ services/
399
+ โ”‚ โ”œโ”€โ”€ device_service.py # Device lifecycle + trusted device store
400
+ โ”‚ โ”œโ”€โ”€ input_service.py # Touch/keyboard/key event control
401
+ โ”‚ โ””โ”€โ”€ monitor_service.py # Background polling thread for metrics
402
+ โ”œโ”€โ”€ ui/
403
+ โ”‚ โ”œโ”€โ”€ app.py # QApplication bootstrap
404
+ โ”‚ โ”œโ”€โ”€ main_window.py # Main window + sidebar navigation
405
+ โ”‚ โ”œโ”€โ”€ theme.py # Dark QSS theme + color palette
406
+ โ”‚ โ”œโ”€โ”€ dialogs/ # Modal dialogs (pair, connect)
407
+ โ”‚ โ”œโ”€โ”€ views/ # Full-panel views (dashboard, shell, etc.)
408
+ โ”‚ โ””โ”€โ”€ widgets/ # Reusable widgets (DeviceCard, LogView, etc.)
409
+ โ””โ”€โ”€ utils/
410
+ โ”œโ”€โ”€ logging.py # Rotating file + colored console logging
411
+ โ””โ”€โ”€ security.py # Input validation + injection prevention
412
+ ```
413
+
414
+ ### Design Principles
415
+
416
+ - **Single ADB client**: One `AdbClient` instance shared via `AppController` (dependency injection root)
417
+ - **Layered architecture**: `CLI/GUI โ†’ Controller โ†’ Services โ†’ ADB Client`
418
+ - **Type safety**: Pydantic models for all data, type hints everywhere, mypy-compatible
419
+ - **Security-first**: All user input validated before reaching ADB; no shell=True anywhere
420
+ - **Thread safety**: Background tasks run in `QThread` (GUI) or `threading.Thread` (services)
421
+
422
+ ---
423
+
424
+ ## Configuration
425
+
426
+ VoidRemote stores its configuration in your platform's standard config directory:
427
+
428
+ | OS | Path |
429
+ |----|------|
430
+ | Windows | `%APPDATA%\V0IDNETWORK\VoidRemote\settings.json` |
431
+ | macOS | `~/Library/Application Support/VoidRemote/settings.json` |
432
+ | Linux | `~/.config/VoidRemote/settings.json` |
433
+
434
+ ```bash
435
+ # Show current config
436
+ voidremote config --show
437
+
438
+ # Reset to defaults
439
+ voidremote config --reset
440
+ ```
441
+
442
+ Configuration can also be set via environment variables:
443
+
444
+ ```bash
445
+ VOIDREMOTE_ADB__PATH=/usr/local/bin/adb
446
+ VOIDREMOTE_UI__THEME=dark
447
+ VOIDREMOTE_LOG__LEVEL=DEBUG
448
+ ```
449
+
450
+ ---
451
+
452
+ ## Troubleshooting
453
+
454
+ ### ADB not found
455
+
456
+ ```bash
457
+ # Verify ADB is installed
458
+ adb version
459
+
460
+ # If not, install Android Platform Tools:
461
+ # https://developer.android.com/tools/releases/platform-tools
462
+ # Then set the path in settings:
463
+ voidremote config --show
464
+ ```
465
+
466
+ ### Device not connecting wirelessly
467
+
468
+ 1. Ensure device and PC are on the **same WiFi network**
469
+ 2. Check that **Wireless Debugging** is enabled in Developer Options
470
+ 3. Try re-pairing: `voidremote pair`
471
+ 4. Verify firewall is not blocking port 5555
472
+
473
+ ### Unauthorized device
474
+
475
+ ```bash
476
+ # Revoke and re-authorize ADB
477
+ adb kill-server
478
+ voidremote connect 192.168.1.50
479
+ # Accept the "Allow USB debugging" prompt on the device
480
+ ```
481
+
482
+ ### GUI won't start
483
+
484
+ ```bash
485
+ # Check PySide6 is installed
486
+ python -c "import PySide6; print(PySide6.__version__)"
487
+
488
+ # On Linux, install Qt system dependencies:
489
+ sudo apt install libgl1 libglib2.0-0 libdbus-1-3
490
+ ```
491
+
492
+ ---
493
+
494
+ ## FAQ
495
+
496
+ **Q: Do I need root access?**
497
+ A: No. VoidRemote uses Android's standard ADB interface which requires only Developer Options to be enabled.
498
+
499
+ **Q: Does it work over mobile data / VPN?**
500
+ A: ADB TCP/IP works over any IP network where port 5555 is reachable. VPN tunnels are supported if they carry TCP traffic.
501
+
502
+ **Q: Can I control multiple devices at once?**
503
+ A: Yes. The CLI accepts `--serial` arguments and the GUI maintains separate sessions per device.
504
+
505
+ **Q: Is my device data sent anywhere?**
506
+ A: No. VoidRemote communicates only with your device via ADB. No telemetry, no cloud, no tracking.
507
+
508
+ **Q: Which Android versions are supported?**
509
+ A: ADB input and shell commands work on Android 4.0+. Wireless Debugging pairing requires Android 11+.
510
+
511
+ ---
512
+
513
+ ## Contributing
514
+
515
+ Contributions are warmly welcome! Please read [CONTRIBUTING.md](CONTRIBUTING.md) before submitting a pull request.
516
+
517
+ ```bash
518
+ # Fork the repo and clone your fork
519
+ git clone https://github.com/YOUR_USERNAME/VoidRemote.git
520
+ cd VoidRemote
521
+
522
+ # Install dev dependencies
523
+ pip install -e ".[dev]"
524
+
525
+ # Install pre-commit hooks
526
+ pre-commit install
527
+
528
+ # Run tests
529
+ pytest tests/ -v
530
+
531
+ # Check formatting
532
+ black --check voidremote/ tests/
533
+ ruff check voidremote/ tests/
534
+ ```
535
+
536
+ ---
537
+
538
+ ## Roadmap
539
+
540
+ - [ ] **v1.1**: Live screen mirroring via `scrcpy` Python bindings
541
+ - [ ] **v1.2**: Multi-device simultaneous control
542
+ - [ ] **v1.3**: Macro scheduling (cron-style task runner)
543
+ - [ ] **v1.4**: Plugin system for custom device profiles
544
+ - [ ] **v2.0**: Android TV remote support
545
+
546
+ ---
547
+
548
+ ## License
549
+
550
+ MIT License โ€” see [LICENSE](LICENSE) for full text.
551
+
552
+ ---
553
+
554
+ ## Author
555
+
556
+ **V0IDNETWORK**
557
+
558
+ > V0IDNETWORK is an ongoing, open research effort to document โ€” rigorously and accurately โ€” how the modern Internet's circumvention and surveillance technologies actually work at the protocol level, in support of a more open and resilient Internet.
559
+
560
+ | Platform | Link |
561
+ |----------|------|
562
+ | ๐ŸŒ Website | [voidNetwork.ir](http://voidNetwork.ir/) |
563
+ | ๐Ÿ’ป GitHub | [@V0IDNETWORK](https://github.com/V0IDNETWORK) |
564
+ | ๐Ÿ’ผ LinkedIn | [ilianothing](https://www.linkedin.com/in/ilianothing) |
565
+ | ๐Ÿ“ธ Instagram | [@ilianothing](https://www.instagram.com/ilianothing) |
566
+ | โ–ถ๏ธ YouTube | [@locailife](https://youtube.com/@locailife?si=KMPEWpxZg2CpgfX_) |
567
+ | ๐ŸŽฏ TryHackMe | [ilianothingg](https://tryhackme.com/p/ilianothingg) |
568
+ | โœ๏ธ Medium | [@ilianothingg](https://medium.com/@ilianothingg) |
569
+ | ๐Ÿ“ฌ Telegram | [@voidxMaster](https://t.me/voidxMaster) |
570
+ | ๐Ÿ“ง Email | [ilianothingg@gmail.com](mailto:ilianothingg@gmail.com) |
571
+
572
+ ---
573
+
574
+ <div align="center">
575
+
576
+ Made with โค๏ธ by V0IDNETWORK ยท [Star this repo](https://github.com/V0IDNETWORK/VoidRemote) if you find it useful!
577
+
578
+ </div>
@@ -0,0 +1,46 @@
1
+ voidremote/__init__.py,sha256=7sXTqK811GgibttsWicVYdP3P_HPirB4lNqw1y1GKAQ,804
2
+ voidremote/adb/__init__.py,sha256=lgltZ46x4urkpW3cxkO_AAFi7sR8ILI6TXk7qJY2Yec,658
3
+ voidremote/adb/client.py,sha256=RXAydGdmD9I3w8hJpNtp8fISdmSJqTZ6rEEKQOqltPo,13735
4
+ voidremote/adb/device_parser.py,sha256=ySfUs49AA-7eSSwgbJ-36BJC4fswTbVkK9PIDVW7ynU,9014
5
+ voidremote/cli/__init__.py,sha256=94vvRS7VAA5sX31npcOoJKgZngEezf_NuC3dr7jNC2c,100
6
+ voidremote/cli/main.py,sha256=L7Jb-avktibRukwFKZX_tQ6YW7StgEfJF1YXRQvaIH4,34330
7
+ voidremote/config/__init__.py,sha256=Hs27n9IsOVu1IltzE4-yuc0xnEg0J8AEtiOp8EHzykc,652
8
+ voidremote/config/settings.py,sha256=4wvZ7ezi0ujg-gjt2mti32AsC7TBqAeXn25WNJLboPk,7286
9
+ voidremote/controllers/__init__.py,sha256=Z_yrqU9Hr1CxX2J3cw2i4x3HB9lnOgV8gVZxVbm1i7g,136
10
+ voidremote/controllers/app_controller.py,sha256=h0QDaxXsBz2bmfqXl5IJGcMunrHCuEiHdNJ38ITVeDo,7997
11
+ voidremote/core/__init__.py,sha256=7pxArLZ-fGbaOIhWxvS-8TRfMg-pqrAw-LFsXI4hV6s,31
12
+ voidremote/core/automation.py,sha256=NiPS9a1huFCtKXaDoC7oYS_vvQi24g1p3Ouf_4tqw7Y,6159
13
+ voidremote/models/__init__.py,sha256=_6MU5UcE3IMpkUuDEzAofF8458cd-MtkULWk7Xs-BS4,529
14
+ voidremote/models/device.py,sha256=Z9v_Vyxq30bo2qqm01P2wMTLEsPof0dteJjbrlp1JTY,7984
15
+ voidremote/network/__init__.py,sha256=N4wMGF8nxsVItvmqmaXv6hl7kzrR4GnWphCmVZhqjlI,36
16
+ voidremote/network/discovery.py,sha256=HSqm7Sh9jRTsfjLp1lQKQAdvu9-FYGJtzFaQeRnWP84,3424
17
+ voidremote/services/__init__.py,sha256=22d7ZqQzhTs60vY0zjS80SxDrIi9mgrBuMOnItc2DEk,356
18
+ voidremote/services/device_service.py,sha256=LAeFVv-ej-mYYljjJ9iLbP9Pd1NplK9-Kk7cokeVl4A,11120
19
+ voidremote/services/input_service.py,sha256=4uOaEW5lGrkXL_naSlt8rEoXzA2CLHXmCRtQseUSh60,5415
20
+ voidremote/services/monitor_service.py,sha256=YYk97dYvk_Yj11F6KK2OdN9Z_9U8UlVu5Kjtz6wQjcw,6505
21
+ voidremote/ui/__init__.py,sha256=5dWKcJuReP5O_yMX2btZPR1GFoGoArKwQRoHoAtK9Hg,30
22
+ voidremote/ui/app.py,sha256=HYVkVNdlhUuaAXmNRmA-9Q6X1NIxC5I8YLHs4hgQRyU,1945
23
+ voidremote/ui/main_window.py,sha256=jFl9tFZoAbL6Z3Dtai4x_2DQZwF2KjpTJRUUxOVtjfM,14046
24
+ voidremote/ui/theme.py,sha256=CaReZ9uZ0y7UY89nihKAo179bsioYlIoA_BoSOyBUlA,12267
25
+ voidremote/ui/dialogs/__init__.py,sha256=1bhJ2r-_AQvUCJtdNfI1fJqUeWgrV4mV1Rrz4AINM1U,193
26
+ voidremote/ui/dialogs/connect_dialog.py,sha256=oraKsCE6nluERlyqp7PST4_uteWx1g0sXNE94Jg0SE8,4673
27
+ voidremote/ui/dialogs/pair_dialog.py,sha256=TUr4I3Ut4JuQE-axZRcWxw2YFRBCkJmXIFlM3d6h_mc,5905
28
+ voidremote/ui/views/__init__.py,sha256=D1Yh9UA2aOA0pmWleWZL1Qg1Ruy4YhWwSviispgdTU8,420
29
+ voidremote/ui/views/dashboard_view.py,sha256=O0gPLE2L53UVzlYys2XokZkkZmryXryiqs3uTBdakpw,8716
30
+ voidremote/ui/views/files_view.py,sha256=wfvBN8-nf9oq6iX5EmzyUThIrSfeNUqx9zbVXu1scMY,12034
31
+ voidremote/ui/views/monitor_view.py,sha256=vs-bKTMXoEepKmzulMMqiyCGJuYh11y-hS9SxS0k9G4,8543
32
+ voidremote/ui/views/settings_view.py,sha256=dTliEWBg_W4k_41cO56s_vPJvGI-eLcQxOsbX6NAjBA,9222
33
+ voidremote/ui/views/shell_view.py,sha256=GMe7vg0lPkG8yfCvScYTofL8BJjZArOhINKbHVWDzmw,8339
34
+ voidremote/ui/widgets/__init__.py,sha256=5kW1OTgdd-cfIATNI0zLhUzDNRpF5JMZprgeqDGZAJg,356
35
+ voidremote/ui/widgets/device_card.py,sha256=4iATAWq6aF8z4oFTxDaVdk1kMO9EuLzvLh476Y0fyF0,9472
36
+ voidremote/ui/widgets/log_view.py,sha256=CTTRrRDjbHdKRmmWhJnd-q1DWYU-qyVwyz5NZoTQYVU,5411
37
+ voidremote/ui/widgets/metric_gauge.py,sha256=nOuvXbmj2ieAgAk_wx0EU4BxXfjYZau21Y-VBDxkV3c,2836
38
+ voidremote/utils/__init__.py,sha256=E8iKU2qhYjRm7jhY4q4Wz1Wbidd5NUOnZcQDCu8r81U,646
39
+ voidremote/utils/logging.py,sha256=HeMCg38Z3YKFeqXduXj16g43b2CdcDXWKSWMLDBq1Gk,3764
40
+ voidremote/utils/security.py,sha256=Wzr4_t1QCYm2q-fEtPgttSGNWYwBQOs_CyxZCk_NJbE,5416
41
+ voidremote-1.0.0.dist-info/licenses/LICENSE,sha256=dEg1AI57WEpg6n3DqHcrtTney8-9HwQCaoY1pFbDZbc,1093
42
+ voidremote-1.0.0.dist-info/METADATA,sha256=2bxd3mvdmXAmXXC8Hg3hz2pT7ip-bf-457U5RMyKmAU,19517
43
+ voidremote-1.0.0.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
44
+ voidremote-1.0.0.dist-info/entry_points.txt,sha256=HXhdnMqIbOIoSkp0xmY4dzocJ1lu-vOF0cuTg7Esvys,110
45
+ voidremote-1.0.0.dist-info/top_level.txt,sha256=8ow5LSf1RHEg972UdHFErh7GSbqH8NFoGcPNoOSEXPQ,11
46
+ voidremote-1.0.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (83.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,5 @@
1
+ [console_scripts]
2
+ voidremote = voidremote.cli.main:cli
3
+
4
+ [gui_scripts]
5
+ voidremote-gui = voidremote.ui.app:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 V0IDNETWORK <ilianothingg@gmail.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ voidremote