Expose Wifi P2P @hide APIs as @SystemApi

These APIs are mostly used by Settings.

Bug: 143892817
Test: atest FrameworksWifiApiTests
Change-Id: I27061280b0c49677fa651c6f9799e48b78e4c109
This commit is contained in:
David Su
2019-10-25 11:22:41 -07:00
parent b9a57da94c
commit b73c737ffc
12 changed files with 417 additions and 180 deletions

View File

@@ -30511,6 +30511,9 @@ package android.net.wifi.p2p {
field public static final int GROUP_OWNER_BAND_2GHZ = 1; // 0x1 field public static final int GROUP_OWNER_BAND_2GHZ = 1; // 0x1
field public static final int GROUP_OWNER_BAND_5GHZ = 2; // 0x2 field public static final int GROUP_OWNER_BAND_5GHZ = 2; // 0x2
field public static final int GROUP_OWNER_BAND_AUTO = 0; // 0x0 field public static final int GROUP_OWNER_BAND_AUTO = 0; // 0x0
field public static final int GROUP_OWNER_INTENT_AUTO = -1; // 0xffffffff
field public static final int GROUP_OWNER_INTENT_MAX = 15; // 0xf
field public static final int GROUP_OWNER_INTENT_MIN = 0; // 0x0
field public String deviceAddress; field public String deviceAddress;
field public int groupOwnerIntent; field public int groupOwnerIntent;
field public android.net.wifi.WpsInfo wps; field public android.net.wifi.WpsInfo wps;
@@ -30531,6 +30534,7 @@ package android.net.wifi.p2p {
ctor public WifiP2pDevice(); ctor public WifiP2pDevice();
ctor public WifiP2pDevice(android.net.wifi.p2p.WifiP2pDevice); ctor public WifiP2pDevice(android.net.wifi.p2p.WifiP2pDevice);
method public int describeContents(); method public int describeContents();
method @Nullable public android.net.wifi.p2p.WifiP2pWfdInfo getWfdInfo();
method public boolean isGroupOwner(); method public boolean isGroupOwner();
method public boolean isServiceDiscoveryCapable(); method public boolean isServiceDiscoveryCapable();
method public boolean wpsDisplaySupported(); method public boolean wpsDisplaySupported();
@@ -30567,6 +30571,7 @@ package android.net.wifi.p2p {
method public java.util.Collection<android.net.wifi.p2p.WifiP2pDevice> getClientList(); method public java.util.Collection<android.net.wifi.p2p.WifiP2pDevice> getClientList();
method public int getFrequency(); method public int getFrequency();
method public String getInterface(); method public String getInterface();
method public int getNetworkId();
method public String getNetworkName(); method public String getNetworkName();
method public android.net.wifi.p2p.WifiP2pDevice getOwner(); method public android.net.wifi.p2p.WifiP2pDevice getOwner();
method public String getPassphrase(); method public String getPassphrase();
@@ -30691,6 +30696,28 @@ package android.net.wifi.p2p {
method public void onUpnpServiceAvailable(java.util.List<java.lang.String>, android.net.wifi.p2p.WifiP2pDevice); method public void onUpnpServiceAvailable(java.util.List<java.lang.String>, android.net.wifi.p2p.WifiP2pDevice);
} }
public final class WifiP2pWfdInfo implements android.os.Parcelable {
ctor public WifiP2pWfdInfo();
ctor public WifiP2pWfdInfo(@Nullable android.net.wifi.p2p.WifiP2pWfdInfo);
method public int describeContents();
method public int getControlPort();
method public int getDeviceType();
method public int getMaxThroughput();
method public boolean isSessionAvailable();
method public boolean isWfdEnabled();
method public void setControlPort(int);
method public boolean setDeviceType(int);
method public void setMaxThroughput(int);
method public void setSessionAvailable(boolean);
method public void setWfdEnabled(boolean);
method public void writeToParcel(@NonNull android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pWfdInfo> CREATOR;
field public static final int DEVICE_TYPE_PRIMARY_SINK = 1; // 0x1
field public static final int DEVICE_TYPE_SECONDARY_SINK = 2; // 0x2
field public static final int DEVICE_TYPE_SOURCE_OR_PRIMARY_SINK = 3; // 0x3
field public static final int DEVICE_TYPE_WFD_SOURCE = 0; // 0x0
}
} }
package android.net.wifi.p2p.nsd { package android.net.wifi.p2p.nsd {

View File

@@ -57,6 +57,7 @@ package android {
field public static final String CHANGE_DEVICE_IDLE_TEMP_WHITELIST = "android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST"; field public static final String CHANGE_DEVICE_IDLE_TEMP_WHITELIST = "android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST";
field public static final String CLEAR_APP_USER_DATA = "android.permission.CLEAR_APP_USER_DATA"; field public static final String CLEAR_APP_USER_DATA = "android.permission.CLEAR_APP_USER_DATA";
field public static final String CONFIGURE_DISPLAY_BRIGHTNESS = "android.permission.CONFIGURE_DISPLAY_BRIGHTNESS"; field public static final String CONFIGURE_DISPLAY_BRIGHTNESS = "android.permission.CONFIGURE_DISPLAY_BRIGHTNESS";
field public static final String CONFIGURE_WIFI_DISPLAY = "android.permission.CONFIGURE_WIFI_DISPLAY";
field public static final String CONNECTIVITY_INTERNAL = "android.permission.CONNECTIVITY_INTERNAL"; field public static final String CONNECTIVITY_INTERNAL = "android.permission.CONNECTIVITY_INTERNAL";
field public static final String CONNECTIVITY_USE_RESTRICTED_NETWORKS = "android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS"; field public static final String CONNECTIVITY_USE_RESTRICTED_NETWORKS = "android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS";
field public static final String CONTROL_DISPLAY_COLOR_TRANSFORMS = "android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS"; field public static final String CONTROL_DISPLAY_COLOR_TRANSFORMS = "android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS";
@@ -125,8 +126,10 @@ package android {
field public static final String NETWORK_CARRIER_PROVISIONING = "android.permission.NETWORK_CARRIER_PROVISIONING"; field public static final String NETWORK_CARRIER_PROVISIONING = "android.permission.NETWORK_CARRIER_PROVISIONING";
field public static final String NETWORK_MANAGED_PROVISIONING = "android.permission.NETWORK_MANAGED_PROVISIONING"; field public static final String NETWORK_MANAGED_PROVISIONING = "android.permission.NETWORK_MANAGED_PROVISIONING";
field public static final String NETWORK_SCAN = "android.permission.NETWORK_SCAN"; field public static final String NETWORK_SCAN = "android.permission.NETWORK_SCAN";
field public static final String NETWORK_SETTINGS = "android.permission.NETWORK_SETTINGS";
field public static final String NETWORK_SETUP_WIZARD = "android.permission.NETWORK_SETUP_WIZARD"; field public static final String NETWORK_SETUP_WIZARD = "android.permission.NETWORK_SETUP_WIZARD";
field public static final String NETWORK_SIGNAL_STRENGTH_WAKEUP = "android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP"; field public static final String NETWORK_SIGNAL_STRENGTH_WAKEUP = "android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP";
field public static final String NETWORK_STACK = "android.permission.NETWORK_STACK";
field public static final String NOTIFICATION_DURING_SETUP = "android.permission.NOTIFICATION_DURING_SETUP"; field public static final String NOTIFICATION_DURING_SETUP = "android.permission.NOTIFICATION_DURING_SETUP";
field public static final String NOTIFY_TV_INPUTS = "android.permission.NOTIFY_TV_INPUTS"; field public static final String NOTIFY_TV_INPUTS = "android.permission.NOTIFY_TV_INPUTS";
field public static final String OBSERVE_APP_USAGE = "android.permission.OBSERVE_APP_USAGE"; field public static final String OBSERVE_APP_USAGE = "android.permission.OBSERVE_APP_USAGE";
@@ -4120,8 +4123,8 @@ package android.net {
method @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void getLatestTetheringEntitlementResult(int, boolean, @NonNull java.util.concurrent.Executor, @NonNull android.net.ConnectivityManager.OnTetheringEntitlementResultListener); method @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void getLatestTetheringEntitlementResult(int, boolean, @NonNull java.util.concurrent.Executor, @NonNull android.net.ConnectivityManager.OnTetheringEntitlementResultListener);
method @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public boolean isTetheringSupported(); method @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public boolean isTetheringSupported();
method @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void registerTetheringEventCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.ConnectivityManager.OnTetheringEventCallback); method @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void registerTetheringEventCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.ConnectivityManager.OnTetheringEventCallback);
method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void setAirplaneMode(boolean); method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void setAirplaneMode(boolean);
method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, "android.permission.NETWORK_STACK"}) public boolean shouldAvoidBadWifi(); method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) public boolean shouldAvoidBadWifi();
method @RequiresPermission(android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) public void startCaptivePortalApp(@NonNull android.net.Network, @NonNull android.os.Bundle); method @RequiresPermission(android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) public void startCaptivePortalApp(@NonNull android.net.Network, @NonNull android.os.Bundle);
method @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void startTethering(int, boolean, android.net.ConnectivityManager.OnStartTetheringCallback); method @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void startTethering(int, boolean, android.net.ConnectivityManager.OnStartTetheringCallback);
method @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void startTethering(int, boolean, android.net.ConnectivityManager.OnStartTetheringCallback, android.os.Handler); method @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void startTethering(int, boolean, android.net.ConnectivityManager.OnStartTetheringCallback, android.os.Handler);
@@ -4829,14 +4832,14 @@ package android.net.wifi {
public class WifiManager { public class WifiManager {
method @RequiresPermission("android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE") public void addOnWifiUsabilityStatsListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.OnWifiUsabilityStatsListener); method @RequiresPermission("android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE") public void addOnWifiUsabilityStatsListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.OnWifiUsabilityStatsListener);
method @RequiresPermission("android.permission.NETWORK_SETTINGS") public void allowAutojoin(int, boolean); method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void allowAutojoin(int, boolean);
method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void connect(@NonNull android.net.wifi.WifiConfiguration, @Nullable android.net.wifi.WifiManager.ActionListener); method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void connect(@NonNull android.net.wifi.WifiConfiguration, @Nullable android.net.wifi.WifiManager.ActionListener);
method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void connect(int, @Nullable android.net.wifi.WifiManager.ActionListener); method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void connect(int, @Nullable android.net.wifi.WifiManager.ActionListener);
method @Deprecated @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void disable(int, @Nullable android.net.wifi.WifiManager.ActionListener); method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void disable(int, @Nullable android.net.wifi.WifiManager.ActionListener);
method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void forget(int, @Nullable android.net.wifi.WifiManager.ActionListener); method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void forget(int, @Nullable android.net.wifi.WifiManager.ActionListener);
method @NonNull @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.List<android.util.Pair<android.net.wifi.WifiConfiguration,java.util.Map<java.lang.Integer,java.util.List<android.net.wifi.ScanResult>>>> getAllMatchingWifiConfigs(@NonNull java.util.List<android.net.wifi.ScanResult>); method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.List<android.util.Pair<android.net.wifi.WifiConfiguration,java.util.Map<java.lang.Integer,java.util.List<android.net.wifi.ScanResult>>>> getAllMatchingWifiConfigs(@NonNull java.util.List<android.net.wifi.ScanResult>);
method @NonNull @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.Map<android.net.wifi.hotspot2.OsuProvider,java.util.List<android.net.wifi.ScanResult>> getMatchingOsuProviders(@Nullable java.util.List<android.net.wifi.ScanResult>); method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.Map<android.net.wifi.hotspot2.OsuProvider,java.util.List<android.net.wifi.ScanResult>> getMatchingOsuProviders(@Nullable java.util.List<android.net.wifi.ScanResult>);
method @NonNull @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.Map<android.net.wifi.hotspot2.OsuProvider,android.net.wifi.hotspot2.PasspointConfiguration> getMatchingPasspointConfigsForOsuProviders(@NonNull java.util.Set<android.net.wifi.hotspot2.OsuProvider>); method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.Map<android.net.wifi.hotspot2.OsuProvider,android.net.wifi.hotspot2.PasspointConfiguration> getMatchingPasspointConfigsForOsuProviders(@NonNull java.util.Set<android.net.wifi.hotspot2.OsuProvider>);
method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_WIFI_STATE, android.Manifest.permission.READ_WIFI_CREDENTIAL}) public java.util.List<android.net.wifi.WifiConfiguration> getPrivilegedConfiguredNetworks(); method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_WIFI_STATE, android.Manifest.permission.READ_WIFI_CREDENTIAL}) public java.util.List<android.net.wifi.WifiConfiguration> getPrivilegedConfiguredNetworks();
method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public android.net.wifi.WifiConfiguration getWifiApConfiguration(); method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public android.net.wifi.WifiConfiguration getWifiApConfiguration();
method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public int getWifiApState(); method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public int getWifiApState();
@@ -4846,20 +4849,20 @@ package android.net.wifi {
method public boolean isPortableHotspotSupported(); method public boolean isPortableHotspotSupported();
method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public boolean isWifiApEnabled(); method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public boolean isWifiApEnabled();
method public boolean isWifiScannerSupported(); method public boolean isWifiScannerSupported();
method @RequiresPermission("android.permission.NETWORK_SETTINGS") public void registerSoftApCallback(@Nullable java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.SoftApCallback); method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void registerSoftApCallback(@Nullable java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.SoftApCallback);
method @RequiresPermission("android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE") public void removeOnWifiUsabilityStatsListener(@NonNull android.net.wifi.WifiManager.OnWifiUsabilityStatsListener); method @RequiresPermission("android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE") public void removeOnWifiUsabilityStatsListener(@NonNull android.net.wifi.WifiManager.OnWifiUsabilityStatsListener);
method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void save(@NonNull android.net.wifi.WifiConfiguration, @Nullable android.net.wifi.WifiManager.ActionListener); method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void save(@NonNull android.net.wifi.WifiConfiguration, @Nullable android.net.wifi.WifiManager.ActionListener);
method @RequiresPermission("android.permission.WIFI_SET_DEVICE_MOBILITY_STATE") public void setDeviceMobilityState(int); method @RequiresPermission("android.permission.WIFI_SET_DEVICE_MOBILITY_STATE") public void setDeviceMobilityState(int);
method @RequiresPermission(android.Manifest.permission.CHANGE_WIFI_STATE) public boolean setWifiApConfiguration(android.net.wifi.WifiConfiguration); method @RequiresPermission(android.Manifest.permission.CHANGE_WIFI_STATE) public boolean setWifiApConfiguration(android.net.wifi.WifiConfiguration);
method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startEasyConnectAsConfiguratorInitiator(@NonNull String, int, int, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.EasyConnectStatusCallback); method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startEasyConnectAsConfiguratorInitiator(@NonNull String, int, int, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.EasyConnectStatusCallback);
method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startEasyConnectAsEnrolleeInitiator(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.EasyConnectStatusCallback); method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startEasyConnectAsEnrolleeInitiator(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.EasyConnectStatusCallback);
method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startLocalOnlyHotspot(@NonNull android.net.wifi.SoftApConfiguration, @Nullable java.util.concurrent.Executor, @Nullable android.net.wifi.WifiManager.LocalOnlyHotspotCallback); method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startLocalOnlyHotspot(@NonNull android.net.wifi.SoftApConfiguration, @Nullable java.util.concurrent.Executor, @Nullable android.net.wifi.WifiManager.LocalOnlyHotspotCallback);
method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public boolean startScan(android.os.WorkSource); method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public boolean startScan(android.os.WorkSource);
method @RequiresPermission(anyOf={"android.permission.NETWORK_STACK", android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public boolean startSoftAp(@Nullable android.net.wifi.WifiConfiguration); method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public boolean startSoftAp(@Nullable android.net.wifi.WifiConfiguration);
method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startSubscriptionProvisioning(@NonNull android.net.wifi.hotspot2.OsuProvider, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.hotspot2.ProvisioningCallback); method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startSubscriptionProvisioning(@NonNull android.net.wifi.hotspot2.OsuProvider, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.hotspot2.ProvisioningCallback);
method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void stopEasyConnectSession(); method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void stopEasyConnectSession();
method @RequiresPermission(anyOf={"android.permission.NETWORK_STACK", android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public boolean stopSoftAp(); method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public boolean stopSoftAp();
method @RequiresPermission(anyOf={"android.permission.NETWORK_STACK", android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void updateInterfaceIpState(@Nullable String, int); method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void updateInterfaceIpState(@Nullable String, int);
method @RequiresPermission("android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE") public void updateWifiUsabilityScore(int, int, int); method @RequiresPermission("android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE") public void updateWifiUsabilityScore(int, int, int);
field public static final int CHANGE_REASON_ADDED = 0; // 0x0 field public static final int CHANGE_REASON_ADDED = 0; // 0x0
field public static final int CHANGE_REASON_CONFIG_CHANGE = 2; // 0x2 field public static final int CHANGE_REASON_CONFIG_CHANGE = 2; // 0x2
@@ -5151,6 +5154,36 @@ package android.net.wifi.hotspot2 {
} }
package android.net.wifi.p2p {
public final class WifiP2pGroupList implements android.os.Parcelable {
method public int describeContents();
method @NonNull public java.util.Collection<android.net.wifi.p2p.WifiP2pGroup> getGroupList();
method public void writeToParcel(@NonNull android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pGroupList> CREATOR;
}
public class WifiP2pManager {
method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public void deletePersistentGroup(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, int, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void factoryReset(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void listen(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, boolean, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.READ_WIFI_CREDENTIAL}) public void requestPersistentGroupInfo(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @Nullable android.net.wifi.p2p.WifiP2pManager.PersistentGroupInfoListener);
method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public void setDeviceName(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @NonNull String, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
method @RequiresPermission(allOf={android.Manifest.permission.CONNECTIVITY_INTERNAL, android.Manifest.permission.CONFIGURE_WIFI_DISPLAY}) public void setMiracastMode(int);
method @RequiresPermission(android.Manifest.permission.CONFIGURE_WIFI_DISPLAY) public void setWfdInfo(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @NonNull android.net.wifi.p2p.WifiP2pWfdInfo, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public void setWifiP2pChannels(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, int, int, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
field public static final String ACTION_WIFI_P2P_PERSISTENT_GROUPS_CHANGED = "android.net.wifi.p2p.action.WIFI_P2P_PERSISTENT_GROUPS_CHANGED";
field public static final int MIRACAST_DISABLED = 0; // 0x0
field public static final int MIRACAST_SINK = 2; // 0x2
field public static final int MIRACAST_SOURCE = 1; // 0x1
}
public static interface WifiP2pManager.PersistentGroupInfoListener {
method public void onPersistentGroupInfoAvailable(@NonNull android.net.wifi.p2p.WifiP2pGroupList);
}
}
package android.net.wifi.rtt { package android.net.wifi.rtt {
public static final class RangingRequest.Builder { public static final class RangingRequest.Builder {

View File

@@ -7,6 +7,22 @@ ArrayReturn: android.view.contentcapture.ViewNode#getAutofillOptions():
ExecutorRegistration: android.net.wifi.p2p.WifiP2pManager#deletePersistentGroup(android.net.wifi.p2p.WifiP2pManager.Channel, int, android.net.wifi.p2p.WifiP2pManager.ActionListener):
Registration methods should have overload that accepts delivery Executor: `deletePersistentGroup`
ExecutorRegistration: android.net.wifi.p2p.WifiP2pManager#factoryReset(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener):
Registration methods should have overload that accepts delivery Executor: `factoryReset`
ExecutorRegistration: android.net.wifi.p2p.WifiP2pManager#listen(android.net.wifi.p2p.WifiP2pManager.Channel, boolean, android.net.wifi.p2p.WifiP2pManager.ActionListener):
Registration methods should have overload that accepts delivery Executor: `listen`
ExecutorRegistration: android.net.wifi.p2p.WifiP2pManager#requestPersistentGroupInfo(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.PersistentGroupInfoListener):
Registration methods should have overload that accepts delivery Executor: `requestPersistentGroupInfo`
ExecutorRegistration: android.net.wifi.p2p.WifiP2pManager#setDeviceName(android.net.wifi.p2p.WifiP2pManager.Channel, String, android.net.wifi.p2p.WifiP2pManager.ActionListener):
Registration methods should have overload that accepts delivery Executor: `setDeviceName`
ExecutorRegistration: android.net.wifi.p2p.WifiP2pManager#setWfdInfo(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pWfdInfo, android.net.wifi.p2p.WifiP2pManager.ActionListener):
Registration methods should have overload that accepts delivery Executor: `setWfdInfo`
ExecutorRegistration: android.net.wifi.p2p.WifiP2pManager#setWifiP2pChannels(android.net.wifi.p2p.WifiP2pManager.Channel, int, int, android.net.wifi.p2p.WifiP2pManager.ActionListener):
Registration methods should have overload that accepts delivery Executor: `setWifiP2pChannels`
GenericException: android.app.prediction.AppPredictor#finalize(): GenericException: android.app.prediction.AppPredictor#finalize():
GenericException: android.hardware.location.ContextHubClient#finalize(): GenericException: android.hardware.location.ContextHubClient#finalize():
@@ -17,8 +33,7 @@ GenericException: android.service.autofill.augmented.FillWindow#finalize():
InterfaceConstant: android.service.storage.ExternalStorageService#SERVICE_INTERFACE:
KotlinKeyword: android.app.Notification#when: KotlinKeyword: android.app.Notification#when:
@@ -198,9 +213,9 @@ SamShouldBeLast: android.app.AlarmManager#setExact(int, long, String, android.ap
SamShouldBeLast: android.app.AlarmManager#setWindow(int, long, long, String, android.app.AlarmManager.OnAlarmListener, android.os.Handler): SamShouldBeLast: android.app.AlarmManager#setWindow(int, long, long, String, android.app.AlarmManager.OnAlarmListener, android.os.Handler):
SamShouldBeLast: android.app.WallpaperInfo#dump(android.util.Printer, String): SamShouldBeLast: android.app.WallpaperInfo#dump(android.util.Printer, String):
SamShouldBeLast: android.app.admin.DevicePolicyManager#installSystemUpdate(android.content.ComponentName, android.net.Uri, java.util.concurrent.Executor, android.app.admin.DevicePolicyManager.InstallSystemUpdateCallback): SamShouldBeLast: android.app.admin.DevicePolicyManager#installSystemUpdate(android.content.ComponentName, android.net.Uri, java.util.concurrent.Executor, android.app.admin.DevicePolicyManager.InstallSystemUpdateCallback):
SamShouldBeLast: android.content.Context#bindIsolatedService(android.content.Intent, int, String, java.util.concurrent.Executor, android.content.ServiceConnection): SamShouldBeLast: android.content.Context#bindIsolatedService(android.content.Intent, int, String, java.util.concurrent.Executor, android.content.ServiceConnection):
SamShouldBeLast: android.content.Context#bindService(android.content.Intent, int, java.util.concurrent.Executor, android.content.ServiceConnection): SamShouldBeLast: android.content.Context#bindService(android.content.Intent, int, java.util.concurrent.Executor, android.content.ServiceConnection):

View File

@@ -375,7 +375,7 @@
<protected-broadcast android:name="android.net.wifi.p2p.THIS_DEVICE_CHANGED" /> <protected-broadcast android:name="android.net.wifi.p2p.THIS_DEVICE_CHANGED" />
<protected-broadcast android:name="android.net.wifi.p2p.PEERS_CHANGED" /> <protected-broadcast android:name="android.net.wifi.p2p.PEERS_CHANGED" />
<protected-broadcast android:name="android.net.wifi.p2p.CONNECTION_STATE_CHANGE" /> <protected-broadcast android:name="android.net.wifi.p2p.CONNECTION_STATE_CHANGE" />
<protected-broadcast android:name="android.net.wifi.p2p.PERSISTENT_GROUPS_CHANGED" /> <protected-broadcast android:name="android.net.wifi.p2p.action.WIFI_P2P_PERSISTENT_GROUPS_CHANGED" />
<protected-broadcast android:name="android.net.conn.TETHER_STATE_CHANGED" /> <protected-broadcast android:name="android.net.conn.TETHER_STATE_CHANGED" />
<protected-broadcast android:name="android.net.conn.INET_CONDITION_ACTION" /> <protected-broadcast android:name="android.net.conn.INET_CONDITION_ACTION" />
<protected-broadcast android:name="android.net.conn.NETWORK_CONDITIONS_MEASURED" /> <protected-broadcast android:name="android.net.conn.NETWORK_CONDITIONS_MEASURED" />
@@ -1615,6 +1615,7 @@
<!-- Allows network stack services (Connectivity and Wifi) to coordinate <!-- Allows network stack services (Connectivity and Wifi) to coordinate
<p>Not for use by third-party or privileged applications. <p>Not for use by third-party or privileged applications.
@SystemApi
@hide This should only be used by Connectivity and Wifi Services. @hide This should only be used by Connectivity and Wifi Services.
--> -->
<permission android:name="android.permission.NETWORK_STACK" <permission android:name="android.permission.NETWORK_STACK"
@@ -1622,6 +1623,7 @@
<!-- Allows Settings and SystemUI to call methods in Networking services <!-- Allows Settings and SystemUI to call methods in Networking services
<p>Not for use by third-party or privileged applications. <p>Not for use by third-party or privileged applications.
@SystemApi
@hide This should only be used by Settings and SystemUI. @hide This should only be used by Settings and SystemUI.
--> -->
<permission android:name="android.permission.NETWORK_SETTINGS" <permission android:name="android.permission.NETWORK_SETTINGS"
@@ -3583,7 +3585,8 @@
android:protectionLevel="signature" /> android:protectionLevel="signature" />
<!-- Allows an application to configure and connect to Wifi displays <!-- Allows an application to configure and connect to Wifi displays
@hide --> @hide
@SystemApi -->
<permission android:name="android.permission.CONFIGURE_WIFI_DISPLAY" <permission android:name="android.permission.CONFIGURE_WIFI_DISPLAY"
android:protectionLevel="signature" /> android:protectionLevel="signature" />

View File

@@ -16,8 +16,6 @@
package com.android.server.display; package com.android.server.display;
import com.android.internal.util.DumpUtils;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
@@ -36,16 +34,18 @@ import android.net.wifi.p2p.WifiP2pDevice;
import android.net.wifi.p2p.WifiP2pDeviceList; import android.net.wifi.p2p.WifiP2pDeviceList;
import android.net.wifi.p2p.WifiP2pGroup; import android.net.wifi.p2p.WifiP2pGroup;
import android.net.wifi.p2p.WifiP2pManager; import android.net.wifi.p2p.WifiP2pManager;
import android.net.wifi.p2p.WifiP2pWfdInfo;
import android.net.wifi.p2p.WifiP2pManager.ActionListener; import android.net.wifi.p2p.WifiP2pManager.ActionListener;
import android.net.wifi.p2p.WifiP2pManager.Channel; import android.net.wifi.p2p.WifiP2pManager.Channel;
import android.net.wifi.p2p.WifiP2pManager.GroupInfoListener; import android.net.wifi.p2p.WifiP2pManager.GroupInfoListener;
import android.net.wifi.p2p.WifiP2pManager.PeerListListener; import android.net.wifi.p2p.WifiP2pManager.PeerListListener;
import android.net.wifi.p2p.WifiP2pWfdInfo;
import android.os.Handler; import android.os.Handler;
import android.provider.Settings; import android.provider.Settings;
import android.util.Slog; import android.util.Slog;
import android.view.Surface; import android.view.Surface;
import com.android.internal.util.DumpUtils;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.net.Inet4Address; import java.net.Inet4Address;
import java.net.InetAddress; import java.net.InetAddress;
@@ -292,11 +292,11 @@ final class WifiDisplayController implements DumpUtils.Dump {
WifiP2pWfdInfo wfdInfo = new WifiP2pWfdInfo(); WifiP2pWfdInfo wfdInfo = new WifiP2pWfdInfo();
wfdInfo.setWfdEnabled(true); wfdInfo.setWfdEnabled(true);
wfdInfo.setDeviceType(WifiP2pWfdInfo.WFD_SOURCE); wfdInfo.setDeviceType(WifiP2pWfdInfo.DEVICE_TYPE_WFD_SOURCE);
wfdInfo.setSessionAvailable(true); wfdInfo.setSessionAvailable(true);
wfdInfo.setControlPort(DEFAULT_CONTROL_PORT); wfdInfo.setControlPort(DEFAULT_CONTROL_PORT);
wfdInfo.setMaxThroughput(MAX_THROUGHPUT); wfdInfo.setMaxThroughput(MAX_THROUGHPUT);
mWifiP2pManager.setWFDInfo(mWifiP2pChannel, wfdInfo, new ActionListener() { mWifiP2pManager.setWfdInfo(mWifiP2pChannel, wfdInfo, new ActionListener() {
@Override @Override
public void onSuccess() { public void onSuccess() {
if (DEBUG) { if (DEBUG) {
@@ -324,7 +324,7 @@ final class WifiDisplayController implements DumpUtils.Dump {
if (mWfdEnabled || mWfdEnabling) { if (mWfdEnabled || mWfdEnabling) {
WifiP2pWfdInfo wfdInfo = new WifiP2pWfdInfo(); WifiP2pWfdInfo wfdInfo = new WifiP2pWfdInfo();
wfdInfo.setWfdEnabled(false); wfdInfo.setWfdEnabled(false);
mWifiP2pManager.setWFDInfo(mWifiP2pChannel, wfdInfo, new ActionListener() { mWifiP2pManager.setWfdInfo(mWifiP2pChannel, wfdInfo, new ActionListener() {
@Override @Override
public void onSuccess() { public void onSuccess() {
if (DEBUG) { if (DEBUG) {
@@ -508,7 +508,8 @@ final class WifiDisplayController implements DumpUtils.Dump {
Slog.d(TAG, "updateDesiredDevice: new information " Slog.d(TAG, "updateDesiredDevice: new information "
+ describeWifiP2pDevice(device)); + describeWifiP2pDevice(device));
} }
mDesiredDevice.update(device); mDesiredDevice.updateSupplicantDetails(device);
mDesiredDevice.status = device.status;
if (mAdvertisedDisplay != null if (mAdvertisedDisplay != null
&& mAdvertisedDisplay.getDeviceAddress().equals(address)) { && mAdvertisedDisplay.getDeviceAddress().equals(address)) {
readvertiseDisplay(createWifiDisplay(mDesiredDevice)); readvertiseDisplay(createWifiDisplay(mDesiredDevice));
@@ -694,7 +695,7 @@ final class WifiDisplayController implements DumpUtils.Dump {
config.wps = wps; config.wps = wps;
config.deviceAddress = mConnectingDevice.deviceAddress; config.deviceAddress = mConnectingDevice.deviceAddress;
// Helps with STA & P2P concurrency // Helps with STA & P2P concurrency
config.groupOwnerIntent = WifiP2pConfig.MIN_GROUP_OWNER_INTENT; config.groupOwnerIntent = WifiP2pConfig.GROUP_OWNER_INTENT_MIN;
WifiDisplay display = createWifiDisplay(mConnectingDevice); WifiDisplay display = createWifiDisplay(mConnectingDevice);
advertiseDisplay(display, null, 0, 0, 0); advertiseDisplay(display, null, 0, 0, 0);
@@ -824,6 +825,10 @@ final class WifiDisplayController implements DumpUtils.Dump {
requestPeers(); requestPeers();
} }
private static boolean contains(WifiP2pGroup group, WifiP2pDevice device) {
return group.getOwner().equals(device) || group.getClientList().contains(device);
}
private void handleConnectionChanged(NetworkInfo networkInfo) { private void handleConnectionChanged(NetworkInfo networkInfo) {
mNetworkInfo = networkInfo; mNetworkInfo = networkInfo;
if (mWfdEnabled && networkInfo.isConnected()) { if (mWfdEnabled && networkInfo.isConnected()) {
@@ -835,7 +840,7 @@ final class WifiDisplayController implements DumpUtils.Dump {
Slog.d(TAG, "Received group info: " + describeWifiP2pGroup(info)); Slog.d(TAG, "Received group info: " + describeWifiP2pGroup(info));
} }
if (mConnectingDevice != null && !info.contains(mConnectingDevice)) { if (mConnectingDevice != null && !contains(info, mConnectingDevice)) {
Slog.i(TAG, "Aborting connection to Wifi display because " Slog.i(TAG, "Aborting connection to Wifi display because "
+ "the current P2P group does not contain the device " + "the current P2P group does not contain the device "
+ "we expected to find: " + mConnectingDevice.deviceName + "we expected to find: " + mConnectingDevice.deviceName
@@ -844,7 +849,7 @@ final class WifiDisplayController implements DumpUtils.Dump {
return; return;
} }
if (mDesiredDevice != null && !info.contains(mDesiredDevice)) { if (mDesiredDevice != null && !contains(info, mDesiredDevice)) {
disconnect(); disconnect();
return; return;
} }
@@ -1038,14 +1043,15 @@ final class WifiDisplayController implements DumpUtils.Dump {
} }
private static boolean isWifiDisplay(WifiP2pDevice device) { private static boolean isWifiDisplay(WifiP2pDevice device) {
return device.wfdInfo != null WifiP2pWfdInfo wfdInfo = device.getWfdInfo();
&& device.wfdInfo.isWfdEnabled() return wfdInfo != null
&& isPrimarySinkDeviceType(device.wfdInfo.getDeviceType()); && wfdInfo.isWfdEnabled()
&& isPrimarySinkDeviceType(wfdInfo.getDeviceType());
} }
private static boolean isPrimarySinkDeviceType(int deviceType) { private static boolean isPrimarySinkDeviceType(int deviceType) {
return deviceType == WifiP2pWfdInfo.PRIMARY_SINK return deviceType == WifiP2pWfdInfo.DEVICE_TYPE_PRIMARY_SINK
|| deviceType == WifiP2pWfdInfo.SOURCE_OR_PRIMARY_SINK; || deviceType == WifiP2pWfdInfo.DEVICE_TYPE_SOURCE_OR_PRIMARY_SINK;
} }
private static String describeWifiP2pDevice(WifiP2pDevice device) { private static String describeWifiP2pDevice(WifiP2pDevice device) {
@@ -1058,7 +1064,7 @@ final class WifiDisplayController implements DumpUtils.Dump {
private static WifiDisplay createWifiDisplay(WifiP2pDevice device) { private static WifiDisplay createWifiDisplay(WifiP2pDevice device) {
return new WifiDisplay(device.deviceAddress, device.deviceName, null, return new WifiDisplay(device.deviceAddress, device.deviceName, null,
true, device.wfdInfo.isSessionAvailable(), false); true, device.getWfdInfo().isSessionAvailable(), false);
} }
private final BroadcastReceiver mWifiP2pReceiver = new BroadcastReceiver() { private final BroadcastReceiver mWifiP2pReceiver = new BroadcastReceiver() {

View File

@@ -65,12 +65,6 @@ public class WifiP2pConfig implements Parcelable {
/** @hide */ /** @hide */
public int groupOwnerBand = GROUP_OWNER_BAND_AUTO; public int groupOwnerBand = GROUP_OWNER_BAND_AUTO;
/** @hide */
public static final int MAX_GROUP_OWNER_INTENT = 15;
/** @hide */
@UnsupportedAppUsage
public static final int MIN_GROUP_OWNER_INTENT = 0;
/** @hide */ /** @hide */
@IntDef(flag = false, prefix = { "GROUP_OWNER_BAND_" }, value = { @IntDef(flag = false, prefix = { "GROUP_OWNER_BAND_" }, value = {
GROUP_OWNER_BAND_AUTO, GROUP_OWNER_BAND_AUTO,
@@ -94,13 +88,35 @@ public class WifiP2pConfig implements Parcelable {
public static final int GROUP_OWNER_BAND_5GHZ = 2; public static final int GROUP_OWNER_BAND_5GHZ = 2;
/** /**
* This is an integer value between 0 and 15 where 0 indicates the least * The least inclination to be a group owner, to be filled in the field
* inclination to be a group owner and 15 indicates the highest inclination * {@link #groupOwnerIntent}.
* to be a group owner.
*
* A value of -1 indicates the system can choose an appropriate value.
*/ */
public int groupOwnerIntent = -1; public static final int GROUP_OWNER_INTENT_MIN = 0;
/**
* The most inclination to be a group owner, to be filled in the field
* {@link #groupOwnerIntent}.
*/
public static final int GROUP_OWNER_INTENT_MAX = 15;
/**
* The system can choose an appropriate owner intent value, to be filled in the field
* {@link #groupOwnerIntent}.
*/
public static final int GROUP_OWNER_INTENT_AUTO = -1;
/**
* This is an integer value between {@link #GROUP_OWNER_INTENT_MIN} and
* {@link #GROUP_OWNER_INTENT_MAX} where
* {@link #GROUP_OWNER_INTENT_MIN} indicates the least inclination to be a group owner and
* {@link #GROUP_OWNER_INTENT_MAX} indicates the highest inclination to be a group owner.
*
* A value of {@link #GROUP_OWNER_INTENT_AUTO} indicates the system can choose an appropriate
* value.
*
* By default this field is set to {@link #GROUP_OWNER_INTENT_AUTO}.
*/
public int groupOwnerIntent = GROUP_OWNER_INTENT_AUTO;
/** @hide */ /** @hide */
@UnsupportedAppUsage @UnsupportedAppUsage

View File

@@ -16,6 +16,8 @@
package android.net.wifi.p2p; package android.net.wifi.p2p;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UnsupportedAppUsage; import android.annotation.UnsupportedAppUsage;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
@@ -237,6 +239,12 @@ public class WifiP2pDevice implements Parcelable {
} }
} }
/** The Wifi Display information for this device, or null if unavailable. */
@Nullable
public WifiP2pWfdInfo getWfdInfo() {
return wfdInfo;
}
/** Returns true if WPS push button configuration is supported */ /** Returns true if WPS push button configuration is supported */
public boolean wpsPbcSupported() { public boolean wpsPbcSupported() {
return (wpsConfigMethodsSupported & WPS_CONFIG_PUSHBUTTON) != 0; return (wpsConfigMethodsSupported & WPS_CONFIG_PUSHBUTTON) != 0;
@@ -278,14 +286,15 @@ public class WifiP2pDevice implements Parcelable {
} }
/** /**
* Update device details. This will be throw an exception if the device address * Update device details. This will throw an exception if the device address does not match.
* does not match. *
* @param device to be updated * @param device to be updated
* @throws IllegalArgumentException if the device is null or device address does not match * @throws IllegalArgumentException if the device is null or the device address does not match
*
* @hide * @hide
*/ */
@UnsupportedAppUsage @UnsupportedAppUsage
public void update(WifiP2pDevice device) { public void update(@NonNull WifiP2pDevice device) {
updateSupplicantDetails(device); updateSupplicantDetails(device);
status = device.status; status = device.status;
} }

View File

@@ -16,6 +16,7 @@
package android.net.wifi.p2p; package android.net.wifi.p2p;
import android.annotation.Nullable;
import android.annotation.UnsupportedAppUsage; import android.annotation.UnsupportedAppUsage;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
@@ -36,15 +37,21 @@ import java.util.regex.Pattern;
*/ */
public class WifiP2pGroup implements Parcelable { public class WifiP2pGroup implements Parcelable {
/** The temporary network id. /**
* {@hide} */ * The temporary network id.
*
* @hide
*/
@UnsupportedAppUsage @UnsupportedAppUsage
public static final int TEMPORARY_NET_ID = -1; public static final int TEMPORARY_NET_ID = -1;
/** The persistent network id. /**
* The persistent network id.
* If a matching persistent profile is found, use it. * If a matching persistent profile is found, use it.
* Otherwise, create a new persistent profile. * Otherwise, create a new persistent profile.
* {@hide} */ *
* @hide
*/
public static final int PERSISTENT_NET_ID = -2; public static final int PERSISTENT_NET_ID = -2;
/** The network name */ /** The network name */
@@ -64,7 +71,7 @@ public class WifiP2pGroup implements Parcelable {
private String mInterface; private String mInterface;
/** The network id in the wpa_supplicant */ /** The network ID in wpa_supplicant */
private int mNetId; private int mNetId;
/** The frequency (in MHz) used by this group */ /** The frequency (in MHz) used by this group */
@@ -225,10 +232,13 @@ public class WifiP2pGroup implements Parcelable {
return mClients.size() == 0; return mClients.size() == 0;
} }
/** @hide Returns {@code true} if the device is part of the group */ /**
public boolean contains(WifiP2pDevice device) { * Returns {@code true} if the device is part of the group, {@code false} otherwise.
if (mOwner.equals(device) || mClients.contains(device)) return true; *
return false; * @hide
*/
public boolean contains(@Nullable WifiP2pDevice device) {
return mOwner.equals(device) || mClients.contains(device);
} }
/** Get the list of clients currently part of the p2p group */ /** Get the list of clients currently part of the p2p group */
@@ -261,8 +271,7 @@ public class WifiP2pGroup implements Parcelable {
return mInterface; return mInterface;
} }
/** @hide */ /** The network ID of the P2P group in wpa_supplicant. */
@UnsupportedAppUsage
public int getNetworkId() { public int getNetworkId() {
return mNetId; return mNetId;
} }

View File

@@ -15,14 +15,16 @@
*/ */
package android.net.wifi.p2p; package android.net.wifi.p2p;
import java.util.Collection; import android.annotation.NonNull;
import java.util.Map; import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage; import android.annotation.UnsupportedAppUsage;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import android.util.LruCache; import android.util.LruCache;
import java.util.Collection;
import java.util.Map;
/** /**
* A class representing a Wi-Fi P2p group list * A class representing a Wi-Fi P2p group list
@@ -30,7 +32,8 @@ import android.util.LruCache;
* {@see WifiP2pManager} * {@see WifiP2pManager}
* @hide * @hide
*/ */
public class WifiP2pGroupList implements Parcelable { @SystemApi
public final class WifiP2pGroupList implements Parcelable {
private static final int CREDENTIAL_MAX_NUM = 32; private static final int CREDENTIAL_MAX_NUM = 32;
@@ -40,6 +43,7 @@ public class WifiP2pGroupList implements Parcelable {
private boolean isClearCalled = false; private boolean isClearCalled = false;
/** @hide */
public interface GroupDeleteListener { public interface GroupDeleteListener {
public void onDeleteGroup(int netId); public void onDeleteGroup(int netId);
} }
@@ -71,11 +75,9 @@ public class WifiP2pGroupList implements Parcelable {
} }
/** /**
* Return the list of p2p group. * Get the list of P2P groups.
*
* @return the list of p2p group.
*/ */
@UnsupportedAppUsage @NonNull
public Collection<WifiP2pGroup> getGroupList() { public Collection<WifiP2pGroup> getGroupList() {
return mGroups.snapshot().values(); return mGroups.snapshot().values();
} }
@@ -206,6 +208,7 @@ public class WifiP2pGroupList implements Parcelable {
return false; return false;
} }
@Override
public String toString() { public String toString() {
StringBuffer sbuf = new StringBuffer(); StringBuffer sbuf = new StringBuffer();
@@ -217,12 +220,14 @@ public class WifiP2pGroupList implements Parcelable {
} }
/** Implement the Parcelable interface */ /** Implement the Parcelable interface */
@Override
public int describeContents() { public int describeContents() {
return 0; return 0;
} }
/** Implement the Parcelable interface */ /** Implement the Parcelable interface */
public void writeToParcel(Parcel dest, int flags) { @Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
final Collection<WifiP2pGroup> groups = mGroups.snapshot().values(); final Collection<WifiP2pGroup> groups = mGroups.snapshot().values();
dest.writeInt(groups.size()); dest.writeInt(groups.size());
for(WifiP2pGroup group : groups) { for(WifiP2pGroup group : groups) {
@@ -231,7 +236,7 @@ public class WifiP2pGroupList implements Parcelable {
} }
/** Implement the Parcelable interface */ /** Implement the Parcelable interface */
public static final @android.annotation.NonNull Creator<WifiP2pGroupList> CREATOR = public static final @NonNull Creator<WifiP2pGroupList> CREATOR =
new Creator<WifiP2pGroupList>() { new Creator<WifiP2pGroupList>() {
public WifiP2pGroupList createFromParcel(Parcel in) { public WifiP2pGroupList createFromParcel(Parcel in) {
WifiP2pGroupList grpList = new WifiP2pGroupList(); WifiP2pGroupList grpList = new WifiP2pGroupList();

View File

@@ -22,6 +22,7 @@ import android.annotation.Nullable;
import android.annotation.RequiresPermission; import android.annotation.RequiresPermission;
import android.annotation.SdkConstant; import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SdkConstant.SdkConstantType;
import android.annotation.SystemApi;
import android.annotation.SystemService; import android.annotation.SystemService;
import android.annotation.UnsupportedAppUsage; import android.annotation.UnsupportedAppUsage;
import android.content.Context; import android.content.Context;
@@ -327,8 +328,9 @@ public class WifiP2pManager {
* Broadcast intent action indicating that remembered persistent groups have changed. * Broadcast intent action indicating that remembered persistent groups have changed.
* @hide * @hide
*/ */
public static final String WIFI_P2P_PERSISTENT_GROUPS_CHANGED_ACTION = @SystemApi
"android.net.wifi.p2p.PERSISTENT_GROUPS_CHANGED"; public static final String ACTION_WIFI_P2P_PERSISTENT_GROUPS_CHANGED =
"android.net.wifi.p2p.action.WIFI_P2P_PERSISTENT_GROUPS_CHANGED";
/** /**
* The lookup key for a handover message returned by the WifiP2pService. * The lookup key for a handover message returned by the WifiP2pService.
@@ -756,13 +758,18 @@ public class WifiP2pManager {
} }
/** Interface for callback invocation when stored group info list is available {@hide}*/ /**
* Interface for callback invocation when stored group info list is available
*
* @hide
*/
@SystemApi
public interface PersistentGroupInfoListener { public interface PersistentGroupInfoListener {
/** /**
* The requested stored p2p group info list is available * The requested stored p2p group info list is available
* @param groups Wi-Fi p2p group info list * @param groups Wi-Fi p2p group info list
*/ */
public void onPersistentGroupInfoAvailable(WifiP2pGroupList groups); void onPersistentGroupInfoAvailable(@NonNull WifiP2pGroupList groups);
} }
/** /**
@@ -1202,7 +1209,7 @@ public class WifiP2pManager {
c.mAsyncChannel.sendMessage(DISCOVER_PEERS, 0, c.putListener(listener)); c.mAsyncChannel.sendMessage(DISCOVER_PEERS, 0, c.putListener(listener));
} }
/** /**
* Stop an ongoing peer discovery * Stop an ongoing peer discovery
* *
* <p> The function call immediately returns after sending a stop request * <p> The function call immediately returns after sending a stop request
@@ -1347,20 +1354,36 @@ public class WifiP2pManager {
* *
* @hide * @hide
*/ */
@SystemApi
@RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
public void listen(Channel c, boolean enable, ActionListener listener) { public void listen(@NonNull Channel c, boolean enable, @Nullable ActionListener listener) {
checkChannel(c); checkChannel(c);
c.mAsyncChannel.sendMessage(enable ? START_LISTEN : STOP_LISTEN, c.mAsyncChannel.sendMessage(enable ? START_LISTEN : STOP_LISTEN,
0, c.putListener(listener)); 0, c.putListener(listener));
} }
/** @hide */ /**
@UnsupportedAppUsage * Set P2P listening and operating channel.
public void setWifiP2pChannels(Channel c, int lc, int oc, ActionListener listener) { *
* @param c is the channel created at {@link #initialize}
* @param listeningChannel the listening channel's Wifi channel number. e.g. 1, 6, 11.
* @param operatingChannel the operating channel's Wifi channel number. e.g. 1, 6, 11.
* @param listener for callbacks on success or failure. Can be null.
*
* @hide
*/
@SystemApi
@RequiresPermission(anyOf = {
android.Manifest.permission.NETWORK_SETTINGS,
android.Manifest.permission.NETWORK_STACK,
android.Manifest.permission.OVERRIDE_WIFI_CONFIG
})
public void setWifiP2pChannels(@NonNull Channel c, int listeningChannel, int operatingChannel,
@Nullable ActionListener listener) {
checkChannel(c); checkChannel(c);
Bundle p2pChannels = new Bundle(); Bundle p2pChannels = new Bundle();
p2pChannels.putInt("lc", lc); p2pChannels.putInt("lc", listeningChannel);
p2pChannels.putInt("oc", oc); p2pChannels.putInt("oc", operatingChannel);
c.mAsyncChannel.sendMessage(SET_CHANNEL, 0, c.putListener(listener), p2pChannels); c.mAsyncChannel.sendMessage(SET_CHANNEL, 0, c.putListener(listener), p2pChannels);
} }
@@ -1618,23 +1641,47 @@ public class WifiP2pManager {
/** /**
* Set p2p device name. * Set p2p device name.
* @hide *
* @param c is the channel created at {@link #initialize} * @param c is the channel created at {@link #initialize}
* @param listener for callback when group info is available. Can be null. * @param listener for callback when group info is available. Can be null.
*
* @hide
*/ */
@UnsupportedAppUsage @SystemApi
public void setDeviceName(Channel c, String devName, ActionListener listener) { @RequiresPermission(anyOf = {
android.Manifest.permission.NETWORK_SETTINGS,
android.Manifest.permission.NETWORK_STACK,
android.Manifest.permission.OVERRIDE_WIFI_CONFIG
})
public void setDeviceName(@NonNull Channel c, @NonNull String devName,
@Nullable ActionListener listener) {
checkChannel(c); checkChannel(c);
WifiP2pDevice d = new WifiP2pDevice(); WifiP2pDevice d = new WifiP2pDevice();
d.deviceName = devName; d.deviceName = devName;
c.mAsyncChannel.sendMessage(SET_DEVICE_NAME, 0, c.putListener(listener), d); c.mAsyncChannel.sendMessage(SET_DEVICE_NAME, 0, c.putListener(listener), d);
} }
/**
* Set Wifi Display information.
*
* @param c is the channel created at {@link #initialize}
* @param wfdInfo the Wifi Display information to set
* @param listener for callbacks on success or failure. Can be null.
*
* @hide
*/
@SystemApi
@RequiresPermission(android.Manifest.permission.CONFIGURE_WIFI_DISPLAY)
public void setWfdInfo(@NonNull Channel c, @NonNull WifiP2pWfdInfo wfdInfo,
@Nullable ActionListener listener) {
setWFDInfo(c, wfdInfo, listener);
}
/** @hide */ /** @hide */
@UnsupportedAppUsage @UnsupportedAppUsage
public void setWFDInfo( @RequiresPermission(android.Manifest.permission.CONFIGURE_WIFI_DISPLAY)
Channel c, WifiP2pWfdInfo wfdInfo, public void setWFDInfo(@NonNull Channel c, @NonNull WifiP2pWfdInfo wfdInfo,
ActionListener listener) { @Nullable ActionListener listener) {
checkChannel(c); checkChannel(c);
try { try {
mService.checkConfigureWifiDisplayPermission(); mService.checkConfigureWifiDisplayPermission();
@@ -1658,12 +1705,19 @@ public class WifiP2pManager {
* a network id can be obtained by {@link WifiP2pGroup#getNetworkId()}. * a network id can be obtained by {@link WifiP2pGroup#getNetworkId()}.
* *
* @param c is the channel created at {@link #initialize} * @param c is the channel created at {@link #initialize}
* @param netId he network id of the p2p group. * @param netId the network id of the p2p group.
* @param listener for callbacks on success or failure. Can be null. * @param listener for callbacks on success or failure. Can be null.
*
* @hide * @hide
*/ */
@UnsupportedAppUsage @SystemApi
public void deletePersistentGroup(Channel c, int netId, ActionListener listener) { @RequiresPermission(anyOf = {
android.Manifest.permission.NETWORK_SETTINGS,
android.Manifest.permission.NETWORK_STACK,
android.Manifest.permission.OVERRIDE_WIFI_CONFIG
})
public void deletePersistentGroup(@NonNull Channel c, int netId,
@Nullable ActionListener listener) {
checkChannel(c); checkChannel(c);
c.mAsyncChannel.sendMessage(DELETE_PERSISTENT_GROUP, netId, c.putListener(listener)); c.mAsyncChannel.sendMessage(DELETE_PERSISTENT_GROUP, netId, c.putListener(listener));
} }
@@ -1673,23 +1727,68 @@ public class WifiP2pManager {
* *
* @param c is the channel created at {@link #initialize} * @param c is the channel created at {@link #initialize}
* @param listener for callback when persistent group info list is available. Can be null. * @param listener for callback when persistent group info list is available. Can be null.
*
* @hide * @hide
*/ */
@UnsupportedAppUsage @SystemApi
public void requestPersistentGroupInfo(Channel c, PersistentGroupInfoListener listener) { @RequiresPermission(anyOf = {
android.Manifest.permission.NETWORK_SETTINGS,
android.Manifest.permission.NETWORK_STACK,
android.Manifest.permission.READ_WIFI_CREDENTIAL
})
public void requestPersistentGroupInfo(@NonNull Channel c,
@Nullable PersistentGroupInfoListener listener) {
checkChannel(c); checkChannel(c);
c.mAsyncChannel.sendMessage(REQUEST_PERSISTENT_GROUP_INFO, 0, c.putListener(listener)); c.mAsyncChannel.sendMessage(REQUEST_PERSISTENT_GROUP_INFO, 0, c.putListener(listener));
} }
/** @hide */ /** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(prefix = {"MIRACAST_"}, value = {
MIRACAST_DISABLED,
MIRACAST_SOURCE,
MIRACAST_SINK})
public @interface MiracastMode {}
/**
* Miracast is disabled.
* @hide
*/
@SystemApi
public static final int MIRACAST_DISABLED = 0; public static final int MIRACAST_DISABLED = 0;
/** @hide */ /**
* Device acts as a Miracast source.
* @hide
*/
@SystemApi
public static final int MIRACAST_SOURCE = 1; public static final int MIRACAST_SOURCE = 1;
/** @hide */ /**
* Device acts as a Miracast sink.
* @hide
*/
@SystemApi
public static final int MIRACAST_SINK = 2; public static final int MIRACAST_SINK = 2;
/** Internal use only @hide */
@UnsupportedAppUsage /**
public void setMiracastMode(int mode) { * This is used to provide information to drivers to optimize performance depending
* on the current mode of operation.
* {@link #MIRACAST_DISABLED} - disabled
* {@link #MIRACAST_SOURCE} - source operation
* {@link #MIRACAST_SINK} - sink operation
*
* As an example, the driver could reduce the channel dwell time during scanning
* when acting as a source or sink to minimize impact on Miracast.
*
* @param mode mode of operation. One of {@link #MIRACAST_DISABLED}, {@link #MIRACAST_SOURCE},
* or {@link #MIRACAST_SINK}
*
* @hide
*/
@SystemApi
@RequiresPermission(allOf = {
android.Manifest.permission.CONNECTIVITY_INTERNAL,
android.Manifest.permission.CONFIGURE_WIFI_DISPLAY})
public void setMiracastMode(@MiracastMode int mode) {
try { try {
mService.setMiracastMode(mode); mService.setMiracastMode(mode);
} catch (RemoteException e) { } catch (RemoteException e) {
@@ -1778,8 +1877,10 @@ public class WifiP2pManager {
* *
* @param c is the channel created at {@link #initialize}. * @param c is the channel created at {@link #initialize}.
* @param listener for callback on success or failure. Can be null. * @param listener for callback on success or failure. Can be null.
*
* @hide * @hide
*/ */
@SystemApi
@RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
public void factoryReset(@NonNull Channel c, @Nullable ActionListener listener) { public void factoryReset(@NonNull Channel c, @Nullable ActionListener listener) {
checkChannel(c); checkChannel(c);

View File

@@ -16,49 +16,68 @@
package android.net.wifi.p2p; package android.net.wifi.p2p;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UnsupportedAppUsage; import android.annotation.UnsupportedAppUsage;
import android.os.Build;
import android.os.Parcelable;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Locale; import java.util.Locale;
/** /**
* A class representing Wifi Display information for a device * A class representing Wifi Display information for a device.
* @hide *
* See Wifi Display technical specification v1.0.0, section 5.1.2.
*/ */
public class WifiP2pWfdInfo implements Parcelable { public final class WifiP2pWfdInfo implements Parcelable {
private static final String TAG = "WifiP2pWfdInfo";
private boolean mWfdEnabled; private boolean mWfdEnabled;
/** Device information bitmap */
private int mDeviceInfo; private int mDeviceInfo;
public static final int WFD_SOURCE = 0; /** @hide */
public static final int PRIMARY_SINK = 1; @Retention(RetentionPolicy.SOURCE)
public static final int SECONDARY_SINK = 2; @IntDef(prefix = { "DEVICE_TYPE_" }, value = {
public static final int SOURCE_OR_PRIMARY_SINK = 3; DEVICE_TYPE_WFD_SOURCE,
DEVICE_TYPE_PRIMARY_SINK,
DEVICE_TYPE_SECONDARY_SINK,
DEVICE_TYPE_SOURCE_OR_PRIMARY_SINK})
public @interface DeviceType {}
/* Device information bitmap */ /** The device is a Wifi Display Source. */
/** One of {@link #WFD_SOURCE}, {@link #PRIMARY_SINK}, {@link #SECONDARY_SINK} public static final int DEVICE_TYPE_WFD_SOURCE = 0;
* or {@link #SOURCE_OR_PRIMARY_SINK} /** The device is a primary sink. */
public static final int DEVICE_TYPE_PRIMARY_SINK = 1;
/** The device is a secondary sink. */
public static final int DEVICE_TYPE_SECONDARY_SINK = 2;
/** The device is dual-role capable i.e. either a WFD source or a primary sink. */
public static final int DEVICE_TYPE_SOURCE_OR_PRIMARY_SINK = 3;
/**
* {@link #mDeviceInfo} & {@link #DEVICE_TYPE} is one of {@link #DEVICE_TYPE_WFD_SOURCE},
* {@link #DEVICE_TYPE_PRIMARY_SINK}, {@link #DEVICE_TYPE_SECONDARY_SINK} or
* {@link #DEVICE_TYPE_SOURCE_OR_PRIMARY_SINK}.
*/ */
private static final int DEVICE_TYPE = 0x3; private static final int DEVICE_TYPE = 1 << 1 | 1 << 0;
private static final int COUPLED_SINK_SUPPORT_AT_SOURCE = 0x4; private static final int COUPLED_SINK_SUPPORT_AT_SOURCE = 1 << 2;
private static final int COUPLED_SINK_SUPPORT_AT_SINK = 0x8; private static final int COUPLED_SINK_SUPPORT_AT_SINK = 1 << 3;
private static final int SESSION_AVAILABLE = 0x30; private static final int SESSION_AVAILABLE_BIT1 = 1 << 4;
private static final int SESSION_AVAILABLE_BIT1 = 0x10; private static final int SESSION_AVAILABLE_BIT2 = 1 << 5;
private static final int SESSION_AVAILABLE_BIT2 = 0x20; private static final int SESSION_AVAILABLE =
SESSION_AVAILABLE_BIT2 | SESSION_AVAILABLE_BIT1;
private int mCtrlPort; private int mCtrlPort;
private int mMaxThroughput; private int mMaxThroughput;
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) /** Default constructor. */
public WifiP2pWfdInfo() { public WifiP2pWfdInfo() {}
}
/** @hide */
@UnsupportedAppUsage @UnsupportedAppUsage
public WifiP2pWfdInfo(int devInfo, int ctrlPort, int maxTput) { public WifiP2pWfdInfo(int devInfo, int ctrlPort, int maxTput) {
mWfdEnabled = true; mWfdEnabled = true;
@@ -67,24 +86,40 @@ public class WifiP2pWfdInfo implements Parcelable {
mMaxThroughput = maxTput; mMaxThroughput = maxTput;
} }
@UnsupportedAppUsage /** Returns true is Wifi Display is enabled, false otherwise. */
public boolean isWfdEnabled() { public boolean isWfdEnabled() {
return mWfdEnabled; return mWfdEnabled;
} }
@UnsupportedAppUsage /**
* Sets whether Wifi Display should be enabled.
*
* @param enabled true to enable Wifi Display, false to disable
*/
public void setWfdEnabled(boolean enabled) { public void setWfdEnabled(boolean enabled) {
mWfdEnabled = enabled; mWfdEnabled = enabled;
} }
@UnsupportedAppUsage /**
* Get the type of the device.
* One of {@link #DEVICE_TYPE_WFD_SOURCE}, {@link #DEVICE_TYPE_PRIMARY_SINK},
* {@link #DEVICE_TYPE_SECONDARY_SINK}, {@link #DEVICE_TYPE_SOURCE_OR_PRIMARY_SINK}
*/
@DeviceType
public int getDeviceType() { public int getDeviceType() {
return (mDeviceInfo & DEVICE_TYPE); return mDeviceInfo & DEVICE_TYPE;
} }
@UnsupportedAppUsage /**
public boolean setDeviceType(int deviceType) { * Sets the type of the device.
if (deviceType >= WFD_SOURCE && deviceType <= SOURCE_OR_PRIMARY_SINK) { *
* @param deviceType One of {@link #DEVICE_TYPE_WFD_SOURCE}, {@link #DEVICE_TYPE_PRIMARY_SINK},
* {@link #DEVICE_TYPE_SECONDARY_SINK}, {@link #DEVICE_TYPE_SOURCE_OR_PRIMARY_SINK}
* @return true if the device type was successfully set, false otherwise
*/
public boolean setDeviceType(@DeviceType int deviceType) {
if (DEVICE_TYPE_WFD_SOURCE <= deviceType
&& deviceType <= DEVICE_TYPE_SOURCE_OR_PRIMARY_SINK) {
mDeviceInfo &= ~DEVICE_TYPE; mDeviceInfo &= ~DEVICE_TYPE;
mDeviceInfo |= deviceType; mDeviceInfo |= deviceType;
return true; return true;
@@ -92,35 +127,16 @@ public class WifiP2pWfdInfo implements Parcelable {
return false; return false;
} }
public boolean isCoupledSinkSupportedAtSource() { /** Returns true if a session is available, false otherwise. */
return (mDeviceInfo & COUPLED_SINK_SUPPORT_AT_SINK) != 0;
}
public void setCoupledSinkSupportAtSource(boolean enabled) {
if (enabled ) {
mDeviceInfo |= COUPLED_SINK_SUPPORT_AT_SINK;
} else {
mDeviceInfo &= ~COUPLED_SINK_SUPPORT_AT_SINK;
}
}
public boolean isCoupledSinkSupportedAtSink() {
return (mDeviceInfo & COUPLED_SINK_SUPPORT_AT_SINK) != 0;
}
public void setCoupledSinkSupportAtSink(boolean enabled) {
if (enabled ) {
mDeviceInfo |= COUPLED_SINK_SUPPORT_AT_SINK;
} else {
mDeviceInfo &= ~COUPLED_SINK_SUPPORT_AT_SINK;
}
}
public boolean isSessionAvailable() { public boolean isSessionAvailable() {
return (mDeviceInfo & SESSION_AVAILABLE) != 0; return (mDeviceInfo & SESSION_AVAILABLE) != 0;
} }
@UnsupportedAppUsage /**
* Sets whether a session is available.
*
* @param enabled true to indicate that a session is available, false otherwise.
*/
public void setSessionAvailable(boolean enabled) { public void setSessionAvailable(boolean enabled) {
if (enabled) { if (enabled) {
mDeviceInfo |= SESSION_AVAILABLE_BIT1; mDeviceInfo |= SESSION_AVAILABLE_BIT1;
@@ -130,29 +146,33 @@ public class WifiP2pWfdInfo implements Parcelable {
} }
} }
/** Returns the TCP port at which the WFD Device listens for RTSP messages. */
public int getControlPort() { public int getControlPort() {
return mCtrlPort; return mCtrlPort;
} }
@UnsupportedAppUsage /** Sets the TCP port at which the WFD Device listens for RTSP messages. */
public void setControlPort(int port) { public void setControlPort(int port) {
mCtrlPort = port; mCtrlPort = port;
} }
@UnsupportedAppUsage /** Sets the maximum average throughput capability of the WFD Device, in megabits/second. */
public void setMaxThroughput(int maxThroughput) { public void setMaxThroughput(int maxThroughput) {
mMaxThroughput = maxThroughput; mMaxThroughput = maxThroughput;
} }
/** Returns the maximum average throughput capability of the WFD Device, in megabits/second. */
public int getMaxThroughput() { public int getMaxThroughput() {
return mMaxThroughput; return mMaxThroughput;
} }
/** @hide */
public String getDeviceInfoHex() { public String getDeviceInfoHex() {
return String.format( return String.format(
Locale.US, "%04x%04x%04x", mDeviceInfo, mCtrlPort, mMaxThroughput); Locale.US, "%04x%04x%04x", mDeviceInfo, mCtrlPort, mMaxThroughput);
} }
@Override
public String toString() { public String toString() {
StringBuffer sbuf = new StringBuffer(); StringBuffer sbuf = new StringBuffer();
sbuf.append("WFD enabled: ").append(mWfdEnabled); sbuf.append("WFD enabled: ").append(mWfdEnabled);
@@ -167,9 +187,8 @@ public class WifiP2pWfdInfo implements Parcelable {
return 0; return 0;
} }
/** copy constructor */ /** Copy constructor. */
@UnsupportedAppUsage public WifiP2pWfdInfo(@Nullable WifiP2pWfdInfo source) {
public WifiP2pWfdInfo(WifiP2pWfdInfo source) {
if (source != null) { if (source != null) {
mWfdEnabled = source.mWfdEnabled; mWfdEnabled = source.mWfdEnabled;
mDeviceInfo = source.mDeviceInfo; mDeviceInfo = source.mDeviceInfo;
@@ -179,14 +198,15 @@ public class WifiP2pWfdInfo implements Parcelable {
} }
/** Implement the Parcelable interface */ /** Implement the Parcelable interface */
public void writeToParcel(Parcel dest, int flags) { @Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeInt(mWfdEnabled ? 1 : 0); dest.writeInt(mWfdEnabled ? 1 : 0);
dest.writeInt(mDeviceInfo); dest.writeInt(mDeviceInfo);
dest.writeInt(mCtrlPort); dest.writeInt(mCtrlPort);
dest.writeInt(mMaxThroughput); dest.writeInt(mMaxThroughput);
} }
public void readFromParcel(Parcel in) { private void readFromParcel(Parcel in) {
mWfdEnabled = (in.readInt() == 1); mWfdEnabled = (in.readInt() == 1);
mDeviceInfo = in.readInt(); mDeviceInfo = in.readInt();
mCtrlPort = in.readInt(); mCtrlPort = in.readInt();
@@ -194,8 +214,7 @@ public class WifiP2pWfdInfo implements Parcelable {
} }
/** Implement the Parcelable interface */ /** Implement the Parcelable interface */
@UnsupportedAppUsage public static final @NonNull Creator<WifiP2pWfdInfo> CREATOR =
public static final @android.annotation.NonNull Creator<WifiP2pWfdInfo> CREATOR =
new Creator<WifiP2pWfdInfo>() { new Creator<WifiP2pWfdInfo>() {
public WifiP2pWfdInfo createFromParcel(Parcel in) { public WifiP2pWfdInfo createFromParcel(Parcel in) {
WifiP2pWfdInfo device = new WifiP2pWfdInfo(); WifiP2pWfdInfo device = new WifiP2pWfdInfo();

View File

@@ -43,7 +43,7 @@ public class WifiP2pWfdInfoTest {
@Before @Before
public void setUp() { public void setUp() {
// initialize device info flags. // initialize device info flags.
mSourceInfo.setDeviceType(WifiP2pWfdInfo.WFD_SOURCE); mSourceInfo.setDeviceType(WifiP2pWfdInfo.DEVICE_TYPE_WFD_SOURCE);
mSourceInfo.setSessionAvailable(true); mSourceInfo.setSessionAvailable(true);
} }
@@ -57,14 +57,8 @@ public class WifiP2pWfdInfoTest {
info.setWfdEnabled(true); info.setWfdEnabled(true);
assertTrue(info.isWfdEnabled()); assertTrue(info.isWfdEnabled());
info.setDeviceType(WifiP2pWfdInfo.WFD_SOURCE); info.setDeviceType(WifiP2pWfdInfo.DEVICE_TYPE_WFD_SOURCE);
assertEquals(WifiP2pWfdInfo.WFD_SOURCE, info.getDeviceType()); assertEquals(WifiP2pWfdInfo.DEVICE_TYPE_WFD_SOURCE, info.getDeviceType());
info.setCoupledSinkSupportAtSource(true);
assertTrue(info.isCoupledSinkSupportedAtSource());
info.setCoupledSinkSupportAtSink(true);
assertTrue(info.isCoupledSinkSupportedAtSink());
info.setSessionAvailable(true); info.setSessionAvailable(true);
assertTrue(info.isSessionAvailable()); assertTrue(info.isSessionAvailable());
@@ -75,7 +69,7 @@ public class WifiP2pWfdInfoTest {
info.setMaxThroughput(TEST_MAX_TPUT); info.setMaxThroughput(TEST_MAX_TPUT);
assertEquals(TEST_MAX_TPUT, info.getMaxThroughput()); assertEquals(TEST_MAX_TPUT, info.getMaxThroughput());
assertEquals("0018270f0400", info.getDeviceInfoHex()); assertEquals("0010270f0400", info.getDeviceInfoHex());
} }
/** /**