WifiDisplay.java revision 74da109102864f19b3dcdb30cd1d92c46fb12f2f
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;
36e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
37e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    public static final WifiDisplay[] EMPTY_ARRAY = new WifiDisplay[0];
38e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
39e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    public static final Creator<WifiDisplay> CREATOR = new Creator<WifiDisplay>() {
40e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        public WifiDisplay createFromParcel(Parcel in) {
41e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown            String deviceAddress = in.readString();
42e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown            String deviceName = in.readString();
4389d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown            String deviceAlias = in.readString();
4489d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown            return new WifiDisplay(deviceAddress, deviceName, deviceAlias);
45e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        }
46e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
47e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        public WifiDisplay[] newArray(int size) {
48e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown            return size == 0 ? EMPTY_ARRAY : new WifiDisplay[size];
49e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        }
50e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    };
51e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
5289d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown    public WifiDisplay(String deviceAddress, String deviceName, String deviceAlias) {
53e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        if (deviceAddress == null) {
54e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown            throw new IllegalArgumentException("deviceAddress must not be null");
55e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        }
56e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        if (deviceName == null) {
57e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown            throw new IllegalArgumentException("deviceName must not be null");
58e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        }
59e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
60e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        mDeviceAddress = deviceAddress;
61e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        mDeviceName = deviceName;
6289d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown        mDeviceAlias = deviceAlias;
63e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    }
64e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
65e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    /**
66e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown     * Gets the MAC address of the Wifi display device.
67e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown     */
68e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    public String getDeviceAddress() {
69e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        return mDeviceAddress;
70e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    }
71e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
72e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    /**
73e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown     * Gets the name of the Wifi display device.
74e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown     */
75e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    public String getDeviceName() {
76e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        return mDeviceName;
77e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    }
78e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
7989d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown    /**
8089d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown     * Gets the user-specified alias of the Wifi display device, or null if none.
8189d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown     * <p>
8289d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown     * The alias should be used in the UI whenever available.  It is the value
8389d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown     * provided by the user when renaming the device.
8489d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown     * </p>
8589d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown     */
8689d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown    public String getDeviceAlias() {
8789d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown        return mDeviceAlias;
8889d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown    }
8989d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown
9089d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown    /**
9189d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown     * Gets the name to show in the UI.
9289d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown     * Uses the device alias if available, otherwise uses the device name.
9389d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown     */
9489d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown    public String getFriendlyDisplayName() {
9589d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown        return mDeviceAlias != null ? mDeviceAlias : mDeviceName;
9689d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown    }
9789d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown
98e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    @Override
99e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    public boolean equals(Object o) {
100e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        return o instanceof WifiDisplay && equals((WifiDisplay)o);
101e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    }
102e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
103e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    public boolean equals(WifiDisplay other) {
104e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        return other != null
105e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown                && mDeviceAddress.equals(other.mDeviceAddress)
10689d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown                && mDeviceName.equals(other.mDeviceName)
10789d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown                && Objects.equal(mDeviceAlias, other.mDeviceAlias);
108e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    }
109e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
11074da109102864f19b3dcdb30cd1d92c46fb12f2fJeff Brown    /**
11174da109102864f19b3dcdb30cd1d92c46fb12f2fJeff Brown     * Returns true if the other display is not null and has the same address as this one.
11274da109102864f19b3dcdb30cd1d92c46fb12f2fJeff Brown     * Can be used to perform identity comparisons on displays ignoring properties
11374da109102864f19b3dcdb30cd1d92c46fb12f2fJeff Brown     * that might change during a connection such as the name or alias.
11474da109102864f19b3dcdb30cd1d92c46fb12f2fJeff Brown     */
11574da109102864f19b3dcdb30cd1d92c46fb12f2fJeff Brown    public boolean hasSameAddress(WifiDisplay other) {
11674da109102864f19b3dcdb30cd1d92c46fb12f2fJeff Brown        return other != null && mDeviceAddress.equals(other.mDeviceAddress);
11774da109102864f19b3dcdb30cd1d92c46fb12f2fJeff Brown    }
11874da109102864f19b3dcdb30cd1d92c46fb12f2fJeff Brown
119e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    @Override
120e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    public int hashCode() {
121e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        // The address on its own should be sufficiently unique for hashing purposes.
122e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        return mDeviceAddress.hashCode();
123e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    }
124e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
125e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    @Override
126e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    public void writeToParcel(Parcel dest, int flags) {
127e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        dest.writeString(mDeviceAddress);
128e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        dest.writeString(mDeviceName);
12989d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown        dest.writeString(mDeviceAlias);
130e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    }
131e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
132e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    @Override
133e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    public int describeContents() {
134e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown        return 0;
135e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    }
136e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown
137e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    // For debugging purposes only.
138e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    @Override
139e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    public String toString() {
14089d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown        String result = mDeviceName + " (" + mDeviceAddress + ")";
14189d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown        if (mDeviceAlias != null) {
14289d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown            result += ", alias " + mDeviceAlias;
14389d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown        }
14489d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown        return result;
145e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown    }
146e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown}
147