Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e5455e17 authored by Etan Cohen's avatar Etan Cohen Committed by Android (Google) Code Review
Browse files

Merge changes from topic "wificond"

* changes:
  [WIFICOND][API] Replace capability BitSet by an int
  [WIFICOND][API] Update documentation
  [WIFICOND][API] Simplify initialization sequence
  [WIFICOND][API] Documentation clarification for AP callback registration
  [WIFICOND][API] Clarify time usage
parents a2f5cbeb e8d73bb3
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -8198,7 +8198,7 @@ package android.net.wifi.wificond {
    ctor public NativeScanResult();
    method public int describeContents();
    method @NonNull public byte[] getBssid();
    method @NonNull public java.util.BitSet getCapabilities();
    method @NonNull public int getCapabilities();
    method public int getFrequencyMhz();
    method @NonNull public byte[] getInformationElements();
    method @NonNull public java.util.List<android.net.wifi.wificond.RadioChainInfo> getRadioChainInfos();
@@ -8234,12 +8234,12 @@ package android.net.wifi.wificond {
  public final class PnoSettings implements android.os.Parcelable {
    ctor public PnoSettings();
    method public int describeContents();
    method public int getIntervalMillis();
    method public long getIntervalMillis();
    method public int getMin2gRssiDbm();
    method public int getMin5gRssiDbm();
    method public int getMin6gRssiDbm();
    method @NonNull public java.util.List<android.net.wifi.wificond.PnoNetwork> getPnoNetworks();
    method public void setIntervalMillis(int);
    method public void setIntervalMillis(long);
    method public void setMin2gRssiDbm(int);
    method public void setMin5gRssiDbm(int);
    method public void setMin6gRssiDbm(int);
@@ -8264,10 +8264,10 @@ package android.net.wifi.wificond {
    method @Nullable public android.net.wifi.wificond.DeviceWiphyCapabilities getDeviceWiphyCapabilities(@NonNull String);
    method @NonNull public java.util.List<android.net.wifi.wificond.NativeScanResult> getScanResults(@NonNull String, int);
    method @Nullable public android.net.wifi.wificond.WifiCondManager.TxPacketCounters getTxPacketCounters(@NonNull String);
    method public boolean initialize(@NonNull Runnable);
    method @Nullable public static android.net.wifi.wificond.WifiCondManager.OemSecurityType parseOemSecurityTypeElement(int, int, @NonNull byte[]);
    method public boolean registerApCallback(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.wificond.WifiCondManager.SoftApCallback);
    method public void sendMgmtFrame(@NonNull String, @NonNull byte[], int, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.wificond.WifiCondManager.SendMgmtFrameCallback);
    method public void setOnServiceDeadCallback(@NonNull Runnable);
    method public boolean setupInterfaceForClientMode(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.wificond.WifiCondManager.ScanEventCallback, @NonNull android.net.wifi.wificond.WifiCondManager.ScanEventCallback);
    method public boolean setupInterfaceForSoftApMode(@NonNull String);
    method @Nullable public android.net.wifi.wificond.WifiCondManager.SignalPollResult signalPoll(@NonNull String);
+0 −4
Original line number Diff line number Diff line
@@ -64,10 +64,6 @@ GenericException: android.service.autofill.augmented.FillWindow#finalize():
    


HeavyBitSet: android.net.wifi.wificond.NativeScanResult#getCapabilities():
    


IntentBuilderName: android.content.Context#registerReceiverForAllUsers(android.content.BroadcastReceiver, android.content.IntentFilter, String, android.os.Handler):
    Methods creating an Intent should be named `create<Foo>Intent()`, was `registerReceiverForAllUsers`

+6 −21
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import android.os.Parcelable;
import com.android.internal.annotations.VisibleForTesting;

import java.util.ArrayList;
import java.util.BitSet;
import java.util.List;

/**
@@ -34,8 +33,6 @@ import java.util.List;
 */
@SystemApi
public final class NativeScanResult implements Parcelable {
    private static final int CAPABILITY_SIZE = 16;

    /** @hide */
    @VisibleForTesting
    public byte[] ssid;
@@ -56,7 +53,7 @@ public final class NativeScanResult implements Parcelable {
    public long tsf;
    /** @hide */
    @VisibleForTesting
    public BitSet capability;
    public int capability;
    /** @hide */
    @VisibleForTesting
    public boolean associated;
@@ -134,7 +131,7 @@ public final class NativeScanResult implements Parcelable {
     *  Returns the capabilities of the AP repseresented by this scan result as advertised in the
     *  received probe response or beacon.
     *
     *  This is a bit mask describing the capabilities of a BSS. See IEEE Std 802.11: 8.4.1.4:
     *  This is a bit mask describing the capabilities of a BSS. See IEEE Std 802.11: 9.4.1.4:
     *    Bit 0 - ESS
     *    Bit 1 - IBSS
     *    Bit 2 - CF Pollable
@@ -143,7 +140,7 @@ public final class NativeScanResult implements Parcelable {
     *    Bit 5 - Short Preamble
     *    Bit 6 - PBCC
     *    Bit 7 - Channel Agility
     *    Bit 8 - Spectrum Mgmt
     *    Bit 8 - Spectrum Management
     *    Bit 9 - QoS
     *    Bit 10 - Short Slot Time
     *    Bit 11 - APSD
@@ -154,7 +151,7 @@ public final class NativeScanResult implements Parcelable {
     *
     * @return a bit mask of capabilities.
     */
    @NonNull public BitSet getCapabilities() {
    @NonNull public int getCapabilities() {
        return capability;
    }

@@ -188,13 +185,7 @@ public final class NativeScanResult implements Parcelable {
        out.writeInt(frequency);
        out.writeInt(signalMbm);
        out.writeLong(tsf);
        int capabilityInt = 0;
        for (int i = 0; i < CAPABILITY_SIZE; i++) {
            if (capability.get(i)) {
                capabilityInt |= 1 << i;
            }
        }
        out.writeInt(capabilityInt);
        out.writeInt(capability);
        out.writeInt(associated ? 1 : 0);
        out.writeTypedList(radioChainInfos);
    }
@@ -220,13 +211,7 @@ public final class NativeScanResult implements Parcelable {
            result.frequency = in.readInt();
            result.signalMbm = in.readInt();
            result.tsf = in.readLong();
            int capabilityInt = in.readInt();
            result.capability = new BitSet(CAPABILITY_SIZE);
            for (int i = 0; i < CAPABILITY_SIZE; i++) {
                if ((capabilityInt & (1 << i)) != 0) {
                    result.capability.set(i);
                }
            }
            result.capability = in.readInt();
            result.associated = (in.readInt() != 0);
            result.radioChainInfos = new ArrayList<>();
            in.readTypedList(result.radioChainInfos, RadioChainInfo.CREATOR);
+8 −7
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.net.wifi.wificond;

import android.annotation.DurationMillisLong;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
@@ -33,7 +34,7 @@ import java.util.Objects;
 */
@SystemApi
public final class PnoSettings implements Parcelable {
    private int mIntervalMs;
    private long mIntervalMs;
    private int mMin2gRssi;
    private int mMin5gRssi;
    private int mMin6gRssi;
@@ -47,17 +48,17 @@ public final class PnoSettings implements Parcelable {
     *
     * @return An interval in milliseconds.
     */
    public int getIntervalMillis() {
    public @DurationMillisLong long getIntervalMillis() {
        return mIntervalMs;
    }

    /**
     * Set the requested PNO scan interval in milliseconds.
     *
     * @param intervalMs An interval in milliseconds.
     * @param intervalMillis An interval in milliseconds.
     */
    public void setIntervalMillis(int intervalMs) {
        this.mIntervalMs = intervalMs;
    public void setIntervalMillis(@DurationMillisLong long intervalMillis) {
        this.mIntervalMs = intervalMillis;
    }

    /**
@@ -176,7 +177,7 @@ public final class PnoSettings implements Parcelable {
     **/
    @Override
    public void writeToParcel(@NonNull Parcel out, int flags) {
        out.writeInt(mIntervalMs);
        out.writeLong(mIntervalMs);
        out.writeInt(mMin2gRssi);
        out.writeInt(mMin5gRssi);
        out.writeInt(mMin6gRssi);
@@ -189,7 +190,7 @@ public final class PnoSettings implements Parcelable {
        @Override
        public PnoSettings createFromParcel(Parcel in) {
            PnoSettings result = new PnoSettings();
            result.mIntervalMs = in.readInt();
            result.mIntervalMs = in.readLong();
            result.mMin2gRssi = in.readInt();
            result.mMin5gRssi = in.readInt();
            result.mMin6gRssi = in.readInt();
+76 −27
Original line number Diff line number Diff line
@@ -496,22 +496,17 @@ public class WifiCondManager {
    }

    /**
     * Initializes WifiCondManager & registers a death notification for the WifiCondManager which
     * acts as a proxy for the wificond daemon (i.e. the death listener will be called when and if
     * the wificond daemon dies).
     *
     * Note: This method clears any existing state in wificond daemon.
     * Register a death notification for the WifiCondManager which acts as a proxy for the
     * wificond daemon (i.e. the death listener will be called when and if the wificond daemon
     * dies).
     *
     * @param deathEventHandler A {@link Runnable} to be called whenever the wificond daemon dies.
     * @return Returns true on success.
     */
    public boolean initialize(@NonNull Runnable deathEventHandler) {
    public void setOnServiceDeadCallback(@NonNull Runnable deathEventHandler) {
        if (mDeathEventHandler != null) {
            Log.e(TAG, "Death handler already present");
        }
        mDeathEventHandler = deathEventHandler;
        tearDownInterfaces();
        return true;
    }

    /**
@@ -603,11 +598,12 @@ public class WifiCondManager {
    }

    /**
     * Tear down a specific client (STA) interface, initially configured using
     * Tear down a specific client (STA) interface configured using
     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}.
     *
     * @param ifaceName Name of the interface to tear down.
     * @return Returns true on success.
     * @return Returns true on success, false on failure (e.g. when called before an interface was
     * set up).
     */
    public boolean tearDownClientInterface(@NonNull String ifaceName) {
        if (getClientInterface(ifaceName) == null) {
@@ -681,11 +677,12 @@ public class WifiCondManager {
    }

    /**
     * Tear down a Soft AP interface initially configured using
     * Tear down a Soft AP interface configured using
     * {@link #setupInterfaceForSoftApMode(String)}.
     *
     * @param ifaceName Name of the interface to tear down.
     * @return Returns true on success.
     * @return Returns true on success, false on failure (e.g. when called before an interface was
     * set up).
     */
    public boolean tearDownSoftApInterface(@NonNull String ifaceName) {
        if (getApInterface(ifaceName) == null) {
@@ -750,9 +747,13 @@ public class WifiCondManager {
    /**
     * Request signal polling.
     *
     * @param ifaceName Name of the interface on which to poll.
     * @param ifaceName Name of the interface on which to poll. The interface must have been
     *                  already set up using
     *{@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
     *                  or {@link #setupInterfaceForSoftApMode(String)}.
     *
     * @return A {@link SignalPollResult} object containing interface statistics, or a null on
     * error.
     * error (e.g. the interface hasn't been set up yet).
     */
    @Nullable public SignalPollResult signalPoll(@NonNull String ifaceName) {
        IClientInterface iface = getClientInterface(ifaceName);
@@ -776,10 +777,14 @@ public class WifiCondManager {
    }

    /**
     * Get current transmit (Tx) packet counters of the specified interface.
     * Get current transmit (Tx) packet counters of the specified interface. The interface must
     * have been already set up using
     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
     * or {@link #setupInterfaceForSoftApMode(String)}.
     *
     * @param ifaceName Name of the interface.
     * @return {@link TxPacketCounters} of the current interface or null on error.
     * @return {@link TxPacketCounters} of the current interface or null on error (e.g. when
     * called before the interface has been set up).
     */
    @Nullable public TxPacketCounters getTxPacketCounters(@NonNull String ifaceName) {
        IClientInterface iface = getClientInterface(ifaceName);
@@ -813,10 +818,15 @@ public class WifiCondManager {
     * be done using {@link #startScan(String, int, Set, List)} or
     * {@link #startPnoScan(String, PnoSettings, Executor, PnoScanRequestCallback)}.
     *
     * Note: The interface must have been already set up using
     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
     * or {@link #setupInterfaceForSoftApMode(String)}.
     *
     * @param ifaceName Name of the interface.
     * @param scanType The type of scan result to be returned, can be
     * {@link #SCAN_TYPE_SINGLE_SCAN} or {@link #SCAN_TYPE_PNO_SCAN}.
     * @return Returns an array of {@link NativeScanResult} or an empty array on failure.
     * @return Returns an array of {@link NativeScanResult} or an empty array on failure (e.g. when
     * called before the interface has been set up).
     */
    @NonNull public List<NativeScanResult> getScanResults(@NonNull String ifaceName,
            @ScanResultType int scanType) {
@@ -869,13 +879,19 @@ public class WifiCondManager {
     * The latest scans can be obtained using {@link #getScanResults(String, int)} and using a
     * {@link #SCAN_TYPE_SINGLE_SCAN} for the {@code scanType}.
     *
     * Note: The interface must have been already set up using
     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
     * or {@link #setupInterfaceForSoftApMode(String)}.
     *
     * @param ifaceName Name of the interface on which to initiate the scan.
     * @param scanType Type of scan to perform, can be any of
     * {@link WifiScanner#SCAN_TYPE_HIGH_ACCURACY}, {@link WifiScanner#SCAN_TYPE_LOW_POWER}, or
     * {@link WifiScanner#SCAN_TYPE_LOW_LATENCY}.
     * @param freqs list of frequencies to scan for, if null scan all supported channels.
     * @param hiddenNetworkSSIDs List of hidden networks to be scanned for.
     * @return Returns true on success.
     * @param hiddenNetworkSSIDs List of hidden networks to be scanned for, a null indicates that
     *                           no hidden frequencies will be scanned for.
     * @return Returns true on success, false on failure (e.g. when called before the interface
     * has been set up).
     */
    public boolean startScan(@NonNull String ifaceName, @WifiAnnotations.ScanType int scanType,
            @Nullable Set<Integer> freqs, @Nullable List<byte[]> hiddenNetworkSSIDs) {
@@ -931,11 +947,16 @@ public class WifiCondManager {
     * The latest PNO scans can be obtained using {@link #getScanResults(String, int)} with the
     * {@code scanType} set to {@link #SCAN_TYPE_PNO_SCAN}.
     *
     * Note: The interface must have been already set up using
     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
     * or {@link #setupInterfaceForSoftApMode(String)}.
     *
     * @param ifaceName Name of the interface on which to request a PNO.
     * @param pnoSettings PNO scan configuration.
     * @param executor The Executor on which to execute the callback.
     * @param callback Callback for the results of the offload request.
     * @return true on success.
     * @return true on success, false on failure (e.g. when called before the interface has been set
     * up).
     */
    public boolean startPnoScan(@NonNull String ifaceName, @NonNull PnoSettings pnoSettings,
            @NonNull @CallbackExecutor Executor executor,
@@ -969,8 +990,13 @@ public class WifiCondManager {
     * Stop PNO scan configured with
     * {@link #startPnoScan(String, PnoSettings, Executor, PnoScanRequestCallback)}.
     *
     * Note: The interface must have been already set up using
     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
     * or {@link #setupInterfaceForSoftApMode(String)}.
     *
     * @param ifaceName Name of the interface on which the PNO scan was configured.
     * @return true on success.
     * @return true on success, false on failure (e.g. when called before the interface has been
     * set up).
     */
    public boolean stopPnoScan(@NonNull String ifaceName) {
        IWifiScannerImpl scannerImpl = getScannerImpl(ifaceName);
@@ -987,7 +1013,13 @@ public class WifiCondManager {
    }

    /**
     * Abort ongoing single scan started with {@link #startScan(String, int, Set, List)}.
     * Abort ongoing single scan started with {@link #startScan(String, int, Set, List)}. No failure
     * callback, e.g. {@link ScanEventCallback#onScanFailed()}, is triggered by this operation.
     *
     * Note: The interface must have been already set up using
     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
     * or {@link #setupInterfaceForSoftApMode(String)}. If the interface has not been set up then
     * this method has no impact.
     *
     * @param ifaceName Name of the interface on which the scan was started.
     */
@@ -1055,7 +1087,14 @@ public class WifiCondManager {
    }

    /**
     * Get the device phy capabilities for a given interface
     * Get the device phy capabilities for a given interface.
     *
     * Note: The interface must have been already set up using
     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
     * or {@link #setupInterfaceForSoftApMode(String)}.
     *
     * @return DeviceWiphyCapabilities or null on error (e.g. when called on an interface which has
     * not been set up).
     */
    @Nullable public DeviceWiphyCapabilities getDeviceWiphyCapabilities(@NonNull String ifaceName) {
        if (mWificond == null) {
@@ -1071,13 +1110,19 @@ public class WifiCondManager {
    }

    /**
     * Register the provided callback handler for SoftAp events. Note that the Soft AP itself is
     * configured using {@link #setupInterfaceForSoftApMode(String)}.
     * Register the provided callback handler for SoftAp events. The interface must first be created
     * using {@link #setupInterfaceForSoftApMode(String)}. The callback registration is valid until
     * the interface is deleted using {@link #tearDownSoftApInterface(String)} (no deregistration
     * method is provided).
     * <p>
     * Note that only one callback can be registered at a time - any registration overrides previous
     * registrations.
     *
     * @param ifaceName Name of the interface on which to register the callback.
     * @param executor The Executor on which to execute the callbacks.
     * @param callback Callback for AP events.
     * @return true on success, false otherwise.
     * @return true on success, false on failure (e.g. when called on an interface which has not
     * been set up).
     */
    public boolean registerApCallback(@NonNull String ifaceName,
            @NonNull @CallbackExecutor Executor executor,
@@ -1113,6 +1158,10 @@ public class WifiCondManager {
     * Send a management frame on the specified interface at the specified rate. Useful for probing
     * the link with arbitrary frames.
     *
     * Note: The interface must have been already set up using
     * {@link #setupInterfaceForClientMode(String, Executor, ScanEventCallback, ScanEventCallback)}
     * or {@link #setupInterfaceForSoftApMode(String)}.
     *
     * @param ifaceName The interface on which to send the frame.
     * @param frame The raw byte array of the management frame to tramit.
     * @param mcs The MCS (modulation and coding scheme), i.e. rate, at which to transmit the
Loading