blob: 5bbbbf9bae77d26f8d55a91cb9fb6c284440fa1b [file] [log] [blame]
/*
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.hardware.display;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.Objects;
/**
* Describes the properties of a Wifi display.
* <p>
* This object is immutable.
* </p>
*
* @hide
*/
public final class WifiDisplay implements Parcelable {
private final String mDeviceAddress;
private final String mDeviceName;
private final String mDeviceAlias;
private final boolean mIsAvailable;
private final boolean mCanConnect;
private final boolean mIsRemembered;
public static final WifiDisplay[] EMPTY_ARRAY = new WifiDisplay[0];
public static final @android.annotation.NonNull Creator<WifiDisplay> CREATOR = new Creator<WifiDisplay>() {
public WifiDisplay createFromParcel(Parcel in) {
String deviceAddress = in.readString();
String deviceName = in.readString();
String deviceAlias = in.readString();
boolean isAvailable = (in.readInt() != 0);
boolean canConnect = (in.readInt() != 0);
boolean isRemembered = (in.readInt() != 0);
return new WifiDisplay(deviceAddress, deviceName, deviceAlias,
isAvailable, canConnect, isRemembered);
}
public WifiDisplay[] newArray(int size) {
return size == 0 ? EMPTY_ARRAY : new WifiDisplay[size];
}
};
public WifiDisplay(String deviceAddress, String deviceName, String deviceAlias,
boolean available, boolean canConnect, boolean remembered) {
if (deviceAddress == null) {
throw new IllegalArgumentException("deviceAddress must not be null");
}
if (deviceName == null) {
throw new IllegalArgumentException("deviceName must not be null");
}
mDeviceAddress = deviceAddress;
mDeviceName = deviceName;
mDeviceAlias = deviceAlias;
mIsAvailable = available;
mCanConnect = canConnect;
mIsRemembered = remembered;
}
/**
* Gets the MAC address of the Wifi display device.
*/
@UnsupportedAppUsage
public String getDeviceAddress() {
return mDeviceAddress;
}
/**
* Gets the name of the Wifi display device.
*/
@UnsupportedAppUsage
public String getDeviceName() {
return mDeviceName;
}
/**
* Gets the user-specified alias of the Wifi display device, or null if none.
* <p>
* The alias should be used in the UI whenever available. It is the value
* provided by the user when renaming the device.
* </p>
*/
@UnsupportedAppUsage
public String getDeviceAlias() {
return mDeviceAlias;
}
/**
* Returns true if device is available, false otherwise.
*/
@UnsupportedAppUsage
public boolean isAvailable() {
return mIsAvailable;
}
/**
* Returns true if device can be connected to (not in use), false otherwise.
*/
@UnsupportedAppUsage
public boolean canConnect() {
return mCanConnect;
}
/**
* Returns true if device has been remembered, false otherwise.
*/
@UnsupportedAppUsage
public boolean isRemembered() {
return mIsRemembered;
}
/**
* Gets the name to show in the UI.
* Uses the device alias if available, otherwise uses the device name.
*/
public String getFriendlyDisplayName() {
return mDeviceAlias != null ? mDeviceAlias : mDeviceName;
}
@Override
public boolean equals(Object o) {
return o instanceof WifiDisplay && equals((WifiDisplay)o);
}
/**
* Returns true if the two displays have the same identity (address, name and alias).
* This method does not compare the current status of the displays.
*/
@UnsupportedAppUsage
public boolean equals(WifiDisplay other) {
return other != null
&& mDeviceAddress.equals(other.mDeviceAddress)
&& mDeviceName.equals(other.mDeviceName)
&& Objects.equals(mDeviceAlias, other.mDeviceAlias);
}
/**
* Returns true if the other display is not null and has the same address as this one.
* Can be used to perform identity comparisons on displays ignoring properties
* that might change during a connection such as the name or alias.
*/
public boolean hasSameAddress(WifiDisplay other) {
return other != null && mDeviceAddress.equals(other.mDeviceAddress);
}
@Override
public int hashCode() {
// The address on its own should be sufficiently unique for hashing purposes.
return mDeviceAddress.hashCode();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mDeviceAddress);
dest.writeString(mDeviceName);
dest.writeString(mDeviceAlias);
dest.writeInt(mIsAvailable ? 1 : 0);
dest.writeInt(mCanConnect ? 1 : 0);
dest.writeInt(mIsRemembered ? 1 : 0);
}
@Override
public int describeContents() {
return 0;
}
// For debugging purposes only.
@Override
public String toString() {
String result = mDeviceName + " (" + mDeviceAddress + ")";
if (mDeviceAlias != null) {
result += ", alias " + mDeviceAlias;
}
result += ", isAvailable " + mIsAvailable + ", canConnect " + mCanConnect
+ ", isRemembered " + mIsRemembered;
return result;
}
}