From f61008c9ae062ed9b34771307bfb4a4cb7875867 Mon Sep 17 00:00:00 2001 From: Daniel Dakhno Date: Sun, 27 Feb 2022 11:03:39 +0100 Subject: [PATCH] UM-25: made cumulative values resettable --- .../devices/um25/Activity/DataActivity.java | 19 ++++++++++++ .../devices/um25/Support/UM25Support.java | 29 +++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/um25/Activity/DataActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/um25/Activity/DataActivity.java index 1b4cee1ed..485398cdf 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/um25/Activity/DataActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/um25/Activity/DataActivity.java @@ -5,17 +5,21 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; +import android.view.View; import android.widget.TextView; +import android.widget.Toast; import androidx.localbroadcastmanager.content.LocalBroadcastManager; import java.lang.reflect.Field; import java.util.HashMap; +import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBActivity; import nodomain.freeyourgadget.gadgetbridge.service.devices.um25.Data.MeasurementData; import nodomain.freeyourgadget.gadgetbridge.service.devices.um25.Support.UM25Support; +import nodomain.freeyourgadget.gadgetbridge.util.GB; public class DataActivity extends AbstractGBActivity { private HashMap valueViews = new HashMap<>(ValueDisplay.values().length); @@ -51,6 +55,21 @@ public class DataActivity extends AbstractGBActivity { setContentView(R.layout.activity_um25_data); chargeDurationTextView = findViewById(R.id.um25_text_charge_duration); + TextView wattHoursTextView = findViewById(R.id.um25_text_wattage_sum); + + View.OnLongClickListener longClickListener = new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + GB.toast("resetting", Toast.LENGTH_SHORT, GB.INFO); + LocalBroadcastManager.getInstance(DataActivity.this).sendBroadcast( + new Intent(UM25Support.ACTION_RESET_STATS) + ); + return true; + } + }; + + chargeDurationTextView.setOnLongClickListener(longClickListener); + wattHoursTextView.setOnLongClickListener(longClickListener); } @Override diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/um25/Support/UM25Support.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/um25/Support/UM25Support.java index 704dfd197..7a728c375 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/um25/Support/UM25Support.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/um25/Support/UM25Support.java @@ -2,7 +2,10 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.um25.Support; import android.bluetooth.BluetoothGatt; import android.bluetooth.BluetoothGattCharacteristic; +import android.content.BroadcastReceiver; +import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import androidx.localbroadcastmanager.content.LocalBroadcastManager; @@ -29,10 +32,12 @@ public class UM25Support extends UM25BaseSupport { public static final String UUID_CHAR = "0000ffe1-0000-1000-8000-00805f9b34fb"; public static final String ACTION_MEASUREMENT_TAKEN = "com.nodomain.gadgetbridge.um25.MEASUREMENT_TAKEN"; + public static final String ACTION_RESET_STATS = "com.nodomain.gadgetbridge.um25.RESET_STATS"; public static final String EXTRA_KEY_MEASUREMENT_DATA = "EXTRA_MEASUREMENT_DATA"; public static final int LOOP_DELAY = 500; private final byte[] COMMAND_UPDATE = new byte[]{(byte) 0xF0}; + private final byte[] COMMAND_RESET_STATS = new byte[]{(byte) 0xF4}; private final int PAYLOAD_LENGTH = 130; private ByteBuffer buffer = ByteBuffer.allocate(PAYLOAD_LENGTH); @@ -46,6 +51,18 @@ public class UM25Support extends UM25BaseSupport { this.buffer.mark(); } + BroadcastReceiver resetReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if(!ACTION_RESET_STATS.equals(intent.getAction())){ + return; + } + new TransactionBuilder("reset stats") + .write(getCharacteristic(UUID.fromString(UUID_CHAR)), COMMAND_RESET_STATS) + .queue(getQueue()); + } + }; + @Override protected TransactionBuilder initializeDevice(TransactionBuilder builder) { return builder @@ -60,6 +77,11 @@ public class UM25Support extends UM25BaseSupport { @Override public boolean run(BluetoothGatt gatt) { logger.debug("initialized, starting timers"); + LocalBroadcastManager.getInstance(getContext()) + .registerReceiver( + resetReceiver, + new IntentFilter(ACTION_RESET_STATS) + ); startLoop(); return true; } @@ -67,6 +89,13 @@ public class UM25Support extends UM25BaseSupport { .add(new SetDeviceStateAction(getDevice(), GBDevice.State.INITIALIZED, getContext())); } + @Override + public void dispose() { + super.dispose(); + LocalBroadcastManager.getInstance(getContext()) + .unregisterReceiver(resetReceiver); + } + private void startLoop(){ ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1); executor.scheduleWithFixedDelay(new Runnable() {