Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4453f3b2 authored by Jakub Tyszkowski's avatar Jakub Tyszkowski
Browse files

hap: Improve callback registration mechanism

Improves input parameters verification by throwing NPE as requested in
b/218616250. Adjusts the doc accordingly.

Bug: 150670922
Bug: 218616250
Tag: #feature
Test: atest CtsBluetoothTestCases:android.bluetooth.cts.BluetoothHapClientTest
Sponsor: jpawlowski@
Change-Id: I828d578ca53678a2642bc4e73d57b7b481feb88b
parent 1e33487f
Loading
Loading
Loading
Loading
+13 −15
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeoutException;

@@ -457,14 +458,16 @@ public final class BluetoothHapClient implements BluetoothProfile, AutoCloseable
     * Register a {@link Callback} that will be invoked during the
     * operation of this profile.
     *
     * Repeated registration of the same <var>callback</var> object will have no effect after
     * the first call to this method, even when the <var>executor</var> is different. API caller
     * would have to call {@link #unregisterCallback(Callback)} with
     * the same callback object before registering it again.
     * Repeated registration of the same <var>callback</var> object after the first call to this
     * method will result with IllegalArgumentException being thrown, even when the
     * <var>executor</var> is different. API caller would have to call
     * {@link #unregisterCallback(Callback)} with the same callback object before registering it
     * again.
     *
     * @param executor an {@link Executor} to execute given callback
     * @param callback user implementation of the {@link Callback}
     * @throws IllegalArgumentException if a null executor, sink, or callback is given
     * @throws NullPointerException if a null executor, or callback is given, or
     *  IllegalArgumentException if the same <var>callback<var> is already registered.
     * @hide
     */
    @SystemApi
@@ -475,12 +478,8 @@ public final class BluetoothHapClient implements BluetoothProfile, AutoCloseable
    })
    public void registerCallback(@NonNull @CallbackExecutor Executor executor,
            @NonNull Callback callback) {
        if (executor == null) {
            throw new IllegalArgumentException("executor cannot be null");
        }
        if (callback == null) {
            throw new IllegalArgumentException("callback cannot be null");
        }
        Objects.requireNonNull(executor, "executor cannot be null");
        Objects.requireNonNull(callback, "callback cannot be null");
        if (!isEnabled()) {
            throw new IllegalStateException("service not enabled");
        }
@@ -521,7 +520,8 @@ public final class BluetoothHapClient implements BluetoothProfile, AutoCloseable
     * <p>Callbacks are automatically unregistered when application process goes away
     *
     * @param callback user implementation of the {@link Callback}
     * @throws IllegalArgumentException when callback is null or when no callback is registered
     * @throws NullPointerException when callback is null or IllegalArgumentException when no
     *  callback is registered
     * @hide
     */
    @SystemApi
@@ -531,9 +531,7 @@ public final class BluetoothHapClient implements BluetoothProfile, AutoCloseable
            android.Manifest.permission.BLUETOOTH_PRIVILEGED,
    })
    public void unregisterCallback(@NonNull Callback callback) {
        if (callback == null) {
            throw new IllegalArgumentException("callback cannot be null");
        }
        Objects.requireNonNull(callback, "callback cannot be null");

        if (DBG) log("unregisterCallback");