From 8fde16bac17c19f2b4abe7e20532a40461657844 Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Wed, 5 Jun 2024 14:32:37 +0200 Subject: [PATCH 1/5] fix run ui thread --- .../java/com/example/fitbot/ui/activities/FitnessActivity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java index 1350a78..9bb7708 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java @@ -162,8 +162,9 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall if (exercise == null) { runOnUiThread(() -> onFailedFetch.handle(null)); } else { + onSuccessfulFetch.handle(exercise); runOnUiThread(() -> { - onSuccessfulFetch.handle(exercise); + exerciseNameTextView.setText(exercise.name); exerciseShortDescriptionTextView.setText(exercise.shortDescription); // exerciseDescriptionTextView.setText(exercise.description); From bbb8e3d84cb8bd0f79446d45ac8a4ef905fbedac Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Wed, 5 Jun 2024 14:44:13 +0200 Subject: [PATCH 2/5] disabled animation stuff --- .../fitbot/ui/activities/FitnessActivity.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java index ffa3276..573ffbe 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java @@ -181,16 +181,16 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall if ( videoView.isPlaying() ) { - QiContext qiContext = null; - Animation animationarmraise = AnimationBuilder.with(qiContext) // Create the builder with the context. - .withResources(R.raw.armraise) // Set the animation resource. - .build(); // Build the animation. +// QiContext qiContext = null; +// Animation animationarmraise = AnimationBuilder.with(qiContext) // Create the builder with the context. +// .withResources(R.raw.armraise) // Set the animation resource. +// .build(); // Build the animation. +// +// animate = AnimateBuilder.with(qiContext) // Create the builder with the context. +// .withAnimation(animationarmraise) // Set the animation. +// .build(); // Build the animate action. - animate = AnimateBuilder.with(qiContext) // Create the builder with the context. - .withAnimation(animationarmraise) // Set the animation. - .build(); // Build the animate action. - - Future animateFuture = animate.async().run(); +// Future animateFuture = animate.async().run(); } else { From cca91461f3108497dea36f71d326499eb8f645e1 Mon Sep 17 00:00:00 2001 From: Luca Warmenhoven Date: Wed, 5 Jun 2024 14:50:05 +0200 Subject: [PATCH 3/5] Fixed issues --- .../fitbot/ui/activities/FitnessActivity.java | 5 +---- .../util/processing/InputProcessor.java | 19 +++++++------------ 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java index a890a4c..93fa8db 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java @@ -136,10 +136,6 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall // Acquire paths from the exercise and provide them to the motion processor motionProcessor = new InputProcessor(this); motionProcessor.useExercise(exercise); - /* TODO: Remove if not needed */ - motionProcessor.setRecording(true, 10); - motionProcessor.startListening(); - }, (n) -> { int randomMessageIndex = (int) Math.floor(Math.random() * EXERCISE_NOT_FOUND_MESSAGES.length); @@ -197,6 +193,7 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall } // Start checking for user movement once the video has loaded + this.motionProcessor.startListening(); this.motionProcessor.startCheckingUserMovement(); return true; diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java index 7b0bb13..180c1c4 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java @@ -101,21 +101,19 @@ public class InputProcessor { * This function will start a thread that will check for user movement * and compare the last rotation vectors to the target rotation vectors. */ - public void startCheckingUserMovement() - { + public void startCheckingUserMovement() { // Error checking thread. (new Thread(() -> { - while (this.exercisesRemaining > 0) - { + while (this.exercisesRemaining > 0) { boolean isFaulty = this.isFaultyMovement(); - if ( isFaulty ) { + if (isFaulty) { this.onInadequateRepetition(); } else this.onAdequateRepetition(); this.checksPerformed++; - if ( this.checksPerformed >= this.totalChecks ) + if (this.checksPerformed >= this.totalChecks) acquireExercise(); try { @@ -230,8 +228,7 @@ public class InputProcessor { * Function for acquiring the next exercise from the database. * Upon successful retrieval, it will call the nextExercise method. */ - private void acquireExercise() - { + private void acquireExercise() { this.exercisesRemaining--; this.parentActivity.fetchExerciseAsync(this::nextExercise, (nil) -> { @@ -397,8 +394,7 @@ public class InputProcessor { int i, referenceIndex; float distance; - for ( i = 0; i < selfRotationVectorPaths.length; i++) - { + for (i = 0; i < selfRotationVectorPaths.length; i++) { referenceIndex = (int) (Math.round( ((this.secondsPassed % this.exerciseRepetitionDurationInSeconds) / (this.exerciseRepetitionDurationInSeconds)) * this.targetRotationVectorPaths[i].length)) @@ -407,8 +403,7 @@ public class InputProcessor { distance = this.selfRotationVectorPaths[i].get(this.selfRotationVectorPaths[i].size() - 1).distance( this.targetRotationVectorPaths[i][referenceIndex]); - if (distance > ExerciseManager.EXERCISE_ERROR_MARGIN) - { + if (distance > ExerciseManager.EXERCISE_ERROR_MARGIN) { Log.i("MotionProcessor", "Faulty movement detected: " + distance + " > " + ExerciseManager.EXERCISE_ERROR_MARGIN); return true; } From 68e688bb0e427939cbc8a557f178d038c8b6516d Mon Sep 17 00:00:00 2001 From: Niels Gras Date: Wed, 5 Jun 2024 14:50:50 +0200 Subject: [PATCH 4/5] added pepper animation using class --- .../fitbot/ui/activities/FitnessActivity.java | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java index a890a4c..e42fda2 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java @@ -178,23 +178,7 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall ProgressBar loadingCircle = findViewById(R.id.loadingCircle); loadingCircle.setVisibility(View.GONE); - if ( videoView.isPlaying() ) - { - QiContext qiContext = null; - Animation animationarmraise = AnimationBuilder.with(qiContext) // Create the builder with the context. - .withResources(R.raw.armraise) // Set the animation resource. - .build(); // Build the animation. - - animate = AnimateBuilder.with(qiContext) // Create the builder with the context. - .withAnimation(animationarmraise) // Set the animation. - .build(); // Build the animate action. - - Future animateFuture = animate.async().run(); - } - else - { - Log.e("FitnessActivity", "VideoView is null. Check your layout XML."); - } + Pepper.animate("armraise"); // Start checking for user movement once the video has loaded this.motionProcessor.startCheckingUserMovement(); From 3ed4db39c017cf1a47da22c4e0300a9aa965c064 Mon Sep 17 00:00:00 2001 From: Luca Warmenhoven Date: Wed, 5 Jun 2024 15:07:13 +0200 Subject: [PATCH 5/5] Fixed thread issues --- .../com/example/fitbot/ui/activities/FitnessActivity.java | 8 ++++++-- .../example/fitbot/util/processing/InputProcessor.java | 5 +++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java index 7883a60..365a1e7 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java @@ -145,7 +145,8 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall int randomMessageIndex = (int) Math.floor(Math.random() * EXERCISE_NOT_FOUND_MESSAGES.length); Pepper.say(EXERCISE_NOT_FOUND_MESSAGES[randomMessageIndex]); Pepper.say(EXERCISE_NOT_FOUND_SEEK_HELP_MESSAGE); - NavigationManager.navigateToActivity(this, EndScreenActivity.class); + // Run on main thread to prevent crashes (wack) + this.runOnUiThread(() -> NavigationManager.navigateToActivity(this, EndScreenActivity.class)); }); } @@ -160,7 +161,10 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall new Thread(() -> { Exercise exercise = ExerciseManager.fetchExerciseFromDatabase(); if (exercise == null) { - runOnUiThread(() -> onFailedFetch.handle(null)); + onFailedFetch.handle(null); + + // Main thread stuff + runOnUiThread(() -> NavigationManager.navigateToActivity(this, MainActivity.class)); } else { onSuccessfulFetch.handle(exercise); runOnUiThread(() -> { diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java index 180c1c4..15ebf2a 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java @@ -132,7 +132,9 @@ public class InputProcessor { */ private void nextExercise(Exercise exercise) { if (this.exercisesRemaining-- <= 0) { - NavigationManager.navigateToActivity(this.parentActivity, EndScreenActivity.class); + + // Move to end screen on main activity + this.parentActivity.runOnUiThread(() -> NavigationManager.navigateToActivity(this.parentActivity, EndScreenActivity.class)); return; } @@ -234,7 +236,6 @@ public class InputProcessor { this.parentActivity.fetchExerciseAsync(this::nextExercise, (nil) -> { Log.i("MotionProcessor", "Failed to fetch exercise data."); - NavigationManager.navigateToActivity(this.parentActivity, MainActivity.class); }); }