A minimalist, real-time GPS coordinate tracker built with Kotlin and Jetpack Compose.
Download APK · Architecture · Build from Source · Docs
| Feature | Details |
|---|---|
| 📍 Real-time Latitude & Longitude | WGS84 decimal degrees · 6 decimal places · updates every ~5 s |
| 🎯 Accuracy Indicator | Horizontal accuracy radius in metres (± 4.2 m) |
| 🕐 Live Timestamp | HH:MM:SS of most recent GPS fix |
| 🟢 Signal Status Bar | Pulsing green dot when active · red when permission denied |
| 🛡️ Smart Permission Handling | Graceful rationale · permanently-denied → Settings redirect |
| 🌑 Full Dark Theme | Deep navy #0D1B2A · no white flash on launch |
| 📱 Edge-to-Edge UI | Content extends under system status bar |
| ⚡ Zero Crashes | All permission states handled; app never crashes on denial |
┌─────────────────────────────────────┐
│ │
│ ◈ ORCTIQ │
│ GPS LOCATION TRACKER │
│ │
│ ┌───────────────────────────────┐ │
│ │ 📍 LOCATION │ │
│ │ ───────────────────────── │ │
│ │ LATITUDE │ │
│ │ -33.868820° │ │
│ │ │ │
│ │ LONGITUDE │ │
│ │ 151.209296° │ │
│ └───────────────────────────────┘ │
│ │
│ ┌─────────────┐ ┌───────────────┐ │
│ │ ACCURACY │ │ LAST UPDATED │ │
│ │ ± 4.2 m │ │ 14:32:07 │ │
│ └─────────────┘ └───────────────┘ │
│ │
│ ● SIGNAL ACTIVE ~5s refresh │
│ │
└─────────────────────────────────────┘
Requires Android 14 (API 34) or higher · Google Play Services required
- Go to the Releases page
- Download
app-debug.apk - Follow the steps below to sideload it
| Device | Path |
|---|---|
| Stock Android 14 | Settings → Apps → Special app access → Install unknown apps → [your file manager] → Allow |
| OPPO / ColorOS | Settings → Security → Install apps from external sources → Allow |
| Samsung One UI | Settings → Apps → Special access → Install unknown apps → Allow |
# Option A: ADB (fastest)
adb install -r app-debug.apk
# Option B: Manual — copy APK to device and tap to install- Open Orctiq from the app drawer
- Tap "While using the app" in the location permission dialog
- The status bar turns green → coordinates appear within seconds
Permanently denied? Tap OPEN SETTINGS in the app → enable Location → return to Orctiq
Orctiq follows a single-activity MVVM pattern with Jetpack Compose as the UI layer.
┌─────────────────────────────────────────────────────┐
│ Android GPS + Network sensors │
│ │ LocationCallback.onLocationResult() │
│ ▼ │
│ LocationService (cold callbackFlow) │
│ │ .onEach { location → ... } │
│ ▼ │
│ LocationViewModel (MutableStateFlow) │
│ │ collectAsStateWithLifecycle() │
│ ▼ │
│ HomeScreen (Compose) recompose on each update │
│ │ │
│ ▼ renders │
│ LocationCard · InfoCard · StatusBar │
└─────────────────────────────────────────────────────┘
app/src/main/
├── AndroidManifest.xml # Permissions + activity declaration
└── java/com/orctiq/app/
├── MainActivity.kt # Entry point · Accompanist permissions
├── LocationService.kt # FusedLocationProviderClient → Flow<Location>
├── LocationViewModel.kt # AndroidViewModel · LocationState data class
└── ui/
├── theme/
│ ├── Color.kt # 10 brand color tokens
│ ├── Type.kt # 7 typography styles
│ └── Theme.kt # MaterialTheme dark color scheme
└── screens/
└── HomeScreen.kt # All Compose composables
data class LocationState(
val latitude : Double? = null, // WGS84, null before first fix
val longitude : Double? = null, // WGS84, null before first fix
val accuracyMeters : Float? = null, // Horizontal accuracy in metres
val lastUpdated : String? = null, // "HH:mm:ss" of last fix
val isActive : Boolean = false // True when GPS flow is running
)| Style | Size | Weight | Family | Used For |
|---|---|---|---|---|
displayLarge |
36 sp | Bold | Sans-serif | "ORCTIQ" brand name |
displayMedium |
30 sp | Bold | Monospace | Coordinate values |
displaySmall |
22 sp | Bold | Monospace | Accuracy / timestamp |
titleMedium |
13 sp | SemiBold | Sans-serif | Card headings |
labelSmall |
10 sp | Medium | Sans-serif | Field labels |
| Requirement | Version |
|---|---|
| Android Studio | Hedgehog (2023.1.1) or newer |
| Android SDK | API 34 (Android 14) |
| Java (JBR) | 17 (bundled with Android Studio) |
| Gradle | 8.7 (via wrapper) |
| Kotlin | 2.0.0 |
git clone https://github.com/Upeksha04/orctiq-location-androidapp.git
cd orctiq-location-androidappset JAVA_HOME=C:\Program Files\Android\Android Studio\jbr
set ANDROID_HOME=C:\Users\<YourUser>\AppData\Local\Android\Sdk
gradlew.bat assembleDebugexport JAVA_HOME=/path/to/jdk17
export ANDROID_HOME=~/Library/Android/sdk # macOS
./gradlew assembleDebugapp/build/outputs/apk/debug/app-debug.apk
# Check device is connected
adb devices
# Install
adb install -r app/build/outputs/apk/debug/app-debug.apk
# Launch
adb shell am start -n com.orctiq.app/.MainActivity
# View logs
adb logcat --pid=$(adb shell pidof com.orctiq.app)| Setting | File | Value |
|---|---|---|
| AndroidX enabled | gradle.properties |
android.useAndroidX=true |
| Theme parent | res/values/themes.xml |
Theme.AppCompat.DayNight.NoActionBar |
| Java target | app/build.gradle.kts |
jvmTarget = "1.8" |
| Library | Version | Purpose |
|---|---|---|
androidx.appcompat |
1.7.0 | AppCompat theme base |
androidx.activity:activity-compose |
1.9.2 | Compose in Activity |
androidx.compose:compose-bom |
2024.09.00 | Compose BOM |
androidx.compose.material3 |
(BOM) | Material 3 UI |
lifecycle-viewmodel-compose |
2.8.5 | ViewModel delegate |
lifecycle-runtime-compose |
2.8.5 | collectAsStateWithLifecycle |
play-services-location |
21.3.0 | FusedLocationProviderClient |
accompanist-permissions |
0.36.0 | Compose permission handling |
Complete technical and user documentation is available in the repository:
- 📄
ORCTIQ_DOCUMENTATION.md— Markdown format - 📝
ORCTIQ_DOCUMENTATION.docx— Word format
Covers: architecture deep-dive · design system · build setup · full installation guide · troubleshooting.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />Both permissions are requested at runtime via Accompanist. The app functions in a degraded state (no GPS data) without them — it never crashes.
Orctiq is fully offline and private:
- No data is transmitted anywhere
- No analytics, crash reporting, or tracking
- No internet permission declared in the manifest
- All GPS data remains on-device
| Problem | Cause | Fix |
|---|---|---|
Shows Acquiring… for long |
Weak signal indoors | Move outdoors or near a window |
LOCATION PERMISSION REQUIRED |
Permission denied | Tap GRANT PERMISSION |
OPEN SETTINGS button shown |
Permanently denied | Tap → enable Location in App Settings |
| APK won't install | Unknown sources disabled | Enable in Settings (see Install) |
| Won't install (version error) | Android below 14 | Requires Android 14+ |
| Coordinates stop updating | App in background | Bring app to foreground |
MIT License — free to use, modify, and distribute.
Built with Kotlin 2.0.0 · Jetpack Compose · Android 14
◈ ORCTIQ






