diff --git a/api/current.txt b/api/current.txt index 9ff7cc255bf4b..7611a81aa6d78 100644 --- a/api/current.txt +++ b/api/current.txt @@ -31862,6 +31862,15 @@ package android.net.wifi.aware { method public void onAttached(android.net.wifi.aware.WifiAwareSession); } + public final class AwareResources implements android.os.Parcelable { + method public int describeContents(); + method public int getNumOfAvailableDataPaths(); + method public int getNumOfAvailablePublishSessions(); + method public int getNumOfAvailableSubscribeSessions(); + method public void writeToParcel(@NonNull android.os.Parcel, int); + field @NonNull public static final android.os.Parcelable.Creator CREATOR; + } + public final class Characteristics implements android.os.Parcelable { method public int describeContents(); method public int getMaxMatchFilterLength(); @@ -31964,7 +31973,8 @@ package android.net.wifi.aware { public class WifiAwareManager { method public void attach(@NonNull android.net.wifi.aware.AttachCallback, @Nullable android.os.Handler); method public void attach(@NonNull android.net.wifi.aware.AttachCallback, @NonNull android.net.wifi.aware.IdentityChangedListener, @Nullable android.os.Handler); - method public android.net.wifi.aware.Characteristics getCharacteristics(); + method @Nullable public android.net.wifi.aware.AwareResources getAvailableAwareResources(); + method @Nullable public android.net.wifi.aware.Characteristics getCharacteristics(); method public boolean isAvailable(); method public boolean isDeviceAttached(); method public boolean isInstantCommunicationModeEnabled(); diff --git a/wifi/aidl-export/android/net/wifi/aware/AwareResources.aidl b/wifi/aidl-export/android/net/wifi/aware/AwareResources.aidl new file mode 100644 index 0000000000000..d0bd2dda57220 --- /dev/null +++ b/wifi/aidl-export/android/net/wifi/aware/AwareResources.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.wifi.aware; + +parcelable AwareResources; \ No newline at end of file diff --git a/wifi/api/current.txt b/wifi/api/current.txt index 0bc1ff22b7042..d5ef703253cba 100644 --- a/wifi/api/current.txt +++ b/wifi/api/current.txt @@ -561,6 +561,15 @@ package android.net.wifi.aware { method public void onAttached(android.net.wifi.aware.WifiAwareSession); } + public final class AwareResources implements android.os.Parcelable { + method public int describeContents(); + method public int getNumOfAvailableDataPaths(); + method public int getNumOfAvailablePublishSessions(); + method public int getNumOfAvailableSubscribeSessions(); + method public void writeToParcel(@NonNull android.os.Parcel, int); + field @NonNull public static final android.os.Parcelable.Creator CREATOR; + } + public final class Characteristics implements android.os.Parcelable { method public int describeContents(); method public int getMaxMatchFilterLength(); @@ -663,7 +672,8 @@ package android.net.wifi.aware { public class WifiAwareManager { method public void attach(@NonNull android.net.wifi.aware.AttachCallback, @Nullable android.os.Handler); method public void attach(@NonNull android.net.wifi.aware.AttachCallback, @NonNull android.net.wifi.aware.IdentityChangedListener, @Nullable android.os.Handler); - method public android.net.wifi.aware.Characteristics getCharacteristics(); + method @Nullable public android.net.wifi.aware.AwareResources getAvailableAwareResources(); + method @Nullable public android.net.wifi.aware.Characteristics getCharacteristics(); method public boolean isAvailable(); method public boolean isDeviceAttached(); method public boolean isInstantCommunicationModeEnabled(); diff --git a/wifi/java/android/net/wifi/aware/AwareResources.java b/wifi/java/android/net/wifi/aware/AwareResources.java new file mode 100644 index 0000000000000..cee1f40c05cd6 --- /dev/null +++ b/wifi/java/android/net/wifi/aware/AwareResources.java @@ -0,0 +1,146 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.wifi.aware; + +import android.annotation.NonNull; +import android.os.Handler; +import android.os.Parcel; +import android.os.Parcelable; + +/** + * The resources of the Aware service. + */ +public final class AwareResources implements Parcelable { + /** + * Number of the NDPs are available. + */ + private int mNumOfAvailableNdps; + + /** + * Number of the publish sessions are available. + */ + private int mNumOfAvailablePublishSessions; + + /** + * Number of the subscribe sessions are available. + */ + private int mNumOfAvailableSubscribeSessions; + + /** + * @hide : should not be created by apps + */ + public AwareResources() { + } + + /** + * Return the number of Aware data-paths (also known as NDPs - NAN Data Paths) which an app + * could create. Please refer to the {@link WifiAwareNetworkSpecifier} to create + * a Network Specifier and request a data-path. + *

+ * Note that these resources aren't reserved - other apps could use them by the time you + * attempt to create a data-path. + *

+ * @return A Non-negative integer, number of data-paths that could be created. + */ + public int getNumOfAvailableDataPaths() { + return mNumOfAvailableNdps; + } + + /** + * Return the number of Aware publish sessions which an app could create. Please refer to the + * {@link WifiAwareSession#publish(PublishConfig, DiscoverySessionCallback, Handler)} + * to create a publish session. + *

+ * Note that these resources aren't reserved - other apps could use them by the time you + * attempt to create a publish session. + *

+ * @return A Non-negative integer, number of publish sessions that could be created. + */ + public int getNumOfAvailablePublishSessions() { + return mNumOfAvailablePublishSessions; + } + + /** + * Return the number of Aware subscribe sessions which an app could create. Please refer to the + * {@link WifiAwareSession#subscribe(SubscribeConfig, DiscoverySessionCallback, Handler)} + * to create a publish session. + *

+ * Note that these resources aren't reserved - other apps could use them by the time you + * attempt to create a subscribe session. + *

+ * @return A Non-negative integer, number of subscribe sessions that could be created. + */ + public int getNumOfAvailableSubscribeSessions() { + return mNumOfAvailableSubscribeSessions; + } + + /** + * Set the number of the available NDPs. + * @hide + * @param numOfAvailableNdps Number of available NDPs. + */ + public void setNumOfAvailableDataPaths(int numOfAvailableNdps) { + mNumOfAvailableNdps = numOfAvailableNdps; + } + + /** + * Set the number of the available publish sessions. + * @hide + * @param numOfAvailablePublishSessions Number of available publish sessions. + */ + public void setNumOfAvailablePublishSessions(int numOfAvailablePublishSessions) { + mNumOfAvailablePublishSessions = numOfAvailablePublishSessions; + } + + /** + * Set the number of the available subscribe sessions. + * @hide + * @param numOfAvailableSubscribeSessions Number of available subscribe sessions. + */ + public void setNumOfAvailableSubscribeSessions(int numOfAvailableSubscribeSessions) { + mNumOfAvailableSubscribeSessions = numOfAvailableSubscribeSessions; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + dest.writeInt(mNumOfAvailableNdps); + dest.writeInt(mNumOfAvailablePublishSessions); + dest.writeInt(mNumOfAvailableSubscribeSessions); + } + + public static final @android.annotation.NonNull Creator CREATOR = + new Creator() { + @Override + public AwareResources createFromParcel(Parcel in) { + AwareResources awareResources = new AwareResources(); + awareResources.setNumOfAvailableDataPaths(in.readInt()); + awareResources.setNumOfAvailablePublishSessions(in.readInt()); + awareResources.setNumOfAvailableSubscribeSessions(in.readInt()); + return awareResources; + } + + @Override + public AwareResources[] newArray(int size) { + return new AwareResources[size]; + } + }; +} diff --git a/wifi/java/android/net/wifi/aware/IWifiAwareManager.aidl b/wifi/java/android/net/wifi/aware/IWifiAwareManager.aidl index cd2ca692137df..c90c4d8a27b2c 100644 --- a/wifi/java/android/net/wifi/aware/IWifiAwareManager.aidl +++ b/wifi/java/android/net/wifi/aware/IWifiAwareManager.aidl @@ -25,6 +25,7 @@ import android.net.wifi.aware.IWifiAwareMacAddressProvider; import android.net.wifi.aware.PublishConfig; import android.net.wifi.aware.SubscribeConfig; import android.net.wifi.aware.Characteristics; +import android.net.wifi.aware.AwareResources; /** * Interface that WifiAwareService implements @@ -36,6 +37,7 @@ interface IWifiAwareManager // Aware API boolean isUsageEnabled(); Characteristics getCharacteristics(); + AwareResources getAvailableAwareResources(); boolean isDeviceAttached(); void enableInstantCommunicationMode(in String callingPackage, boolean enable); boolean isInstantCommunicationModeEnabled(); diff --git a/wifi/java/android/net/wifi/aware/WifiAwareManager.java b/wifi/java/android/net/wifi/aware/WifiAwareManager.java index 67c60322e47a2..e19b095b27eb8 100644 --- a/wifi/java/android/net/wifi/aware/WifiAwareManager.java +++ b/wifi/java/android/net/wifi/aware/WifiAwareManager.java @@ -263,7 +263,7 @@ public class WifiAwareManager { * * @return An object specifying configuration limitations of Aware. */ - public Characteristics getCharacteristics() { + public @Nullable Characteristics getCharacteristics() { try { return mService.getCharacteristics(); } catch (RemoteException e) { @@ -271,6 +271,23 @@ public class WifiAwareManager { } } + /** + * Return the available resources of the Wi-Fi aware service: a set of parameters which specify + * limitations on service usage, e.g the number of data-paths which could be created.. + * + * @return An object specifying the currently available resource of the Wi-Fi Aware service. + */ + public @Nullable AwareResources getAvailableAwareResources() { + if (!SdkLevel.isAtLeastS()) { + throw new UnsupportedOperationException(); + } + try { + return mService.getAvailableAwareResources(); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + /** * Attach to the Wi-Fi Aware service - enabling the application to create discovery sessions or * create connections to peers. The device will attach to an existing cluster if it can find diff --git a/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java b/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java index d0d0c57008fca..1ecd32555bfe3 100644 --- a/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java +++ b/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java @@ -155,6 +155,7 @@ public class WifiAwareManagerTest { */ @Test public void testIsAttached() throws Exception { + assumeTrue(SdkLevel.isAtLeastS()); mDut.isDeviceAttached(); verify(mockAwareService).isDeviceAttached(); } @@ -172,6 +173,16 @@ public class WifiAwareManagerTest { verify(mockAwareService).enableInstantCommunicationMode(anyString(), eq(true)); } + /** + * Validate pass-through of getAvailableAwareResources() API. + */ + @Test + public void testGetAvailableAwareResource() throws Exception { + assumeTrue(SdkLevel.isAtLeastS()); + mDut.getAvailableAwareResources(); + verify(mockAwareService).getAvailableAwareResources(); + } + /* * WifiAwareEventCallbackProxy Tests */