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

Commit d66c95fa authored by Hector Tellez's avatar Hector Tellez
Browse files

Revert "Support multiple filters per association request"

This reverts commit e70e6aa6.

Change-Id: I12857cbbea0a0c74521191ab5e3713db230626ab
parent e70e6aa6
Loading
Loading
Loading
Loading
+8 −22
Original line number Diff line number Diff line
@@ -8183,17 +8183,18 @@ package android.bluetooth.le {
package android.companion {
  public final class AssociationRequest implements android.os.Parcelable {
  public final class AssociationRequest<F extends android.companion.DeviceFilter> implements android.os.Parcelable {
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.companion.AssociationRequest> CREATOR;
  }
  public static final class AssociationRequest.Builder {
    ctor public AssociationRequest.Builder();
    method public android.companion.AssociationRequest.Builder addDeviceFilter(android.companion.DeviceFilter<?>);
    method public android.companion.AssociationRequest build();
    method public android.companion.AssociationRequest.Builder setSingleDevice(boolean);
  public static final class AssociationRequest.Builder<F extends android.companion.DeviceFilter> {
    method public android.companion.AssociationRequest<F> build();
    method public static android.companion.AssociationRequest.Builder<android.companion.BluetoothDeviceFilter> createForBluetoothDevice();
    method public static android.companion.AssociationRequest.Builder<android.companion.BluetoothLEDeviceFilter> createForBluetoothLEDevice();
    method public android.companion.AssociationRequest.Builder<F> setDeviceFilter(F);
    method public android.companion.AssociationRequest.Builder<F> setSingleDevice(boolean);
  }
  public final class BluetoothDeviceFilter implements android.companion.DeviceFilter {
@@ -8214,20 +8215,17 @@ package android.companion {
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.companion.BluetoothLEDeviceFilter> CREATOR;
    field public static final int RENAME_PREFIX_LENGTH_LIMIT = 10; // 0xa
  }
  public static final class BluetoothLEDeviceFilter.Builder {
    ctor public BluetoothLEDeviceFilter.Builder();
    method public android.companion.BluetoothLEDeviceFilter build();
    method public android.companion.BluetoothLEDeviceFilter.Builder setNamePattern(java.util.regex.Pattern);
    method public android.companion.BluetoothLEDeviceFilter.Builder setRawDataFilter(byte[], byte[]);
    method public android.companion.BluetoothLEDeviceFilter.Builder setRename(java.lang.String, java.lang.String, int, int, boolean);
    method public android.companion.BluetoothLEDeviceFilter.Builder setScanFilter(android.bluetooth.le.ScanFilter);
  }
  public final class CompanionDeviceManager {
    method public void associate(android.companion.AssociationRequest, android.companion.CompanionDeviceManager.Callback, android.os.Handler);
    method public void associate(android.companion.AssociationRequest<?>, android.companion.CompanionDeviceManager.Callback, android.os.Handler);
    method public void disassociate(java.lang.String);
    method public java.util.List<java.lang.String> getAssociations();
    field public static final java.lang.String EXTRA_DEVICE = "android.companion.extra.DEVICE";
@@ -8242,18 +8240,6 @@ package android.companion {
  public abstract interface DeviceFilter<D extends android.os.Parcelable> implements android.os.Parcelable {
  }
  public final class WifiDeviceFilter implements android.companion.DeviceFilter {
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.companion.WifiDeviceFilter> CREATOR;
  }
  public static final class WifiDeviceFilter.Builder {
    ctor public WifiDeviceFilter.Builder();
    method public android.companion.WifiDeviceFilter build();
    method public android.companion.WifiDeviceFilter.Builder setNamePattern(java.util.regex.Pattern);
  }
}
package android.content {
+8 −22
Original line number Diff line number Diff line
@@ -8683,17 +8683,18 @@ package android.bluetooth.le {
package android.companion {
  public final class AssociationRequest implements android.os.Parcelable {
  public final class AssociationRequest<F extends android.companion.DeviceFilter> implements android.os.Parcelable {
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.companion.AssociationRequest> CREATOR;
  }
  public static final class AssociationRequest.Builder {
    ctor public AssociationRequest.Builder();
    method public android.companion.AssociationRequest.Builder addDeviceFilter(android.companion.DeviceFilter<?>);
    method public android.companion.AssociationRequest build();
    method public android.companion.AssociationRequest.Builder setSingleDevice(boolean);
  public static final class AssociationRequest.Builder<F extends android.companion.DeviceFilter> {
    method public android.companion.AssociationRequest<F> build();
    method public static android.companion.AssociationRequest.Builder<android.companion.BluetoothDeviceFilter> createForBluetoothDevice();
    method public static android.companion.AssociationRequest.Builder<android.companion.BluetoothLEDeviceFilter> createForBluetoothLEDevice();
    method public android.companion.AssociationRequest.Builder<F> setDeviceFilter(F);
    method public android.companion.AssociationRequest.Builder<F> setSingleDevice(boolean);
  }
  public final class BluetoothDeviceFilter implements android.companion.DeviceFilter {
@@ -8714,20 +8715,17 @@ package android.companion {
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.companion.BluetoothLEDeviceFilter> CREATOR;
    field public static final int RENAME_PREFIX_LENGTH_LIMIT = 10; // 0xa
  }
  public static final class BluetoothLEDeviceFilter.Builder {
    ctor public BluetoothLEDeviceFilter.Builder();
    method public android.companion.BluetoothLEDeviceFilter build();
    method public android.companion.BluetoothLEDeviceFilter.Builder setNamePattern(java.util.regex.Pattern);
    method public android.companion.BluetoothLEDeviceFilter.Builder setRawDataFilter(byte[], byte[]);
    method public android.companion.BluetoothLEDeviceFilter.Builder setRename(java.lang.String, java.lang.String, int, int, boolean);
    method public android.companion.BluetoothLEDeviceFilter.Builder setScanFilter(android.bluetooth.le.ScanFilter);
  }
  public final class CompanionDeviceManager {
    method public void associate(android.companion.AssociationRequest, android.companion.CompanionDeviceManager.Callback, android.os.Handler);
    method public void associate(android.companion.AssociationRequest<?>, android.companion.CompanionDeviceManager.Callback, android.os.Handler);
    method public void disassociate(java.lang.String);
    method public java.util.List<java.lang.String> getAssociations();
    field public static final java.lang.String EXTRA_DEVICE = "android.companion.extra.DEVICE";
@@ -8742,18 +8740,6 @@ package android.companion {
  public abstract interface DeviceFilter<D extends android.os.Parcelable> implements android.os.Parcelable {
  }
  public final class WifiDeviceFilter implements android.companion.DeviceFilter {
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.companion.WifiDeviceFilter> CREATOR;
  }
  public static final class WifiDeviceFilter.Builder {
    ctor public WifiDeviceFilter.Builder();
    method public android.companion.WifiDeviceFilter build();
    method public android.companion.WifiDeviceFilter.Builder setNamePattern(java.util.regex.Pattern);
  }
}
package android.content {
+8 −22
Original line number Diff line number Diff line
@@ -8210,17 +8210,18 @@ package android.bluetooth.le {
package android.companion {
  public final class AssociationRequest implements android.os.Parcelable {
  public final class AssociationRequest<F extends android.companion.DeviceFilter> implements android.os.Parcelable {
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.companion.AssociationRequest> CREATOR;
  }
  public static final class AssociationRequest.Builder {
    ctor public AssociationRequest.Builder();
    method public android.companion.AssociationRequest.Builder addDeviceFilter(android.companion.DeviceFilter<?>);
    method public android.companion.AssociationRequest build();
    method public android.companion.AssociationRequest.Builder setSingleDevice(boolean);
  public static final class AssociationRequest.Builder<F extends android.companion.DeviceFilter> {
    method public android.companion.AssociationRequest<F> build();
    method public static android.companion.AssociationRequest.Builder<android.companion.BluetoothDeviceFilter> createForBluetoothDevice();
    method public static android.companion.AssociationRequest.Builder<android.companion.BluetoothLEDeviceFilter> createForBluetoothLEDevice();
    method public android.companion.AssociationRequest.Builder<F> setDeviceFilter(F);
    method public android.companion.AssociationRequest.Builder<F> setSingleDevice(boolean);
  }
  public final class BluetoothDeviceFilter implements android.companion.DeviceFilter {
@@ -8241,20 +8242,17 @@ package android.companion {
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.companion.BluetoothLEDeviceFilter> CREATOR;
    field public static final int RENAME_PREFIX_LENGTH_LIMIT = 10; // 0xa
  }
  public static final class BluetoothLEDeviceFilter.Builder {
    ctor public BluetoothLEDeviceFilter.Builder();
    method public android.companion.BluetoothLEDeviceFilter build();
    method public android.companion.BluetoothLEDeviceFilter.Builder setNamePattern(java.util.regex.Pattern);
    method public android.companion.BluetoothLEDeviceFilter.Builder setRawDataFilter(byte[], byte[]);
    method public android.companion.BluetoothLEDeviceFilter.Builder setRename(java.lang.String, java.lang.String, int, int, boolean);
    method public android.companion.BluetoothLEDeviceFilter.Builder setScanFilter(android.bluetooth.le.ScanFilter);
  }
  public final class CompanionDeviceManager {
    method public void associate(android.companion.AssociationRequest, android.companion.CompanionDeviceManager.Callback, android.os.Handler);
    method public void associate(android.companion.AssociationRequest<?>, android.companion.CompanionDeviceManager.Callback, android.os.Handler);
    method public void disassociate(java.lang.String);
    method public java.util.List<java.lang.String> getAssociations();
    field public static final java.lang.String EXTRA_DEVICE = "android.companion.extra.DEVICE";
@@ -8269,18 +8267,6 @@ package android.companion {
  public abstract interface DeviceFilter<D extends android.os.Parcelable> implements android.os.Parcelable {
  }
  public final class WifiDeviceFilter implements android.companion.DeviceFilter {
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.companion.WifiDeviceFilter> CREATOR;
  }
  public static final class WifiDeviceFilter.Builder {
    ctor public WifiDeviceFilter.Builder();
    method public android.companion.WifiDeviceFilter build();
    method public android.companion.WifiDeviceFilter.Builder setNamePattern(java.util.regex.Pattern);
  }
}
package android.content {
+9 −3
Original line number Diff line number Diff line
@@ -23,8 +23,6 @@ import android.os.Parcel;
import android.os.ParcelUuid;
import android.os.Parcelable;

import com.android.internal.util.BitUtils;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;
@@ -347,7 +345,15 @@ public final class ScanFilter implements Parcelable {

    // Check if the uuid pattern matches the particular service uuid.
    private static boolean matchesServiceUuid(UUID uuid, UUID mask, UUID data) {
        return BitUtils.maskedEquals(data, uuid, mask);
        if (mask == null) {
            return uuid.equals(data);
        }
        if ((uuid.getLeastSignificantBits() & mask.getLeastSignificantBits()) !=
                (data.getLeastSignificantBits() & mask.getLeastSignificantBits())) {
            return false;
        }
        return ((uuid.getMostSignificantBits() & mask.getMostSignificantBits()) ==
                (data.getMostSignificantBits() & mask.getMostSignificantBits()));
    }

    // Check whether the data pattern matches the parsed data.
+82 −25
Original line number Diff line number Diff line
@@ -16,21 +16,20 @@

package android.companion;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.Parcel;
import android.os.Parcelable;
import android.provider.OneTimeUseBuilder;

import com.android.internal.util.ArrayUtils;

import java.util.ArrayList;
import java.util.List;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * A request for the user to select a companion device to associate with.
 *
 * You can optionally set {@link Builder#addDeviceFilter filters} for which devices to show to the
 * You can optionally set a {@link Builder#setDeviceFilter filter} for which devices to show to the
 * user to select from.
 * The exact type and fields of the filter you can set depend on the
 * medium type. See {@link Builder}'s static factory methods for specific protocols that are
@@ -38,22 +37,38 @@ import java.util.List;
 *
 * You can also set {@link Builder#setSingleDevice single device} to request a popup with single
 * device to be shown instead of a list to choose from
 *
 * @param <F> Device filter type
 */
public final class AssociationRequest implements Parcelable {
public final class AssociationRequest<F extends DeviceFilter> implements Parcelable {

    /** @hide */
    public static final int MEDIUM_TYPE_BLUETOOTH = 0;
    /** @hide */
    public static final int MEDIUM_TYPE_BLUETOOTH_LE = 1;
    /** @hide */
    public static final int MEDIUM_TYPE_WIFI = 2;

    /** @hide */
    @IntDef({MEDIUM_TYPE_BLUETOOTH, MEDIUM_TYPE_BLUETOOTH_LE, MEDIUM_TYPE_WIFI})
    @Retention(RetentionPolicy.SOURCE)
    public @interface MediumType {}

    private final boolean mSingleDevice;
    private final List<DeviceFilter<?>> mDeviceFilters;
    private final int mMediumType;
    private final F mDeviceFilter;

    private AssociationRequest(
            boolean singleDevice, @Nullable List<DeviceFilter<?>> deviceFilters) {
    private AssociationRequest(boolean singleDevice, int mMediumType, F deviceFilter) {
        this.mSingleDevice = singleDevice;
        this.mDeviceFilters = ArrayUtils.emptyIfNull(deviceFilters);
        this.mMediumType = mMediumType;
        this.mDeviceFilter = deviceFilter;
    }

    private AssociationRequest(Parcel in) {
        this(
            in.readByte() != 0,
            in.readParcelableList(new ArrayList<>(), AssociationRequest.class.getClassLoader()));
            in.readInt(),
            in.readParcelable(AssociationRequest.class.getClassLoader()));
    }

    /** @hide */
@@ -62,15 +77,22 @@ public final class AssociationRequest implements Parcelable {
    }

    /** @hide */
    @NonNull
    public List<DeviceFilter<?>> getDeviceFilters() {
        return mDeviceFilters;
    @MediumType
    public int getMediumType() {
        return mMediumType;
    }

    /** @hide */
    @Nullable
    public F getDeviceFilter() {
        return mDeviceFilter;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeByte((byte) (mSingleDevice ? 1 : 0));
        dest.writeParcelableList(mDeviceFilters, flags);
        dest.writeInt(mMediumType);
        dest.writeParcelable(mDeviceFilter, flags);
    }

    @Override
@@ -92,19 +114,45 @@ public final class AssociationRequest implements Parcelable {

    /**
     * A builder for {@link AssociationRequest}
     *
     * @param <F> the type of filter for the request.
     */
    public static final class Builder extends OneTimeUseBuilder<AssociationRequest> {
    public static final class Builder<F extends DeviceFilter>
            extends OneTimeUseBuilder<AssociationRequest<F>> {
        private boolean mSingleDevice = false;
        @Nullable private ArrayList<DeviceFilter<?>> mDeviceFilters = null;
        @MediumType private int mMediumType;
        @Nullable private F mDeviceFilter = null;

        private Builder() {}

        /**
         * Create a new builder for an association request with a Bluetooth LE device
         */
        @NonNull
        public static Builder<BluetoothLEDeviceFilter> createForBluetoothLEDevice() {
            return new Builder<BluetoothLEDeviceFilter>()
                    .setMediumType(MEDIUM_TYPE_BLUETOOTH_LE);
        }

        public Builder() {}
        /**
         * Create a new builder for an association request with a Bluetooth(non-LE) device
         */
        @NonNull
        public static Builder<BluetoothDeviceFilter> createForBluetoothDevice() {
            return new Builder<BluetoothDeviceFilter>()
                    .setMediumType(MEDIUM_TYPE_BLUETOOTH);
        }

        //TODO implement, once specific filter classes are available
//        public static Builder<> createForWiFiDevice()
//        public static Builder<> createForNanDevice()

        /**
         * @param singleDevice if true, scanning for a device will stop as soon as at least one
         *                     fitting device is found
         */
        @NonNull
        public Builder setSingleDevice(boolean singleDevice) {
        public Builder<F> setSingleDevice(boolean singleDevice) {
            checkNotUsed();
            this.mSingleDevice = singleDevice;
            return this;
@@ -115,20 +163,29 @@ public final class AssociationRequest implements Parcelable {
         *                     user
         */
        @NonNull
        public Builder addDeviceFilter(@Nullable DeviceFilter<?> deviceFilter) {
        public Builder<F> setDeviceFilter(@Nullable F deviceFilter) {
            checkNotUsed();
            if (deviceFilter != null) {
                mDeviceFilters = ArrayUtils.add(mDeviceFilters, deviceFilter);
            this.mDeviceFilter = deviceFilter;
            return this;
        }

        /**
         * @param deviceType A type of medium over which to discover devices
         *
         * @see MediumType
         */
        @NonNull
        private Builder<F> setMediumType(@MediumType int deviceType) {
            mMediumType = deviceType;
            return this;
        }

        /** @inheritDoc */
        @NonNull
        @Override
        public AssociationRequest build() {
        public AssociationRequest<F> build() {
            markUsed();
            return new AssociationRequest(mSingleDevice, mDeviceFilters);
            return new AssociationRequest<>(mSingleDevice, mMediumType, mDeviceFilter);
        }
    }
}
Loading