diff --git a/.gitignore b/.gitignore index 1ae238c..76b0820 100644 --- a/.gitignore +++ b/.gitignore @@ -38,10 +38,6 @@ ATK_*.log *.tmp /tmp/ -# Raw font source dump (bundled fonts already live in frontend/src/assets/fonts/) -/DotGothic16,Geist_Pixel,Gugi,Orbitron,Playfair_Display,etc/ -/DotGothic16,Geist_Pixel,Gugi,Orbitron,Playfair_Display,etc.zip - # ── PROPRIETARY — Logcat visual map. NEVER publish to GitHub. ── # (Builds into the shipped binary as obfuscated JS + native Go; source stays private.) /proprietary/ diff --git a/README.md b/README.md index 2342b57..3495a0a 100644 --- a/README.md +++ b/README.md @@ -143,72 +143,34 @@ sudo apt install scrcpy | 🖥️ **Screen Mirror** | Live mirror and full control via scrcpy; detachable and recordable | | 📊 **Dashboard** | Device info, wireless ADB, reboot controls | | 📁 **File Explorer** | Browse the device and your computer, push and pull, image viewer | -| 📦 **Package Manager** | Install, uninstall, enable, disable, restore, pull APK, plus **privileged removal of protected system apps without root**. Correctly shows packages disabled/uninstalled by other tools (e.g. Canta/Shizuku) instead of hiding them, with a state filter (Enabled/Disabled/Uninstalled) | -| 📲 **APK Installer** | Batch-install APKs from a folder or hand-picked files, with live per-file progress and select all/none | -| 🧹 **Debloater** | 5,362 packages across Samsung, Xiaomi, Google, and 11 more OEMs | -| 💻 **Shell Terminal** | adb shell and host, command library, export session | -| 📡 **Live Logcat + System Map** | Real-time log streaming, plus a live, interactive map of system behaviour across subsystems | -| 🕵️ **App Inspector** | Permissions, components, certs, SSL-pinning check, plus a 0–100 **privacy score** from a DEX tracker/ad-SDK scan | -| 🚀 **Intent Lab** | List an app's launchable activities from `dumpsys` and start them with one click, plus a free-form implicit-intent launcher — reach hidden settings screens | +| 📦 **Package Manager** | Install, uninstall, enable, disable, pull APK, plus **privileged removal of protected system apps without root** | | 🔎 **APK Audit** | Static APK security audit: perms, trackers, certs, rule findings | +| 🧹 **Debloater** | 5,362 packages across Samsung, Xiaomi, Google, and 11 more OEMs | +| 📡 **Live Logcat + System Map** | Real-time log streaming, plus a live, interactive map of system behaviour across subsystems | +| 🕵️ **App Inspector** | Permissions, components, certs, SSL-pinning check | | 🔐 **Certificate Manager** | Install and remove user CAs for HTTPS interception | | 💾 **Device Backup** | `adb backup` with app selection and restore | | 🎚️ **Prop Editor** | Read and write all 300+ system properties | +| 💻 **Shell Terminal** | adb shell and host, command library, export session | | 🧰 **Utilities** | 631 one-click commands across 50+ categories | | ⚡ **Flasher** | Fastboot, live-boot, Magisk root, firmware download | -| 💿 **GSI Loader** | Boot a Generic System Image via **DSU** (temporary, no unlock/wipe) or a danger-gated **permanent fastboot flash**, with a Treble/ABI/VNDK compatibility pre-check | > [!TIP] -> Hide any module you don't use from **Settings → Sidebar Features**. 26 theme -> palettes — Dark, Catppuccin Frappé/Latte/Mocha/Macchiato, Dracula, Gruvbox -> Material, Nord, Tokyo Night, Solarized, Rosé Pine, Everforest, and more — -> plus a custom accent/text colour, 8 bundled display fonts, adjustable font -> size, and sidebar position (left, top, bottom) are all configurable too. A -> system tray icon (Linux) lets ATK keep running in the background instead of -> quitting. +> Hide any module you don't use from **Settings → Sidebar Features**. Theme +> (Dark, Catppuccin Frappé, Latte) and sidebar position (left, top, bottom) are +> configurable too. --- -## ✨ What's new in v1.3.0 +## ✨ What's new -- 🖥️ **System tray** (Linux): closing the window now offers **Minimize to - Tray** instead of only Quit, with a tray menu to show/hide the window or - quit for good. -- 📲 **APK Installer**: a new module to batch-install APKs from a folder or - hand-picked files, with live per-file progress and select all/none. -- 📦 **Package visibility fix**: Packages and App Inspector were silently - hiding any package disabled/uninstalled by tools like Canta or Shizuku - (`pm uninstall --user 0` doesn't fully remove it, just hides it from a plain - package list). They now show correctly, with a state filter - (Enabled/Disabled/Uninstalled) and per-row Restore/Enable/Disable/Uninstall. -- 🎨 **6 more theme palettes** — Nord, Tokyo Night, Solarized Dark/Light, Rosé - Pine, Everforest (26 total) — plus a custom text colour, 8 bundled display - fonts, and an adjustable base font size, all in Settings → Appearance. -- 🖱️ **Sidebar polish**: a horizontal (top/bottom) sidebar now shrinks label - text progressively as the window narrows instead of showing a scrollbar, - and a touchpad-triggered stuck-scrollbar-drag bug is fixed. - -
-Previous release (v1.2.0) - -- 💿 **GSI Loader**: boot a Generic System Image via **DSU** (temporary guest OS) - or a danger-gated **permanent fastboot flash**, with a built-in compatibility - pre-check. -- 🚀 **Intent Lab**: list and launch an app's exported activities from `dumpsys`, - plus a free-form implicit-intent launcher, to reach hidden settings screens. -- 🕵️ **Privacy & Tracker Scanner**: a 0–100 privacy score and A–F grade for any - app, from an offline DEX tracker/ad-SDK scan, built into App Inspector. -- 🔒 **App Lock**: password-protect the app and gate destructive actions - (flashing, permanent GSI install) behind a separate danger-unlock. -- 🎨 **~14 new theme palettes** — Dracula, Catppuccin Mocha/Macchiato, Gruvbox - Material, C64, Adventure Time, and more. -- 🧹 **Debloater**: unmatched device packages now show as **Unknown** instead of - disappearing from the list. -- 🔐 **Security**: fixed a path-injection issue in the local file viewer, and - bumped several dependencies with known CVEs (`x/image`, `x/net`, `vite`, - `postcss`, `esbuild`). - -
+- 📡 **Live System Map**: turn logcat into a live, interactive map of system behaviour across subsystems *(see below)*. +- 🧹 **Debloater database grew from 2,157 to 5,362 packages**, with a **privileged uninstall of protected system apps without root** and a one-click **restore**. +- 🧰 **Utilities expanded to 631 one-click commands** across 50+ categories. +- 🎨 **Themes**: Dark, Catppuccin **Frappé**, and **Latte**. Dismissible safety banners. +- 🔎 **APK Audit** exports to **JSON, CSV, SARIF**, with an in-app APK explorer. +- 📦 **Smarter package ops**: combined *Disable + Uninstall*, a *disabled* badge, and verify-then-escalate so removals stick. +- 🔌 **Offline-capable UI**: fonts are self-hosted, with no runtime CDN fetches. --- @@ -292,28 +254,6 @@ Browse factory images: https://developers.google.com/android/images --- -## 💿 GSI Loader - -Boot a Generic System Image (GSI) two different ways, each with its own risk -profile. - -| Mode | What it does | -|---|---| -| **DSU (Temporary)** | Loads the GSI as a guest OS via Android's Dynamic System Updates. No bootloader unlock, no data wipe — reboot to return to your normal system | -| **GSI Flasher (Permanent)** | Fastboot-flashes the GSI to the system partition. Destructive: wipes userdata, needs an unlocked bootloader. Danger-gated behind App Lock | - -Both modes run a **compatibility pre-check** first — Treble enablement, CPU ABI, -VNDK isolation, and Android version — so you know whether a GSI is even viable -on the connected device before you commit to either path. You supply the GSI -image file (ATK doesn't fetch these — see Android Flash Tool / ci.android.com). - -> [!IMPORTANT] -> The permanent flash path wipes user data and requires an unlocked bootloader. -> It's gated behind App Lock's danger-unlock, same as other destructive flash -> operations. - ---- - ## 🔎 APK Audit A static security audit of any APK, whether a browsed file or an app pulled off @@ -355,7 +295,6 @@ Coverage: Samsung · Xiaomi · OnePlus/Oppo · Huawei · Sony · Motorola · LG > - **No bundled binaries.** ATK resolves `adb`, `fastboot`, and `scrcpy` from your PATH. Settings shows each binary's path and SHA-256 to verify against Google's published checksums. > - **No host shell string-building.** Host commands use `exec.Command(binary, args…)` (direct `execve`, no shell). Paths sent to the *device* shell are quoted, so filenames with spaces or special characters stay safe. > - **Input validation.** ATK validates package names, partitions, IPs, and remote paths. Fastboot flash uses a partition allowlist. Destructive flash and bootloader actions confirm first. -> - **App Lock.** Optionally password-protect the app itself, with a separate danger-unlock required for destructive actions (permanent flashing, permanent GSI install, wiping). --- @@ -364,12 +303,12 @@ Coverage: Samsung · Xiaomi · OnePlus/Oppo · Huawei · Sony · Motorola · LG **Prerequisites on Ubuntu/Debian** ```bash sudo apt install -y build-essential pkg-config libgtk-3-dev \ - libwebkit2gtk-4.1-dev adb fastboot + libwebkit2gtk-4.1-dev libayatana-appindicator3-dev adb fastboot -# Go 1.25+ (required by go.mod) -wget https://go.dev/dl/go1.25.0.linux-amd64.tar.gz +# Go 1.23 +wget https://go.dev/dl/go1.23.0.linux-amd64.tar.gz sudo rm -rf /usr/local/go -sudo tar -C /usr/local -xzf go1.25.0.linux-amd64.tar.gz +sudo tar -C /usr/local -xzf go1.23.0.linux-amd64.tar.gz echo 'export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin' >> ~/.bashrc source ~/.bashrc diff --git a/RELEASE_NOTES_v1.1.0.md b/RELEASE_NOTES_v1.1.0.md new file mode 100644 index 0000000..33d02e7 --- /dev/null +++ b/RELEASE_NOTES_v1.1.0.md @@ -0,0 +1,45 @@ +# ATK v1.1.0 — the Live System Map release + +The all-in-one, OEM-style Android toolkit for power users, security researchers, +and bug hunters — now with a **first-of-its-kind real-time debugging engine**. + +## ⭐ Headline — Live System Map +Turn the raw logcat firehose into a **live, interactive map of what your phone is +actually doing**. A real-time engine unifies system-level telemetry from many +subsystems into a single live relational model — processes, services, tags and +components become nodes; launches, crashes, ANRs, kills, signals and +graphics/audio events become edges; every event flows source → destination. + +- 🌐 Multiple render modes — crisp 2D graph, neon flow view, 3D hierarchical tree +- 🧩 Layouts — force-directed, hub boxes, radial-by-importance, geometric +- 🌊 Trackable flows — follow individual events between subsystems +- 🚨 Auto-surfacing of crashes / ANRs / errors + your own keyword watch-rules +- 🎯 Focus tools — isolate a node, watchlist, severity/kind filters, timeline, baseline diff +- 🎥 Capture & export the packet stream for offline analysis + +## ✨ What's new +- 📡 **Live System Map** — the flagship real-time visualization (above). +- 🧹 **Debloater database 2,157 → 5,362 packages** (Samsung, Xiaomi, Google + 11 more OEMs). +- 🔓 **Privileged uninstall of protected system apps — without root**, plus one-click **restore**. +- 🧰 **Utilities expanded to 631 one-click commands** across 50+ categories. +- 🔎 **APK Audit** — static security audit (perms, trackers, certs, CWE/MASVS rule findings) with an in-app APK explorer and **JSON · CSV · SARIF** export. +- 🎨 **Themes** — Dark, Catppuccin **Frappé** & **Latte**; configurable sidebar; dismissible safety banners. +- 📦 **Smarter package ops** — combined *Disable + Uninstall*, a *disabled* badge, and verify-then-escalate so removals actually stick. +- 🔌 **Fully offline-capable UI** — self-hosted fonts, no runtime CDN fetches. +- 🖼️ New app icon. + +## 📦 Install (Linux) +**Debian / Ubuntu:** +```bash +sudo dpkg -i atk_1.1.0_amd64.deb +``` +Requirements: `adb`, `fastboot`, `libgtk-3-0`, `libwebkit2gtk-4.1-0` +(`scrcpy` only needed for the Screen Mirror module). + +Other distros: build from source — see the README. + +> ⚠️ Linux only. No bundled binaries — ATK uses *your* system `adb`/`fastboot`/`scrcpy`. + +## 🙏 Credits +Built on the open-source community — scrcpy, Magisk, Universal Android Debloater, +Wails, Lucide, and more. Full attributions and licenses are in the README. GPL-3.0. diff --git a/RELEASE_NOTES_v1.2.0.md b/RELEASE_NOTES_v1.2.0.md deleted file mode 100644 index 25d3750..0000000 --- a/RELEASE_NOTES_v1.2.0.md +++ /dev/null @@ -1,58 +0,0 @@ -# ATK v1.2.0 - -Six new tools, a big theming pass, and a security cleanup. - -## ✨ What's new -- 💿 **GSI Loader** — boot a Generic System Image two ways: **DSU** (temporary - guest OS, no unlock/wipe, reboot to reclean) or a **permanent fastboot flash** - (danger-gated, requires unlocked bootloader). Built-in compatibility pre-check - (Treble, ABI, VNDK isolation) before either path. -- 🚀 **Intent Lab** — list an app's launchable (exported) activities straight from - `dumpsys` and start them with one click, plus a free-form implicit-intent - launcher. Reach hidden settings menus and internal screens that never show up - on the launcher. -- 📥 **Firmware** — download and SHA-verify firmware images for a device - codename, right from the app. -- 📱 **Screen Mirror** — scrcpy integration: start/stop mirroring and grab - screenshots without leaving ATK. -- 🧙 **Magisk integration** — install Magisk, extract/patch boot images, and - manage installed modules (list, toggle, remove) in one panel. -- 🕵️ **Privacy & Tracker Scanner** — scans an app's DEX bytecode for known - tracker/analytics/ad SDK signatures, cross-references dangerous permissions, - and derives a 0–100 privacy score with an A–F grade. Fully offline, no - network calls. -- 🔒 **App Lock** — password-protect the app and gate destructive actions - (flashing, permanent GSI install, etc.) behind a separate danger-unlock. -- 🔓 **Privileged uninstall, no root** — removes protected system apps via a - bundled Android helper, with one-click restore. -- 🎨 **~14 new theme palettes** (Dracula, Catppuccin Mocha/Macchiato, - Gruvbox Material, C64, Adventure Time, and more), on top of the existing - Dark/Frappé/Latte. -- 🧹 **Debloater**: device packages with no UAD database match now show as - **Unknown/Uncategorized** instead of silently disappearing from the list. -- 🔎 **APK Audit**: entry viewer now has syntax-highlighted code display instead - of a plain text dump. - -## 🔐 Security -- Fixed a path-injection issue in the local file viewer (CodeQL - `go/path-injection`) — the resolved path is now validated as a real, regular - file before being served. -- Dependency bumps: `golang.org/x/image` and `golang.org/x/net` (DoS fixes), - `vite`, `postcss`, and `esbuild` (dev-tooling only, not shipped in the - built app). - -## 📦 Install (Linux) -**Debian / Ubuntu:** -```bash -sudo dpkg -i atk_1.2.0_amd64.deb -``` -Requirements: `adb`, `fastboot`, `libgtk-3-0`, `libwebkit2gtk-4.1-0` -(`scrcpy` only needed for the Screen Mirror module). - -Other distros: build from source — see the README. - -> ⚠️ Linux only. No bundled binaries — ATK uses *your* system `adb`/`fastboot`/`scrcpy`. - -## 🙏 Credits -Built on the open-source community — scrcpy, Magisk, Universal Android Debloater, -Wails, Lucide, and more. Full attributions and licenses are in the README. GPL-3.0. diff --git a/app.go b/app.go index 1734c26..338b84a 100644 --- a/app.go +++ b/app.go @@ -60,11 +60,6 @@ type FileEntry struct { type PackageInfo struct { PackageName string `json:"packageName"` IsEnabled bool `json:"isEnabled"` - // IsInstalled is false when the package is present on the system image but - // uninstalled for user 0 (e.g. via `pm uninstall --user 0`, which is what - // Canta/Shizuku do to "remove" a system app). Such packages are still on - // disk and show up in `pm list packages -u`, but not in the plain listing. - IsInstalled bool `json:"isInstalled"` } // AdbConfig holds user-configurable ADB settings @@ -89,10 +84,6 @@ type App struct { // app-lock "require password for destructive actions" session window dangerMu sync.Mutex dangerUntil time.Time - - // window visibility, tracked for the tray's show/hide toggle - windowMu sync.Mutex - windowShown bool } // NewApp creates a new App instance @@ -106,10 +97,8 @@ func NewApp() *App { // Startup is called when the app starts func (a *App) Startup(ctx context.Context) { a.ctx = ctx - a.windowShown = true // Frameless windows can open off-centre on some WMs; centre on launch. runtime.WindowCenter(ctx) - initTray(a) } // Shutdown is called when the app is closing — tidy up spawned child processes @@ -122,57 +111,4 @@ func (a *App) Shutdown(ctx context.Context) { if !detached { a.StopScrcpy() } - closeTray() -} - -// ShowWindow restores the main window - used by the tray's "Show ATK" / -// left-click action and by the frontend's "Minimize to tray" quit dialog. -func (a *App) ShowWindow() { - a.windowMu.Lock() - a.windowShown = true - a.windowMu.Unlock() - runtime.WindowShow(a.ctx) - runtime.WindowUnminimise(a.ctx) -} - -// HideWindow parks the window (app keeps running, reachable from the tray). -func (a *App) HideWindow() { - a.windowMu.Lock() - a.windowShown = false - a.windowMu.Unlock() - runtime.WindowHide(a.ctx) -} - -// ToggleWindow shows the window if hidden, hides it if shown - the tray's -// left-click / "Show ATK" menu action. -func (a *App) ToggleWindow() { - a.windowMu.Lock() - shown := a.windowShown - a.windowMu.Unlock() - if shown { - a.HideWindow() - } else { - a.ShowWindow() - } -} - -// TrayAvailable reports whether a real system tray icon was registered (e.g. -// false on Linux if no StatusNotifierWatcher/AppIndicator host is running). -// The frontend uses this to decide whether "Minimize to tray" is even a -// sensible option to offer in the close-confirmation dialog. -func (a *App) TrayAvailable() bool { - return trayAvailable() -} - -// QuitApp fully quits ATK (not just the window) - used by both the tray's -// "Quit ATK" menu item and the frontend's close-confirmation dialog. -func (a *App) QuitApp() { - runtime.Quit(a.ctx) -} - -// OpenURL opens a link in the user's default system browser. A bare isn't reliable inside the embedded webview - this is -// Wails' supported way to hand off to the OS. -func (a *App) OpenURL(url string) { - runtime.BrowserOpenURL(a.ctx, url) } diff --git a/assets/atk-tray-symbolic.svg b/assets/atk-tray-symbolic.svg deleted file mode 100644 index 6f6c1ff..0000000 --- a/assets/atk-tray-symbolic.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/assets/tray_icon.ico b/assets/tray_icon.ico deleted file mode 100644 index 5f3729f..0000000 Binary files a/assets/tray_icon.ico and /dev/null differ diff --git a/assets/tray_icon.png b/assets/tray_icon.png deleted file mode 100644 index d56c38f..0000000 Binary files a/assets/tray_icon.png and /dev/null differ diff --git a/assets/tray_icon_template.png b/assets/tray_icon_template.png deleted file mode 100644 index f8ce508..0000000 Binary files a/assets/tray_icon_template.png and /dev/null differ diff --git a/backend_apkinstaller.go b/backend_apkinstaller.go deleted file mode 100644 index 882489b..0000000 --- a/backend_apkinstaller.go +++ /dev/null @@ -1,118 +0,0 @@ -package main - -import ( - "fmt" - "os" - "path/filepath" - "sort" - "strings" - - "github.com/wailsapp/wails/v2/pkg/runtime" -) - -// ApkFileInfo describes one APK found in a chosen folder, for the batch -// installer's checklist. -type ApkFileInfo struct { - Path string `json:"path"` - Name string `json:"name"` - Size int64 `json:"size"` -} - -// ListApksInFolder scans a folder (non-recursive) for .apk files. -func (a *App) ListApksInFolder(folderPath string) ([]ApkFileInfo, error) { - entries, err := os.ReadDir(folderPath) - if err != nil { - return nil, fmt.Errorf("could not read folder: %w", err) - } - - var apks []ApkFileInfo - for _, e := range entries { - if e.IsDir() || !strings.EqualFold(filepath.Ext(e.Name()), ".apk") { - continue - } - info, err := e.Info() - if err != nil { - continue - } - apks = append(apks, ApkFileInfo{ - Path: filepath.Join(folderPath, e.Name()), - Name: e.Name(), - Size: info.Size(), - }) - } - sort.Slice(apks, func(i, j int) bool { return apks[i].Name < apks[j].Name }) - return apks, nil -} - -// StatApkFiles builds ApkFileInfo entries for explicitly chosen APK paths -// (from the multi-file picker), so manual selection and folder scans feed the -// same checklist shape. Unreadable paths are silently skipped. -func (a *App) StatApkFiles(paths []string) ([]ApkFileInfo, error) { - out := make([]ApkFileInfo, 0, len(paths)) - for _, p := range paths { - info, err := os.Stat(p) - if err != nil || info.IsDir() { - continue - } - out = append(out, ApkFileInfo{Path: p, Name: info.Name(), Size: info.Size()}) - } - return out, nil -} - -// InstallApksWithProgress installs each APK in order (adb install -r), -// emitting apkinstall:progress events so the UI can show a live per-file -// checklist rather than one opaque spinner. Cancellable via CancelOperation. -func (a *App) InstallApksWithProgress(paths []string) (string, error) { - if len(paths) == 0 { - return "", fmt.Errorf("no APKs selected") - } - - ctx, cancel := a.beginCancellableOp(0) - defer cancel() - - total := len(paths) - var ok, fail int - var details strings.Builder - - for i, p := range paths { - name := baseName(p) - // Keyed by full path (not just fileName) - two selected APKs from - // different folders can share a filename, and the path is what's - // actually unique in the frontend's checklist. - runtime.EventsEmit(a.ctx, "apkinstall:progress", map[string]interface{}{ - "current": i + 1, "total": total, "path": p, "fileName": name, "status": "installing", - }) - - output, err := a.runCommandContext(ctx, "adb", "install", "-r", p) - status, msg := "success", "" - switch { - case err != nil: - status = "failed" - msg = err.Error() - case strings.Contains(output, "Failure"): - status = "failed" - msg = strings.TrimSpace(output) - } - - if status == "success" { - ok++ - } else { - fail++ - details.WriteString(fmt.Sprintf("• %s: %s\n", name, msg)) - } - runtime.EventsEmit(a.ctx, "apkinstall:progress", map[string]interface{}{ - "current": i + 1, "total": total, "path": p, "fileName": name, "status": status, "message": msg, - }) - - if strings.Contains(msg, "cancelled") { - break - } - } - runtime.EventsEmit(a.ctx, "apkinstall:done", nil) - - summary := fmt.Sprintf("Installed %d of %d APK(s).", ok, total) - if fail > 0 { - summary += fmt.Sprintf(" Failed: %d\n%s", fail, details.String()) - } - return summary, nil -} diff --git a/dialog_service.go b/dialog_service.go index 0f2f0aa..6c124f2 100644 --- a/dialog_service.go +++ b/dialog_service.go @@ -78,33 +78,6 @@ func (a *App) SelectDirectoryForPull() (string, error) { return path, err } -// SelectApkFolder opens a native directory picker for a folder of APKs to -// batch-install. -func (a *App) SelectApkFolder() (string, error) { - path, err := zenity.SelectFile( - zenity.Title("Select a folder of APKs"), - zenity.Directory(), - ) - if err == zenity.ErrCanceled { - return "", nil - } - return path, err -} - -// SelectMultipleApkFiles opens a native multi-file picker filtered to APKs. -func (a *App) SelectMultipleApkFiles() ([]string, error) { - paths, err := zenity.SelectFileMultiple( - zenity.Title("Select APKs to install"), - zenity.FileFilters{ - {Name: "APK files", Patterns: []string{"*.apk"}, CaseFold: true}, - }, - ) - if err == zenity.ErrCanceled { - return nil, nil - } - return paths, err -} - // SelectFileWithFilter opens a file picker with custom file type filters. func (a *App) SelectFileWithFilter(title string, patterns []string) (string, error) { filters := []zenity.FileFilter{ diff --git a/frontend/package.json.md5 b/frontend/package.json.md5 index 1ef7d15..edfbbde 100755 --- a/frontend/package.json.md5 +++ b/frontend/package.json.md5 @@ -1 +1 @@ -5044e767932c804d924f539d25c7ab46 \ No newline at end of file +bfb47127747332de1e5119ef153cca76 \ No newline at end of file diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index ddcc4e2..8ee6283 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -5,12 +5,10 @@ import TitleBar from './components/layout/TitleBar' import DismissibleBanner from './components/DismissibleBanner' import LockGate from './components/LockGate' import DangerGate from './components/DangerGate' -import QuitGate from './components/QuitGate' import ViewDashboard from './components/views/ViewDashboard' import ViewFiles from './components/views/ViewFiles' import ViewScreenMirror from './components/views/ViewScreenMirror' import ViewPackages from './components/views/ViewPackages' -import ViewApkInstaller from './components/views/ViewApkInstaller' import ViewDebloater from './components/views/ViewDebloater' import ViewShell from './components/views/ViewShell' import ViewLogcat from './components/views/ViewLogcat' @@ -57,7 +55,6 @@ export default function App() { case 'files': return case 'mirror': return case 'packages': return - case 'apkinstaller': return case 'debloater': return case 'shell': return case 'logcat': return @@ -91,7 +88,6 @@ export default function App() { return (
-
{sidebarPos !== 'bottom' && sidebar} diff --git a/frontend/src/assets/fonts/DotGothic16-Regular.ttf b/frontend/src/assets/fonts/DotGothic16-Regular.ttf deleted file mode 100644 index 6634bc1..0000000 Binary files a/frontend/src/assets/fonts/DotGothic16-Regular.ttf and /dev/null differ diff --git a/frontend/src/assets/fonts/GeistPixel-Regular-VariableFont_ELSH.ttf b/frontend/src/assets/fonts/GeistPixel-Regular-VariableFont_ELSH.ttf deleted file mode 100644 index 017376d..0000000 Binary files a/frontend/src/assets/fonts/GeistPixel-Regular-VariableFont_ELSH.ttf and /dev/null differ diff --git a/frontend/src/assets/fonts/Gugi-Regular.ttf b/frontend/src/assets/fonts/Gugi-Regular.ttf deleted file mode 100644 index b500dbf..0000000 Binary files a/frontend/src/assets/fonts/Gugi-Regular.ttf and /dev/null differ diff --git a/frontend/src/assets/fonts/Orbitron-VariableFont_wght.ttf b/frontend/src/assets/fonts/Orbitron-VariableFont_wght.ttf deleted file mode 100644 index 7d0d5e0..0000000 Binary files a/frontend/src/assets/fonts/Orbitron-VariableFont_wght.ttf and /dev/null differ diff --git a/frontend/src/assets/fonts/PlayfairDisplay-VariableFont_wght.ttf b/frontend/src/assets/fonts/PlayfairDisplay-VariableFont_wght.ttf deleted file mode 100644 index b8d2d2c..0000000 Binary files a/frontend/src/assets/fonts/PlayfairDisplay-VariableFont_wght.ttf and /dev/null differ diff --git a/frontend/src/assets/fonts/PressStart2P-Regular.ttf b/frontend/src/assets/fonts/PressStart2P-Regular.ttf deleted file mode 100644 index 2442aff..0000000 Binary files a/frontend/src/assets/fonts/PressStart2P-Regular.ttf and /dev/null differ diff --git a/frontend/src/assets/fonts/SpaceGrotesk-VariableFont_wght.ttf b/frontend/src/assets/fonts/SpaceGrotesk-VariableFont_wght.ttf deleted file mode 100644 index 2c6cc59..0000000 Binary files a/frontend/src/assets/fonts/SpaceGrotesk-VariableFont_wght.ttf and /dev/null differ diff --git a/frontend/src/assets/fonts/VT323-Regular.ttf b/frontend/src/assets/fonts/VT323-Regular.ttf deleted file mode 100644 index 6aec599..0000000 Binary files a/frontend/src/assets/fonts/VT323-Regular.ttf and /dev/null differ diff --git a/frontend/src/assets/fonts/licenses/DotGothic16-OFL.txt b/frontend/src/assets/fonts/licenses/DotGothic16-OFL.txt deleted file mode 100644 index 7c6649c..0000000 --- a/frontend/src/assets/fonts/licenses/DotGothic16-OFL.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright 2020 The DotGothic16 Project Authors (https://github.com/fontworks-fonts/DotGothic16) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -https://openfontlicense.org - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/frontend/src/assets/fonts/licenses/Geist_Pixel-OFL.txt b/frontend/src/assets/fonts/licenses/Geist_Pixel-OFL.txt deleted file mode 100644 index eb4e73e..0000000 --- a/frontend/src/assets/fonts/licenses/Geist_Pixel-OFL.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright 2026 The Geist Project Authors (https://github.com/vercel/geist-font) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -https://openfontlicense.org - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/frontend/src/assets/fonts/licenses/Gugi-OFL.txt b/frontend/src/assets/fonts/licenses/Gugi-OFL.txt deleted file mode 100644 index e1a5e7a..0000000 --- a/frontend/src/assets/fonts/licenses/Gugi-OFL.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright (c) 2017 by TAE System & Typefaces Co.. All rights reserved. - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -https://openfontlicense.org - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/frontend/src/assets/fonts/licenses/Orbitron-OFL.txt b/frontend/src/assets/fonts/licenses/Orbitron-OFL.txt deleted file mode 100644 index 01f6fab..0000000 --- a/frontend/src/assets/fonts/licenses/Orbitron-OFL.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright 2018 The Orbitron Project Authors (https://github.com/theleagueof/orbitron), with Reserved Font Name: "Orbitron" - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -https://openfontlicense.org - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/frontend/src/assets/fonts/licenses/Playfair_Display-OFL.txt b/frontend/src/assets/fonts/licenses/Playfair_Display-OFL.txt deleted file mode 100644 index 3f1f22a..0000000 --- a/frontend/src/assets/fonts/licenses/Playfair_Display-OFL.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright 2017 The Playfair Display Project Authors (https://github.com/clauseggers/Playfair-Display), with Reserved Font Name "Playfair Display" - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -https://openfontlicense.org - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/frontend/src/assets/fonts/licenses/Press_Start_2P-OFL.txt b/frontend/src/assets/fonts/licenses/Press_Start_2P-OFL.txt deleted file mode 100644 index 70041e1..0000000 --- a/frontend/src/assets/fonts/licenses/Press_Start_2P-OFL.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright 2012 The Press Start 2P Project Authors (cody@zone38.net), with Reserved Font Name "Press Start 2P". - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -https://openfontlicense.org - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/frontend/src/assets/fonts/licenses/Space_Grotesk-OFL.txt b/frontend/src/assets/fonts/licenses/Space_Grotesk-OFL.txt deleted file mode 100644 index 014b75d..0000000 --- a/frontend/src/assets/fonts/licenses/Space_Grotesk-OFL.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright 2020 The Space Grotesk Project Authors (https://github.com/floriankarsten/space-grotesk) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -https://openfontlicense.org - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/frontend/src/assets/fonts/licenses/VT323-OFL.txt b/frontend/src/assets/fonts/licenses/VT323-OFL.txt deleted file mode 100644 index e229272..0000000 --- a/frontend/src/assets/fonts/licenses/VT323-OFL.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright 2011, The VT323 Project Authors (peter.hull@oikoi.com) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -https://openfontlicense.org - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/frontend/src/components/QuitGate.tsx b/frontend/src/components/QuitGate.tsx deleted file mode 100644 index 5f220ee..0000000 --- a/frontend/src/components/QuitGate.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { useEffect, useState } from 'react' -import { LogOut, Minus, X } from 'lucide-react' -import { HideWindow, QuitApp, TrayAvailable } from '../lib/wails' -import { _registerQuitHost } from '../lib/quitgate' - -// Modal shown when the title bar's close button is clicked. Mirrors -// Frequency's close dialog: offer Minimize-to-tray (default) alongside Quit, -// rather than one silently winning. "Minimize to tray" only shows up if a -// tray icon actually registered (TrayAvailable) - otherwise there'd be no way -// back to the window. -export default function QuitGate() { - const [open, setOpen] = useState(false) - const [trayOk, setTrayOk] = useState(false) - - useEffect(() => _registerQuitHost(() => { - TrayAvailable().then(setTrayOk).catch(() => setTrayOk(false)) - setOpen(true) - }), []) - - if (!open) return null - - const close = () => setOpen(false) - const minimize = () => { close(); HideWindow() } - const quit = () => { close(); QuitApp() } - - return ( -
{ if (e.target === e.currentTarget) close() }} - > -
-
-

