summaryrefslogtreecommitdiff
path: root/android/companion/WifiDeviceFilter.java
diff options
context:
space:
mode:
Diffstat (limited to 'android/companion/WifiDeviceFilter.java')
-rw-r--r--android/companion/WifiDeviceFilter.java139
1 files changed, 139 insertions, 0 deletions
diff --git a/android/companion/WifiDeviceFilter.java b/android/companion/WifiDeviceFilter.java
new file mode 100644
index 00000000..b6e704c3
--- /dev/null
+++ b/android/companion/WifiDeviceFilter.java
@@ -0,0 +1,139 @@
+/*
+ * 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 static android.companion.BluetoothDeviceFilterUtils.getDeviceDisplayNameInternal;
+import static android.companion.BluetoothDeviceFilterUtils.patternFromString;
+import static android.companion.BluetoothDeviceFilterUtils.patternToString;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.SuppressLint;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.le.ScanFilter;
+import android.net.wifi.ScanResult;
+import android.os.Parcel;
+import android.provider.OneTimeUseBuilder;
+
+import java.util.Objects;
+import java.util.regex.Pattern;
+
+/**
+ * A filter for Wifi devices
+ *
+ * @see ScanFilter
+ */
+public final class WifiDeviceFilter implements DeviceFilter<ScanResult> {
+
+ private final Pattern mNamePattern;
+
+ private WifiDeviceFilter(Pattern namePattern) {
+ mNamePattern = namePattern;
+ }
+
+ @SuppressLint("ParcelClassLoader")
+ private WifiDeviceFilter(Parcel in) {
+ this(patternFromString(in.readString()));
+ }
+
+ /** @hide */
+ @Nullable
+ public Pattern getNamePattern() {
+ return mNamePattern;
+ }
+
+
+ /** @hide */
+ @Override
+ public boolean matches(ScanResult device) {
+ return BluetoothDeviceFilterUtils.matchesName(getNamePattern(), device);
+ }
+
+ /** @hide */
+ @Override
+ public String getDeviceDisplayName(ScanResult device) {
+ return getDeviceDisplayNameInternal(device);
+ }
+
+ /** @hide */
+ @Override
+ public int getMediumType() {
+ return MEDIUM_TYPE_WIFI;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ WifiDeviceFilter that = (WifiDeviceFilter) o;
+ return Objects.equals(mNamePattern, that.mNamePattern);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(mNamePattern);
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(patternToString(getNamePattern()));
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ public static final Creator<WifiDeviceFilter> CREATOR
+ = new Creator<WifiDeviceFilter>() {
+ @Override
+ public WifiDeviceFilter createFromParcel(Parcel in) {
+ return new WifiDeviceFilter(in);
+ }
+
+ @Override
+ public WifiDeviceFilter[] newArray(int size) {
+ return new WifiDeviceFilter[size];
+ }
+ };
+
+ /**
+ * Builder for {@link WifiDeviceFilter}
+ */
+ public static final class Builder extends OneTimeUseBuilder<WifiDeviceFilter> {
+ private Pattern mNamePattern;
+
+ /**
+ * @param regex if set, only devices with {@link BluetoothDevice#getName name} matching the
+ * given regular expression will be shown
+ * @return self for chaining
+ */
+ public Builder setNamePattern(@Nullable Pattern regex) {
+ checkNotUsed();
+ mNamePattern = regex;
+ return this;
+ }
+
+ /** @inheritDoc */
+ @Override
+ @NonNull
+ public WifiDeviceFilter build() {
+ markUsed();
+ return new WifiDeviceFilter(mNamePattern);
+ }
+ }
+}