Skip to content

Repository files navigation

◈ ORCTIQ

GPS Location Tracker for Android

Android Kotlin Jetpack Compose License APK

A minimalist, real-time GPS coordinate tracker built with Kotlin and Jetpack Compose.

Download APK · Architecture · Build from Source · Docs



✨ Features

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

📸 Screen Layout

┌─────────────────────────────────────┐
│                                     │
│         ◈  ORCTIQ                   │
│         GPS LOCATION TRACKER        │
│                                     │
│  ┌───────────────────────────────┐  │
│  │  📍  LOCATION                 │  │
│  │  ─────────────────────────    │  │
│  │  LATITUDE                     │  │
│  │  -33.868820°                  │  │
│  │                               │  │
│  │  LONGITUDE                    │  │
│  │  151.209296°                  │  │
│  └───────────────────────────────┘  │
│                                     │
│  ┌─────────────┐ ┌───────────────┐  │
│  │  ACCURACY   │ │  LAST UPDATED │  │
│  │  ± 4.2 m    │ │  14:32:07     │  │
│  └─────────────┘ └───────────────┘  │
│                                     │
│  ● SIGNAL ACTIVE      ~5s refresh   │
│                                     │
└─────────────────────────────────────┘

📦 Download & Install

Pre-built APK

Requires Android 14 (API 34) or higher · Google Play Services required

  1. Go to the Releases page
  2. Download app-debug.apk
  3. Follow the steps below to sideload it

Sideloading Steps

Step 1 — Enable Unknown Sources

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

Step 2 — Install

# Option A: ADB (fastest)
adb install -r app-debug.apk

# Option B: Manual — copy APK to device and tap to install

Step 3 — Grant Permission on First Launch

  1. Open Orctiq from the app drawer
  2. Tap "While using the app" in the location permission dialog
  3. The status bar turns green → coordinates appear within seconds

Permanently denied? Tap OPEN SETTINGS in the app → enable Location → return to Orctiq


🏗️ Architecture

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                │
└─────────────────────────────────────────────────────┘

Key Files

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

LocationState Data Model

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
)

🎨 Design System

Color Palette

Token Color Hex Usage
OrctiqNavy #0D1B2A #0D1B2A Background
OrctiqSurface #1A2B3C #1A2B3C Cards
OrctiqAccent #4FC3F7 #4FC3F7 Accent, buttons
OrctiqWhite #FFFFFF #FFFFFF Primary text
OrctiqMuted #7B9AB0 #7B9AB0 Labels, subtitles
OrctiqSignalOn #00E676 #00E676 Active GPS dot
OrctiqSignalOff #FF5252 #FF5252 Error / denied

Typography

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

🔧 Build from Source

Prerequisites

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

Clone & Build

git clone https://github.com/Upeksha04/orctiq-location-androidapp.git
cd orctiq-location-androidapp

On Windows (Command Prompt)

set JAVA_HOME=C:\Program Files\Android\Android Studio\jbr
set ANDROID_HOME=C:\Users\<YourUser>\AppData\Local\Android\Sdk
gradlew.bat assembleDebug

On macOS / Linux

export JAVA_HOME=/path/to/jdk17
export ANDROID_HOME=~/Library/Android/sdk    # macOS
./gradlew assembleDebug

APK Output

app/build/outputs/apk/debug/app-debug.apk

Deploy to Device

# 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)

Build Requirements

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"

📚 Dependencies

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

🗂️ Full Documentation

Complete technical and user documentation is available in the repository:

Covers: architecture deep-dive · design system · build setup · full installation guide · troubleshooting.


📋 Permissions

<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.


🔒 Privacy

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

🛠️ Troubleshooting

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

📄 License

MIT License — free to use, modify, and distribute.

Built with Kotlin 2.0.0 · Jetpack Compose · Android 14

◈ ORCTIQ

About

Minimalist real-time GPS tracker for Android — Kotlin + Jetpack Compose + FusedLocationProvider

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages