package de.plinzen.android.rttmanager.ranging; import android.annotation.SuppressLint; import android.content.Context; import android.net.wifi.ScanResult; import android.net.wifi.rtt.RangingRequest; import android.net.wifi.rtt.RangingResult; import android.net.wifi.rtt.RangingResultCallback; import android.net.wifi.rtt.WifiRttManager; import android.support.annotation.NonNull; import java.util.List; import java.util.concurrent.Executor; import io.reactivex.Single; class RttRangingManager { private final Executor mainExecutor; private final WifiRttManager rttManager; @SuppressLint("WrongConstant") RttRangingManager(final Context context) { rttManager = (WifiRttManager) context.getSystemService(Context.WIFI_RTT_RANGING_SERVICE); mainExecutor = context.getMainExecutor(); } public Single<List<RangingResult>> startRanging( @NonNull final ScanResult scanResult) { return Single.create(emitter -> { final RangingRequest request = new RangingRequest.Builder() .addAccessPoint(scanResult) .build(); final RangingResultCallback callback = new RangingResultCallback() { @Override public void onRangingFailure(final int i) { emitter.onError(new RuntimeException("The WiFi-Ranging failed with error code: " + i)); } @Override public void onRangingResults(final List<RangingResult> list) { emitter.onSuccess(list); } }; rttManager.startRanging(request, mainExecutor, callback); }); } }