1 /* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.hardware.display; 18 19 import android.os.Parcel; 20 import android.os.Parcelable; 21 22 import java.util.Arrays; 23 24 /** 25 * Describes the current global state of Wifi display connectivity, including the 26 * currently connected display and all available or remembered displays. 27 * <p> 28 * This object is immutable. 29 * </p> 30 * 31 * @hide 32 */ 33 public final class WifiDisplayStatus implements Parcelable { 34 private final int mFeatureState; 35 private final int mScanState; 36 private final int mActiveDisplayState; 37 private final WifiDisplay mActiveDisplay; 38 private final WifiDisplay[] mDisplays; 39 40 /** Session info needed for Miracast Certification */ 41 private final WifiDisplaySessionInfo mSessionInfo; 42 43 /** Feature state: Wifi display is not available on this device. */ 44 public static final int FEATURE_STATE_UNAVAILABLE = 0; 45 /** Feature state: Wifi display is disabled, probably because Wifi is disabled. */ 46 public static final int FEATURE_STATE_DISABLED = 1; 47 /** Feature state: Wifi display is turned off in settings. */ 48 public static final int FEATURE_STATE_OFF = 2; 49 /** Feature state: Wifi display is turned on in settings. */ 50 public static final int FEATURE_STATE_ON = 3; 51 52 /** Scan state: Not currently scanning. */ 53 public static final int SCAN_STATE_NOT_SCANNING = 0; 54 /** Scan state: Currently scanning. */ 55 public static final int SCAN_STATE_SCANNING = 1; 56 57 /** Display state: Not connected. */ 58 public static final int DISPLAY_STATE_NOT_CONNECTED = 0; 59 /** Display state: Connecting to active display. */ 60 public static final int DISPLAY_STATE_CONNECTING = 1; 61 /** Display state: Connected to active display. */ 62 public static final int DISPLAY_STATE_CONNECTED = 2; 63 64 public static final Creator<WifiDisplayStatus> CREATOR = new Creator<WifiDisplayStatus>() { 65 public WifiDisplayStatus createFromParcel(Parcel in) { 66 int featureState = in.readInt(); 67 int scanState = in.readInt(); 68 int activeDisplayState= in.readInt(); 69 70 WifiDisplay activeDisplay = null; 71 if (in.readInt() != 0) { 72 activeDisplay = WifiDisplay.CREATOR.createFromParcel(in); 73 } 74 75 WifiDisplay[] displays = WifiDisplay.CREATOR.newArray(in.readInt()); 76 for (int i = 0; i < displays.length; i++) { 77 displays[i] = WifiDisplay.CREATOR.createFromParcel(in); 78 } 79 80 WifiDisplaySessionInfo sessionInfo = 81 WifiDisplaySessionInfo.CREATOR.createFromParcel(in); 82 83 return new WifiDisplayStatus(featureState, scanState, activeDisplayState, 84 activeDisplay, displays, sessionInfo); 85 } 86 87 public WifiDisplayStatus[] newArray(int size) { 88 return new WifiDisplayStatus[size]; 89 } 90 }; 91 WifiDisplayStatus()92 public WifiDisplayStatus() { 93 this(FEATURE_STATE_UNAVAILABLE, SCAN_STATE_NOT_SCANNING, DISPLAY_STATE_NOT_CONNECTED, 94 null, WifiDisplay.EMPTY_ARRAY, null); 95 } 96 WifiDisplayStatus(int featureState, int scanState, int activeDisplayState, WifiDisplay activeDisplay, WifiDisplay[] displays, WifiDisplaySessionInfo sessionInfo)97 public WifiDisplayStatus(int featureState, int scanState, int activeDisplayState, 98 WifiDisplay activeDisplay, WifiDisplay[] displays, WifiDisplaySessionInfo sessionInfo) { 99 if (displays == null) { 100 throw new IllegalArgumentException("displays must not be null"); 101 } 102 103 mFeatureState = featureState; 104 mScanState = scanState; 105 mActiveDisplayState = activeDisplayState; 106 mActiveDisplay = activeDisplay; 107 mDisplays = displays; 108 109 mSessionInfo = (sessionInfo != null) ? sessionInfo : new WifiDisplaySessionInfo(); 110 } 111 112 /** 113 * Returns the state of the Wifi display feature on this device. 114 * <p> 115 * The value of this property reflects whether the device supports the Wifi display, 116 * whether it has been enabled by the user and whether the prerequisites for 117 * connecting to displays have been met. 118 * </p> 119 */ getFeatureState()120 public int getFeatureState() { 121 return mFeatureState; 122 } 123 124 /** 125 * Returns the current state of the Wifi display scan. 126 * 127 * @return One of: {@link #SCAN_STATE_NOT_SCANNING} or {@link #SCAN_STATE_SCANNING}. 128 */ getScanState()129 public int getScanState() { 130 return mScanState; 131 } 132 133 /** 134 * Get the state of the currently active display. 135 * 136 * @return One of: {@link #DISPLAY_STATE_NOT_CONNECTED}, {@link #DISPLAY_STATE_CONNECTING}, 137 * or {@link #DISPLAY_STATE_CONNECTED}. 138 */ getActiveDisplayState()139 public int getActiveDisplayState() { 140 return mActiveDisplayState; 141 } 142 143 /** 144 * Gets the Wifi display that is currently active. It may be connecting or 145 * connected. 146 */ getActiveDisplay()147 public WifiDisplay getActiveDisplay() { 148 return mActiveDisplay; 149 } 150 151 /** 152 * Gets the list of Wifi displays, returns a combined list of all available 153 * Wifi displays as reported by the most recent scan, and all remembered 154 * Wifi displays (not necessarily available at the time). 155 */ getDisplays()156 public WifiDisplay[] getDisplays() { 157 return mDisplays; 158 } 159 160 /** 161 * Gets the Wifi display session info (required for certification only) 162 */ getSessionInfo()163 public WifiDisplaySessionInfo getSessionInfo() { 164 return mSessionInfo; 165 } 166 167 @Override writeToParcel(Parcel dest, int flags)168 public void writeToParcel(Parcel dest, int flags) { 169 dest.writeInt(mFeatureState); 170 dest.writeInt(mScanState); 171 dest.writeInt(mActiveDisplayState); 172 173 if (mActiveDisplay != null) { 174 dest.writeInt(1); 175 mActiveDisplay.writeToParcel(dest, flags); 176 } else { 177 dest.writeInt(0); 178 } 179 180 dest.writeInt(mDisplays.length); 181 for (WifiDisplay display : mDisplays) { 182 display.writeToParcel(dest, flags); 183 } 184 185 mSessionInfo.writeToParcel(dest, flags); 186 } 187 188 @Override describeContents()189 public int describeContents() { 190 return 0; 191 } 192 193 // For debugging purposes only. 194 @Override toString()195 public String toString() { 196 return "WifiDisplayStatus{featureState=" + mFeatureState 197 + ", scanState=" + mScanState 198 + ", activeDisplayState=" + mActiveDisplayState 199 + ", activeDisplay=" + mActiveDisplay 200 + ", displays=" + Arrays.toString(mDisplays) 201 + ", sessionInfo=" + mSessionInfo 202 + "}"; 203 } 204 } 205