Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
bb16133
Revised versions of build tools (for AS 2024.2.1 compatibility) [MAY …
sa-fx Jan 29, 2026
740a703
Set Gradle version to 8.7.1 (from Learn); updated .gitignore
sa-fx Jan 29, 2026
7707ec9
[infra] Lint Baseline (#3)
sa-fx Jan 30, 2026
505f947
[infra] GitHub Action (#2)
sa-fx Jan 30, 2026
c38a1da
[Bug] Hardcoded API Key (#15)
sa-fx Jan 31, 2026
dbce2ee
[Infra] PR Template (#18)
sa-fx Feb 2, 2026
1905b28
Updated PR Template (#19)
sa-fx Feb 2, 2026
22d26ab
[Feat] Sensor Data - WiFi (#17)
Vlad118 Feb 2, 2026
9a6cd8f
[Bug] Upgrade AGP 8.7.1 -> 8.7.3 (#14)
sa-fx Feb 2, 2026
a51787a
[Feat] Floorplans When Inside Building (#11)
sa-fx Feb 5, 2026
fd60152
Update README.md
sa-fx Feb 5, 2026
8d2786c
[Infra] Upstream Maps API Key Fix (#21)
sa-fx Feb 7, 2026
83e5800
[Feat] Sensor Data - Bluetooth (#22)
Vlad118 Feb 8, 2026
604e5c8
[Infra] Android SDK Actions (#24)
sa-fx Feb 8, 2026
7022c78
Initial position and GNSS fix in replay (#28)
Vlad118 Feb 9, 2026
88aec9b
[Feat/Extension] Completes sensor data tasks (initial orientation) an…
Vlad118 Feb 9, 2026
408a32a
[Feat] Time marker and screen remain on during replay (#26)
keeegannn Feb 9, 2026
09b3115
[Bug] Update secrets.properties
sa-fx Feb 9, 2026
1eb761c
Add contributors section to README
Vlad118 Feb 9, 2026
de96aa9
Feat sensor data (#33) TrajectoryMapFragment getElevation: added miss…
Vlad118 Feb 11, 2026
18f0fb1
[Feat] Sensor data - Add BT Permissions Toast (#34)
Vlad118 Feb 11, 2026
3b9204d
[Feat] Nearby Floorplans (#20)
sa-fx Feb 11, 2026
40b463f
[Feat] Dynamically Set Ground Floor Index (#36)
sa-fx Feb 11, 2026
c4883d0
[Maint] Code Refactor (#37)
sa-fx Feb 11, 2026
dd1d4dc
[Infra] CW2 Start (#61)
sa-fx Mar 9, 2026
fb1c3e5
[Maint] Static Code Analysis (#67)
sa-fx Mar 9, 2026
43812d8
[Maint] GeoJSON Handling Refactor (#68)
sa-fx Mar 10, 2026
9521625
[Infra] Revised README.md (#69)
sa-fx Mar 10, 2026
b5ed16f
Added general Fusion package containing general Fusion class for gene…
keeegannn Mar 11, 2026
6bbbf46
Merge branch 'develop' of https://github.com/sa-fx/ENG-EMWSE5 into fe…
keeegannn Mar 11, 2026
267b795
Added general Fusion package containing general Fusion class for gene…
keeegannn Mar 11, 2026
364f750
added suggested TODO of our own initial position estimate to try impr…
keeegannn Mar 11, 2026
7a23c36
prevented possible null pointer exception and normaised weights as is…
keeegannn Mar 12, 2026
6ad8c2e
[Feat] Building and Floor Number Display; Autopan Switch (#72)
sa-fx Mar 12, 2026
c9e2841
[Bug] Hide Floor Name When Leaving Building (#75)
sa-fx Mar 12, 2026
bb231e6
Merge branch 'develop' of https://github.com/sa-fx/ENG-EMWSE5 into fe…
keeegannn Mar 13, 2026
4465e91
[Maint, Feat, Bug] New HTTP Functions; Better UI for Invalid Trajecto…
sa-fx Mar 13, 2026
9e4310c
[Maint, Feat] Permissions Management (#79)
sa-fx Mar 15, 2026
dfde13d
[Bug] Toast Text Splitting (#82)
sa-fx Mar 15, 2026
66a0a99
[Infra] Minimum SDK Version (#85)
sa-fx Mar 16, 2026
859fce1
Merge branch 'develop' of https://github.com/sa-fx/ENG-EMWSE5 into fe…
keeegannn Mar 18, 2026
045ee47
Added TODO to particle filter file
keeegannn Mar 18, 2026
cf0a3cb
[Feat] Login Page (#71)
sa-fx Mar 18, 2026
2c69ac9
Merge branch 'develop' of github.com:sa-fx/ENG-EMWSE5 into feat-Parti…
sa-fx Mar 18, 2026
328be4b
Fixing lint violations
sa-fx Mar 18, 2026
37509bc
Merge branch 'develop' of https://github.com/sa-fx/ENG-EMWSE5 into fe…
keeegannn Mar 19, 2026
a70ca96
[Feat] Multicolour Floor Plans (#81)
sa-fx Mar 19, 2026
5185b4e
Application of spotlessApply
keeegannn Mar 19, 2026
f4fdf08
Merge remote-tracking branch 'origin/feat-Particle-Filter' into feat-…
keeegannn Mar 19, 2026
ab58125
[Feat] Particle Filter Algorithm (#84)
sa-fx Mar 19, 2026
0298b6b
Merge branch 'develop' of github.com:sa-fx/ENG-EMWSE5 into feat-Parti…
alexmac3002 Mar 19, 2026
b47edcf
Merge branch 'develop' of https://github.com/sa-fx/ENG-EMWSE5 into fe…
keeegannn Mar 19, 2026
7d60e63
Merge branch 'feat-Particle-Filter' of https://github.com/sa-fx/ENG-E…
keeegannn Mar 19, 2026
2ee9706
Changes made with regard to github comments
keeegannn Mar 19, 2026
ff857ad
applied spotlessApply
keeegannn Mar 20, 2026
1405af3
Logging changes (use TAG)
sa-fx Mar 20, 2026
b93937c
Style changes
sa-fx Mar 20, 2026
5c34300
Updated logging in WiFiPositioning
sa-fx Mar 20, 2026
7989246
removed TODO's
keeegannn Mar 20, 2026
2c6bf17
Merge remote-tracking branch 'origin/feat-Particle-Filter' into feat-…
keeegannn Mar 20, 2026
6db9437
[Feat] Particle Filter (#70)
keeegannn Mar 20, 2026
b44d667
[Maint] Login Handling Update (#87)
sa-fx Mar 25, 2026
5a0ff76
[Maint] ServerCommunications Logs (#89)
sa-fx Mar 25, 2026
5da91a4
[Maint] Login UI Elements Freeze (#90)
sa-fx Mar 26, 2026
bcee73e
[Bug] Foor Plans on Android 9.0 (#91)
sa-fx Mar 28, 2026
cff092e
[Maint] Floor Plan Refactors (#92)
sa-fx Mar 28, 2026
a1831c1
[Feat] Fusion; Map Matching; Data Display (#88)
sa-fx Apr 1, 2026
8cf3475
[Bug] Element Check Bug (#105)
sa-fx Apr 1, 2026
9ebbe08
[Feat] Repository Link on Homepage (#106)
sa-fx Apr 1, 2026
2dd8e01
[Bug] Apply Kalman Filter Constants (#107)
sa-fx Apr 1, 2026
f2b0520
[Maint] JavaDocs, Fusion (#108)
sa-fx Apr 1, 2026
4d6154d
[Feat] Additional Settings Sliders (#109)
sa-fx Apr 1, 2026
ef9b7bf
Reintroduce secrets.properties
sa-fx Apr 1, 2026
763b81f
Remove unnecessary field from build.gradle
sa-fx Apr 1, 2026
12cd274
Remove TODOs before submission
sa-fx Apr 1, 2026
ba482a4
[Maint] JavaDocs, MapMatching (#111)
sa-fx Apr 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Summary

One or two line summary of what this PR's changes do, and why you're making them.

If this closes an issue, include the phrase: Closes (hashtag-issue_number)

## Details

- List of key changes made
- Can be functional changes, or non-functional (eg, style, linting, refactoring)

## Action Items

- [ ] Test
- [ ] Minimum SDK (Android 9)
- [ ] Latest SDK
- [ ] If there are any other outstanding items to be completed before merging, put them here
- Remember to request at least one code review! (You don't need to list this as an item here, as GitHub will already track code reviews for you)

> # **NOTICE! Do not merge a pull request if it is not your assigned pull request!**
>
> Do not merge just because you are a code reviewer and you are okay with it. _Only_ merge if you are (one of) the author(s)!
36 changes: 36 additions & 0 deletions .github/workflows/android-16.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: Android 16 Build

on:
push:

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Set up JDK 21.0.3
uses: actions/setup-java@v4
with:
java-version: '21.0.3'
distribution: 'jetbrains'
cache: gradle

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v5

- name: Add (empty) local.properties
run: touch ./local.properties

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Setup Android 16.0 SDK
uses: android-actions/setup-android@v3.2.2
with:
cmdline-tools-version: 12266719

- name: gradle build
run: ./gradlew --no-daemon --parallel build
36 changes: 36 additions & 0 deletions .github/workflows/android-9.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: Android 9 Build

on:
push:

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Set up JDK 21.0.3
uses: actions/setup-java@v4
with:
java-version: '21.0.3'
distribution: 'jetbrains'
cache: gradle

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v5

- name: Add (empty) local.properties
run: touch ./local.properties

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Setup Android 9.0 SDK
uses: android-actions/setup-android@v3.2.2
with:
cmdline-tools-version: 9477386

- name: gradle build
run: ./gradlew --no-daemon --parallel build
8 changes: 1 addition & 7 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,16 +1,10 @@
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties
/.idea/
**/.vscode/
58 changes: 44 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
**PositionMe** is an indoor positioning data collection application initially developed for the University of Edinburgh's Embedded Wireless course. The application now includes enhanced features, including **trajectory playback**, improved UI design, and comprehensive location tracking.
# Embedded Mobile and Wireless Systems (EWireless) 5 2025/26
## Coursework 2 - Group 13

[![Android 9](https://github.com/sa-fx/ENG-EMWSE5/actions/workflows/android-9.yml/badge.svg)](https://github.com/sa-fx/ENG-EMWSE5/actions/workflows/android-9.yml) [![Android 16](https://github.com/sa-fx/ENG-EMWSE5/actions/workflows/android-16.yml/badge.svg)](https://github.com/sa-fx/ENG-EMWSE5/actions/workflows/android-16.yml)

**PositionMe** is an indoor positioning data collection application initially developed for the [University of Edinburgh's Embedded Wireless course](https://www.drps.ed.ac.uk/25-26/dpt/cxelee11083.htm). The application now includes enhanced features, including **trajectory playback**, improved UI design, and comprehensive location tracking.

## Features

Expand All @@ -13,19 +18,6 @@
- **Progress bar for tracking playback status**.
- **Redesigned UI**: Modern and user-friendly interface for enhanced usability.

## Requirements

- **Android Studio 4.2** or later
- **Android SDK 30** or later

## Installation

1. **Clone the repository.**
2. **Open the project in Android Studio**.
3. Add your own API key for Google Maps in AndroidManifest.xml
4. Set the website where you want to send your data. The application was built for use with [openpositioning.org](http://openpositioning.org/).
5. **Build and run the project on your Android device**.

## Usage

1. **Install the application** using Android Studio.
Expand All @@ -43,3 +35,41 @@
6. **Control playback**:
- Pause, restart, or jump to the end using playback controls.

## Requirements

- **Android Studio 4.2** or later
- **Android SDK 28** or later

For developers, the latest commits have been tested using the following configuration:
- [Android Studio 2024.2.1 Patch 1 ('Ladybird')](https://developer.android.com/studio/archive)
- Android Gradle Plugin 8.7.3
- Gradle 8.10.2
- Google Services 4.4.2
- [Spotless](https://github.com/diffplug/spotless) 8.3.0
- Android SDK 28 ('Android 9')

## Installation

1. Clone the repository (`git clone`).
2. Open the project in Android Studio.
3. Add your own API keys for Google Maps and OpenPositioning in `secrets.properties`.
4. Build and run the project on your Android device.

## Build

This project uses [Spotless](https://github.com/diffplug/spotless) for automatic linting against the [Google Java Style Guide](https://google.github.io/styleguide/javaguide.html). To build the project with linting, run:

```bash
$ chmod +x ./gradlew
$ ./gradlew clean build
```

This will run `spotlessCheck` as a pre-requisite for `build`. Any lint errors will cause the build to fail.

If there are lint errors, you can either resolve these manually or run:

```bash
$ ./gradlew spotlessApply
```

This will use Spotless to let you resolve the errors identified during `spotlessCheck`.
67 changes: 53 additions & 14 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,43 @@ plugins {
id 'com.google.gms.google-services'
id 'androidx.navigation.safeargs'
id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
id 'com.diffplug.spotless' version "8.3.0"
}

// (Optional) load local secrets file:
// Load local secrets file:
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('secrets.properties')
if (localPropertiesFile.exists()) {
localProperties.load(new FileInputStream(localPropertiesFile))
}

spotless {
format 'misc', {
// Define the files to apply `misc` to
target '*.gradle', '.gitattributes', '.gitignore'

// Define the steps to apply to those files
trimTrailingWhitespace()
leadingTabsToSpaces(2)
endWithNewline()
}
java {
// All Java files, except autogenerated Traj.java
target "**/*.java"
targetExclude "**/Traj.java"

// Checks to be applied (on top of Google's Java style guide)
endWithNewline()
forbidWildcardImports()
formatAnnotations()
leadingTabsToSpaces(2)
removeUnusedImports()
trimTrailingWhitespace()

googleJavaFormat('1.35.0').aosp().reflowLongStrings()
}
}

android {
namespace "com.openpositioning.PositionMe"
compileSdk 34
Expand All @@ -28,10 +56,11 @@ android {
// Example of referencing secrets (if you use secrets.properties):
buildConfigField "String", "MAPS_API_KEY",
"\"${localProperties['MAPS_API_KEY'] ?: ''}\""
buildConfigField "String", "OPENPOSITIONING_API_KEY",
"\"${localProperties['OPENPOSITIONING_API_KEY'] ?: ''}\""
buildConfigField "String", "OPENPOSITIONING_MASTER_KEY",
"\"${localProperties['OPENPOSITIONING_MASTER_KEY'] ?: ''}\""

// Add reference to maps API key for manifest file
manifestPlaceholders = [MAPS_API_KEY:localProperties['MAPS_API_KEY']?:""]
}

buildFeatures {
Expand All @@ -55,29 +84,37 @@ android {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}

// Add lint support (Android linting)
lintOptions {
abortOnError true
baseline file("lint-baseline.xml")
}
}

dependencies {
// Core AndroidX
implementation 'androidx.appcompat:appcompat:1.7.0-alpha03' // or stable: 1.6.1
implementation 'androidx.core:core-ktx:1.12.0'
implementation 'androidx.constraintlayout:constraintlayout:2.2.0'
implementation 'androidx.preference:preference:1.2.1'
implementation 'androidx.core:core-ktx:1.12.0'
implementation 'androidx.gridlayout:gridlayout:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.preference:preference:1.2.1'
implementation 'com.android.volley:volley:1.2.1'
implementation 'androidx.gridlayout:gridlayout:1.0.0'

// Material Components (Material 3 support is in 1.12.0+)
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.2.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
implementation 'com.google.android.material:material:1.12.0'

implementation 'com.google.protobuf:protobuf-java:3.0.0'
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
implementation "com.google.protobuf:protobuf-java-util:3.0.0"
implementation "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava"
implementation 'com.google.android.gms:play-services-maps:19.0.0'
implementation 'com.google.android.gms:play-services-location:21.3.0'
implementation "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava"
implementation 'com.google.protobuf:protobuf-java:3.20.1'
implementation "com.google.protobuf:protobuf-java-util:3.20.1"
implementation 'com.squareup.okhttp3:okhttp:4.10.0'

// Secure credential storage
implementation 'androidx.datastore:datastore-preferences-rxjava3:1.2.1'
implementation "androidx.security:security-crypto:1.1.0"

// Navigation components
def nav_version = "2.8.6"
Expand All @@ -88,8 +125,10 @@ dependencies {
// implementation "androidx.compose.material3:material3:1.3.1"
// implementation "androidx.activity:activity-compose:1.7.2"

implementation "org.ejml:ejml-all:0.38"

// Testing
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
androidTestImplementation 'androidx.test.ext:junit:1.2.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}
Loading