From cca91461f3108497dea36f71d326499eb8f645e1 Mon Sep 17 00:00:00 2001 From: Luca Warmenhoven Date: Wed, 5 Jun 2024 14:50:05 +0200 Subject: [PATCH 1/3] 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 3ed4db39c017cf1a47da22c4e0300a9aa965c064 Mon Sep 17 00:00:00 2001 From: Luca Warmenhoven Date: Wed, 5 Jun 2024 15:07:13 +0200 Subject: [PATCH 2/3] 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); }); } From e90abbfe9a7798d0a6d99bf1e28e2ae8a1716eba Mon Sep 17 00:00:00 2001 From: SebasKoedam Date: Wed, 5 Jun 2024 15:07:25 +0200 Subject: [PATCH 3/3] removed shimmer effect due to compatebility with rest of the code --- .../fitbot/ui/activities/FitnessActivity.java | 34 ------------------- 1 file changed, 34 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 7bba79c..ee5067e 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 @@ -2,9 +2,7 @@ package com.example.fitbot.ui.activities; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; -import android.animation.ArgbEvaluator; import android.animation.ObjectAnimator; -import android.animation.ValueAnimator; import android.app.Dialog; import android.content.Context; import android.content.res.ColorStateList; @@ -59,8 +57,6 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall private VideoView videoView; private QiContext qiContext; - private ObjectAnimator shimmerAnimator; - private final Object lock = new Object(); // Some nice little messages for the user @@ -101,14 +97,6 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall ProgressBar loadingCircle = findViewById(R.id.loadingCircle); loadingCircle.setIndeterminateTintList(ColorStateList.valueOf(Color.RED)); - // Start shimmer animation for loading elements - View shimmerProgressCircle = findViewById(R.id.progressCircle); - View shimmerFitnessTitle = findViewById(R.id.textViewFitnessTitle); - View shimmerFitnessText = findViewById(R.id.textViewFitnessShortDescription); - shimmerAnimation(shimmerProgressCircle); - shimmerAnimation(shimmerFitnessTitle); - shimmerAnimation(shimmerFitnessText); - // Navigation Buttons NavigationManager.setupButtonNavigation(this, R.id.homeButtonFitness, MainActivity.class); NavigationManager.setupButtonNavigation(this, R.id.skipButtonFitness, MainActivity.class); //Needs to skip exercises once those are implemented @@ -182,8 +170,6 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall ProgressBar loadingCircle = findViewById(R.id.loadingCircle); loadingCircle.setVisibility(View.GONE); - // Stop shimmer animation - stopShimmerAnimation(); if ( videoView.isPlaying() ) { @@ -316,24 +302,4 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall }); animator.start(); } - - public void shimmerAnimation(View view) { - ObjectAnimator animator = ObjectAnimator.ofObject( - view, - "backgroundColor", - new ArgbEvaluator(), - ContextCompat.getColor(view.getContext(), R.color.shimmerStartColor), - ContextCompat.getColor(view.getContext(), R.color.shimmerEndColor) - ); - animator.setDuration(1200); - animator.setRepeatCount(ValueAnimator.INFINITE); - animator.setRepeatMode(ValueAnimator.REVERSE); - animator.start(); - } - - public void stopShimmerAnimation() { - if (shimmerAnimator != null && shimmerAnimator.isRunning()) { - shimmerAnimator.cancel(); - } - } } \ No newline at end of file