diff --git a/Tethering/Android.bp b/Tethering/Android.bp index bc2be14551a309dd090b1975b51ace52f108c2c2..257538d6216dec03c522763610195fc4a71373f6 100644 --- a/Tethering/Android.bp +++ b/Tethering/Android.bp @@ -35,7 +35,9 @@ java_defaults { "net-utils-device-common", ], libs: [ + "framework-statsd.stubs.module_lib", "framework-tethering.impl", + "framework-wifi", "unsupportedappusage", ], plugins: ["java_api_finder"], @@ -98,7 +100,7 @@ java_defaults { "res", ], libs: [ - "framework-tethering.impl", + "framework-tethering", ], jarjar_rules: "jarjar-rules.txt", optimize: { diff --git a/Tethering/apex/AndroidManifest.xml b/Tethering/apex/AndroidManifest.xml index 5c35c51dc77f4fbd2f542e405fa69e4b04e9b050..4aae3cc3000de3a891419a00f275ed9c0ead1e50 100644 --- a/Tethering/apex/AndroidManifest.xml +++ b/Tethering/apex/AndroidManifest.xml @@ -20,8 +20,10 @@ <application android:hasCode="false" /> <!-- b/145383354: Current minSdk is locked to Q for development cycle, lock it to next version before ship. --> - <uses-sdk + <!-- TODO: Uncomment this when the R API level is fixed. b/148281152 --> + <!--uses-sdk android:minSdkVersion="29" android:targetSdkVersion="29" /> + --> </manifest> diff --git a/Tethering/apex/manifest.json b/Tethering/apex/manifest.json index b64de4f08b0679c4ffc02b41e931eb4df72993c0..538ffb3ad6e4ad2f03c68294deb1d65347eac4f2 100644 --- a/Tethering/apex/manifest.json +++ b/Tethering/apex/manifest.json @@ -1,4 +1,4 @@ { "name": "com.android.tethering", - "version": 290000000 + "version": 300000000 } diff --git a/Tethering/common/TetheringLib/api/module-lib-lint-baseline.txt b/Tethering/common/TetheringLib/api/module-lib-lint-baseline.txt deleted file mode 100644 index af7ad52c078275de0762e0a27ca252ce830c3582..0000000000000000000000000000000000000000 --- a/Tethering/common/TetheringLib/api/module-lib-lint-baseline.txt +++ /dev/null @@ -1,39 +0,0 @@ -// Baseline format: 1.0 -ActionValue: android.net.TetheringConstants#EXTRA_ADD_TETHER_TYPE: - Inconsistent extra value; expected `android.net.extra.ADD_TETHER_TYPE`, was `extraAddTetherType` -ActionValue: android.net.TetheringConstants#EXTRA_PROVISION_CALLBACK: - Inconsistent extra value; expected `android.net.extra.PROVISION_CALLBACK`, was `extraProvisionCallback` -ActionValue: android.net.TetheringConstants#EXTRA_REM_TETHER_TYPE: - Inconsistent extra value; expected `android.net.extra.REM_TETHER_TYPE`, was `extraRemTetherType` -ActionValue: android.net.TetheringConstants#EXTRA_RUN_PROVISION: - Inconsistent extra value; expected `android.net.extra.RUN_PROVISION`, was `extraRunProvision` -ActionValue: android.net.TetheringConstants#EXTRA_SET_ALARM: - Inconsistent extra value; expected `android.net.extra.SET_ALARM`, was `extraSetAlarm` -ActionValue: android.net.TetheringManager#ACTION_TETHER_STATE_CHANGED: - Inconsistent action value; expected `android.net.action.TETHER_STATE_CHANGED`, was `android.net.conn.TETHER_STATE_CHANGED` -ActionValue: android.net.TetheringManager#EXTRA_ACTIVE_TETHER: - Inconsistent extra value; expected `android.net.extra.ACTIVE_TETHER`, was `tetherArray` -ActionValue: android.net.TetheringManager#EXTRA_AVAILABLE_TETHER: - Inconsistent extra value; expected `android.net.extra.AVAILABLE_TETHER`, was `availableArray` -ActionValue: android.net.TetheringManager#EXTRA_ERRORED_TETHER: - Inconsistent extra value; expected `android.net.extra.ERRORED_TETHER`, was `erroredArray` - - -CallbackInterface: android.net.TetheringManager.StartTetheringCallback: - Callbacks must be abstract class instead of interface to enable extension in future API levels: StartTetheringCallback -CallbackInterface: android.net.TetheringManager.TetheringEventCallback: - Callbacks must be abstract class instead of interface to enable extension in future API levels: TetheringEventCallback - - -ManagerConstructor: android.net.TetheringManager#TetheringManager(android.content.Context, java.util.function.Supplier<android.os.IBinder>): - Managers must always be obtained from Context; no direct constructors - - -MissingGetterMatchingBuilder: android.net.TetheringManager.TetheringRequest.Builder#setShouldShowEntitlementUi(boolean): - android.net.TetheringManager.TetheringRequest does not declare a `shouldShowEntitlementUi()` method matching method android.net.TetheringManager.TetheringRequest.Builder.setShouldShowEntitlementUi(boolean) -MissingGetterMatchingBuilder: android.net.TetheringManager.TetheringRequest.Builder#setStaticIpv4Addresses(android.net.LinkAddress, android.net.LinkAddress): - android.net.TetheringManager.TetheringRequest does not declare a `getStaticIpv4Addresses()` method matching method android.net.TetheringManager.TetheringRequest.Builder.setStaticIpv4Addresses(android.net.LinkAddress,android.net.LinkAddress) - - -StaticFinalBuilder: android.net.TetheringManager.TetheringRequest.Builder: - Builder must be final: android.net.TetheringManager.TetheringRequest.Builder diff --git a/Tethering/common/TetheringLib/api/system-lint-baseline.txt b/Tethering/common/TetheringLib/api/system-lint-baseline.txt deleted file mode 100644 index f8d291ca2a79178aae30946d391722317d94b7da..0000000000000000000000000000000000000000 --- a/Tethering/common/TetheringLib/api/system-lint-baseline.txt +++ /dev/null @@ -1,25 +0,0 @@ -// Baseline format: 1.0 -ActionValue: android.net.TetheringManager#ACTION_TETHER_STATE_CHANGED: - Inconsistent action value; expected `android.net.action.TETHER_STATE_CHANGED`, was `android.net.conn.TETHER_STATE_CHANGED` -ActionValue: android.net.TetheringManager#EXTRA_ACTIVE_TETHER: - Inconsistent extra value; expected `android.net.extra.ACTIVE_TETHER`, was `tetherArray` -ActionValue: android.net.TetheringManager#EXTRA_AVAILABLE_TETHER: - Inconsistent extra value; expected `android.net.extra.AVAILABLE_TETHER`, was `availableArray` -ActionValue: android.net.TetheringManager#EXTRA_ERRORED_TETHER: - Inconsistent extra value; expected `android.net.extra.ERRORED_TETHER`, was `erroredArray` - - -CallbackInterface: android.net.TetheringManager.StartTetheringCallback: - Callbacks must be abstract class instead of interface to enable extension in future API levels: StartTetheringCallback -CallbackInterface: android.net.TetheringManager.TetheringEventCallback: - Callbacks must be abstract class instead of interface to enable extension in future API levels: TetheringEventCallback - - -MissingGetterMatchingBuilder: android.net.TetheringManager.TetheringRequest.Builder#setShouldShowEntitlementUi(boolean): - android.net.TetheringManager.TetheringRequest does not declare a `shouldShowEntitlementUi()` method matching method android.net.TetheringManager.TetheringRequest.Builder.setShouldShowEntitlementUi(boolean) -MissingGetterMatchingBuilder: android.net.TetheringManager.TetheringRequest.Builder#setStaticIpv4Addresses(android.net.LinkAddress, android.net.LinkAddress): - android.net.TetheringManager.TetheringRequest does not declare a `getStaticIpv4Addresses()` method matching method android.net.TetheringManager.TetheringRequest.Builder.setStaticIpv4Addresses(android.net.LinkAddress,android.net.LinkAddress) - - -StaticFinalBuilder: android.net.TetheringManager.TetheringRequest.Builder: - Builder must be final: android.net.TetheringManager.TetheringRequest.Builder diff --git a/Tethering/common/TetheringLib/src/android/net/TetheringManager.java b/Tethering/common/TetheringLib/src/android/net/TetheringManager.java index 49c7fe20660d2ff55821b226c9fc902370105cd7..88e0b42534466e3f482640d270867348b4f1171f 100644 --- a/Tethering/common/TetheringLib/src/android/net/TetheringManager.java +++ b/Tethering/common/TetheringLib/src/android/net/TetheringManager.java @@ -290,7 +290,7 @@ public class TetheringManager { new Thread(() -> { while (true) { try { - Thread.sleep(200); + Thread.sleep(CONNECTOR_POLL_INTERVAL_MILLIS); } catch (InterruptedException e) { // Not much to do here, the system needs to wait for the connector } diff --git a/Tethering/res/values/config.xml b/Tethering/res/values/config.xml index 89a9046a1b886b7cbde23f0e6c2dab4b44574bfc..5f8d2997197fa2c7572a397452eaa64512664e4a 100644 --- a/Tethering/res/values/config.xml +++ b/Tethering/res/values/config.xml @@ -51,8 +51,10 @@ <!-- List of regexpressions describing the interface (if any) that represent tetherable Wifi P2P interfaces. If the device doesn't want to support tethering over Wifi P2p this - should be empty. An example would be "p2p-p2p.*" --> + should be empty. An example would be "p2p-p2p\\d-.*" --> <string-array translatable="false" name="config_tether_wifi_p2p_regexs"> + <item>"p2p-p2p\\d-.*"</item> + <item>"p2p\\d"</item> </string-array> <!-- List of regexpressions describing the interface (if any) that represent tetherable diff --git a/Tethering/src/com/android/networkstack/tethering/Tethering.java b/Tethering/src/com/android/networkstack/tethering/Tethering.java index 255cf750c08338a4b57faa98d29e979b2d5bd3f8..7dd5290ee83b8978a38d32c1733a59713c4823d3 100644 --- a/Tethering/src/com/android/networkstack/tethering/Tethering.java +++ b/Tethering/src/com/android/networkstack/tethering/Tethering.java @@ -638,7 +638,7 @@ public class Tethering { mLog.e("setWifiTethering: failed to get WifiManager!"); return TETHER_ERROR_SERVICE_UNAVAIL; } - if ((enable && mgr.startSoftAp(null /* use existing wifi config */)) + if ((enable && mgr.startTetheredHotspot(null /* use existing softap config */)) || (!enable && mgr.stopSoftAp())) { mWifiTetherRequested = enable; return TETHER_ERROR_NO_ERROR; diff --git a/Tethering/tests/unit/Android.bp b/Tethering/tests/unit/Android.bp index 15727689a406d548f2ce645fb08611544cb3dada..45c7b656e28fa868f7928380c3545c85ff80b76b 100644 --- a/Tethering/tests/unit/Android.bp +++ b/Tethering/tests/unit/Android.bp @@ -60,6 +60,7 @@ java_defaults { "framework-minus-apex", "framework-res", "framework-tethering.impl", + "framework-wifi.stubs.module_lib", ], jni_libs: [ // For mockito extended diff --git a/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java b/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java index b0586e30f3b0c2458bc27cd81d5d1214a33d930f..1fe3840b51a8588033a39ce547fdfb0f6213ed18 100644 --- a/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java +++ b/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java @@ -116,7 +116,7 @@ import android.net.ip.RouterAdvertisementDaemon; import android.net.util.InterfaceParams; import android.net.util.NetworkConstants; import android.net.util.SharedLog; -import android.net.wifi.WifiConfiguration; +import android.net.wifi.SoftApConfiguration; import android.net.wifi.WifiManager; import android.net.wifi.p2p.WifiP2pGroup; import android.net.wifi.p2p.WifiP2pInfo; @@ -983,12 +983,12 @@ public class TetheringTest { // TODO: Test with and without interfaceStatusChanged(). @Test public void failingWifiTetheringLegacyApBroadcast() throws Exception { - when(mWifiManager.startSoftAp(any(WifiConfiguration.class))).thenReturn(true); + when(mWifiManager.startTetheredHotspot(any(SoftApConfiguration.class))).thenReturn(true); // Emulate pressing the WiFi tethering button. mTethering.startTethering(createTetheringRequestParcel(TETHERING_WIFI), null); mLooper.dispatchAll(); - verify(mWifiManager, times(1)).startSoftAp(null); + verify(mWifiManager, times(1)).startTetheredHotspot(null); verifyNoMoreInteractions(mWifiManager); verifyNoMoreInteractions(mNetd); @@ -1011,12 +1011,12 @@ public class TetheringTest { // TODO: Test with and without interfaceStatusChanged(). @Test public void workingWifiTetheringEnrichedApBroadcast() throws Exception { - when(mWifiManager.startSoftAp(any(WifiConfiguration.class))).thenReturn(true); + when(mWifiManager.startTetheredHotspot(any(SoftApConfiguration.class))).thenReturn(true); // Emulate pressing the WiFi tethering button. mTethering.startTethering(createTetheringRequestParcel(TETHERING_WIFI), null); mLooper.dispatchAll(); - verify(mWifiManager, times(1)).startSoftAp(null); + verify(mWifiManager, times(1)).startTetheredHotspot(null); verifyNoMoreInteractions(mWifiManager); verifyNoMoreInteractions(mNetd); @@ -1087,13 +1087,13 @@ public class TetheringTest { // TODO: Test with and without interfaceStatusChanged(). @Test public void failureEnablingIpForwarding() throws Exception { - when(mWifiManager.startSoftAp(any(WifiConfiguration.class))).thenReturn(true); + when(mWifiManager.startTetheredHotspot(any(SoftApConfiguration.class))).thenReturn(true); doThrow(new RemoteException()).when(mNetd).ipfwdEnableForwarding(TETHERING_NAME); // Emulate pressing the WiFi tethering button. mTethering.startTethering(createTetheringRequestParcel(TETHERING_WIFI), null); mLooper.dispatchAll(); - verify(mWifiManager, times(1)).startSoftAp(null); + verify(mWifiManager, times(1)).startTetheredHotspot(null); verifyNoMoreInteractions(mWifiManager); verifyNoMoreInteractions(mNetd); @@ -1380,7 +1380,7 @@ public class TetheringTest { // 2. Enable wifi tethering. UpstreamNetworkState upstreamState = buildMobileDualStackUpstreamState(); initTetheringUpstream(upstreamState); - when(mWifiManager.startSoftAp(any(WifiConfiguration.class))).thenReturn(true); + when(mWifiManager.startTetheredHotspot(any(SoftApConfiguration.class))).thenReturn(true); mTethering.interfaceStatusChanged(TEST_WLAN_IFNAME, true); mLooper.dispatchAll(); tetherState = callback.pollTetherStatesChanged();