Skip to content

Commit

Permalink
Merge branch 'refs/heads/MY4836'
Browse files Browse the repository at this point in the history
# Conflicts:
#	android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothFactory.java
#	android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothOKOK2.java
#	android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothSettingsFragment.java
  • Loading branch information
oliexdev committed Dec 4, 2024
2 parents 9df5066 + 8eca3a0 commit d533e1c
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package com.health.openscale.core.bluetooth;

import android.content.Context;
import android.util.SparseArray;

import java.util.Locale;

Expand Down Expand Up @@ -118,7 +119,7 @@ public static BluetoothCommunication createDeviceDriver(Context context, String
if (deviceName.equals("ADV") || deviceName.equals("Chipsea-BLE")) {
return new BluetoothOKOK(context);
}
if (deviceName.isEmpty()) {
if (deviceName.equals("NoName OkOk")) {
return new BluetoothOKOK2(context);
}
if (deviceName.equals("BF105") || deviceName.equals("BF720")) {
Expand Down Expand Up @@ -153,4 +154,11 @@ public static BluetoothCommunication createDeviceDriver(Context context, String
}
return null;
}

public static String convertNoNameToDeviceName(SparseArray<byte[]> manufacturerSpecificData) {
String deviceName = null;
deviceName = BluetoothOKOK2.convertNoNameToDeviceName(manufacturerSpecificData);

return deviceName;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
*/
package com.health.openscale.core.bluetooth;

import static com.health.openscale.core.utils.Converters.WeightUnit.LB;
import static com.health.openscale.core.utils.Converters.WeightUnit.ST;

import android.bluetooth.le.ScanFilter;
import android.bluetooth.le.ScanResult;
import android.content.Context;
Expand All @@ -35,9 +38,6 @@

import timber.log.Timber;

import static com.health.openscale.core.utils.Converters.WeightUnit.LB;
import static com.health.openscale.core.utils.Converters.WeightUnit.ST;

public class BluetoothOKOK2 extends BluetoothCommunication {
private static final int IDX_WEIGHT_MSB = 0;
private static final int IDX_WEIGHT_LSB = 1;
Expand Down Expand Up @@ -66,6 +66,21 @@ public BluetoothOKOK2(Context context) {
central = new BluetoothCentralManager(context, btCallback, new Handler(Looper.getMainLooper()));
}

static String convertNoNameToDeviceName(SparseArray<byte[]> manufacturerSpecificData) {
int vendorIndex = -1;
for (int i = 0; i < manufacturerSpecificData.size(); i++) {
int vendorId = manufacturerSpecificData.keyAt(i);
if ((vendorId & 0xff) == 0xc0) { // 0x00c0-->0xffc0
vendorIndex = vendorId;
}
}
if (vendorIndex == -1) {
return null;
}

return "NoName OkOk";
}

private final BluetoothCentralManagerCallback btCallback = new BluetoothCentralManagerCallback() {
@Override
public void onDiscoveredPeripheral(@NotNull BluetoothPeripheral peripheral, @NotNull ScanResult scanResult) {
Expand Down Expand Up @@ -157,8 +172,6 @@ public void connect(String macAddress) {
byte[] mask = new byte[13];
mask[IDX_MAC_1] = mask[IDX_MAC_2] = mask[IDX_MAC_3] = mask[IDX_MAC_4] = mask[IDX_MAC_5] = mask[IDX_MAC_6] = (byte) 0xff;

// TODO: verify setAdvertisingDataTypeWithData on API33+
// b.setAdvertisingDataTypeWithData(ScanRecord.DATA_TYPE_MANUFACTURER_SPECIFIC_DATA, data, mask);
for (int i = 0x00; i <= 0xff; i++) {
ScanFilter.Builder b = new ScanFilter.Builder();
b.setDeviceAddress(macAddress);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -322,11 +322,19 @@ private void onDeviceFound(final ScanResult bleScanResult) {
return;
}

String deviceName = device.getName();
if (deviceName == null) {
deviceName = BluetoothFactory.convertNoNameToDeviceName(bleScanResult.getScanRecord().getManufacturerSpecificData());
}
if (deviceName == null) {
return;
}

BluetoothDeviceView deviceView = new BluetoothDeviceView(context);
deviceView.setDeviceName(formatDeviceName(bleScanResult.getDevice()));
deviceView.setDeviceName(formatDeviceName(deviceName, device.getAddress()));
deviceView.setAlias(deviceName);

String name = device.getName() != null ? device.getName() : "";
BluetoothCommunication btDevice = BluetoothFactory.createDeviceDriver(context, name);
BluetoothCommunication btDevice = BluetoothFactory.createDeviceDriver(context, deviceName);
if (btDevice != null) {
Timber.d("Found supported device %s (driver: %s)",
formatDeviceName(device), btDevice.driverName());
Expand Down Expand Up @@ -394,6 +402,7 @@ private class BluetoothDeviceView extends LinearLayout implements View.OnClickLi
private TextView deviceName;
private ImageView deviceIcon;
private String deviceAddress;
private String deviceAlias;

public BluetoothDeviceView(Context context) {
super(context);
Expand Down Expand Up @@ -423,6 +432,14 @@ public BluetoothDeviceView(Context context) {
addView(deviceName);
}

public void setAlias(String alias) {
deviceAlias = alias;
}

public String getAlias() {
return deviceAlias;
}

public void setDeviceAddress(String address) {
deviceAddress = address;
}
Expand Down Expand Up @@ -481,10 +498,10 @@ public void onClick(View view) {

prefs.edit()
.putString(PREFERENCE_KEY_BLUETOOTH_HW_ADDRESS, device.getAddress())
.putString(PREFERENCE_KEY_BLUETOOTH_DEVICE_NAME, device.getName())
.putString(PREFERENCE_KEY_BLUETOOTH_DEVICE_NAME, getAlias())
.apply();

Timber.d("Saved Bluetooth device " + device.getName() + " with address " + device.getAddress());
Timber.d("Saved Bluetooth device " + getAlias() + " with address " + device.getAddress());

stopBluetoothDiscovery();

Expand Down

0 comments on commit d533e1c

Please sign in to comment.