Skip to content
Open
Show file tree
Hide file tree
Changes from 68 commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
72be8cf
timeline-app-add-dropdown-menu : added dropdown menu with icons
JESDANIELLA Jun 12, 2025
b5157da
timeline-app-add-recording-button : added recording button and update…
JESDANIELLA Jun 13, 2025
c877fec
timeline-app-add-recording-button : added recording button and update…
JESDANIELLA Jun 13, 2025
9411e46
timeline-app-add-recording-button : added recording button and update…
JESDANIELLA Jun 16, 2025
41cd4f4
timeline-app-add-recording-button : added recording button and update…
JESDANIELLA Jun 16, 2025
8527dc5
timeline-app-add-recording-button : added recording button and update…
JESDANIELLA Jun 16, 2025
4ee349a
timeline-app-add-recording-button : added recording button and update…
JESDANIELLA Jun 16, 2025
adca66a
timeline-app-add-recording-button : moved the dropwdown menu and onbo…
JESDANIELLA Jun 18, 2025
1773548
timeline-app-add-recording-button : added initial timeline settings p…
JESDANIELLA Jun 18, 2025
aa3a08e
timeline-app-add-recording-button : added initial timeline settings p…
JESDANIELLA Jun 19, 2025
2a7702b
timeline-app-add-recording-button : location permission request to be…
JESDANIELLA Jun 19, 2025
b4539a2
timeline-app-add-recording-button : location permission request to be…
JESDANIELLA Jun 20, 2025
b0cc7dd
timeline-app-add-recording-button : added the timeline settings fragment
JESDANIELLA Jun 20, 2025
44bcb9c
timeline-app-add-recording-button : added the fix for UserDialogFragm…
JESDANIELLA Jun 20, 2025
fb27228
timeline-app-add-recording-button : modified the user dialog menu layout
JESDANIELLA Jun 20, 2025
45c85d2
timeline-app-add-recording-button : added topics to the help page and…
JESDANIELLA Jun 23, 2025
8d2c67c
timeline-app-add-recording-button : make the recording button positio…
JESDANIELLA Jun 23, 2025
06fa8cf
timeline-app-add-recording-button : make the recording button positio…
JESDANIELLA Jun 24, 2025
da10f00
timeline-app-add-recording-button : added automatic scrolling with a …
JESDANIELLA Jun 24, 2025
850d984
timeline-app-add-recording-button :Added highlight color for datepicker
JESDANIELLA Jun 24, 2025
179ff48
timeline-app-add-recording-button : fixed tooltip positioning to be c…
JESDANIELLA Jun 24, 2025
2b827d3
timeline-app-add-recording-button : updated the recording button back…
JESDANIELLA Jun 24, 2025
5f9c404
timeline-app-add-recording-button : updated the user menu layout and …
JESDANIELLA Jun 24, 2025
61f0983
timeline-app-add-recording-button : redesign permission request
sandradeng20 Jun 24, 2025
fe5f23c
timeline-app-add-recording-button : added dot indicators for the logi…
JESDANIELLA Jun 24, 2025
db44b64
timeline-app-add-recording-button : added spinner for recording duration
JESDANIELLA Jun 25, 2025
dde1809
timeline-app-add-recording-button : updated the quick-start FAB logic…
JESDANIELLA Jun 25, 2025
9bba72d
timeline-app-add-recording-button : added temporary layouts for the h…
JESDANIELLA Jun 25, 2025
dbb3cff
timeline-app-add-recording-button : added more tooltips
JESDANIELLA Jun 26, 2025
73a7213
timeline-app-add-recording-button : added placeholders for help items…
JESDANIELLA Jun 26, 2025
66ba132
timeline-app-add-recording-button : added about page
JESDANIELLA Jun 30, 2025
4e80bb4
timeline-app-add-recording-button : added location history page
JESDANIELLA Jun 30, 2025
2386d2e
timeline-app-add-recording-button : added other help sub-pages
JESDANIELLA Jul 1, 2025
3e26d21
timeline-app-add-recording-button : connected the recording page to t…
JESDANIELLA Jul 1, 2025
bd41569
timeline-app-add-recording-button : [WIP] added new help sub-pages
JESDANIELLA Jul 2, 2025
d97d5db
timeline-app-add-recording-button : added auto-start button (timeline…
JESDANIELLA Jul 3, 2025
6cf1822
timeline-app-add-recording-button : added footer to menu
JESDANIELLA Jul 3, 2025
5463c1f
timeline-app-add-recording-button : modified toggle button to be fixe…
JESDANIELLA Jul 4, 2025
c08cc86
timeline-app-add-recording-button : add sensor documentation
JESDANIELLA Jul 4, 2025
d4dac28
timeline-app-add-recording-button : modified the help page
JESDANIELLA Jul 4, 2025
c2b5ebd
timeline-app-add-recording-button : added map interactions and sensor…
JESDANIELLA Jul 7, 2025
d48b8a8
timeline-app-add-recording-button : [WIP] added helpful features and …
JESDANIELLA Jul 7, 2025
ca7abbc
timeline-app-add-recording-button : added the rest of the help pages
JESDANIELLA Jul 8, 2025
a2a4312
timeline-app-add-recording-button : modified the help sub-pages
JESDANIELLA Jul 9, 2025
5adf9f7
timeline-app-add-recording-button : modified the help sub-pages
JESDANIELLA Jul 9, 2025
ac3b591
timeline-app-add-recording-button :removed unused resource
JESDANIELLA Jul 9, 2025
91f8afe
timeline-app-add-recording-button :added back all the changes
JESDANIELLA Jul 9, 2025
ca1d17b
timeline-app-add-recording-button : edited the decorator to show grey…
JESDANIELLA Jul 10, 2025
9cf0167
timeline-app-add-recording-button : re-added the help pages
JESDANIELLA Jul 10, 2025
43eb4b5
timeline-app-add-recording-button : re-added the help pages
JESDANIELLA Jul 11, 2025
0b771bf
timeline-app-add-recording-button : added the logout logic to user me…
JESDANIELLA Jul 11, 2025
3223457
timeline-app-add-recording-button : added the logout logic to user me…
JESDANIELLA Jul 11, 2025
1405672
timeline-app-add-recording-button : added and implemented the about p…
JESDANIELLA Jul 11, 2025
e7893ce
timeline-app-add-recording-button : added images to the help page
JESDANIELLA Jul 14, 2025
ea467cd
timeline-app-add-recording-button : removed the sharedpref from main …
JESDANIELLA Jul 14, 2025
3cd6fc2
timeline-app-add-recording-button : moved user dialog to feature:time…
JESDANIELLA Jul 15, 2025
ce106c1
timeline-app-add-recording-button : removed unnecessary lines in app_nav
JESDANIELLA Jul 15, 2025
0641c73
timeline-app-add-recording-button
JESDANIELLA Jul 15, 2025
19c530e
timeline-app-add-recording-button: updated the preference for about p…
JESDANIELLA Jul 15, 2025
df22186
timeline-app-add-recording-button: modified the layout and look for t…
JESDANIELLA Jul 16, 2025
f3b9345
1517-timeline-app-add-recording-button: fix sensor selection state ma…
sandradeng20 Jul 16, 2025
f145a9b
Merge branch '1517-timeline-app-add-recording-button' of https://gith…
sandradeng20 Jul 16, 2025
4a119eb
timeline-app-add-recording-button: decoupled the fragement:user depen…
JESDANIELLA Jul 17, 2025
890f98d
Merge remote-tracking branch 'origin/1517-timeline-app-add-recording-…
JESDANIELLA Jul 17, 2025
d91b82b
1517-timeline-app-add-recording-button: fix ui coloring
sandradeng20 Jul 17, 2025
37d39c6
Merge branch '1517-timeline-app-add-recording-button' of https://gith…
sandradeng20 Jul 17, 2025
e64a50c
timeline-app-add-recording-button: decoupled the fragement:user depen…
JESDANIELLA Jul 17, 2025
1a4325b
Merge remote-tracking branch 'origin/1517-timeline-app-add-recording-…
JESDANIELLA Jul 17, 2025
237cbdd
timeline-app-add-recording-button: remove redundant isTriggerPending…
JESDANIELLA Jul 17, 2025
cf0f9ae
timeline-app-add-recording-button: added images to the help subpages
JESDANIELLA Jul 17, 2025
10052ce
timeline-app-add-recording-button: Fix logout in UserDialogFragment b…
JESDANIELLA Jul 17, 2025
eadd26f
timeline-app-add-recording-button: Fix user menu flashing after re-lo…
JESDANIELLA Jul 17, 2025
a9f2808
timeline-app-add-recording-button: replace navigateUp() with explicit…
JESDANIELLA Jul 18, 2025
655a858
timeline-app-add-recording-button: simplify location permission handl…
JESDANIELLA Jul 18, 2025
045f2a1
timeline-app-add-recording-button: removed unused files and scope Rec…
JESDANIELLA Jul 18, 2025
f38bbfc
timeline-app-add-recording-button: scope RecordingViewModel to UserDi…
JESDANIELLA Jul 18, 2025
771ebeb
timeline-app-add-recording-button: remove unnecessary deep links from…
JESDANIELLA Jul 18, 2025
5a666ef
timeline-app-add-recording-button: move TooltipSequence strings to s…
JESDANIELLA Jul 18, 2025
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
1 change: 1 addition & 0 deletions Apps/TimelineApp/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ android {
dependencies {

implementation project(path: ':core:ui')
implementation project(path: ':core:utils')
implementation project(path: ':feature:timeline')
implementation project(path: ':feature:user')

Expand Down
12 changes: 9 additions & 3 deletions Apps/TimelineApp/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" >


<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<application
android:name=".TimelineApplication"
Expand All @@ -15,15 +19,15 @@
android:supportsRtl="true"
android:theme="@style/Theme.TWA"
tools:targetApi="31" >


<activity
android:name=".MainActivity"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

<!-- <nav-graph android:value="@navigation/user_map" />-->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="uk.ac.cam.cares.jps.app" />
Expand All @@ -34,6 +38,8 @@
android:pathPattern="/sensor" />
</intent-filter>
</activity>


<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
Expand All @@ -50,4 +56,4 @@
android:value="true" />
</application>

</manifest>
</manifest>
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
package uk.ac.cam.cares.jps.timeline;


import android.os.Bundle;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

import dagger.hilt.android.AndroidEntryPoint;
import uk.ac.cam.cares.jps.timeline.databinding.ActivityMainBinding;

@AndroidEntryPoint
public class MainActivity extends AppCompatActivity {
private static ActivityMainBinding binding;

@Override
protected void onCreate(Bundle savedInstanceState) {
EdgeToEdge.enable(this);
Expand Down

This file was deleted.

16 changes: 8 additions & 8 deletions Apps/TimelineApp/app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<androidx.fragment.app.FragmentContainerView
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/app_navigation"
app:defaultNavHost="true"
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />

android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/app_navigation"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
17 changes: 1 addition & 16 deletions Apps/TimelineApp/app/src/main/res/navigation/app_navigation.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,4 @@
<include app:graph="@navigation/timeline_map"/>
<include app:graph="@navigation/user_map"/>

<!-- <include app:graph="@navigation/location_tracking_graph"/>-->
<!-- <include app:graph="@navigation/routing_graph"/>-->
<!-- <fragment-->
<!-- android:id="@+id/mapFragment2"-->
<!-- android:name="uk.ac.cam.cares.jps.locationtracking.MapFragment"-->
<!-- android:label="MapFragment" />-->
<!-- <fragment-->
<!-- android:id="@+id/routingFragment"-->
<!-- android:name="uk.ac.cam.cares.jps.routing.RoutingFragment"-->
<!-- android:label="RoutingFragment" >-->
<!-- <action-->
<!-- android:id="@+id/action_routingFragment_to_mapFragment2"-->
<!-- app:destination="@id/mapFragment2" />-->
<!-- </fragment>-->

</navigation>
</navigation>
1 change: 1 addition & 0 deletions Apps/TimelineApp/app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
<resources>
<string name="app_name">TWA Timeline</string>

</resources>
1 change: 1 addition & 0 deletions Apps/TimelineApp/core/login/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,6 @@ dependencies {
implementation "androidx.navigation:navigation-fragment:$nav_version"
implementation "androidx.navigation:navigation-ui:$nav_version"


implementation project(path: ':core:utils')
}
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ public MaterialAlertDialogBuilder getSessionExpiredDialog(Fragment fragment) {
.setPositiveButton(R.string.ok, (dialogInterface, i) -> {
loginSource.authStateManager.clearLoginState();
NavDeepLinkRequest request = NavDeepLinkRequest.Builder
.fromUri(Uri.parse(fragment.getString(uk.ac.cam.cares.jps.utils.R.string.login_fragment_link)))
.fromUri(Uri.parse(fragment.getString(uk.ac.cam.cares.jps.utils.R.string.onboarding_fragment_link)))
.build();
NavHostFragment.findNavController(fragment).navigate(request);
});
Expand Down
20 changes: 10 additions & 10 deletions Apps/TimelineApp/core/login/src/main/res/raw/auth_config.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
{
"client_id": "",
"redirect_uri": "",
"end_session_redirect_uri": "",
"authorization_scope": "",
"discovery_uri": "",
"authorization_endpoint_uri": "",
"token_endpoint_uri": "",
"registration_endpoint_uri": "",
"user_info_endpoint_uri": "",
"https_required": true
"client_id": "twa-timeline-app",
"redirect_uri": "uk.ac.cam.cares.jps.twatimelineapp:/oauth2redirect",
"end_session_redirect_uri": "uk.ac.cam.cares.jps.twatimelineapp:/oauth2redirect",
"authorization_scope": "openid email profile offline_access",
"discovery_uri": "http://172.30.80.1:3839/keycloak/realms/timeline/.well-known/openid-configuration",
"authorization_endpoint_uri": "",
"token_endpoint_uri": "",
"registration_endpoint_uri": "",
"user_info_endpoint_uri": "",
"https_required": false
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ public SensorRepository(Context applicationContext,
*/
public void startRecording(List<SensorType> selectedSensorTypes, RepositoryCallback<Boolean> callback) {
LOGGER.info("start recording with selected sensors");
sensorCollectionStateManagerRepository.setSelectedSensors(selectedSensorTypes);
prepareAndStartCollection(selectedSensorTypes, callback);
}

Expand Down Expand Up @@ -92,6 +93,8 @@ public void stopRecording() {
LOGGER.info("stop recording");
context.stopService(serviceIntent);
sensorCollectionStateManagerRepository.setRecordingState(false);
sensorCollectionStateManagerRepository.setTaskId("");
sensorCollectionStateManagerRepository.setSelectedSensors(new ArrayList<>());
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package uk.ac.cam.cares.jps.sensor.permission;


import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.fragment.app.Fragment;

import org.apache.log4j.Logger;

import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

public class PermissionHelper {
private final Fragment fragment;
private Queue<String> permissionQueue = new LinkedList<>();
private ActivityResultLauncher<String> launcher;
private final Logger LOGGER;
private Runnable onAllPermissionsHandled;

public PermissionHelper(Fragment fragment) {
this.fragment = fragment;
LOGGER = Logger.getLogger(PermissionHelper.class.getName() + "-" + fragment.getClass().getName());
registerPermissionLauncher();
}

private void registerPermissionLauncher() {
if (launcher == null) {
launcher = fragment.registerForActivityResult(
new ActivityResultContracts.RequestPermission(),
isGranted -> handlePermissionResult(isGranted)
);
}
}

public void requestPermissionsInChain(List<String> permissions, Runnable onAllPermissionsHandled) {
LOGGER.info(String.format("Received permissions: %s", permissions));
this.onAllPermissionsHandled = onAllPermissionsHandled;

permissionQueue.clear();
permissionQueue.addAll(permissions);
launchNextPermission();
}

private void launchNextPermission() {
String nextPermission = permissionQueue.poll();
if (nextPermission != null) {
launcher.launch(nextPermission);
} else {
LOGGER.info("All permissions processed!");
onAllPermissionsHandled.run();
}
}

private void handlePermissionResult(boolean granted) {
if (granted) {
launchNextPermission();
}
}

}
5 changes: 5 additions & 0 deletions Apps/TimelineApp/core/ui/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,9 @@ apply from: "${project.rootDir}/ui.gradle"

android {
namespace 'uk.ac.cam.cares.jps.ui'
}

dependencies {
implementation project(path: ':core:login')
implementation project(path: ':core:utils')
}
Loading