169 líneas
5.7 KiB
Markdown
169 líneas
5.7 KiB
Markdown
# URLFinder
|
|
|
|
<p align="center">
|
|
<img src="app/src/main/res/drawable/ic_urlfinder_logo.xml" width="120" alt="URLFinder logo"/>
|
|
</p>
|
|
|
|
<p align="center">
|
|
<strong>A free, open-source Android app that detects URLs and QR codes in real time using your device camera.</strong>
|
|
</p>
|
|
|
|
<p align="center">
|
|
<a href="https://github.com/manalejandro/URLFinder/releases"><img src="https://img.shields.io/github/v/release/manalejandro/URLFinder?style=flat-square" alt="Latest release"/></a>
|
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue?style=flat-square" alt="MIT License"/></a>
|
|
<a href="https://developer.android.com"><img src="https://img.shields.io/badge/platform-Android-green?style=flat-square" alt="Android"/></a>
|
|
<img src="https://img.shields.io/badge/min%20SDK-24-orange?style=flat-square" alt="Min SDK 24"/>
|
|
</p>
|
|
|
|
---
|
|
|
|
## Features
|
|
|
|
- 📷 **Real-time camera scanning** — live camera preview powered by CameraX
|
|
- 🔤 **Text URL detection** — recognizes URLs in any visible text using ML Kit Text Recognition
|
|
- 📲 **QR code scanning** — decodes QR codes that contain URLs with ML Kit Barcode Scanning
|
|
- 🔗 **Clickable URLs** — tap any detected URL to open it in your browser (with a safety warning)
|
|
- ⚡ **Flash / torch toggle** — turn on the camera torch for scanning in low-light conditions
|
|
- 🗂️ **Local history** — all detected URLs are saved locally and can be browsed and cleared from Settings
|
|
- ⚠️ **Safety warning dialog** — a confirmation dialog reminds you that URLs may be dangerous before opening
|
|
- 🆓 **Free & open source** — MIT licensed, no ads, no tracking, no analytics
|
|
|
|
---
|
|
|
|
## Screenshots
|
|
|
|
> _Coming soon_
|
|
|
|
---
|
|
|
|
## Requirements
|
|
|
|
| | |
|
|
|---|---|
|
|
| **Android version** | 7.0 (API 24) or higher |
|
|
| **Permissions** | `CAMERA`, `INTERNET` |
|
|
| **Hardware** | Rear camera with autofocus recommended |
|
|
|
|
---
|
|
|
|
## Installation
|
|
|
|
### Download APK
|
|
|
|
Download the latest release APK from the [Releases page](https://github.com/manalejandro/URLFinder/releases) and install it on your device.
|
|
|
|
> You may need to enable **Install from unknown sources** in your device settings.
|
|
|
|
### Build from source
|
|
|
|
1. **Clone the repository**
|
|
```bash
|
|
git clone https://github.com/manalejandro/URLFinder.git
|
|
cd URLFinder
|
|
```
|
|
|
|
2. **Open in Android Studio**
|
|
- File → Open → select the `URLFinder` folder
|
|
- Let Gradle sync finish
|
|
|
|
3. **Run or build**
|
|
```bash
|
|
./gradlew assembleDebug
|
|
# APK → app/build/outputs/apk/debug/app-debug.apk
|
|
```
|
|
|
|
---
|
|
|
|
## Architecture
|
|
|
|
```
|
|
MainActivity
|
|
└── CameraScreen (Jetpack Compose)
|
|
├── CameraViewModel
|
|
│ ├── CameraX (Preview + ImageAnalysis)
|
|
│ ├── ML Kit Text Recognition → extracts URLs from plain text
|
|
│ └── ML Kit Barcode Scanner → decodes QR codes
|
|
├── UrlResultsPanel (LazyColumn of detected URLs)
|
|
└── SettingsScreen
|
|
├── History tab (UrlHistoryRepository — SharedPreferences)
|
|
└── About tab (open-source info + GitHub link)
|
|
```
|
|
|
|
**Key design decisions:**
|
|
- Frame analysis is **throttled to 800 ms** to reduce CPU/battery usage.
|
|
- `ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST` drops frames that arrive while the previous one is still being processed.
|
|
- Both text and barcode analyzers run **concurrently** on the same frame, results are merged.
|
|
- URLs are **deduplicated** per session; the history avoids duplicate entries too.
|
|
- The history is stored as JSON in `SharedPreferences` (no external DB dependency).
|
|
|
|
---
|
|
|
|
## Tech stack
|
|
|
|
| Library | Version | Purpose |
|
|
|---|---|---|
|
|
| Kotlin | 2.0.21 | Programming language |
|
|
| Jetpack Compose (BOM) | 2024.09.00 | UI toolkit |
|
|
| Material 3 | — | Design system |
|
|
| CameraX | 1.4.2 | Camera access and analysis |
|
|
| ML Kit Text Recognition | 16.0.1 | URL detection in text |
|
|
| ML Kit Barcode Scanning | 17.3.0 | QR code decoding |
|
|
| Accompanist Permissions | 0.37.0 | Runtime camera permission |
|
|
| Lifecycle ViewModel Compose | 2.10.0 | State management |
|
|
|
|
---
|
|
|
|
## Permissions
|
|
|
|
| Permission | Reason |
|
|
|---|---|
|
|
| `CAMERA` | Required to capture and analyze camera frames for URLs and QR codes |
|
|
| `INTERNET` | Required to open detected URLs in the browser |
|
|
|
|
---
|
|
|
|
## Contributing
|
|
|
|
Contributions are welcome! Feel free to:
|
|
|
|
- Open an [issue](https://github.com/manalejandro/URLFinder/issues) to report a bug or suggest a feature
|
|
- Fork the repo and submit a pull request
|
|
|
|
Please follow the existing code style (Kotlin + Compose conventions) and add documentation to public APIs.
|
|
|
|
---
|
|
|
|
## License
|
|
|
|
```
|
|
MIT License
|
|
|
|
Copyright (c) 2026 Manuel Alejandro
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in all
|
|
copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
SOFTWARE.
|
|
```
|
|
|
|
---
|
|
|
|
<p align="center">
|
|
Made with ❤️ using Kotlin, Jetpack Compose, CameraX and ML Kit<br/>
|
|
<a href="https://github.com/manalejandro/URLFinder">https://github.com/manalejandro/URLFinder</a>
|
|
</p>
|
|
|