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

Commit c7c962f3 authored by Patrik Fimml's avatar Patrik Fimml
Browse files

Configurable SoftAP: Add System API.

This adds a facility for system apps (with NETWORK_SETUP_WIZARD
or NETWORK_SETTINGS permission) to have more control over hotspot
parameters, while allowing them to use local-only mode and the LOHS
callback API for status updates.

Linters give conflicting advice about parameter ordering. With
startLocalOnlyHotspot(config, executor, callback), we satisfy
    (+) put callback last (enforced at compile time)
    (+) use Executor instead of Handler
    (+) put most meaningful argument first
while we're not satisfying
    (-) put executor last as it is a SAM (doesn't seem to make much
    sense to instantiate executor as SAM anyway, users are more likely
    to get an instance from elsewhere)
    (-) for overloads, add new arguments at the end.

Bug: 132705022
Test: atest SoftApConfigurationTest android.net.wifi.WifiManagerTest
Test: atest android.net.wifi.cts.WifiManagerTest (not tested due to
failures on emulator b/143120756)
Change-Id: Ia189b3664b47a253e160acb71eafab4f217649eb
parent 8f499377
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -30036,7 +30036,7 @@ package android.net.wifi {
    method public void setTdlsEnabled(java.net.InetAddress, boolean);
    method public void setTdlsEnabled(java.net.InetAddress, boolean);
    method public void setTdlsEnabledWithMacAddress(String, boolean);
    method public void setTdlsEnabledWithMacAddress(String, boolean);
    method @Deprecated public boolean setWifiEnabled(boolean);
    method @Deprecated public boolean setWifiEnabled(boolean);
    method public void startLocalOnlyHotspot(android.net.wifi.WifiManager.LocalOnlyHotspotCallback, @Nullable android.os.Handler);
    method @RequiresPermission(allOf={android.Manifest.permission.CHANGE_WIFI_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void startLocalOnlyHotspot(android.net.wifi.WifiManager.LocalOnlyHotspotCallback, @Nullable android.os.Handler);
    method @Deprecated public boolean startScan();
    method @Deprecated public boolean startScan();
    method @Deprecated public void startWps(android.net.wifi.WpsInfo, android.net.wifi.WifiManager.WpsCallback);
    method @Deprecated public void startWps(android.net.wifi.WpsInfo, android.net.wifi.WifiManager.WpsCallback);
    method @Deprecated public int updateNetwork(android.net.wifi.WifiConfiguration);
    method @Deprecated public int updateNetwork(android.net.wifi.WifiConfiguration);
+19 −0
Original line number Original line Diff line number Diff line
@@ -4734,6 +4734,24 @@ package android.net.wifi {
    field @Deprecated public byte id;
    field @Deprecated public byte id;
  }
  }
  public final class SoftApConfiguration implements android.os.Parcelable {
    method public int describeContents();
    method @Nullable public android.net.MacAddress getBssid();
    method @Nullable public String getSsid();
    method @Nullable public String getWpa2Passphrase();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.SoftApConfiguration> CREATOR;
  }
  public static final class SoftApConfiguration.Builder {
    ctor public SoftApConfiguration.Builder();
    ctor public SoftApConfiguration.Builder(@NonNull android.net.wifi.SoftApConfiguration);
    method @NonNull public android.net.wifi.SoftApConfiguration build();
    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setBssid(@Nullable android.net.MacAddress);
    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setSsid(@Nullable String);
    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setWpa2Passphrase(@Nullable String);
  }
  public final class WifiClient implements android.os.Parcelable {
  public final class WifiClient implements android.os.Parcelable {
    method public int describeContents();
    method public int describeContents();
    method @NonNull public android.net.MacAddress getMacAddress();
    method @NonNull public android.net.MacAddress getMacAddress();
@@ -4789,6 +4807,7 @@ package android.net.wifi {
    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.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.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(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.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.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);
+2 −0
Original line number Original line Diff line number Diff line
@@ -257,6 +257,8 @@ SamShouldBeLast: android.media.session.MediaSessionManager#registerCallback(java
    
    
SamShouldBeLast: android.net.ConnectivityManager#createSocketKeepalive(android.net.Network, android.net.IpSecManager.UdpEncapsulationSocket, java.net.InetAddress, java.net.InetAddress, java.util.concurrent.Executor, android.net.SocketKeepalive.Callback):
SamShouldBeLast: android.net.ConnectivityManager#createSocketKeepalive(android.net.Network, android.net.IpSecManager.UdpEncapsulationSocket, java.net.InetAddress, java.net.InetAddress, java.util.concurrent.Executor, android.net.SocketKeepalive.Callback):
    
    
SamShouldBeLast: android.net.wifi.WifiManager#startLocalOnlyHotspot(android.net.wifi.SoftApConfiguration, java.util.concurrent.Executor, android.net.wifi.WifiManager.LocalOnlyHotspotCallback):
    
SamShouldBeLast: android.net.wifi.rtt.WifiRttManager#startRanging(android.net.wifi.rtt.RangingRequest, java.util.concurrent.Executor, android.net.wifi.rtt.RangingResultCallback):
SamShouldBeLast: android.net.wifi.rtt.WifiRttManager#startRanging(android.net.wifi.rtt.RangingRequest, java.util.concurrent.Executor, android.net.wifi.rtt.RangingResultCallback):
    
    
SamShouldBeLast: android.nfc.NfcAdapter#enableReaderMode(android.app.Activity, android.nfc.NfcAdapter.ReaderCallback, int, android.os.Bundle):
SamShouldBeLast: android.nfc.NfcAdapter#enableReaderMode(android.app.Activity, android.nfc.NfcAdapter.ReaderCallback, int, android.os.Bundle):
+3 −1
Original line number Original line Diff line number Diff line
@@ -34,6 +34,7 @@ import android.net.wifi.ITrafficStateCallback;
import android.net.wifi.ITxPacketCountListener;
import android.net.wifi.ITxPacketCountListener;
import android.net.wifi.IOnWifiUsabilityStatsListener;
import android.net.wifi.IOnWifiUsabilityStatsListener;
import android.net.wifi.ScanResult;
import android.net.wifi.ScanResult;
import android.net.wifi.SoftApConfiguration;
import android.net.wifi.WifiActivityEnergyInfo;
import android.net.wifi.WifiActivityEnergyInfo;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiInfo;
@@ -142,7 +143,8 @@ interface IWifiManager


    boolean stopSoftAp();
    boolean stopSoftAp();


    int startLocalOnlyHotspot(in ILocalOnlyHotspotCallback callback, String packageName);
    int startLocalOnlyHotspot(in ILocalOnlyHotspotCallback callback, String packageName,
                              in SoftApConfiguration customConfig);


    void stopLocalOnlyHotspot();
    void stopLocalOnlyHotspot();


+19 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2019 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;

parcelable SoftApConfiguration;
 No newline at end of file
Loading