summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2020-03-03 12:51:02 +0000
committer Mark Chien <markchien@google.com> 2020-03-09 02:42:28 +0000
commitfcf74d1d8d680e67a073d7b4e13adbc2ba1fcddf (patch)
tree2e61ab6bf1653b3d445f68a48fe70397a7e8ba0c
parent4bfc09b55cbab4f40da4efba7386d81f7a97642c (diff)
Tethering: add isTetheringSupported with callerPkg parameter
BT tethering need to know whether tethering is supported for its caller that call isTetheringSupported in binder thread under BT's process. Current isTetheringSupported API is getting callerPkg inside TetheringManager that would be BT's package name for bt tethering case. Provide isTetheringSupported(String callerPkg) for caller to pass its caller's package name if the use case is under binder IPC. Bug: 146915889 Test: -boot, flash, boot Change-Id: I01646fe045772c57b4e39a5e129531f8a2cea89f Merged-In: I01646fe045772c57b4e39a5e129531f8a2cea89f Merged-In: I2a35e1b6851e7a799c343be0dd60da23514768ba (cherry picked from commit e09a92fabe7956692f34e94c198d9763bf76e53d)
-rw-r--r--api/module-lib-current.txt1
-rw-r--r--packages/Tethering/common/TetheringLib/src/android/net/TetheringManager.java19
2 files changed, 20 insertions, 0 deletions
diff --git a/api/module-lib-current.txt b/api/module-lib-current.txt
index 6863221f7fda..1b41915b95f3 100644
--- a/api/module-lib-current.txt
+++ b/api/module-lib-current.txt
@@ -47,6 +47,7 @@ package android.net {
method @NonNull public String[] getTetheredIfaces();
method @NonNull public String[] getTetheringErroredIfaces();
method public boolean isTetheringSupported();
+ method public boolean isTetheringSupported(@NonNull String);
method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void registerTetheringEventCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.TetheringManager.TetheringEventCallback);
method @RequiresPermission(anyOf={"android.permission.TETHER_PRIVILEGED", android.Manifest.permission.WRITE_SETTINGS}) public void requestLatestTetheringEntitlementResult(int, boolean, @NonNull java.util.concurrent.Executor, @NonNull android.net.TetheringManager.OnTetheringEntitlementResultListener);
method public void requestLatestTetheringEntitlementResult(int, @NonNull android.os.ResultReceiver, boolean);
diff --git a/packages/Tethering/common/TetheringLib/src/android/net/TetheringManager.java b/packages/Tethering/common/TetheringLib/src/android/net/TetheringManager.java
index fd9f7137c85d..79242c5da329 100644
--- a/packages/Tethering/common/TetheringLib/src/android/net/TetheringManager.java
+++ b/packages/Tethering/common/TetheringLib/src/android/net/TetheringManager.java
@@ -1131,6 +1131,25 @@ public class TetheringManager {
public boolean isTetheringSupported() {
final String callerPkg = mContext.getOpPackageName();
+ return isTetheringSupported(callerPkg);
+ }
+
+ /**
+ * Check if the device allows for tethering. It may be disabled via {@code ro.tether.denied}
+ * system property, Settings.TETHER_SUPPORTED or due to device configuration. This is useful
+ * for system components that query this API on behalf of an app. In particular, Bluetooth
+ * has @UnsupportedAppUsage calls that will let apps turn on bluetooth tethering if they have
+ * the right permissions, but such an app needs to know whether it can (permissions as well
+ * as support from the device) turn on tethering in the first place to show the appropriate UI.
+ *
+ * @param callerPkg The caller package name, if it is not matching the calling uid,
+ * SecurityException would be thrown.
+ * @return a boolean - {@code true} indicating Tethering is supported.
+ * @hide
+ */
+ @SystemApi(client = MODULE_LIBRARIES)
+ public boolean isTetheringSupported(@NonNull final String callerPkg) {
+
final RequestDispatcher dispatcher = new RequestDispatcher();
final int ret = dispatcher.waitForResult((connector, listener) -> {
try {