package org.runnerup.hr; import android.annotation.TargetApi; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.content.Context; import android.os.Build; import android.os.Handler; @TargetApi(Build.VERSION_CODES.FROYO) public class MockHRProvider implements HRProvider { private HRClient hrClient = null; private Handler hrClientHandler = null; public static final String NAME = "MockHR"; public MockHRProvider(Context ctx) { } @Override public String getName() { return "MockHR"; } @Override public String getProviderName() { return "MockHR"; } @Override public void open(Handler handler, HRClient hrClient) { this.hrClient = hrClient; this.hrClientHandler = handler; hrClient.onOpenResult(true); } @Override public void close() { } boolean mIsScanning = false; @Override public boolean isScanning() { return mIsScanning; } final Runnable fakeScanResult = new Runnable() { int count = 0; @Override public void run() { if (mIsScanning && BluetoothAdapter.getDefaultAdapter() != null) { String dev = "00:43:A8:23:10:" + String.format("%02X", System.currentTimeMillis() % 256); hrClient.onScanResult(Bt20Base.createDeviceRef(NAME, BluetoothAdapter .getDefaultAdapter().getRemoteDevice(dev))); if (++count < 3) { hrClientHandler.postDelayed(fakeScanResult, 3000); return; } } count = 0; } }; @Override public void startScan() { mIsScanning = true; hrClientHandler.postDelayed(fakeScanResult, 3000); } @Override public void stopScan() { mIsScanning = false; } boolean mIsConnecting = false; boolean mIsConnected = false; @Override public boolean isConnected() { return mIsConnected; } @Override public boolean isConnecting() { return mIsConnecting; } @Override public void connect(HRDeviceRef ref) { if (mIsConnected) return; if (mIsConnecting) return; mIsConnecting = true; hrClientHandler.postDelayed(new Runnable() { @Override public void run() { if (mIsConnecting) { mIsConnected = true; mIsConnecting = false; hrClient.onConnectResult(true); hrClientHandler.postDelayed(hrUpdate, 750); } } }, 3000); } final Runnable hrUpdate = new Runnable() { @Override public void run() { hrValue = (int) (150 + 40 * Math.random()); hrTimestamp = System.currentTimeMillis(); if (mIsConnected == true) { hrClientHandler.postDelayed(hrUpdate, 750); } } }; @Override public void disconnect() { mIsConnecting = false; mIsConnected = false; } int hrValue = 0; long hrTimestamp = 0; @Override public int getHRValue() { return hrValue; } @Override public long getHRValueTimestamp() { return hrTimestamp; } @Override public HRData getHRData() { if (hrValue <= 0) { return null; } return new HRData().setHeartRate(hrValue).setTimestampEstimate(hrTimestamp); } @Override public int getBatteryLevel() { return (int) (100 * Math.random()); } @Override public boolean isBondingDevice() { return false; } @Override public boolean isEnabled() { return true; } @Override public boolean startEnableIntent(Activity activity, int requestCode) { return false; } }