/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.companion;

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 com.android.internal.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

A request for the user to select a companion device to associate with. You can optionally set filters 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 Builder's static factory methods for specific protocols that are supported. You can also set single device to request a popup with single device to be shown instead of a list to choose from
/** * 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 * 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 * supported. * * 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 */
public final class AssociationRequest implements Parcelable { private final boolean mSingleDevice; private final List<DeviceFilter<?>> mDeviceFilters; private AssociationRequest( boolean singleDevice, @Nullable List<DeviceFilter<?>> deviceFilters) { this.mSingleDevice = singleDevice; this.mDeviceFilters = CollectionUtils.emptyIfNull(deviceFilters); } private AssociationRequest(Parcel in) { this( in.readByte() != 0, in.readParcelableList(new ArrayList<>(), AssociationRequest.class.getClassLoader())); }
@hide
/** @hide */
public boolean isSingleDevice() { return mSingleDevice; }
@hide
/** @hide */
@NonNull public List<DeviceFilter<?>> getDeviceFilters() { return mDeviceFilters; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; AssociationRequest that = (AssociationRequest) o; return mSingleDevice == that.mSingleDevice && Objects.equals(mDeviceFilters, that.mDeviceFilters); } @Override public int hashCode() { return Objects.hash(mSingleDevice, mDeviceFilters); } @Override public String toString() { return "AssociationRequest{" + "mSingleDevice=" + mSingleDevice + ", mDeviceFilters=" + mDeviceFilters + '}'; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeByte((byte) (mSingleDevice ? 1 : 0)); dest.writeParcelableList(mDeviceFilters, flags); } @Override public int describeContents() { return 0; } public static final Creator<AssociationRequest> CREATOR = new Creator<AssociationRequest>() { @Override public AssociationRequest createFromParcel(Parcel in) { return new AssociationRequest(in); } @Override public AssociationRequest[] newArray(int size) { return new AssociationRequest[size]; } };
A builder for AssociationRequest
/** * A builder for {@link AssociationRequest} */
public static final class Builder extends OneTimeUseBuilder<AssociationRequest> { private boolean mSingleDevice = false; @Nullable private ArrayList<DeviceFilter<?>> mDeviceFilters = null; public Builder() {}
Params:
  • singleDevice – if true, scanning for a device will stop as soon as at least one fitting device is found
/** * @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) { checkNotUsed(); this.mSingleDevice = singleDevice; return this; }
Params:
  • deviceFilter – if set, only devices matching the given filter will be shown to the user
/** * @param deviceFilter if set, only devices matching the given filter will be shown to the * user */
@NonNull public Builder addDeviceFilter(@Nullable DeviceFilter<?> deviceFilter) { checkNotUsed(); if (deviceFilter != null) { mDeviceFilters = ArrayUtils.add(mDeviceFilters, deviceFilter); } return this; }
@inheritDoc
/** @inheritDoc */
@NonNull @Override public AssociationRequest build() { markUsed(); return new AssociationRequest(mSingleDevice, mDeviceFilters); } } }