1a743427896d0877aacedb34ac4927691c56768dbEtan Cohen/*
2a743427896d0877aacedb34ac4927691c56768dbEtan Cohen * Copyright (C) 2017 The Android Open Source Project
3a743427896d0877aacedb34ac4927691c56768dbEtan Cohen *
4a743427896d0877aacedb34ac4927691c56768dbEtan Cohen * Licensed under the Apache License, Version 2.0 (the "License");
5a743427896d0877aacedb34ac4927691c56768dbEtan Cohen * you may not use this file except in compliance with the License.
6a743427896d0877aacedb34ac4927691c56768dbEtan Cohen * You may obtain a copy of the License at
7a743427896d0877aacedb34ac4927691c56768dbEtan Cohen *
8a743427896d0877aacedb34ac4927691c56768dbEtan Cohen *      http://www.apache.org/licenses/LICENSE-2.0
9a743427896d0877aacedb34ac4927691c56768dbEtan Cohen *
10a743427896d0877aacedb34ac4927691c56768dbEtan Cohen * Unless required by applicable law or agreed to in writing, software
11a743427896d0877aacedb34ac4927691c56768dbEtan Cohen * distributed under the License is distributed on an "AS IS" BASIS,
12a743427896d0877aacedb34ac4927691c56768dbEtan Cohen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a743427896d0877aacedb34ac4927691c56768dbEtan Cohen * See the License for the specific language governing permissions and
14a743427896d0877aacedb34ac4927691c56768dbEtan Cohen * limitations under the License.
15a743427896d0877aacedb34ac4927691c56768dbEtan Cohen */
16a743427896d0877aacedb34ac4927691c56768dbEtan Cohen
17a743427896d0877aacedb34ac4927691c56768dbEtan Cohenpackage android.net;
18a743427896d0877aacedb34ac4927691c56768dbEtan Cohen
19a743427896d0877aacedb34ac4927691c56768dbEtan Cohenimport android.os.Parcel;
20a743427896d0877aacedb34ac4927691c56768dbEtan Cohenimport android.os.Parcelable;
21a743427896d0877aacedb34ac4927691c56768dbEtan Cohenimport android.text.TextUtils;
22a743427896d0877aacedb34ac4927691c56768dbEtan Cohen
23a743427896d0877aacedb34ac4927691c56768dbEtan Cohenimport com.android.internal.util.Preconditions;
24a743427896d0877aacedb34ac4927691c56768dbEtan Cohen
25a743427896d0877aacedb34ac4927691c56768dbEtan Cohenimport java.util.Objects;
26a743427896d0877aacedb34ac4927691c56768dbEtan Cohen
27a743427896d0877aacedb34ac4927691c56768dbEtan Cohen/** @hide */
28a743427896d0877aacedb34ac4927691c56768dbEtan Cohenpublic final class StringNetworkSpecifier extends NetworkSpecifier implements Parcelable {
29a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    /**
30a743427896d0877aacedb34ac4927691c56768dbEtan Cohen     * Arbitrary string used to pass (additional) information to the network factory.
31a743427896d0877aacedb34ac4927691c56768dbEtan Cohen     */
32a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    public final String specifier;
33a743427896d0877aacedb34ac4927691c56768dbEtan Cohen
34a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    public StringNetworkSpecifier(String specifier) {
35a743427896d0877aacedb34ac4927691c56768dbEtan Cohen        Preconditions.checkStringNotEmpty(specifier);
36a743427896d0877aacedb34ac4927691c56768dbEtan Cohen        this.specifier = specifier;
37a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    }
38a743427896d0877aacedb34ac4927691c56768dbEtan Cohen
39a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    @Override
40a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    public boolean satisfiedBy(NetworkSpecifier other) {
41a743427896d0877aacedb34ac4927691c56768dbEtan Cohen        return equals(other);
42a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    }
43a743427896d0877aacedb34ac4927691c56768dbEtan Cohen
44a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    @Override
45a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    public boolean equals(Object o) {
46a743427896d0877aacedb34ac4927691c56768dbEtan Cohen        if (!(o instanceof StringNetworkSpecifier)) return false;
47a743427896d0877aacedb34ac4927691c56768dbEtan Cohen        return TextUtils.equals(specifier, ((StringNetworkSpecifier) o).specifier);
48a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    }
49a743427896d0877aacedb34ac4927691c56768dbEtan Cohen
50a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    @Override
51a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    public int hashCode() {
52a743427896d0877aacedb34ac4927691c56768dbEtan Cohen        return Objects.hashCode(specifier);
53a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    }
54a743427896d0877aacedb34ac4927691c56768dbEtan Cohen
55a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    @Override
56a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    public String toString() {
57a743427896d0877aacedb34ac4927691c56768dbEtan Cohen        return specifier;
58a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    }
59a743427896d0877aacedb34ac4927691c56768dbEtan Cohen
60a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    @Override
61a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    public int describeContents() {
62a743427896d0877aacedb34ac4927691c56768dbEtan Cohen        return 0;
63a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    }
64a743427896d0877aacedb34ac4927691c56768dbEtan Cohen
65a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    @Override
66a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    public void writeToParcel(Parcel dest, int flags) {
67a743427896d0877aacedb34ac4927691c56768dbEtan Cohen        dest.writeString(specifier);
68a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    }
69a743427896d0877aacedb34ac4927691c56768dbEtan Cohen
70a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    public static final Parcelable.Creator<StringNetworkSpecifier> CREATOR =
71a743427896d0877aacedb34ac4927691c56768dbEtan Cohen            new Parcelable.Creator<StringNetworkSpecifier>() {
72a743427896d0877aacedb34ac4927691c56768dbEtan Cohen        public StringNetworkSpecifier createFromParcel(Parcel in) {
73a743427896d0877aacedb34ac4927691c56768dbEtan Cohen            return new StringNetworkSpecifier(in.readString());
74a743427896d0877aacedb34ac4927691c56768dbEtan Cohen        }
75a743427896d0877aacedb34ac4927691c56768dbEtan Cohen        public StringNetworkSpecifier[] newArray(int size) {
76a743427896d0877aacedb34ac4927691c56768dbEtan Cohen            return new StringNetworkSpecifier[size];
77a743427896d0877aacedb34ac4927691c56768dbEtan Cohen        }
78a743427896d0877aacedb34ac4927691c56768dbEtan Cohen    };
79a743427896d0877aacedb34ac4927691c56768dbEtan Cohen}
80