Close ATK?

- -
-

- {trayOk - ? 'ATK can keep running in the background and stay reachable from the tray, or quit completely.' - : 'No tray icon is available on this system, so closing quits ATK completely.'} -

-
- - {trayOk && ( - - )} - -
-
-
- ) -} diff --git a/frontend/src/components/layout/Sidebar.tsx b/frontend/src/components/layout/Sidebar.tsx index 6063507..24caea1 100644 --- a/frontend/src/components/layout/Sidebar.tsx +++ b/frontend/src/components/layout/Sidebar.tsx @@ -1,5 +1,5 @@ import { - LayoutDashboard, FolderOpen, Package, PackagePlus, Terminal, + LayoutDashboard, FolderOpen, Package, Terminal, Zap, Wrench, Settings, Shield, ScrollText, Search, Lock, Archive, SlidersHorizontal, ScanSearch, MonitorSmartphone, Rocket, HardDriveDownload } from 'lucide-react' @@ -22,7 +22,6 @@ const navItems: NavItem[] = [ { view: 'files', icon: , label: 'Files' }, { view: 'mirror', icon: , label: 'Screen Mirror' }, { view: 'packages', icon: , label: 'Packages' }, - { view: 'apkinstaller', icon: , label: 'APK Installer' }, { view: 'debloater', icon: , label: 'Debloater' }, { view: 'shell', icon: , label: 'Shell' }, { view: 'logcat', icon: , label: 'Logcat', dividerBefore: true }, @@ -37,10 +36,6 @@ const navItems: NavItem[] = [ { view: 'gsiloader', icon: , label: 'GSI Loader' }, ] -// Floor for progressive label shrinking in the horizontal sidebar - below -// this, text becomes illegible, so labels hide outright instead. -const MIN_LABEL_SCALE = 0.65 - interface DragProps { onDragStart: (e: React.DragEvent) => void onDragOver: (e: React.DragEvent) => void @@ -56,19 +51,6 @@ export default function Sidebar({ activeView, onViewChange, position, showLabels const [hidden, setHidden] = useState(getHiddenViews()) useEffect(() => onHiddenViewsChange(setHidden), []) - // When horizontal (top/bottom sidebar), labels can make the row wider than - // the window - rather than forcing a horizontal scrollbar, shrink label text - // progressively as space gets tight (labelScale 1 -> MIN_LABEL_SCALE), and - // only hide labels outright once even minimum-size text wouldn't fit. - // `measureRef` is an offscreen clone always rendered WITH full-size labels - // at natural width; comparing its scrollWidth against the real nav's - // clientWidth (which itself doesn't change as labelScale changes) avoids - // the flip-flop you'd get measuring the visible, already-shrunk row. - const navRef = useRef(null) - const measureRef = useRef(null) - const [labelScale, setLabelScale] = useState(1) - const effectiveShowLabels = showLabels && (!horizontal || labelScale > 0) - // Drag-to-reorder (dock style). Saved order first, then any new defaults. const [order, setOrder] = useState(getNavOrder()) const dragRef = useRef(null) @@ -88,21 +70,6 @@ export default function Sidebar({ activeView, onViewChange, position, showLabels const visibleItems = ordered.filter(i => !hidden.includes(i.view)) - useEffect(() => { - if (!horizontal || !showLabels) { setLabelScale(1); return } - const nav = navRef.current - const measure = measureRef.current - if (!nav || !measure) return - const check = () => { - const ratio = measure.scrollWidth > 0 ? nav.clientWidth / measure.scrollWidth : 1 - setLabelScale(ratio >= 1 ? 1 : ratio >= MIN_LABEL_SCALE ? ratio : 0) - } - check() - const ro = new ResizeObserver(check) - ro.observe(nav) - return () => ro.disconnect() - }, [horizontal, showLabels, visibleItems]) - const handleDrop = (target: string) => { const from = dragRef.current dragRef.current = null @@ -122,8 +89,8 @@ export default function Sidebar({ activeView, onViewChange, position, showLabels position === 'left' ? 'border-r' : position === 'top' ? 'border-b' : 'border-t' const asideCls = horizontal - ? `${effectiveShowLabels ? 'h-[68px]' : 'h-[52px]'} w-full flex flex-row items-center bg-bg-surface ${edgeBorder} border-bg-border shrink-0` - : `${effectiveShowLabels ? 'w-[84px]' : 'w-[52px]'} flex flex-col bg-bg-surface ${edgeBorder} border-bg-border shrink-0` + ? `${showLabels ? 'h-[68px]' : 'h-[52px]'} w-full flex flex-row items-center bg-bg-surface ${edgeBorder} border-bg-border shrink-0` + : `${showLabels ? 'w-[84px]' : 'w-[52px]'} flex flex-col bg-bg-surface ${edgeBorder} border-bg-border shrink-0` const navCls = horizontal ? 'flex-1 flex flex-row items-center justify-center gap-0.5 px-1 overflow-x-auto' @@ -135,19 +102,13 @@ export default function Sidebar({ activeView, onViewChange, position, showLabels ? 'px-1 h-full flex items-center border-l border-bg-border shrink-0' : 'p-1 pb-1.5 border-t border-bg-border shrink-0' - const btnSizing = !effectiveShowLabels + const btnSizing = !showLabels ? 'w-8 h-8' : horizontal - ? 'flex-col gap-1 px-2 py-1.5 h-full justify-center' + ? 'flex-col gap-1 px-2 py-1.5 min-w-[3.25rem] h-full justify-center' : 'flex-col gap-1 px-1 py-1.5 w-full' - const labelCls = `leading-tight text-center ${horizontal ? 'whitespace-nowrap' : ''}` - - // Horizontal-only: button width and label font-size both track labelScale, - // so shrinking text actually reclaims row space instead of just looking smaller. - const btnStyle: React.CSSProperties | undefined = - horizontal && effectiveShowLabels ? { minWidth: `${3.25 * labelScale}rem` } : undefined - const labelStyle: React.CSSProperties = { fontSize: `${10 * labelScale}px` } + const labelCls = `text-[10px] leading-tight text-center ${horizontal ? 'whitespace-nowrap' : ''}` const renderButton = (view: View | 'settings', icon: React.ReactNode, label: string, drag?: DragProps) => { const active = activeView === view @@ -161,7 +122,6 @@ export default function Sidebar({ activeView, onViewChange, position, showLabels onDragEnd={drag?.onDragEnd} onClick={() => onViewChange(view as View)} title={label} - style={btnStyle} className={` flex items-center justify-center rounded transition-all duration-150 relative ${btnSizing} @@ -174,7 +134,7 @@ export default function Sidebar({ activeView, onViewChange, position, showLabels `} > {icon} - {effectiveShowLabels && {label}} + {showLabels && {label}} {active && ( horizontal ? @@ -186,25 +146,7 @@ export default function Sidebar({ activeView, onViewChange, position, showLabels return (