From 244b758743b12a2233c1ceb1ef3f2f479ef05663 Mon Sep 17 00:00:00 2001 From: vanous Date: Sun, 2 Oct 2022 23:21:14 +0200 Subject: [PATCH] SuperCars: fix periodicDataSender, add tricks --- .../activities/BatteryInfoActivity.java | 3 +- .../devices/supercars/ControlActivity.java | 78 ++++++++++++++++-- .../devices/supercars/SuperCarsConstants.java | 49 ++++++++++++ .../res/drawable/ic_arrow_circle_left.xml | 10 +++ .../res/drawable/ic_arrow_circle_right.xml | 10 +++ app/src/main/res/drawable/ic_u_turn_left.xml | 10 +++ app/src/main/res/drawable/ic_u_turn_right.xml | 10 +++ .../res/layout/activity_supercars_control.xml | 79 ++++++++++++++++++- 8 files changed, 239 insertions(+), 10 deletions(-) create mode 100644 app/src/main/res/drawable/ic_arrow_circle_left.xml create mode 100644 app/src/main/res/drawable/ic_arrow_circle_right.xml create mode 100644 app/src/main/res/drawable/ic_u_turn_left.xml create mode 100644 app/src/main/res/drawable/ic_u_turn_right.xml diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/BatteryInfoActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/BatteryInfoActivity.java index 3a99286f60..3f5eef7cd2 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/BatteryInfoActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/BatteryInfoActivity.java @@ -29,8 +29,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.BatteryConfig; import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils; import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper; -public class -BatteryInfoActivity extends AbstractGBActivity { +public class BatteryInfoActivity extends AbstractGBActivity { private static final Logger LOG = LoggerFactory.getLogger(BatteryInfoActivity.class); GBDevice gbDevice; private int timeFrom; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/supercars/ControlActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/supercars/ControlActivity.java index 6676aab57d..f881b877bb 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/supercars/ControlActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/supercars/ControlActivity.java @@ -6,8 +6,10 @@ import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.os.CountDownTimer; +import android.view.View; import android.widget.CheckBox; import android.widget.CompoundButton; +import android.widget.ImageButton; import android.widget.TextView; import androidx.localbroadcastmanager.content.LocalBroadcastManager; @@ -24,17 +26,21 @@ public class ControlActivity extends AbstractGBActivity implements JoystickView. private static final Logger LOG = LoggerFactory.getLogger(ControlActivity.class); LocalBroadcastManager localBroadcastManager; CountDownTimer periodicDataSenderRunner; + boolean periodicDataSenderRunnerIsRunning = false; private GBDevice device; TextView batteryPercentage; boolean lights = false; boolean blinking = false; boolean turbo = false; + int stepCounter = 0; SuperCarsConstants.Direction direction = SuperCarsConstants.Direction.CENTER; SuperCarsConstants.Movement movement = SuperCarsConstants.Movement.IDLE; SuperCarsConstants.Speed speed = SuperCarsConstants.Speed.NORMAL; SuperCarsConstants.Light light = SuperCarsConstants.Light.OFF; + SuperCarsConstants.Tricks tricks = SuperCarsConstants.Tricks.OFF; + @Override protected void onCreate(Bundle savedInstanceState) { @@ -97,9 +103,46 @@ public class ControlActivity extends AbstractGBActivity implements JoystickView. } }); + ImageButton trick1 = findViewById(R.id.trick1); + ImageButton trick2 = findViewById(R.id.trick2); + ImageButton trick3 = findViewById(R.id.trick3); + ImageButton trick4 = findViewById(R.id.trick4); + + trick1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + tricks = SuperCarsConstants.Tricks.CIRCLE_LEFT; + stepCounter = 0; + } + }); + + trick2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + tricks = SuperCarsConstants.Tricks.CIRCLE_RIGHT; + stepCounter = 0; + } + }); + trick3.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + tricks = SuperCarsConstants.Tricks.U_TURN_LEFT; + stepCounter = 0; + } + }); + trick4.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + tricks = SuperCarsConstants.Tricks.U_TURN_RIGHT; + stepCounter = 0; + } + }); + //when this activity is open, data is sent continuously every 100ms - periodicDataSender(); - periodicDataSenderRunner.start(); + + if (!periodicDataSenderRunnerIsRunning) { + periodicDataSender(); + } } private void setLights() { @@ -109,6 +152,12 @@ public class ControlActivity extends AbstractGBActivity implements JoystickView. } else { light = SuperCarsConstants.Light.OFF; } + } else if (blinking) { + if (light.equals(SuperCarsConstants.Light.ON)) { + light = SuperCarsConstants.Light.OFF; + } else { + light = SuperCarsConstants.Light.ON; + } } } @@ -125,12 +174,20 @@ public class ControlActivity extends AbstractGBActivity implements JoystickView. periodicDataSenderRunner = new CountDownTimer(Long.MAX_VALUE, 100) { public void onTick(long millisUntilFinished) { + periodicDataSenderRunnerIsRunning = true; + setLights(); - if (blinking) { - if (light.equals(SuperCarsConstants.Light.ON)) { - light = SuperCarsConstants.Light.OFF; + if (tricks != SuperCarsConstants.Tricks.OFF) { + Enum[][] trick_steps = SuperCarsConstants.get_trick(tricks); + int steps = trick_steps.length; + if (stepCounter < steps) { + Enum[] step = trick_steps[stepCounter]; + movement = (SuperCarsConstants.Movement) step[0]; + direction = (SuperCarsConstants.Direction) step[1]; + stepCounter++; } else { - light = SuperCarsConstants.Light.ON; + tricks = SuperCarsConstants.Tricks.OFF; + stepCounter = 0; } } @@ -155,6 +212,9 @@ public class ControlActivity extends AbstractGBActivity implements JoystickView. @Override public void onJoystickMoved(float xPercent, float yPercent, int id) { + tricks = SuperCarsConstants.Tricks.OFF; + stepCounter = 0; + if (yPercent < 0.2 && yPercent != 0) { movement = SuperCarsConstants.Movement.UP; } else if (yPercent > 0.2) { @@ -182,19 +242,23 @@ public class ControlActivity extends AbstractGBActivity implements JoystickView. protected void onDestroy() { super.onDestroy(); periodicDataSenderRunner.cancel(); + periodicDataSenderRunnerIsRunning = false; LocalBroadcastManager.getInstance(this).unregisterReceiver(commandReceiver); } @Override protected void onPostResume() { super.onPostResume(); - periodicDataSenderRunner.start(); + if (!periodicDataSenderRunnerIsRunning) { + periodicDataSenderRunner.start(); + } } @Override protected void onPause() { super.onPause(); periodicDataSenderRunner.cancel(); + periodicDataSenderRunnerIsRunning = false; } BroadcastReceiver commandReceiver = new BroadcastReceiver() { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/supercars/SuperCarsConstants.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/supercars/SuperCarsConstants.java index a15cffdced..c36de6e91d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/supercars/SuperCarsConstants.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/supercars/SuperCarsConstants.java @@ -32,5 +32,54 @@ public class SuperCarsConstants { public enum Direction { LEFT, RIGHT, CENTER } + + public enum Tricks { + OFF, CIRCLE_RIGHT, CIRCLE_LEFT, U_TURN_LEFT, U_TURN_RIGHT + } + + static Enum[] fwd_r = {Movement.UP, Direction.RIGHT}; + static Enum[] fwd_l = {Movement.UP, Direction.LEFT}; + static Enum[] stop = {Movement.IDLE, Direction.CENTER}; + + public static final Enum[][] tricks_circle_right = { + fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, + fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, + fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, + stop + }; + + public static final Enum[][] tricks_circle_left = { + fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, + fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, + fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, + stop + }; + + public static final Enum[][] tricks_u_turn_right = { + fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, + fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, fwd_r, + stop + }; + + public static final Enum[][] tricks_u_turn_left = { + fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, + fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, fwd_l, + stop + }; + + + public static final Enum[][] get_trick(Tricks trick) { + switch (trick) { + case CIRCLE_RIGHT: + return tricks_circle_right; + case CIRCLE_LEFT: + return tricks_circle_left; + case U_TURN_LEFT: + return tricks_u_turn_left; + case U_TURN_RIGHT: + return tricks_u_turn_right; + } + return tricks_circle_right; + } } diff --git a/app/src/main/res/drawable/ic_arrow_circle_left.xml b/app/src/main/res/drawable/ic_arrow_circle_left.xml new file mode 100644 index 0000000000..50e8c1ba90 --- /dev/null +++ b/app/src/main/res/drawable/ic_arrow_circle_left.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_arrow_circle_right.xml b/app/src/main/res/drawable/ic_arrow_circle_right.xml new file mode 100644 index 0000000000..091889a701 --- /dev/null +++ b/app/src/main/res/drawable/ic_arrow_circle_right.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_u_turn_left.xml b/app/src/main/res/drawable/ic_u_turn_left.xml new file mode 100644 index 0000000000..abec9ce98e --- /dev/null +++ b/app/src/main/res/drawable/ic_u_turn_left.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_u_turn_right.xml b/app/src/main/res/drawable/ic_u_turn_right.xml new file mode 100644 index 0000000000..a6ee4725cb --- /dev/null +++ b/app/src/main/res/drawable/ic_u_turn_right.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/activity_supercars_control.xml b/app/src/main/res/layout/activity_supercars_control.xml index a948fd0ed1..3b6c066afa 100644 --- a/app/src/main/res/layout/activity_supercars_control.xml +++ b/app/src/main/res/layout/activity_supercars_control.xml @@ -1,5 +1,6 @@ @@ -60,6 +61,82 @@ tools:ignore="TouchTargetSizeCheck" /> - + + + + + + + + + + + + + + + \ No newline at end of file