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