mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-12-16 05:37:51 +01:00
UM-25: made cumulative values resettable
This commit is contained in:
parent
8e34311f01
commit
f61008c9ae
@ -5,17 +5,21 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.view.View;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBActivity;
|
import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBActivity;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.um25.Data.MeasurementData;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.um25.Data.MeasurementData;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.um25.Support.UM25Support;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.um25.Support.UM25Support;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
||||||
|
|
||||||
public class DataActivity extends AbstractGBActivity {
|
public class DataActivity extends AbstractGBActivity {
|
||||||
private HashMap<Integer, TextView> valueViews = new HashMap<>(ValueDisplay.values().length);
|
private HashMap<Integer, TextView> valueViews = new HashMap<>(ValueDisplay.values().length);
|
||||||
@ -51,6 +55,21 @@ public class DataActivity extends AbstractGBActivity {
|
|||||||
setContentView(R.layout.activity_um25_data);
|
setContentView(R.layout.activity_um25_data);
|
||||||
|
|
||||||
chargeDurationTextView = findViewById(R.id.um25_text_charge_duration);
|
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
|
@Override
|
||||||
|
@ -2,7 +2,10 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.um25.Support;
|
|||||||
|
|
||||||
import android.bluetooth.BluetoothGatt;
|
import android.bluetooth.BluetoothGatt;
|
||||||
import android.bluetooth.BluetoothGattCharacteristic;
|
import android.bluetooth.BluetoothGattCharacteristic;
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.IntentFilter;
|
||||||
|
|
||||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
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 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_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 String EXTRA_KEY_MEASUREMENT_DATA = "EXTRA_MEASUREMENT_DATA";
|
||||||
public static final int LOOP_DELAY = 500;
|
public static final int LOOP_DELAY = 500;
|
||||||
|
|
||||||
private final byte[] COMMAND_UPDATE = new byte[]{(byte) 0xF0};
|
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 final int PAYLOAD_LENGTH = 130;
|
||||||
|
|
||||||
private ByteBuffer buffer = ByteBuffer.allocate(PAYLOAD_LENGTH);
|
private ByteBuffer buffer = ByteBuffer.allocate(PAYLOAD_LENGTH);
|
||||||
@ -46,6 +51,18 @@ public class UM25Support extends UM25BaseSupport {
|
|||||||
this.buffer.mark();
|
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
|
@Override
|
||||||
protected TransactionBuilder initializeDevice(TransactionBuilder builder) {
|
protected TransactionBuilder initializeDevice(TransactionBuilder builder) {
|
||||||
return builder
|
return builder
|
||||||
@ -60,6 +77,11 @@ public class UM25Support extends UM25BaseSupport {
|
|||||||
@Override
|
@Override
|
||||||
public boolean run(BluetoothGatt gatt) {
|
public boolean run(BluetoothGatt gatt) {
|
||||||
logger.debug("initialized, starting timers");
|
logger.debug("initialized, starting timers");
|
||||||
|
LocalBroadcastManager.getInstance(getContext())
|
||||||
|
.registerReceiver(
|
||||||
|
resetReceiver,
|
||||||
|
new IntentFilter(ACTION_RESET_STATS)
|
||||||
|
);
|
||||||
startLoop();
|
startLoop();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -67,6 +89,13 @@ public class UM25Support extends UM25BaseSupport {
|
|||||||
.add(new SetDeviceStateAction(getDevice(), GBDevice.State.INITIALIZED, getContext()));
|
.add(new SetDeviceStateAction(getDevice(), GBDevice.State.INITIALIZED, getContext()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void dispose() {
|
||||||
|
super.dispose();
|
||||||
|
LocalBroadcastManager.getInstance(getContext())
|
||||||
|
.unregisterReceiver(resetReceiver);
|
||||||
|
}
|
||||||
|
|
||||||
private void startLoop(){
|
private void startLoop(){
|
||||||
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);
|
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);
|
||||||
executor.scheduleWithFixedDelay(new Runnable() {
|
executor.scheduleWithFixedDelay(new Runnable() {
|
||||||
|
Loading…
Reference in New Issue
Block a user