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