TetheringManager API clean up
Per API review:
- @IntDef defined on the type integer parameter
- have getters on each parameter that is set in the
TetheringRequest.Builder
- new added API should not be deprecated
Below APIs is moved from system-current to module-lib-current that only
plafrom code(e.g. ConnectivityManager and Settings) can use them.
TetheringRequest.
onTetherableInterfaceRegexpsChanged, TetheringInterfaceRegexps:
Only platform code can use them because interfaces by regular
expressions are a mechanism which is planning to be deprecated.
Also rename some constants for easier to understand.
Bug: 149858697
Bug: 151243337
Test: m doc-comment-check-docs
atest TetheringTests
Change-Id: Idd041f0fbeca411ea23e49786a50dd7feb77ef45
This commit is contained in:
@@ -62,19 +62,20 @@ package android.net {
|
|||||||
field public static final int TETHERING_WIFI = 0; // 0x0
|
field public static final int TETHERING_WIFI = 0; // 0x0
|
||||||
field public static final int TETHERING_WIFI_P2P = 3; // 0x3
|
field public static final int TETHERING_WIFI_P2P = 3; // 0x3
|
||||||
field public static final int TETHER_ERROR_DHCPSERVER_ERROR = 12; // 0xc
|
field public static final int TETHER_ERROR_DHCPSERVER_ERROR = 12; // 0xc
|
||||||
field public static final int TETHER_ERROR_DISABLE_NAT_ERROR = 9; // 0x9
|
field public static final int TETHER_ERROR_DISABLE_FORWARDING_ERROR = 9; // 0x9
|
||||||
field public static final int TETHER_ERROR_ENABLE_NAT_ERROR = 8; // 0x8
|
field public static final int TETHER_ERROR_ENABLE_FORWARDING_ERROR = 8; // 0x8
|
||||||
field public static final int TETHER_ERROR_ENTITLEMENT_UNKNOWN = 13; // 0xd
|
field public static final int TETHER_ERROR_ENTITLEMENT_UNKNOWN = 13; // 0xd
|
||||||
field public static final int TETHER_ERROR_IFACE_CFG_ERROR = 10; // 0xa
|
field public static final int TETHER_ERROR_IFACE_CFG_ERROR = 10; // 0xa
|
||||||
field public static final int TETHER_ERROR_MASTER_ERROR = 5; // 0x5
|
field public static final int TETHER_ERROR_INTERNAL_ERROR = 5; // 0x5
|
||||||
field public static final int TETHER_ERROR_NO_ACCESS_TETHERING_PERMISSION = 15; // 0xf
|
field public static final int TETHER_ERROR_NO_ACCESS_TETHERING_PERMISSION = 15; // 0xf
|
||||||
field public static final int TETHER_ERROR_NO_CHANGE_TETHERING_PERMISSION = 14; // 0xe
|
field public static final int TETHER_ERROR_NO_CHANGE_TETHERING_PERMISSION = 14; // 0xe
|
||||||
field public static final int TETHER_ERROR_NO_ERROR = 0; // 0x0
|
field public static final int TETHER_ERROR_NO_ERROR = 0; // 0x0
|
||||||
field public static final int TETHER_ERROR_PROVISION_FAILED = 11; // 0xb
|
field public static final int TETHER_ERROR_PROVISIONING_FAILED = 11; // 0xb
|
||||||
field public static final int TETHER_ERROR_SERVICE_UNAVAIL = 2; // 0x2
|
field public static final int TETHER_ERROR_SERVICE_UNAVAIL = 2; // 0x2
|
||||||
field public static final int TETHER_ERROR_TETHER_IFACE_ERROR = 6; // 0x6
|
field public static final int TETHER_ERROR_TETHER_IFACE_ERROR = 6; // 0x6
|
||||||
field public static final int TETHER_ERROR_UNAVAIL_IFACE = 4; // 0x4
|
field public static final int TETHER_ERROR_UNAVAIL_IFACE = 4; // 0x4
|
||||||
field public static final int TETHER_ERROR_UNKNOWN_IFACE = 1; // 0x1
|
field public static final int TETHER_ERROR_UNKNOWN_IFACE = 1; // 0x1
|
||||||
|
field public static final int TETHER_ERROR_UNKNOWN_TYPE = 16; // 0x10
|
||||||
field public static final int TETHER_ERROR_UNSUPPORTED = 3; // 0x3
|
field public static final int TETHER_ERROR_UNSUPPORTED = 3; // 0x3
|
||||||
field public static final int TETHER_ERROR_UNTETHER_IFACE_ERROR = 7; // 0x7
|
field public static final int TETHER_ERROR_UNTETHER_IFACE_ERROR = 7; // 0x7
|
||||||
field public static final int TETHER_HARDWARE_OFFLOAD_FAILED = 2; // 0x2
|
field public static final int TETHER_HARDWARE_OFFLOAD_FAILED = 2; // 0x2
|
||||||
@@ -86,29 +87,26 @@ package android.net {
|
|||||||
method public void onTetheringEntitlementResult(int);
|
method public void onTetheringEntitlementResult(int);
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract static class TetheringManager.StartTetheringCallback {
|
public static interface TetheringManager.StartTetheringCallback {
|
||||||
ctor public TetheringManager.StartTetheringCallback();
|
method public default void onTetheringFailed(int);
|
||||||
method public void onTetheringFailed(int);
|
method public default void onTetheringStarted();
|
||||||
method public void onTetheringStarted();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract static class TetheringManager.TetheringEventCallback {
|
public static interface TetheringManager.TetheringEventCallback {
|
||||||
ctor public TetheringManager.TetheringEventCallback();
|
method public default void onClientsChanged(@NonNull java.util.Collection<android.net.TetheredClient>);
|
||||||
method public void onClientsChanged(@NonNull java.util.Collection<android.net.TetheredClient>);
|
method public default void onError(@NonNull String, int);
|
||||||
method public void onError(@NonNull String, int);
|
method public default void onOffloadStatusChanged(int);
|
||||||
method public void onOffloadStatusChanged(int);
|
method public default void onTetherableInterfaceRegexpsChanged(@NonNull android.net.TetheringManager.TetheringInterfaceRegexps);
|
||||||
method @Deprecated public void onTetherableInterfaceRegexpsChanged(@NonNull android.net.TetheringManager.TetheringInterfaceRegexps);
|
method public default void onTetherableInterfacesChanged(@NonNull java.util.List<java.lang.String>);
|
||||||
method public void onTetherableInterfacesChanged(@NonNull java.util.List<java.lang.String>);
|
method public default void onTetheredInterfacesChanged(@NonNull java.util.List<java.lang.String>);
|
||||||
method public void onTetheredInterfacesChanged(@NonNull java.util.List<java.lang.String>);
|
method public default void onTetheringSupported(boolean);
|
||||||
method public void onTetheringSupported(boolean);
|
method public default void onUpstreamChanged(@Nullable android.net.Network);
|
||||||
method public void onUpstreamChanged(@Nullable android.net.Network);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated public static class TetheringManager.TetheringInterfaceRegexps {
|
public static class TetheringManager.TetheringInterfaceRegexps {
|
||||||
ctor @Deprecated public TetheringManager.TetheringInterfaceRegexps(@NonNull String[], @NonNull String[], @NonNull String[]);
|
method @NonNull public java.util.List<java.lang.String> getTetherableBluetoothRegexs();
|
||||||
method @Deprecated @NonNull public java.util.List<java.lang.String> getTetherableBluetoothRegexs();
|
method @NonNull public java.util.List<java.lang.String> getTetherableUsbRegexs();
|
||||||
method @Deprecated @NonNull public java.util.List<java.lang.String> getTetherableUsbRegexs();
|
method @NonNull public java.util.List<java.lang.String> getTetherableWifiRegexs();
|
||||||
method @Deprecated @NonNull public java.util.List<java.lang.String> getTetherableWifiRegexs();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class TetheringManager.TetheringRequest {
|
public static class TetheringManager.TetheringRequest {
|
||||||
@@ -119,8 +117,11 @@ package android.net {
|
|||||||
method @NonNull public android.net.TetheringManager.TetheringRequest build();
|
method @NonNull public android.net.TetheringManager.TetheringRequest build();
|
||||||
method @Nullable public android.net.LinkAddress getClientStaticIpv4Address();
|
method @Nullable public android.net.LinkAddress getClientStaticIpv4Address();
|
||||||
method @Nullable public android.net.LinkAddress getLocalIpv4Address();
|
method @Nullable public android.net.LinkAddress getLocalIpv4Address();
|
||||||
|
method public boolean getShouldShowEntitlementUi();
|
||||||
|
method public int getTetheringType();
|
||||||
|
method public boolean isExemptFromEntitlementCheck();
|
||||||
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setExemptFromEntitlementCheck(boolean);
|
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setExemptFromEntitlementCheck(boolean);
|
||||||
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setSilentProvisioning(boolean);
|
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setShouldShowEntitlementUi(boolean);
|
||||||
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setStaticIpv4Addresses(@NonNull android.net.LinkAddress, @NonNull android.net.LinkAddress);
|
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setStaticIpv4Addresses(@NonNull android.net.LinkAddress, @NonNull android.net.LinkAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,19 +40,20 @@ package android.net {
|
|||||||
field public static final int TETHERING_WIFI = 0; // 0x0
|
field public static final int TETHERING_WIFI = 0; // 0x0
|
||||||
field public static final int TETHERING_WIFI_P2P = 3; // 0x3
|
field public static final int TETHERING_WIFI_P2P = 3; // 0x3
|
||||||
field public static final int TETHER_ERROR_DHCPSERVER_ERROR = 12; // 0xc
|
field public static final int TETHER_ERROR_DHCPSERVER_ERROR = 12; // 0xc
|
||||||
field public static final int TETHER_ERROR_DISABLE_NAT_ERROR = 9; // 0x9
|
field public static final int TETHER_ERROR_DISABLE_FORWARDING_ERROR = 9; // 0x9
|
||||||
field public static final int TETHER_ERROR_ENABLE_NAT_ERROR = 8; // 0x8
|
field public static final int TETHER_ERROR_ENABLE_FORWARDING_ERROR = 8; // 0x8
|
||||||
field public static final int TETHER_ERROR_ENTITLEMENT_UNKNOWN = 13; // 0xd
|
field public static final int TETHER_ERROR_ENTITLEMENT_UNKNOWN = 13; // 0xd
|
||||||
field public static final int TETHER_ERROR_IFACE_CFG_ERROR = 10; // 0xa
|
field public static final int TETHER_ERROR_IFACE_CFG_ERROR = 10; // 0xa
|
||||||
field public static final int TETHER_ERROR_MASTER_ERROR = 5; // 0x5
|
field public static final int TETHER_ERROR_INTERNAL_ERROR = 5; // 0x5
|
||||||
field public static final int TETHER_ERROR_NO_ACCESS_TETHERING_PERMISSION = 15; // 0xf
|
field public static final int TETHER_ERROR_NO_ACCESS_TETHERING_PERMISSION = 15; // 0xf
|
||||||
field public static final int TETHER_ERROR_NO_CHANGE_TETHERING_PERMISSION = 14; // 0xe
|
field public static final int TETHER_ERROR_NO_CHANGE_TETHERING_PERMISSION = 14; // 0xe
|
||||||
field public static final int TETHER_ERROR_NO_ERROR = 0; // 0x0
|
field public static final int TETHER_ERROR_NO_ERROR = 0; // 0x0
|
||||||
field public static final int TETHER_ERROR_PROVISION_FAILED = 11; // 0xb
|
field public static final int TETHER_ERROR_PROVISIONING_FAILED = 11; // 0xb
|
||||||
field public static final int TETHER_ERROR_SERVICE_UNAVAIL = 2; // 0x2
|
field public static final int TETHER_ERROR_SERVICE_UNAVAIL = 2; // 0x2
|
||||||
field public static final int TETHER_ERROR_TETHER_IFACE_ERROR = 6; // 0x6
|
field public static final int TETHER_ERROR_TETHER_IFACE_ERROR = 6; // 0x6
|
||||||
field public static final int TETHER_ERROR_UNAVAIL_IFACE = 4; // 0x4
|
field public static final int TETHER_ERROR_UNAVAIL_IFACE = 4; // 0x4
|
||||||
field public static final int TETHER_ERROR_UNKNOWN_IFACE = 1; // 0x1
|
field public static final int TETHER_ERROR_UNKNOWN_IFACE = 1; // 0x1
|
||||||
|
field public static final int TETHER_ERROR_UNKNOWN_TYPE = 16; // 0x10
|
||||||
field public static final int TETHER_ERROR_UNSUPPORTED = 3; // 0x3
|
field public static final int TETHER_ERROR_UNSUPPORTED = 3; // 0x3
|
||||||
field public static final int TETHER_ERROR_UNTETHER_IFACE_ERROR = 7; // 0x7
|
field public static final int TETHER_ERROR_UNTETHER_IFACE_ERROR = 7; // 0x7
|
||||||
field public static final int TETHER_HARDWARE_OFFLOAD_FAILED = 2; // 0x2
|
field public static final int TETHER_HARDWARE_OFFLOAD_FAILED = 2; // 0x2
|
||||||
@@ -64,29 +65,19 @@ package android.net {
|
|||||||
method public void onTetheringEntitlementResult(int);
|
method public void onTetheringEntitlementResult(int);
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract static class TetheringManager.StartTetheringCallback {
|
public static interface TetheringManager.StartTetheringCallback {
|
||||||
ctor public TetheringManager.StartTetheringCallback();
|
method public default void onTetheringFailed(int);
|
||||||
method public void onTetheringFailed(int);
|
method public default void onTetheringStarted();
|
||||||
method public void onTetheringStarted();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract static class TetheringManager.TetheringEventCallback {
|
public static interface TetheringManager.TetheringEventCallback {
|
||||||
ctor public TetheringManager.TetheringEventCallback();
|
method public default void onClientsChanged(@NonNull java.util.Collection<android.net.TetheredClient>);
|
||||||
method public void onClientsChanged(@NonNull java.util.Collection<android.net.TetheredClient>);
|
method public default void onError(@NonNull String, int);
|
||||||
method public void onError(@NonNull String, int);
|
method public default void onOffloadStatusChanged(int);
|
||||||
method public void onOffloadStatusChanged(int);
|
method public default void onTetherableInterfacesChanged(@NonNull java.util.List<java.lang.String>);
|
||||||
method @Deprecated public void onTetherableInterfaceRegexpsChanged(@NonNull android.net.TetheringManager.TetheringInterfaceRegexps);
|
method public default void onTetheredInterfacesChanged(@NonNull java.util.List<java.lang.String>);
|
||||||
method public void onTetherableInterfacesChanged(@NonNull java.util.List<java.lang.String>);
|
method public default void onTetheringSupported(boolean);
|
||||||
method public void onTetheredInterfacesChanged(@NonNull java.util.List<java.lang.String>);
|
method public default void onUpstreamChanged(@Nullable android.net.Network);
|
||||||
method public void onTetheringSupported(boolean);
|
|
||||||
method public void onUpstreamChanged(@Nullable android.net.Network);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated public static class TetheringManager.TetheringInterfaceRegexps {
|
|
||||||
ctor @Deprecated public TetheringManager.TetheringInterfaceRegexps(@NonNull String[], @NonNull String[], @NonNull String[]);
|
|
||||||
method @Deprecated @NonNull public java.util.List<java.lang.String> getTetherableBluetoothRegexs();
|
|
||||||
method @Deprecated @NonNull public java.util.List<java.lang.String> getTetherableUsbRegexs();
|
|
||||||
method @Deprecated @NonNull public java.util.List<java.lang.String> getTetherableWifiRegexs();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class TetheringManager.TetheringRequest {
|
public static class TetheringManager.TetheringRequest {
|
||||||
@@ -97,8 +88,11 @@ package android.net {
|
|||||||
method @NonNull public android.net.TetheringManager.TetheringRequest build();
|
method @NonNull public android.net.TetheringManager.TetheringRequest build();
|
||||||
method @Nullable public android.net.LinkAddress getClientStaticIpv4Address();
|
method @Nullable public android.net.LinkAddress getClientStaticIpv4Address();
|
||||||
method @Nullable public android.net.LinkAddress getLocalIpv4Address();
|
method @Nullable public android.net.LinkAddress getLocalIpv4Address();
|
||||||
|
method public boolean getShouldShowEntitlementUi();
|
||||||
|
method public int getTetheringType();
|
||||||
|
method public boolean isExemptFromEntitlementCheck();
|
||||||
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setExemptFromEntitlementCheck(boolean);
|
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setExemptFromEntitlementCheck(boolean);
|
||||||
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setSilentProvisioning(boolean);
|
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setShouldShowEntitlementUi(boolean);
|
||||||
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setStaticIpv4Addresses(@NonNull android.net.LinkAddress, @NonNull android.net.LinkAddress);
|
method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setStaticIpv4Addresses(@NonNull android.net.LinkAddress, @NonNull android.net.LinkAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -115,6 +115,19 @@ public class TetheringManager {
|
|||||||
*/
|
*/
|
||||||
public static final String EXTRA_ERRORED_TETHER = "erroredArray";
|
public static final String EXTRA_ERRORED_TETHER = "erroredArray";
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
@IntDef(flag = false, value = {
|
||||||
|
TETHERING_WIFI,
|
||||||
|
TETHERING_USB,
|
||||||
|
TETHERING_BLUETOOTH,
|
||||||
|
TETHERING_WIFI_P2P,
|
||||||
|
TETHERING_NCM,
|
||||||
|
TETHERING_ETHERNET,
|
||||||
|
})
|
||||||
|
public @interface TetheringType {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Invalid tethering type.
|
* Invalid tethering type.
|
||||||
* @see #startTethering.
|
* @see #startTethering.
|
||||||
@@ -158,22 +171,60 @@ public class TetheringManager {
|
|||||||
*/
|
*/
|
||||||
public static final int TETHERING_ETHERNET = 5;
|
public static final int TETHERING_ETHERNET = 5;
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
@IntDef(value = {
|
||||||
|
TETHER_ERROR_NO_ERROR,
|
||||||
|
TETHER_ERROR_PROVISIONING_FAILED,
|
||||||
|
TETHER_ERROR_ENTITLEMENT_UNKNOWN,
|
||||||
|
})
|
||||||
|
public @interface EntitlementResult {
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
@IntDef(value = {
|
||||||
|
TETHER_ERROR_NO_ERROR,
|
||||||
|
TETHER_ERROR_UNKNOWN_IFACE,
|
||||||
|
TETHER_ERROR_SERVICE_UNAVAIL,
|
||||||
|
TETHER_ERROR_INTERNAL_ERROR,
|
||||||
|
TETHER_ERROR_TETHER_IFACE_ERROR,
|
||||||
|
TETHER_ERROR_ENABLE_FORWARDING_ERROR,
|
||||||
|
TETHER_ERROR_DISABLE_FORWARDING_ERROR,
|
||||||
|
TETHER_ERROR_IFACE_CFG_ERROR,
|
||||||
|
TETHER_ERROR_DHCPSERVER_ERROR,
|
||||||
|
})
|
||||||
|
public @interface TetheringIfaceError {
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
@IntDef(value = {
|
||||||
|
TETHER_ERROR_SERVICE_UNAVAIL,
|
||||||
|
TETHER_ERROR_INTERNAL_ERROR,
|
||||||
|
TETHER_ERROR_NO_CHANGE_TETHERING_PERMISSION,
|
||||||
|
TETHER_ERROR_UNKNOWN_TYPE,
|
||||||
|
})
|
||||||
|
public @interface StartTetheringError {
|
||||||
|
}
|
||||||
|
|
||||||
public static final int TETHER_ERROR_NO_ERROR = 0;
|
public static final int TETHER_ERROR_NO_ERROR = 0;
|
||||||
public static final int TETHER_ERROR_UNKNOWN_IFACE = 1;
|
public static final int TETHER_ERROR_UNKNOWN_IFACE = 1;
|
||||||
public static final int TETHER_ERROR_SERVICE_UNAVAIL = 2;
|
public static final int TETHER_ERROR_SERVICE_UNAVAIL = 2;
|
||||||
public static final int TETHER_ERROR_UNSUPPORTED = 3;
|
public static final int TETHER_ERROR_UNSUPPORTED = 3;
|
||||||
public static final int TETHER_ERROR_UNAVAIL_IFACE = 4;
|
public static final int TETHER_ERROR_UNAVAIL_IFACE = 4;
|
||||||
public static final int TETHER_ERROR_MASTER_ERROR = 5;
|
public static final int TETHER_ERROR_INTERNAL_ERROR = 5;
|
||||||
public static final int TETHER_ERROR_TETHER_IFACE_ERROR = 6;
|
public static final int TETHER_ERROR_TETHER_IFACE_ERROR = 6;
|
||||||
public static final int TETHER_ERROR_UNTETHER_IFACE_ERROR = 7;
|
public static final int TETHER_ERROR_UNTETHER_IFACE_ERROR = 7;
|
||||||
public static final int TETHER_ERROR_ENABLE_NAT_ERROR = 8;
|
public static final int TETHER_ERROR_ENABLE_FORWARDING_ERROR = 8;
|
||||||
public static final int TETHER_ERROR_DISABLE_NAT_ERROR = 9;
|
public static final int TETHER_ERROR_DISABLE_FORWARDING_ERROR = 9;
|
||||||
public static final int TETHER_ERROR_IFACE_CFG_ERROR = 10;
|
public static final int TETHER_ERROR_IFACE_CFG_ERROR = 10;
|
||||||
public static final int TETHER_ERROR_PROVISION_FAILED = 11;
|
public static final int TETHER_ERROR_PROVISIONING_FAILED = 11;
|
||||||
public static final int TETHER_ERROR_DHCPSERVER_ERROR = 12;
|
public static final int TETHER_ERROR_DHCPSERVER_ERROR = 12;
|
||||||
public static final int TETHER_ERROR_ENTITLEMENT_UNKNOWN = 13;
|
public static final int TETHER_ERROR_ENTITLEMENT_UNKNOWN = 13;
|
||||||
public static final int TETHER_ERROR_NO_CHANGE_TETHERING_PERMISSION = 14;
|
public static final int TETHER_ERROR_NO_CHANGE_TETHERING_PERMISSION = 14;
|
||||||
public static final int TETHER_ERROR_NO_ACCESS_TETHERING_PERMISSION = 15;
|
public static final int TETHER_ERROR_NO_ACCESS_TETHERING_PERMISSION = 15;
|
||||||
|
public static final int TETHER_ERROR_UNKNOWN_TYPE = 16;
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
@@ -508,7 +559,7 @@ public class TetheringManager {
|
|||||||
private final TetheringRequestParcel mBuilderParcel;
|
private final TetheringRequestParcel mBuilderParcel;
|
||||||
|
|
||||||
/** Default constructor of Builder. */
|
/** Default constructor of Builder. */
|
||||||
public Builder(final int type) {
|
public Builder(@TetheringType final int type) {
|
||||||
mBuilderParcel = new TetheringRequestParcel();
|
mBuilderParcel = new TetheringRequestParcel();
|
||||||
mBuilderParcel.tetheringType = type;
|
mBuilderParcel.tetheringType = type;
|
||||||
mBuilderParcel.localIPv4Address = null;
|
mBuilderParcel.localIPv4Address = null;
|
||||||
@@ -553,11 +604,14 @@ public class TetheringManager {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Start tethering without showing the provisioning UI. */
|
/**
|
||||||
|
* If an entitlement check is needed, sets whether to show the entitlement UI or to
|
||||||
|
* perform a silent entitlement check. By default, the entitlement UI is shown.
|
||||||
|
*/
|
||||||
@RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED)
|
@RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED)
|
||||||
@NonNull
|
@NonNull
|
||||||
public Builder setSilentProvisioning(boolean silent) {
|
public Builder setShouldShowEntitlementUi(boolean showUi) {
|
||||||
mBuilderParcel.showProvisioningUi = silent;
|
mBuilderParcel.showProvisioningUi = showUi;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -567,7 +621,6 @@ public class TetheringManager {
|
|||||||
return new TetheringRequest(mBuilderParcel);
|
return new TetheringRequest(mBuilderParcel);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get static server address. */
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public LinkAddress getLocalIpv4Address() {
|
public LinkAddress getLocalIpv4Address() {
|
||||||
return mBuilderParcel.localIPv4Address;
|
return mBuilderParcel.localIPv4Address;
|
||||||
@@ -578,6 +631,22 @@ public class TetheringManager {
|
|||||||
public LinkAddress getClientStaticIpv4Address() {
|
public LinkAddress getClientStaticIpv4Address() {
|
||||||
return mBuilderParcel.staticClientAddress;
|
return mBuilderParcel.staticClientAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Get tethering type. */
|
||||||
|
@TetheringType
|
||||||
|
public int getTetheringType() {
|
||||||
|
return mBuilderParcel.tetheringType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Check if exempt from entitlement check. */
|
||||||
|
public boolean isExemptFromEntitlementCheck() {
|
||||||
|
return mBuilderParcel.exemptFromEntitlementCheck;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Check if show entitlement ui. */
|
||||||
|
public boolean getShouldShowEntitlementUi() {
|
||||||
|
return mBuilderParcel.showProvisioningUi;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -602,18 +671,18 @@ public class TetheringManager {
|
|||||||
/**
|
/**
|
||||||
* Callback for use with {@link #startTethering} to find out whether tethering succeeded.
|
* Callback for use with {@link #startTethering} to find out whether tethering succeeded.
|
||||||
*/
|
*/
|
||||||
public abstract static class StartTetheringCallback {
|
public interface StartTetheringCallback {
|
||||||
/**
|
/**
|
||||||
* Called when tethering has been successfully started.
|
* Called when tethering has been successfully started.
|
||||||
*/
|
*/
|
||||||
public void onTetheringStarted() {}
|
default void onTetheringStarted() {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when starting tethering failed.
|
* Called when starting tethering failed.
|
||||||
*
|
*
|
||||||
* @param resultCode One of the {@code TETHER_ERROR_*} constants.
|
* @param error The error that caused the failure.
|
||||||
*/
|
*/
|
||||||
public void onTetheringFailed(final int resultCode) {}
|
default void onTetheringFailed(@StartTetheringError final int error) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -684,7 +753,7 @@ public class TetheringManager {
|
|||||||
android.Manifest.permission.TETHER_PRIVILEGED,
|
android.Manifest.permission.TETHER_PRIVILEGED,
|
||||||
android.Manifest.permission.WRITE_SETTINGS
|
android.Manifest.permission.WRITE_SETTINGS
|
||||||
})
|
})
|
||||||
public void stopTethering(final int type) {
|
public void stopTethering(@TetheringType final int type) {
|
||||||
final String callerPkg = mContext.getOpPackageName();
|
final String callerPkg = mContext.getOpPackageName();
|
||||||
Log.i(TAG, "stopTethering caller:" + callerPkg);
|
Log.i(TAG, "stopTethering caller:" + callerPkg);
|
||||||
|
|
||||||
@@ -709,10 +778,10 @@ public class TetheringManager {
|
|||||||
*
|
*
|
||||||
* @param resultCode an int value of entitlement result. It may be one of
|
* @param resultCode an int value of entitlement result. It may be one of
|
||||||
* {@link #TETHER_ERROR_NO_ERROR},
|
* {@link #TETHER_ERROR_NO_ERROR},
|
||||||
* {@link #TETHER_ERROR_PROVISION_FAILED}, or
|
* {@link #TETHER_ERROR_PROVISIONING_FAILED}, or
|
||||||
* {@link #TETHER_ERROR_ENTITLEMENT_UNKNOWN}.
|
* {@link #TETHER_ERROR_ENTITLEMENT_UNKNOWN}.
|
||||||
*/
|
*/
|
||||||
void onTetheringEntitlementResult(int resultCode);
|
void onTetheringEntitlementResult(@EntitlementResult int result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -727,7 +796,8 @@ public class TetheringManager {
|
|||||||
* fail if a tethering entitlement check is required.
|
* fail if a tethering entitlement check is required.
|
||||||
*
|
*
|
||||||
* @param type the downstream type of tethering. Must be one of {@code #TETHERING_*} constants.
|
* @param type the downstream type of tethering. Must be one of {@code #TETHERING_*} constants.
|
||||||
* @param showEntitlementUi a boolean indicating whether to run UI-based entitlement check.
|
* @param showEntitlementUi a boolean indicating whether to check result for the UI-based
|
||||||
|
* entitlement check or the silent entitlement check.
|
||||||
* @param executor the executor on which callback will be invoked.
|
* @param executor the executor on which callback will be invoked.
|
||||||
* @param listener an {@link OnTetheringEntitlementResultListener} which will be called to
|
* @param listener an {@link OnTetheringEntitlementResultListener} which will be called to
|
||||||
* notify the caller of the result of entitlement check. The listener may be called zero
|
* notify the caller of the result of entitlement check. The listener may be called zero
|
||||||
@@ -737,7 +807,8 @@ public class TetheringManager {
|
|||||||
android.Manifest.permission.TETHER_PRIVILEGED,
|
android.Manifest.permission.TETHER_PRIVILEGED,
|
||||||
android.Manifest.permission.WRITE_SETTINGS
|
android.Manifest.permission.WRITE_SETTINGS
|
||||||
})
|
})
|
||||||
public void requestLatestTetheringEntitlementResult(int type, boolean showEntitlementUi,
|
public void requestLatestTetheringEntitlementResult(@TetheringType int type,
|
||||||
|
boolean showEntitlementUi,
|
||||||
@NonNull Executor executor,
|
@NonNull Executor executor,
|
||||||
@NonNull final OnTetheringEntitlementResultListener listener) {
|
@NonNull final OnTetheringEntitlementResultListener listener) {
|
||||||
if (listener == null) {
|
if (listener == null) {
|
||||||
@@ -766,7 +837,7 @@ public class TetheringManager {
|
|||||||
*/
|
*/
|
||||||
// TODO: improve the usage of ResultReceiver, b/145096122
|
// TODO: improve the usage of ResultReceiver, b/145096122
|
||||||
@SystemApi(client = MODULE_LIBRARIES)
|
@SystemApi(client = MODULE_LIBRARIES)
|
||||||
public void requestLatestTetheringEntitlementResult(final int type,
|
public void requestLatestTetheringEntitlementResult(@TetheringType final int type,
|
||||||
@NonNull final ResultReceiver receiver, final boolean showEntitlementUi) {
|
@NonNull final ResultReceiver receiver, final boolean showEntitlementUi) {
|
||||||
final String callerPkg = mContext.getOpPackageName();
|
final String callerPkg = mContext.getOpPackageName();
|
||||||
Log.i(TAG, "getLatestTetheringEntitlementResult caller:" + callerPkg);
|
Log.i(TAG, "getLatestTetheringEntitlementResult caller:" + callerPkg);
|
||||||
@@ -779,7 +850,7 @@ public class TetheringManager {
|
|||||||
* Callback for use with {@link registerTetheringEventCallback} to find out tethering
|
* Callback for use with {@link registerTetheringEventCallback} to find out tethering
|
||||||
* upstream status.
|
* upstream status.
|
||||||
*/
|
*/
|
||||||
public abstract static class TetheringEventCallback {
|
public interface TetheringEventCallback {
|
||||||
/**
|
/**
|
||||||
* Called when tethering supported status changed.
|
* Called when tethering supported status changed.
|
||||||
*
|
*
|
||||||
@@ -791,7 +862,7 @@ public class TetheringManager {
|
|||||||
*
|
*
|
||||||
* @param supported The new supported status
|
* @param supported The new supported status
|
||||||
*/
|
*/
|
||||||
public void onTetheringSupported(boolean supported) {}
|
default void onTetheringSupported(boolean supported) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when tethering upstream changed.
|
* Called when tethering upstream changed.
|
||||||
@@ -802,7 +873,7 @@ public class TetheringManager {
|
|||||||
* @param network the {@link Network} of tethering upstream. Null means tethering doesn't
|
* @param network the {@link Network} of tethering upstream. Null means tethering doesn't
|
||||||
* have any upstream.
|
* have any upstream.
|
||||||
*/
|
*/
|
||||||
public void onUpstreamChanged(@Nullable Network network) {}
|
default void onUpstreamChanged(@Nullable Network network) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when there was a change in tethering interface regular expressions.
|
* Called when there was a change in tethering interface regular expressions.
|
||||||
@@ -810,28 +881,30 @@ public class TetheringManager {
|
|||||||
* <p>This will be called immediately after the callback is registered, and may be called
|
* <p>This will be called immediately after the callback is registered, and may be called
|
||||||
* multiple times later upon changes.
|
* multiple times later upon changes.
|
||||||
* @param reg The new regular expressions.
|
* @param reg The new regular expressions.
|
||||||
* @deprecated Referencing interfaces by regular expressions is a deprecated mechanism.
|
*
|
||||||
|
* @hide
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@SystemApi(client = MODULE_LIBRARIES)
|
||||||
public void onTetherableInterfaceRegexpsChanged(@NonNull TetheringInterfaceRegexps reg) {}
|
default void onTetherableInterfaceRegexpsChanged(@NonNull TetheringInterfaceRegexps reg) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when there was a change in the list of tetherable interfaces.
|
* Called when there was a change in the list of tetherable interfaces. Tetherable
|
||||||
|
* interface means this interface is available and can be used for tethering.
|
||||||
*
|
*
|
||||||
* <p>This will be called immediately after the callback is registered, and may be called
|
* <p>This will be called immediately after the callback is registered, and may be called
|
||||||
* multiple times later upon changes.
|
* multiple times later upon changes.
|
||||||
* @param interfaces The list of tetherable interfaces.
|
* @param interfaces The list of tetherable interface names.
|
||||||
*/
|
*/
|
||||||
public void onTetherableInterfacesChanged(@NonNull List<String> interfaces) {}
|
default void onTetherableInterfacesChanged(@NonNull List<String> interfaces) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when there was a change in the list of tethered interfaces.
|
* Called when there was a change in the list of tethered interfaces.
|
||||||
*
|
*
|
||||||
* <p>This will be called immediately after the callback is registered, and may be called
|
* <p>This will be called immediately after the callback is registered, and may be called
|
||||||
* multiple times later upon changes.
|
* multiple times later upon changes.
|
||||||
* @param interfaces The list of tethered interfaces.
|
* @param interfaces The list of 0 or more String of currently tethered interface names.
|
||||||
*/
|
*/
|
||||||
public void onTetheredInterfacesChanged(@NonNull List<String> interfaces) {}
|
default void onTetheredInterfacesChanged(@NonNull List<String> interfaces) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when an error occurred configuring tethering.
|
* Called when an error occurred configuring tethering.
|
||||||
@@ -841,7 +914,7 @@ public class TetheringManager {
|
|||||||
* @param ifName Name of the interface.
|
* @param ifName Name of the interface.
|
||||||
* @param error One of {@code TetheringManager#TETHER_ERROR_*}.
|
* @param error One of {@code TetheringManager#TETHER_ERROR_*}.
|
||||||
*/
|
*/
|
||||||
public void onError(@NonNull String ifName, int error) {}
|
default void onError(@NonNull String ifName, @TetheringIfaceError int error) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the list of tethered clients changes.
|
* Called when the list of tethered clients changes.
|
||||||
@@ -854,7 +927,7 @@ public class TetheringManager {
|
|||||||
* determine if they are still connected.
|
* determine if they are still connected.
|
||||||
* @param clients The new set of tethered clients; the collection is not ordered.
|
* @param clients The new set of tethered clients; the collection is not ordered.
|
||||||
*/
|
*/
|
||||||
public void onClientsChanged(@NonNull Collection<TetheredClient> clients) {}
|
default void onClientsChanged(@NonNull Collection<TetheredClient> clients) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when tethering offload status changes.
|
* Called when tethering offload status changes.
|
||||||
@@ -862,19 +935,20 @@ public class TetheringManager {
|
|||||||
* <p>This will be called immediately after the callback is registered.
|
* <p>This will be called immediately after the callback is registered.
|
||||||
* @param status The offload status.
|
* @param status The offload status.
|
||||||
*/
|
*/
|
||||||
public void onOffloadStatusChanged(@TetherOffloadStatus int status) {}
|
default void onOffloadStatusChanged(@TetherOffloadStatus int status) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Regular expressions used to identify tethering interfaces.
|
* Regular expressions used to identify tethering interfaces.
|
||||||
* @deprecated Referencing interfaces by regular expressions is a deprecated mechanism.
|
* @hide
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@SystemApi(client = MODULE_LIBRARIES)
|
||||||
public static class TetheringInterfaceRegexps {
|
public static class TetheringInterfaceRegexps {
|
||||||
private final String[] mTetherableBluetoothRegexs;
|
private final String[] mTetherableBluetoothRegexs;
|
||||||
private final String[] mTetherableUsbRegexs;
|
private final String[] mTetherableUsbRegexs;
|
||||||
private final String[] mTetherableWifiRegexs;
|
private final String[] mTetherableWifiRegexs;
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
public TetheringInterfaceRegexps(@NonNull String[] tetherableBluetoothRegexs,
|
public TetheringInterfaceRegexps(@NonNull String[] tetherableBluetoothRegexs,
|
||||||
@NonNull String[] tetherableUsbRegexs, @NonNull String[] tetherableWifiRegexs) {
|
@NonNull String[] tetherableUsbRegexs, @NonNull String[] tetherableWifiRegexs) {
|
||||||
mTetherableBluetoothRegexs = tetherableBluetoothRegexs.clone();
|
mTetherableBluetoothRegexs = tetherableBluetoothRegexs.clone();
|
||||||
|
|||||||
@@ -1054,7 +1054,7 @@ public class IpServer extends StateMachine {
|
|||||||
case CMD_START_TETHERING_ERROR:
|
case CMD_START_TETHERING_ERROR:
|
||||||
case CMD_STOP_TETHERING_ERROR:
|
case CMD_STOP_TETHERING_ERROR:
|
||||||
case CMD_SET_DNS_FORWARDERS_ERROR:
|
case CMD_SET_DNS_FORWARDERS_ERROR:
|
||||||
mLastError = TetheringManager.TETHER_ERROR_MASTER_ERROR;
|
mLastError = TetheringManager.TETHER_ERROR_INTERNAL_ERROR;
|
||||||
transitionTo(mInitialState);
|
transitionTo(mInitialState);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -1185,7 +1185,7 @@ public class IpServer extends StateMachine {
|
|||||||
} catch (RemoteException | ServiceSpecificException e) {
|
} catch (RemoteException | ServiceSpecificException e) {
|
||||||
mLog.e("Exception enabling NAT: " + e.toString());
|
mLog.e("Exception enabling NAT: " + e.toString());
|
||||||
cleanupUpstream();
|
cleanupUpstream();
|
||||||
mLastError = TetheringManager.TETHER_ERROR_ENABLE_NAT_ERROR;
|
mLastError = TetheringManager.TETHER_ERROR_ENABLE_FORWARDING_ERROR;
|
||||||
transitionTo(mInitialState);
|
transitionTo(mInitialState);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import static android.net.TetheringManager.TETHERING_USB;
|
|||||||
import static android.net.TetheringManager.TETHERING_WIFI;
|
import static android.net.TetheringManager.TETHERING_WIFI;
|
||||||
import static android.net.TetheringManager.TETHER_ERROR_ENTITLEMENT_UNKNOWN;
|
import static android.net.TetheringManager.TETHER_ERROR_ENTITLEMENT_UNKNOWN;
|
||||||
import static android.net.TetheringManager.TETHER_ERROR_NO_ERROR;
|
import static android.net.TetheringManager.TETHER_ERROR_NO_ERROR;
|
||||||
import static android.net.TetheringManager.TETHER_ERROR_PROVISION_FAILED;
|
import static android.net.TetheringManager.TETHER_ERROR_PROVISIONING_FAILED;
|
||||||
|
|
||||||
import android.app.AlarmManager;
|
import android.app.AlarmManager;
|
||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
@@ -579,7 +579,7 @@ public class EntitlementManager {
|
|||||||
switch (value) {
|
switch (value) {
|
||||||
case TETHER_ERROR_ENTITLEMENT_UNKNOWN: return "TETHER_ERROR_ENTITLEMENT_UNKONWN";
|
case TETHER_ERROR_ENTITLEMENT_UNKNOWN: return "TETHER_ERROR_ENTITLEMENT_UNKONWN";
|
||||||
case TETHER_ERROR_NO_ERROR: return "TETHER_ERROR_NO_ERROR";
|
case TETHER_ERROR_NO_ERROR: return "TETHER_ERROR_NO_ERROR";
|
||||||
case TETHER_ERROR_PROVISION_FAILED: return "TETHER_ERROR_PROVISION_FAILED";
|
case TETHER_ERROR_PROVISIONING_FAILED: return "TETHER_ERROR_PROVISIONING_FAILED";
|
||||||
default:
|
default:
|
||||||
return String.format("UNKNOWN ERROR (%d)", value);
|
return String.format("UNKNOWN ERROR (%d)", value);
|
||||||
}
|
}
|
||||||
@@ -592,7 +592,7 @@ public class EntitlementManager {
|
|||||||
protected void onReceiveResult(int resultCode, Bundle resultData) {
|
protected void onReceiveResult(int resultCode, Bundle resultData) {
|
||||||
int updatedCacheValue = updateEntitlementCacheValue(type, resultCode);
|
int updatedCacheValue = updateEntitlementCacheValue(type, resultCode);
|
||||||
addDownstreamMapping(type, updatedCacheValue);
|
addDownstreamMapping(type, updatedCacheValue);
|
||||||
if (updatedCacheValue == TETHER_ERROR_PROVISION_FAILED && notifyFail) {
|
if (updatedCacheValue == TETHER_ERROR_PROVISIONING_FAILED && notifyFail) {
|
||||||
mListener.onUiEntitlementFailed(type);
|
mListener.onUiEntitlementFailed(type);
|
||||||
}
|
}
|
||||||
if (receiver != null) receiver.send(updatedCacheValue, null);
|
if (receiver != null) receiver.send(updatedCacheValue, null);
|
||||||
@@ -635,8 +635,8 @@ public class EntitlementManager {
|
|||||||
mEntitlementCacheValue.put(type, resultCode);
|
mEntitlementCacheValue.put(type, resultCode);
|
||||||
return resultCode;
|
return resultCode;
|
||||||
} else {
|
} else {
|
||||||
mEntitlementCacheValue.put(type, TETHER_ERROR_PROVISION_FAILED);
|
mEntitlementCacheValue.put(type, TETHER_ERROR_PROVISIONING_FAILED);
|
||||||
return TETHER_ERROR_PROVISION_FAILED;
|
return TETHER_ERROR_PROVISIONING_FAILED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,11 +39,12 @@ import static android.net.TetheringManager.TETHERING_NCM;
|
|||||||
import static android.net.TetheringManager.TETHERING_USB;
|
import static android.net.TetheringManager.TETHERING_USB;
|
||||||
import static android.net.TetheringManager.TETHERING_WIFI;
|
import static android.net.TetheringManager.TETHERING_WIFI;
|
||||||
import static android.net.TetheringManager.TETHERING_WIFI_P2P;
|
import static android.net.TetheringManager.TETHERING_WIFI_P2P;
|
||||||
import static android.net.TetheringManager.TETHER_ERROR_MASTER_ERROR;
|
import static android.net.TetheringManager.TETHER_ERROR_INTERNAL_ERROR;
|
||||||
import static android.net.TetheringManager.TETHER_ERROR_NO_ERROR;
|
import static android.net.TetheringManager.TETHER_ERROR_NO_ERROR;
|
||||||
import static android.net.TetheringManager.TETHER_ERROR_SERVICE_UNAVAIL;
|
import static android.net.TetheringManager.TETHER_ERROR_SERVICE_UNAVAIL;
|
||||||
import static android.net.TetheringManager.TETHER_ERROR_UNAVAIL_IFACE;
|
import static android.net.TetheringManager.TETHER_ERROR_UNAVAIL_IFACE;
|
||||||
import static android.net.TetheringManager.TETHER_ERROR_UNKNOWN_IFACE;
|
import static android.net.TetheringManager.TETHER_ERROR_UNKNOWN_IFACE;
|
||||||
|
import static android.net.TetheringManager.TETHER_ERROR_UNKNOWN_TYPE;
|
||||||
import static android.net.TetheringManager.TETHER_HARDWARE_OFFLOAD_FAILED;
|
import static android.net.TetheringManager.TETHER_HARDWARE_OFFLOAD_FAILED;
|
||||||
import static android.net.TetheringManager.TETHER_HARDWARE_OFFLOAD_STARTED;
|
import static android.net.TetheringManager.TETHER_HARDWARE_OFFLOAD_STARTED;
|
||||||
import static android.net.TetheringManager.TETHER_HARDWARE_OFFLOAD_STOPPED;
|
import static android.net.TetheringManager.TETHER_HARDWARE_OFFLOAD_STOPPED;
|
||||||
@@ -545,7 +546,7 @@ public class Tethering {
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.w(TAG, "Invalid tether type.");
|
Log.w(TAG, "Invalid tether type.");
|
||||||
result = TETHER_ERROR_UNKNOWN_IFACE;
|
result = TETHER_ERROR_UNKNOWN_TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The result of Bluetooth tethering will be sent by #setBluetoothTethering.
|
// The result of Bluetooth tethering will be sent by #setBluetoothTethering.
|
||||||
@@ -586,7 +587,7 @@ public class Tethering {
|
|||||||
Binder.restoreCallingIdentity(ident);
|
Binder.restoreCallingIdentity(ident);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TETHER_ERROR_MASTER_ERROR;
|
return TETHER_ERROR_INTERNAL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setBluetoothTethering(final boolean enable, final IIntResultListener listener) {
|
private void setBluetoothTethering(final boolean enable, final IIntResultListener listener) {
|
||||||
@@ -622,7 +623,7 @@ public class Tethering {
|
|||||||
// We should figure out a way to bubble up that failure instead of sending success.
|
// We should figure out a way to bubble up that failure instead of sending success.
|
||||||
final int result = (((BluetoothPan) proxy).isTetheringOn() == enable)
|
final int result = (((BluetoothPan) proxy).isTetheringOn() == enable)
|
||||||
? TETHER_ERROR_NO_ERROR
|
? TETHER_ERROR_NO_ERROR
|
||||||
: TETHER_ERROR_MASTER_ERROR;
|
: TETHER_ERROR_INTERNAL_ERROR;
|
||||||
sendTetherResult(listener, result, TETHERING_BLUETOOTH);
|
sendTetherResult(listener, result, TETHERING_BLUETOOTH);
|
||||||
adapter.closeProfileProxy(BluetoothProfile.PAN, proxy);
|
adapter.closeProfileProxy(BluetoothProfile.PAN, proxy);
|
||||||
}
|
}
|
||||||
@@ -2180,7 +2181,7 @@ public class Tethering {
|
|||||||
// If TetherMasterSM is in ErrorState, TetherMasterSM stays there.
|
// If TetherMasterSM is in ErrorState, TetherMasterSM stays there.
|
||||||
// Thus we give a chance for TetherMasterSM to recover to InitialState
|
// Thus we give a chance for TetherMasterSM to recover to InitialState
|
||||||
// by sending CMD_CLEAR_ERROR
|
// by sending CMD_CLEAR_ERROR
|
||||||
if (error == TETHER_ERROR_MASTER_ERROR) {
|
if (error == TETHER_ERROR_INTERNAL_ERROR) {
|
||||||
mTetherMasterSM.sendMessage(TetherMasterSM.CMD_CLEAR_ERROR, who);
|
mTetherMasterSM.sendMessage(TetherMasterSM.CMD_CLEAR_ERROR, who);
|
||||||
}
|
}
|
||||||
int which;
|
int which;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import static android.net.TetheringManager.TETHERING_BLUETOOTH;
|
|||||||
import static android.net.TetheringManager.TETHERING_USB;
|
import static android.net.TetheringManager.TETHERING_USB;
|
||||||
import static android.net.TetheringManager.TETHERING_WIFI;
|
import static android.net.TetheringManager.TETHERING_WIFI;
|
||||||
import static android.net.TetheringManager.TETHERING_WIFI_P2P;
|
import static android.net.TetheringManager.TETHERING_WIFI_P2P;
|
||||||
import static android.net.TetheringManager.TETHER_ERROR_ENABLE_NAT_ERROR;
|
import static android.net.TetheringManager.TETHER_ERROR_ENABLE_FORWARDING_ERROR;
|
||||||
import static android.net.TetheringManager.TETHER_ERROR_NO_ERROR;
|
import static android.net.TetheringManager.TETHER_ERROR_NO_ERROR;
|
||||||
import static android.net.TetheringManager.TETHER_ERROR_TETHER_IFACE_ERROR;
|
import static android.net.TetheringManager.TETHER_ERROR_TETHER_IFACE_ERROR;
|
||||||
import static android.net.dhcp.IDhcpServer.STATUS_SUCCESS;
|
import static android.net.dhcp.IDhcpServer.STATUS_SUCCESS;
|
||||||
@@ -448,7 +448,7 @@ public class IpServerTest {
|
|||||||
usbTeardownOrder.verify(mNetd, times(2)).interfaceSetCfg(
|
usbTeardownOrder.verify(mNetd, times(2)).interfaceSetCfg(
|
||||||
argThat(cfg -> IFACE_NAME.equals(cfg.ifName)));
|
argThat(cfg -> IFACE_NAME.equals(cfg.ifName)));
|
||||||
usbTeardownOrder.verify(mCallback).updateInterfaceState(
|
usbTeardownOrder.verify(mCallback).updateInterfaceState(
|
||||||
mIpServer, STATE_AVAILABLE, TETHER_ERROR_ENABLE_NAT_ERROR);
|
mIpServer, STATE_AVAILABLE, TETHER_ERROR_ENABLE_FORWARDING_ERROR);
|
||||||
usbTeardownOrder.verify(mCallback).updateLinkProperties(
|
usbTeardownOrder.verify(mCallback).updateLinkProperties(
|
||||||
eq(mIpServer), mLinkPropertiesCaptor.capture());
|
eq(mIpServer), mLinkPropertiesCaptor.capture());
|
||||||
assertNoAddressesNorRoutes(mLinkPropertiesCaptor.getValue());
|
assertNoAddressesNorRoutes(mLinkPropertiesCaptor.getValue());
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import static android.net.TetheringManager.TETHERING_USB;
|
|||||||
import static android.net.TetheringManager.TETHERING_WIFI;
|
import static android.net.TetheringManager.TETHERING_WIFI;
|
||||||
import static android.net.TetheringManager.TETHER_ERROR_ENTITLEMENT_UNKNOWN;
|
import static android.net.TetheringManager.TETHER_ERROR_ENTITLEMENT_UNKNOWN;
|
||||||
import static android.net.TetheringManager.TETHER_ERROR_NO_ERROR;
|
import static android.net.TetheringManager.TETHER_ERROR_NO_ERROR;
|
||||||
import static android.net.TetheringManager.TETHER_ERROR_PROVISION_FAILED;
|
import static android.net.TetheringManager.TETHER_ERROR_PROVISIONING_FAILED;
|
||||||
import static android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY;
|
import static android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY;
|
||||||
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
||||||
|
|
||||||
@@ -284,11 +284,11 @@ public final class EntitlementManagerTest {
|
|||||||
assertEquals(0, mEnMgr.uiProvisionCount);
|
assertEquals(0, mEnMgr.uiProvisionCount);
|
||||||
mEnMgr.reset();
|
mEnMgr.reset();
|
||||||
// 3. No cache value and ui entitlement check is needed.
|
// 3. No cache value and ui entitlement check is needed.
|
||||||
mEnMgr.fakeEntitlementResult = TETHER_ERROR_PROVISION_FAILED;
|
mEnMgr.fakeEntitlementResult = TETHER_ERROR_PROVISIONING_FAILED;
|
||||||
receiver = new ResultReceiver(null) {
|
receiver = new ResultReceiver(null) {
|
||||||
@Override
|
@Override
|
||||||
protected void onReceiveResult(int resultCode, Bundle resultData) {
|
protected void onReceiveResult(int resultCode, Bundle resultData) {
|
||||||
assertEquals(TETHER_ERROR_PROVISION_FAILED, resultCode);
|
assertEquals(TETHER_ERROR_PROVISIONING_FAILED, resultCode);
|
||||||
mCallbacklatch.countDown();
|
mCallbacklatch.countDown();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -297,12 +297,13 @@ public final class EntitlementManagerTest {
|
|||||||
callbackTimeoutHelper(mCallbacklatch);
|
callbackTimeoutHelper(mCallbacklatch);
|
||||||
assertEquals(1, mEnMgr.uiProvisionCount);
|
assertEquals(1, mEnMgr.uiProvisionCount);
|
||||||
mEnMgr.reset();
|
mEnMgr.reset();
|
||||||
// 4. Cache value is TETHER_ERROR_PROVISION_FAILED and don't need to run entitlement check.
|
// 4. Cache value is TETHER_ERROR_PROVISIONING_FAILED and don't need to run entitlement
|
||||||
|
// check.
|
||||||
mEnMgr.fakeEntitlementResult = TETHER_ERROR_NO_ERROR;
|
mEnMgr.fakeEntitlementResult = TETHER_ERROR_NO_ERROR;
|
||||||
receiver = new ResultReceiver(null) {
|
receiver = new ResultReceiver(null) {
|
||||||
@Override
|
@Override
|
||||||
protected void onReceiveResult(int resultCode, Bundle resultData) {
|
protected void onReceiveResult(int resultCode, Bundle resultData) {
|
||||||
assertEquals(TETHER_ERROR_PROVISION_FAILED, resultCode);
|
assertEquals(TETHER_ERROR_PROVISIONING_FAILED, resultCode);
|
||||||
mCallbacklatch.countDown();
|
mCallbacklatch.countDown();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -311,7 +312,7 @@ public final class EntitlementManagerTest {
|
|||||||
callbackTimeoutHelper(mCallbacklatch);
|
callbackTimeoutHelper(mCallbacklatch);
|
||||||
assertEquals(0, mEnMgr.uiProvisionCount);
|
assertEquals(0, mEnMgr.uiProvisionCount);
|
||||||
mEnMgr.reset();
|
mEnMgr.reset();
|
||||||
// 5. Cache value is TETHER_ERROR_PROVISION_FAILED and ui entitlement check is needed.
|
// 5. Cache value is TETHER_ERROR_PROVISIONING_FAILED and ui entitlement check is needed.
|
||||||
mEnMgr.fakeEntitlementResult = TETHER_ERROR_NO_ERROR;
|
mEnMgr.fakeEntitlementResult = TETHER_ERROR_NO_ERROR;
|
||||||
receiver = new ResultReceiver(null) {
|
receiver = new ResultReceiver(null) {
|
||||||
@Override
|
@Override
|
||||||
@@ -364,7 +365,7 @@ public final class EntitlementManagerTest {
|
|||||||
public void verifyPermissionResult() {
|
public void verifyPermissionResult() {
|
||||||
setupForRequiredProvisioning();
|
setupForRequiredProvisioning();
|
||||||
mEnMgr.notifyUpstream(true);
|
mEnMgr.notifyUpstream(true);
|
||||||
mEnMgr.fakeEntitlementResult = TETHER_ERROR_PROVISION_FAILED;
|
mEnMgr.fakeEntitlementResult = TETHER_ERROR_PROVISIONING_FAILED;
|
||||||
mEnMgr.startProvisioningIfNeeded(TETHERING_WIFI, true);
|
mEnMgr.startProvisioningIfNeeded(TETHERING_WIFI, true);
|
||||||
mLooper.dispatchAll();
|
mLooper.dispatchAll();
|
||||||
assertFalse(mEnMgr.isCellularUpstreamPermitted());
|
assertFalse(mEnMgr.isCellularUpstreamPermitted());
|
||||||
@@ -380,15 +381,15 @@ public final class EntitlementManagerTest {
|
|||||||
public void verifyPermissionIfAllNotApproved() {
|
public void verifyPermissionIfAllNotApproved() {
|
||||||
setupForRequiredProvisioning();
|
setupForRequiredProvisioning();
|
||||||
mEnMgr.notifyUpstream(true);
|
mEnMgr.notifyUpstream(true);
|
||||||
mEnMgr.fakeEntitlementResult = TETHER_ERROR_PROVISION_FAILED;
|
mEnMgr.fakeEntitlementResult = TETHER_ERROR_PROVISIONING_FAILED;
|
||||||
mEnMgr.startProvisioningIfNeeded(TETHERING_WIFI, true);
|
mEnMgr.startProvisioningIfNeeded(TETHERING_WIFI, true);
|
||||||
mLooper.dispatchAll();
|
mLooper.dispatchAll();
|
||||||
assertFalse(mEnMgr.isCellularUpstreamPermitted());
|
assertFalse(mEnMgr.isCellularUpstreamPermitted());
|
||||||
mEnMgr.fakeEntitlementResult = TETHER_ERROR_PROVISION_FAILED;
|
mEnMgr.fakeEntitlementResult = TETHER_ERROR_PROVISIONING_FAILED;
|
||||||
mEnMgr.startProvisioningIfNeeded(TETHERING_USB, true);
|
mEnMgr.startProvisioningIfNeeded(TETHERING_USB, true);
|
||||||
mLooper.dispatchAll();
|
mLooper.dispatchAll();
|
||||||
assertFalse(mEnMgr.isCellularUpstreamPermitted());
|
assertFalse(mEnMgr.isCellularUpstreamPermitted());
|
||||||
mEnMgr.fakeEntitlementResult = TETHER_ERROR_PROVISION_FAILED;
|
mEnMgr.fakeEntitlementResult = TETHER_ERROR_PROVISIONING_FAILED;
|
||||||
mEnMgr.startProvisioningIfNeeded(TETHERING_BLUETOOTH, true);
|
mEnMgr.startProvisioningIfNeeded(TETHERING_BLUETOOTH, true);
|
||||||
mLooper.dispatchAll();
|
mLooper.dispatchAll();
|
||||||
assertFalse(mEnMgr.isCellularUpstreamPermitted());
|
assertFalse(mEnMgr.isCellularUpstreamPermitted());
|
||||||
@@ -403,7 +404,7 @@ public final class EntitlementManagerTest {
|
|||||||
mLooper.dispatchAll();
|
mLooper.dispatchAll();
|
||||||
assertTrue(mEnMgr.isCellularUpstreamPermitted());
|
assertTrue(mEnMgr.isCellularUpstreamPermitted());
|
||||||
mLooper.dispatchAll();
|
mLooper.dispatchAll();
|
||||||
mEnMgr.fakeEntitlementResult = TETHER_ERROR_PROVISION_FAILED;
|
mEnMgr.fakeEntitlementResult = TETHER_ERROR_PROVISIONING_FAILED;
|
||||||
mEnMgr.startProvisioningIfNeeded(TETHERING_USB, true);
|
mEnMgr.startProvisioningIfNeeded(TETHERING_USB, true);
|
||||||
mLooper.dispatchAll();
|
mLooper.dispatchAll();
|
||||||
assertTrue(mEnMgr.isCellularUpstreamPermitted());
|
assertTrue(mEnMgr.isCellularUpstreamPermitted());
|
||||||
@@ -465,7 +466,7 @@ public final class EntitlementManagerTest {
|
|||||||
assertEquals(0, mEnMgr.silentProvisionCount);
|
assertEquals(0, mEnMgr.silentProvisionCount);
|
||||||
mEnMgr.reset();
|
mEnMgr.reset();
|
||||||
// 6. switch upstream back to mobile again
|
// 6. switch upstream back to mobile again
|
||||||
mEnMgr.fakeEntitlementResult = TETHER_ERROR_PROVISION_FAILED;
|
mEnMgr.fakeEntitlementResult = TETHER_ERROR_PROVISIONING_FAILED;
|
||||||
mEnMgr.notifyUpstream(true);
|
mEnMgr.notifyUpstream(true);
|
||||||
mLooper.dispatchAll();
|
mLooper.dispatchAll();
|
||||||
assertEquals(0, mEnMgr.uiProvisionCount);
|
assertEquals(0, mEnMgr.uiProvisionCount);
|
||||||
@@ -477,7 +478,7 @@ public final class EntitlementManagerTest {
|
|||||||
public void testCallStopTetheringWhenUiProvisioningFail() {
|
public void testCallStopTetheringWhenUiProvisioningFail() {
|
||||||
setupForRequiredProvisioning();
|
setupForRequiredProvisioning();
|
||||||
verify(mEntitlementFailedListener, times(0)).onUiEntitlementFailed(TETHERING_WIFI);
|
verify(mEntitlementFailedListener, times(0)).onUiEntitlementFailed(TETHERING_WIFI);
|
||||||
mEnMgr.fakeEntitlementResult = TETHER_ERROR_PROVISION_FAILED;
|
mEnMgr.fakeEntitlementResult = TETHER_ERROR_PROVISIONING_FAILED;
|
||||||
mEnMgr.notifyUpstream(true);
|
mEnMgr.notifyUpstream(true);
|
||||||
mLooper.dispatchAll();
|
mLooper.dispatchAll();
|
||||||
mEnMgr.startProvisioningIfNeeded(TETHERING_WIFI, true);
|
mEnMgr.startProvisioningIfNeeded(TETHERING_WIFI, true);
|
||||||
|
|||||||
Reference in New Issue
Block a user