WifiDisplay.java revision 21f603996ed83c7a9a6c430582e8a5af5ac13c6c
1e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown/*
2e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * Copyright (C) 2012 The Android Open Source Project
3e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown *
4e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License");
5e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * you may not use this file except in compliance with the License.
6e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * You may obtain a copy of the License at
7e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown *
8e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown *      http://www.apache.org/licenses/LICENSE-2.0
9e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown *
10e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * Unless required by applicable law or agreed to in writing, software
11e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS,
12e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * See the License for the specific language governing permissions and
14e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * limitations under the License.
15e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown */
16e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
17e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brownpackage android.hardware.display;
18e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
19e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brownimport android.os.Parcel;
20e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brownimport android.os.Parcelable;
21e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
2289d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brownimport libcore.util.Objects;
2389d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown
24e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown/**
25e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * Describes the properties of a Wifi display.
26e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * <p>
27e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * This object is immutable.
28e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * </p>
29e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown *
30e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * @hide
31e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown */
32e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brownpublic final class WifiDisplay implements Parcelable {
33e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    private final String mDeviceAddress;
34e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    private final String mDeviceName;
3589d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown    private final String mDeviceAlias;
3621f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang    private final boolean mCanConnect;
37e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
38e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    public static final WifiDisplay[] EMPTY_ARRAY = new WifiDisplay[0];
39e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
40e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    public static final Creator<WifiDisplay> CREATOR = new Creator<WifiDisplay>() {
41e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        public WifiDisplay createFromParcel(Parcel in) {
42e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown            String deviceAddress = in.readString();
43e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown            String deviceName = in.readString();
4489d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown            String deviceAlias = in.readString();
4521f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang            boolean canConnect = (in.readInt() != 0);
4621f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang            return new WifiDisplay(deviceAddress, deviceName,
4721f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang                    deviceAlias, canConnect);
48e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        }
49e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
50e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        public WifiDisplay[] newArray(int size) {
51e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown            return size == 0 ? EMPTY_ARRAY : new WifiDisplay[size];
52e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        }
53e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    };
54e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
5589d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown    public WifiDisplay(String deviceAddress, String deviceName, String deviceAlias) {
5621f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang        this(deviceAddress, deviceName, deviceAlias, false);
5721f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang    }
5821f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang
5921f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang    public WifiDisplay(String deviceAddress, String deviceName,
6021f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang                       String deviceAlias, boolean canConnect) {
61e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        if (deviceAddress == null) {
62e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown            throw new IllegalArgumentException("deviceAddress must not be null");
63e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        }
64e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        if (deviceName == null) {
65e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown            throw new IllegalArgumentException("deviceName must not be null");
66e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        }
67e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
68e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        mDeviceAddress = deviceAddress;
69e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        mDeviceName = deviceName;
7089d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown        mDeviceAlias = deviceAlias;
7121f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang        mCanConnect = canConnect;
72e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    }
73e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
74e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    /**
75e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown     * Gets the MAC address of the Wifi display device.
76e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown     */
77e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    public String getDeviceAddress() {
78e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        return mDeviceAddress;
79e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    }
80e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
81e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    /**
82e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown     * Gets the name of the Wifi display device.
83e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown     */
84e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    public String getDeviceName() {
85e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        return mDeviceName;
86e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    }
87e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
8889d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown    /**
8989d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown     * Gets the user-specified alias of the Wifi display device, or null if none.
9089d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown     * <p>
9189d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown     * The alias should be used in the UI whenever available.  It is the value
9289d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown     * provided by the user when renaming the device.
9389d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown     * </p>
9489d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown     */
9589d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown    public String getDeviceAlias() {
9689d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown        return mDeviceAlias;
9789d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown    }
9889d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown
9989d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown    /**
10021f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang     * Gets the availability of the Wifi display device.
10121f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang     */
10221f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang    public boolean canConnect() {
10321f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang        return mCanConnect;
10421f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang    }
10521f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang
10621f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang    /**
10789d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown     * Gets the name to show in the UI.
10889d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown     * Uses the device alias if available, otherwise uses the device name.
10989d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown     */
11089d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown    public String getFriendlyDisplayName() {
11189d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown        return mDeviceAlias != null ? mDeviceAlias : mDeviceName;
11289d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown    }
11389d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown
114e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    @Override
115e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    public boolean equals(Object o) {
116e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        return o instanceof WifiDisplay && equals((WifiDisplay)o);
117e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    }
118e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
119e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    public boolean equals(WifiDisplay other) {
120e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        return other != null
121e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown                && mDeviceAddress.equals(other.mDeviceAddress)
12289d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown                && mDeviceName.equals(other.mDeviceName)
12321f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang                && Objects.equal(mDeviceAlias, other.mDeviceAlias)
12421f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang                && (mCanConnect == other.mCanConnect);
125e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    }
126e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
12774da109102864f19b3dcdb30cd1d92c46fb12f2fJeff Brown    /**
12874da109102864f19b3dcdb30cd1d92c46fb12f2fJeff Brown     * Returns true if the other display is not null and has the same address as this one.
12974da109102864f19b3dcdb30cd1d92c46fb12f2fJeff Brown     * Can be used to perform identity comparisons on displays ignoring properties
13074da109102864f19b3dcdb30cd1d92c46fb12f2fJeff Brown     * that might change during a connection such as the name or alias.
13174da109102864f19b3dcdb30cd1d92c46fb12f2fJeff Brown     */
13274da109102864f19b3dcdb30cd1d92c46fb12f2fJeff Brown    public boolean hasSameAddress(WifiDisplay other) {
13374da109102864f19b3dcdb30cd1d92c46fb12f2fJeff Brown        return other != null && mDeviceAddress.equals(other.mDeviceAddress);
13474da109102864f19b3dcdb30cd1d92c46fb12f2fJeff Brown    }
13574da109102864f19b3dcdb30cd1d92c46fb12f2fJeff Brown
136e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    @Override
137e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    public int hashCode() {
138e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        // The address on its own should be sufficiently unique for hashing purposes.
139e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        return mDeviceAddress.hashCode();
140e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    }
141e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
142e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    @Override
143e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    public void writeToParcel(Parcel dest, int flags) {
144e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        dest.writeString(mDeviceAddress);
145e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        dest.writeString(mDeviceName);
14689d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown        dest.writeString(mDeviceAlias);
14721f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang        dest.writeInt(mCanConnect ? 1 : 0);
148e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    }
149e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
150e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    @Override
151e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    public int describeContents() {
152e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        return 0;
153e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    }
154e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
155e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    // For debugging purposes only.
156e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    @Override
157e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    public String toString() {
15889d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown        String result = mDeviceName + " (" + mDeviceAddress + ")";
15989d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown        if (mDeviceAlias != null) {
16089d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown            result += ", alias " + mDeviceAlias;
16189d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown        }
16221f603996ed83c7a9a6c430582e8a5af5ac13c6cChong Zhang        result += ", canConnect " + mCanConnect;
16389d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown        return result;
164e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    }
165e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown}
166