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 22e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brownimport java.util.Arrays; 23e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown 24e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown/** 25e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * Describes the current global state of Wifi display connectivity, including the 2689d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown * currently connected display and all available or remembered displays. 27e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * <p> 28e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * This object is immutable. 29e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * </p> 30e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * 31e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * @hide 32e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown */ 33e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brownpublic final class WifiDisplayStatus implements Parcelable { 3489d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown private final int mFeatureState; 35180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown private final int mScanState; 36180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown private final int mActiveDisplayState; 37180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown private final WifiDisplay mActiveDisplay; 38ab87a63997a7dc771acfd0dcd7efda990dc3d5feChong Zhang private final WifiDisplay[] mDisplays; 3989d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown 401f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang /** Session info needed for Miracast Certification */ 411f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang private final WifiDisplaySessionInfo mSessionInfo; 421f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang 4389d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown /** Feature state: Wifi display is not available on this device. */ 4489d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown public static final int FEATURE_STATE_UNAVAILABLE = 0; 4589d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown /** Feature state: Wifi display is disabled, probably because Wifi is disabled. */ 4689d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown public static final int FEATURE_STATE_DISABLED = 1; 4789d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown /** Feature state: Wifi display is turned off in settings. */ 4889d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown public static final int FEATURE_STATE_OFF = 2; 4989d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown /** Feature state: Wifi display is turned on in settings. */ 5089d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown public static final int FEATURE_STATE_ON = 3; 5189d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown 5289d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown /** Scan state: Not currently scanning. */ 53180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown public static final int SCAN_STATE_NOT_SCANNING = 0; 5489d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown /** Scan state: Currently scanning. */ 55180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown public static final int SCAN_STATE_SCANNING = 1; 56180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown 5789d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown /** Display state: Not connected. */ 58180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown public static final int DISPLAY_STATE_NOT_CONNECTED = 0; 5989d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown /** Display state: Connecting to active display. */ 60180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown public static final int DISPLAY_STATE_CONNECTING = 1; 6189d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown /** Display state: Connected to active display. */ 62180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown public static final int DISPLAY_STATE_CONNECTED = 2; 63e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown 64e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown public static final Creator<WifiDisplayStatus> CREATOR = new Creator<WifiDisplayStatus>() { 65e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown public WifiDisplayStatus createFromParcel(Parcel in) { 6689d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown int featureState = in.readInt(); 67180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown int scanState = in.readInt(); 68180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown int activeDisplayState= in.readInt(); 69e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown 70180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown WifiDisplay activeDisplay = null; 71e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown if (in.readInt() != 0) { 72180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown activeDisplay = WifiDisplay.CREATOR.createFromParcel(in); 73e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown } 74e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown 75ab87a63997a7dc771acfd0dcd7efda990dc3d5feChong Zhang WifiDisplay[] displays = WifiDisplay.CREATOR.newArray(in.readInt()); 76ab87a63997a7dc771acfd0dcd7efda990dc3d5feChong Zhang for (int i = 0; i < displays.length; i++) { 77ab87a63997a7dc771acfd0dcd7efda990dc3d5feChong Zhang displays[i] = WifiDisplay.CREATOR.createFromParcel(in); 78e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown } 79e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown 801f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang WifiDisplaySessionInfo sessionInfo = 811f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang WifiDisplaySessionInfo.CREATOR.createFromParcel(in); 821f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang 8389d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown return new WifiDisplayStatus(featureState, scanState, activeDisplayState, 841f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang activeDisplay, displays, sessionInfo); 85e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown } 86e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown 87e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown public WifiDisplayStatus[] newArray(int size) { 88e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown return new WifiDisplayStatus[size]; 89e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown } 90e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown }; 91e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown 92e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown public WifiDisplayStatus() { 9389d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown this(FEATURE_STATE_UNAVAILABLE, SCAN_STATE_NOT_SCANNING, DISPLAY_STATE_NOT_CONNECTED, 941f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang null, WifiDisplay.EMPTY_ARRAY, null); 95e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown } 96e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown 971f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang public WifiDisplayStatus(int featureState, int scanState, int activeDisplayState, 981f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang WifiDisplay activeDisplay, WifiDisplay[] displays, WifiDisplaySessionInfo sessionInfo) { 99ab87a63997a7dc771acfd0dcd7efda990dc3d5feChong Zhang if (displays == null) { 100ab87a63997a7dc771acfd0dcd7efda990dc3d5feChong Zhang throw new IllegalArgumentException("displays must not be null"); 101e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown } 102e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown 10389d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown mFeatureState = featureState; 104180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown mScanState = scanState; 105180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown mActiveDisplayState = activeDisplayState; 106180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown mActiveDisplay = activeDisplay; 107ab87a63997a7dc771acfd0dcd7efda990dc3d5feChong Zhang mDisplays = displays; 1081f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang 1091f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang mSessionInfo = (sessionInfo != null) ? sessionInfo : new WifiDisplaySessionInfo(); 110e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown } 111e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown 112e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown /** 11389d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown * Returns the state of the Wifi display feature on this device. 114e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * <p> 11589d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown * The value of this property reflects whether the device supports the Wifi display, 11689d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown * whether it has been enabled by the user and whether the prerequisites for 11789d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown * connecting to displays have been met. 118e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown * </p> 119e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown */ 12089d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown public int getFeatureState() { 12189d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown return mFeatureState; 122e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown } 123e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown 124e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown /** 125180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown * Returns the current state of the Wifi display scan. 126180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown * 127180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown * @return One of: {@link #SCAN_STATE_NOT_SCANNING} or {@link #SCAN_STATE_SCANNING}. 128e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown */ 129180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown public int getScanState() { 130180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown return mScanState; 131e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown } 132e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown 133e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown /** 134180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown * Get the state of the currently active display. 135180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown * 136180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown * @return One of: {@link #DISPLAY_STATE_NOT_CONNECTED}, {@link #DISPLAY_STATE_CONNECTING}, 137180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown * or {@link #DISPLAY_STATE_CONNECTED}. 138e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown */ 139180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown public int getActiveDisplayState() { 140180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown return mActiveDisplayState; 141e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown } 142e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown 143e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown /** 144180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown * Gets the Wifi display that is currently active. It may be connecting or 145180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown * connected. 146e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown */ 147180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown public WifiDisplay getActiveDisplay() { 148180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown return mActiveDisplay; 149e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown } 150e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown 151e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown /** 152ab87a63997a7dc771acfd0dcd7efda990dc3d5feChong Zhang * Gets the list of Wifi displays, returns a combined list of all available 1531f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang * Wifi displays as reported by the most recent scan, and all remembered 154ab87a63997a7dc771acfd0dcd7efda990dc3d5feChong Zhang * Wifi displays (not necessarily available at the time). 15589d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown */ 156ab87a63997a7dc771acfd0dcd7efda990dc3d5feChong Zhang public WifiDisplay[] getDisplays() { 157ab87a63997a7dc771acfd0dcd7efda990dc3d5feChong Zhang return mDisplays; 158e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown } 159e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown 1601f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang /** 1611f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang * Gets the Wifi display session info (required for certification only) 1621f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang */ 1631f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang public WifiDisplaySessionInfo getSessionInfo() { 1641f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang return mSessionInfo; 1651f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang } 1661f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang 167e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown @Override 168e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown public void writeToParcel(Parcel dest, int flags) { 16989d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown dest.writeInt(mFeatureState); 170180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown dest.writeInt(mScanState); 171180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown dest.writeInt(mActiveDisplayState); 172e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown 173180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown if (mActiveDisplay != null) { 174e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown dest.writeInt(1); 175180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown mActiveDisplay.writeToParcel(dest, flags); 176e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown } else { 177e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown dest.writeInt(0); 178e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown } 179e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown 180ab87a63997a7dc771acfd0dcd7efda990dc3d5feChong Zhang dest.writeInt(mDisplays.length); 181ab87a63997a7dc771acfd0dcd7efda990dc3d5feChong Zhang for (WifiDisplay display : mDisplays) { 182e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown display.writeToParcel(dest, flags); 183e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown } 1841f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang 1851f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang mSessionInfo.writeToParcel(dest, flags); 186e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown } 187e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown 188e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown @Override 189e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown public int describeContents() { 190e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown return 0; 191e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown } 192e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown 193e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown // For debugging purposes only. 194e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown @Override 195e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown public String toString() { 19689d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown return "WifiDisplayStatus{featureState=" + mFeatureState 197180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown + ", scanState=" + mScanState 198180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown + ", activeDisplayState=" + mActiveDisplayState 199180bbc71810496e280e9993177bfeddb3ad1f558Jeff Brown + ", activeDisplay=" + mActiveDisplay 200ab87a63997a7dc771acfd0dcd7efda990dc3d5feChong Zhang + ", displays=" + Arrays.toString(mDisplays) 2011f3ecaae6303d5ee6c5ca8499262c9962f036365Chong Zhang + ", sessionInfo=" + mSessionInfo 202e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown + "}"; 203e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown } 204e08ae388d63c4db8f9d9a7ecd634f9a51f6e91b9Jeff Brown} 205