Loading Android.bp +18 −0 Original line number Diff line number Diff line Loading @@ -264,6 +264,7 @@ filegroup { ":framework-appsearch-sources", ":framework-sdkext-sources", ":framework-statsd-sources", ":framework-tethering-srcs", ":updatable-media-srcs", ":framework-mediaprovider-sources", ":framework-wifi-updatable-sources", Loading Loading @@ -382,6 +383,7 @@ java_defaults { "unsupportedappusage", "updatable_media_stubs", "framework_mediaprovider_stubs", "framework-tethering", ], jarjar_rules: ":framework-jarjar-rules", Loading Loading @@ -627,10 +629,26 @@ filegroup { ], } // keep these files in sync with the package/Tethering/jarjar-rules.txt for the tethering module. filegroup { name: "framework-tethering-shared-srcs", srcs: [ "core/java/android/util/LocalLog.java", "core/java/com/android/internal/util/BitUtils.java", "core/java/com/android/internal/util/IndentingPrintWriter.java", "core/java/com/android/internal/util/IState.java", "core/java/com/android/internal/util/MessageUtils.java", "core/java/com/android/internal/util/Preconditions.java", "core/java/com/android/internal/util/State.java", "core/java/com/android/internal/util/StateMachine.java", ], } filegroup { name: "framework-tethering-annotations", srcs: [ "core/java/android/annotation/NonNull.java", "core/java/android/annotation/SystemApi.java", ], } // Build ext.jar Loading api/system-current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -1670,6 +1670,7 @@ package android.content { field public static final String SYSTEM_UPDATE_SERVICE = "system_update"; field public static final String TELEPHONY_IMS_SERVICE = "telephony_ims"; field public static final String TELEPHONY_REGISTRY_SERVICE = "telephony_registry"; field public static final String TETHERING_SERVICE = "tethering"; field public static final String VR_SERVICE = "vrmanager"; field @Deprecated public static final String WIFI_RTT_SERVICE = "rttmanager"; field public static final String WIFI_SCANNING_SERVICE = "wifiscanner"; Loading Loading @@ -7599,6 +7600,7 @@ package android.provider { field public static final String INSTALL_CARRIER_APP_NOTIFICATION_SLEEP_MILLIS = "install_carrier_app_notification_sleep_millis"; field public static final String OTA_DISABLE_AUTOMATIC_UPDATE = "ota_disable_automatic_update"; field public static final String REQUIRE_PASSWORD_TO_DECRYPT = "require_password_to_decrypt"; field public static final String TETHER_SUPPORTED = "tether_supported"; field public static final String THEATER_MODE_ON = "theater_mode_on"; field public static final String WEBVIEW_MULTIPROCESS = "webview_multiprocess"; field public static final String WIFI_BADGING_THRESHOLDS = "wifi_badging_thresholds"; core/java/android/app/SystemServiceRegistry.java +12 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,7 @@ import android.net.NetworkPolicyManager; import android.net.NetworkScoreManager; import android.net.NetworkWatchlistManager; import android.net.TestNetworkManager; import android.net.TetheringManager; import android.net.lowpan.ILowpanManager; import android.net.lowpan.LowpanManager; import android.net.nsd.INsdManager; Loading Loading @@ -339,6 +340,17 @@ public final class SystemServiceRegistry { } }); registerService(Context.TETHERING_SERVICE, TetheringManager.class, new CachedServiceFetcher<TetheringManager>() { @Override public TetheringManager createService(ContextImpl ctx) throws ServiceNotFoundException { IBinder b = ServiceManager.getService(Context.TETHERING_SERVICE); if (b == null) return null; return new TetheringManager(ctx, b); }}); registerService(Context.IPSEC_SERVICE, IpSecManager.class, new CachedServiceFetcher<IpSecManager>() { @Override Loading core/java/android/content/Context.java +9 −0 Original line number Diff line number Diff line Loading @@ -3931,6 +3931,15 @@ public abstract class Context { */ public static final String NETWORK_STACK_SERVICE = "network_stack"; /** * Use with {@link android.os.ServiceManager.getService()} to retrieve a * {@link ITetheringConnector} IBinder for communicating with the tethering service * @hide * @see TetheringClient */ @SystemApi public static final String TETHERING_SERVICE = "tethering"; /** * Use with {@link #getSystemService(String)} to retrieve a * {@link android.net.IpSecManager} for encrypting Sockets or Networks with Loading core/java/android/net/ConnectivityManager.java +43 −131 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import android.os.RemoteException; import android.os.ResultReceiver; import android.os.ServiceManager; import android.os.ServiceSpecificException; import android.os.SystemClock; import android.provider.Settings; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; Loading @@ -57,7 +58,6 @@ import android.util.ArrayMap; import android.util.Log; import android.util.SparseIntArray; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.Preconditions; import com.android.internal.util.Protocol; Loading Loading @@ -802,6 +802,7 @@ public class ConnectivityManager { private INetworkManagementService mNMService; private INetworkPolicyManager mNPManager; private TetheringManager mTetheringManager; /** * Tests if a given integer represents a valid network type. Loading Loading @@ -2339,6 +2340,28 @@ public class ConnectivityManager { return getInstanceOrNull(); } private static final int TETHERING_TIMEOUT_MS = 60_000; private final Object mTetheringLock = new Object(); private TetheringManager getTetheringManager() { synchronized (mTetheringLock) { if (mTetheringManager != null) { return mTetheringManager; } final long before = System.currentTimeMillis(); while ((mTetheringManager = (TetheringManager) mContext.getSystemService( Context.TETHERING_SERVICE)) == null) { if (System.currentTimeMillis() - before > TETHERING_TIMEOUT_MS) { Log.e(TAG, "Timeout waiting tethering service not ready yet"); throw new IllegalStateException("No tethering service yet"); } SystemClock.sleep(100); } return mTetheringManager; } } /** * Get the set of tetherable, available interfaces. This list is limited by * device configuration and current interface existence. Loading @@ -2350,11 +2373,7 @@ public class ConnectivityManager { @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) @UnsupportedAppUsage public String[] getTetherableIfaces() { try { return mService.getTetherableIfaces(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().getTetherableIfaces(); } /** Loading @@ -2367,11 +2386,7 @@ public class ConnectivityManager { @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) @UnsupportedAppUsage public String[] getTetheredIfaces() { try { return mService.getTetheredIfaces(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().getTetheredIfaces(); } /** Loading @@ -2390,11 +2405,7 @@ public class ConnectivityManager { @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) @UnsupportedAppUsage public String[] getTetheringErroredIfaces() { try { return mService.getTetheringErroredIfaces(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().getTetheringErroredIfaces(); } /** Loading @@ -2405,11 +2416,7 @@ public class ConnectivityManager { */ @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public String[] getTetheredDhcpRanges() { try { return mService.getTetheredDhcpRanges(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().getTetheredDhcpRanges(); } /** Loading Loading @@ -2438,13 +2445,7 @@ public class ConnectivityManager { */ @UnsupportedAppUsage public int tether(String iface) { try { String pkgName = mContext.getOpPackageName(); Log.i(TAG, "tether caller:" + pkgName); return mService.tether(iface, pkgName); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().tether(iface); } /** Loading @@ -2467,13 +2468,7 @@ public class ConnectivityManager { */ @UnsupportedAppUsage public int untether(String iface) { try { String pkgName = mContext.getOpPackageName(); Log.i(TAG, "untether caller:" + pkgName); return mService.untether(iface, pkgName); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().untether(iface); } /** Loading @@ -2498,16 +2493,7 @@ public class ConnectivityManager { @RequiresPermission(anyOf = {android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public boolean isTetheringSupported() { String pkgName = mContext.getOpPackageName(); try { return mService.isTetheringSupported(pkgName); } catch (SecurityException e) { // This API is not available to this caller, but for backward-compatibility // this will just return false instead of throwing. return false; } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().isTetheringSupported(); } /** Loading Loading @@ -2576,14 +2562,7 @@ public class ConnectivityManager { } }; try { String pkgName = mContext.getOpPackageName(); Log.i(TAG, "startTethering caller:" + pkgName); mService.startTethering(type, wrappedCallback, showProvisioningUi, pkgName); } catch (RemoteException e) { Log.e(TAG, "Exception trying to start tethering.", e); wrappedCallback.send(TETHER_ERROR_SERVICE_UNAVAIL, null); } getTetheringManager().startTethering(type, wrappedCallback, showProvisioningUi); } /** Loading @@ -2599,13 +2578,7 @@ public class ConnectivityManager { @SystemApi @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void stopTethering(int type) { try { String pkgName = mContext.getOpPackageName(); Log.i(TAG, "stopTethering caller:" + pkgName); mService.stopTethering(type, pkgName); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } getTetheringManager().stopTethering(type); } /** Loading @@ -2627,10 +2600,6 @@ public class ConnectivityManager { public void onUpstreamChanged(@Nullable Network network) {} } @GuardedBy("mTetheringEventCallbacks") private final ArrayMap<OnTetheringEventCallback, ITetheringEventCallback> mTetheringEventCallbacks = new ArrayMap<>(); /** * Start listening to tethering change events. Any new added callback will receive the last * tethering status right away. If callback is registered when tethering has no upstream or Loading @@ -2648,27 +2617,7 @@ public class ConnectivityManager { @NonNull final OnTetheringEventCallback callback) { Preconditions.checkNotNull(callback, "OnTetheringEventCallback cannot be null."); synchronized (mTetheringEventCallbacks) { Preconditions.checkArgument(!mTetheringEventCallbacks.containsKey(callback), "callback was already registered."); ITetheringEventCallback remoteCallback = new ITetheringEventCallback.Stub() { @Override public void onUpstreamChanged(Network network) throws RemoteException { Binder.withCleanCallingIdentity(() -> executor.execute(() -> { callback.onUpstreamChanged(network); })); } }; try { String pkgName = mContext.getOpPackageName(); Log.i(TAG, "registerTetheringUpstreamCallback:" + pkgName); mService.registerTetheringEventCallback(remoteCallback, pkgName); mTetheringEventCallbacks.put(callback, remoteCallback); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } getTetheringManager().registerTetheringEventCallback(executor, callback); } /** Loading @@ -2682,17 +2631,7 @@ public class ConnectivityManager { @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void unregisterTetheringEventCallback( @NonNull final OnTetheringEventCallback callback) { synchronized (mTetheringEventCallbacks) { ITetheringEventCallback remoteCallback = mTetheringEventCallbacks.remove(callback); Preconditions.checkNotNull(remoteCallback, "callback was not registered."); try { String pkgName = mContext.getOpPackageName(); Log.i(TAG, "unregisterTetheringEventCallback:" + pkgName); mService.unregisterTetheringEventCallback(remoteCallback, pkgName); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } getTetheringManager().unregisterTetheringEventCallback(callback); } Loading @@ -2709,11 +2648,7 @@ public class ConnectivityManager { @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) @UnsupportedAppUsage public String[] getTetherableUsbRegexs() { try { return mService.getTetherableUsbRegexs(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().getTetherableUsbRegexs(); } /** Loading @@ -2729,11 +2664,7 @@ public class ConnectivityManager { @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) @UnsupportedAppUsage public String[] getTetherableWifiRegexs() { try { return mService.getTetherableWifiRegexs(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().getTetherableWifiRegexs(); } /** Loading @@ -2749,11 +2680,7 @@ public class ConnectivityManager { @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) @UnsupportedAppUsage public String[] getTetherableBluetoothRegexs() { try { return mService.getTetherableBluetoothRegexs(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().getTetherableBluetoothRegexs(); } /** Loading @@ -2775,13 +2702,7 @@ public class ConnectivityManager { */ @UnsupportedAppUsage public int setUsbTethering(boolean enable) { try { String pkgName = mContext.getOpPackageName(); Log.i(TAG, "setUsbTethering caller:" + pkgName); return mService.setUsbTethering(enable, pkgName); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().setUsbTethering(enable); } /** {@hide} */ Loading Loading @@ -2829,11 +2750,7 @@ public class ConnectivityManager { @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) @UnsupportedAppUsage public int getLastTetherError(String iface) { try { return mService.getLastTetherError(iface); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().getLastTetherError(iface); } /** @hide */ Loading Loading @@ -2899,14 +2816,8 @@ public class ConnectivityManager { } }; try { String pkgName = mContext.getOpPackageName(); Log.i(TAG, "getLatestTetheringEntitlementResult:" + pkgName); mService.getLatestTetheringEntitlementResult(type, wrappedListener, showEntitlementUi, pkgName); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } getTetheringManager().requestLatestTetheringEntitlementResult(type, wrappedListener, showEntitlementUi); } /** Loading Loading @@ -4331,6 +4242,7 @@ public class ConnectivityManager { public void factoryReset() { try { mService.factoryReset(); getTetheringManager().stopAllTethering(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } Loading Loading
Android.bp +18 −0 Original line number Diff line number Diff line Loading @@ -264,6 +264,7 @@ filegroup { ":framework-appsearch-sources", ":framework-sdkext-sources", ":framework-statsd-sources", ":framework-tethering-srcs", ":updatable-media-srcs", ":framework-mediaprovider-sources", ":framework-wifi-updatable-sources", Loading Loading @@ -382,6 +383,7 @@ java_defaults { "unsupportedappusage", "updatable_media_stubs", "framework_mediaprovider_stubs", "framework-tethering", ], jarjar_rules: ":framework-jarjar-rules", Loading Loading @@ -627,10 +629,26 @@ filegroup { ], } // keep these files in sync with the package/Tethering/jarjar-rules.txt for the tethering module. filegroup { name: "framework-tethering-shared-srcs", srcs: [ "core/java/android/util/LocalLog.java", "core/java/com/android/internal/util/BitUtils.java", "core/java/com/android/internal/util/IndentingPrintWriter.java", "core/java/com/android/internal/util/IState.java", "core/java/com/android/internal/util/MessageUtils.java", "core/java/com/android/internal/util/Preconditions.java", "core/java/com/android/internal/util/State.java", "core/java/com/android/internal/util/StateMachine.java", ], } filegroup { name: "framework-tethering-annotations", srcs: [ "core/java/android/annotation/NonNull.java", "core/java/android/annotation/SystemApi.java", ], } // Build ext.jar Loading
api/system-current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -1670,6 +1670,7 @@ package android.content { field public static final String SYSTEM_UPDATE_SERVICE = "system_update"; field public static final String TELEPHONY_IMS_SERVICE = "telephony_ims"; field public static final String TELEPHONY_REGISTRY_SERVICE = "telephony_registry"; field public static final String TETHERING_SERVICE = "tethering"; field public static final String VR_SERVICE = "vrmanager"; field @Deprecated public static final String WIFI_RTT_SERVICE = "rttmanager"; field public static final String WIFI_SCANNING_SERVICE = "wifiscanner"; Loading Loading @@ -7599,6 +7600,7 @@ package android.provider { field public static final String INSTALL_CARRIER_APP_NOTIFICATION_SLEEP_MILLIS = "install_carrier_app_notification_sleep_millis"; field public static final String OTA_DISABLE_AUTOMATIC_UPDATE = "ota_disable_automatic_update"; field public static final String REQUIRE_PASSWORD_TO_DECRYPT = "require_password_to_decrypt"; field public static final String TETHER_SUPPORTED = "tether_supported"; field public static final String THEATER_MODE_ON = "theater_mode_on"; field public static final String WEBVIEW_MULTIPROCESS = "webview_multiprocess"; field public static final String WIFI_BADGING_THRESHOLDS = "wifi_badging_thresholds";
core/java/android/app/SystemServiceRegistry.java +12 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,7 @@ import android.net.NetworkPolicyManager; import android.net.NetworkScoreManager; import android.net.NetworkWatchlistManager; import android.net.TestNetworkManager; import android.net.TetheringManager; import android.net.lowpan.ILowpanManager; import android.net.lowpan.LowpanManager; import android.net.nsd.INsdManager; Loading Loading @@ -339,6 +340,17 @@ public final class SystemServiceRegistry { } }); registerService(Context.TETHERING_SERVICE, TetheringManager.class, new CachedServiceFetcher<TetheringManager>() { @Override public TetheringManager createService(ContextImpl ctx) throws ServiceNotFoundException { IBinder b = ServiceManager.getService(Context.TETHERING_SERVICE); if (b == null) return null; return new TetheringManager(ctx, b); }}); registerService(Context.IPSEC_SERVICE, IpSecManager.class, new CachedServiceFetcher<IpSecManager>() { @Override Loading
core/java/android/content/Context.java +9 −0 Original line number Diff line number Diff line Loading @@ -3931,6 +3931,15 @@ public abstract class Context { */ public static final String NETWORK_STACK_SERVICE = "network_stack"; /** * Use with {@link android.os.ServiceManager.getService()} to retrieve a * {@link ITetheringConnector} IBinder for communicating with the tethering service * @hide * @see TetheringClient */ @SystemApi public static final String TETHERING_SERVICE = "tethering"; /** * Use with {@link #getSystemService(String)} to retrieve a * {@link android.net.IpSecManager} for encrypting Sockets or Networks with Loading
core/java/android/net/ConnectivityManager.java +43 −131 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import android.os.RemoteException; import android.os.ResultReceiver; import android.os.ServiceManager; import android.os.ServiceSpecificException; import android.os.SystemClock; import android.provider.Settings; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; Loading @@ -57,7 +58,6 @@ import android.util.ArrayMap; import android.util.Log; import android.util.SparseIntArray; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.Preconditions; import com.android.internal.util.Protocol; Loading Loading @@ -802,6 +802,7 @@ public class ConnectivityManager { private INetworkManagementService mNMService; private INetworkPolicyManager mNPManager; private TetheringManager mTetheringManager; /** * Tests if a given integer represents a valid network type. Loading Loading @@ -2339,6 +2340,28 @@ public class ConnectivityManager { return getInstanceOrNull(); } private static final int TETHERING_TIMEOUT_MS = 60_000; private final Object mTetheringLock = new Object(); private TetheringManager getTetheringManager() { synchronized (mTetheringLock) { if (mTetheringManager != null) { return mTetheringManager; } final long before = System.currentTimeMillis(); while ((mTetheringManager = (TetheringManager) mContext.getSystemService( Context.TETHERING_SERVICE)) == null) { if (System.currentTimeMillis() - before > TETHERING_TIMEOUT_MS) { Log.e(TAG, "Timeout waiting tethering service not ready yet"); throw new IllegalStateException("No tethering service yet"); } SystemClock.sleep(100); } return mTetheringManager; } } /** * Get the set of tetherable, available interfaces. This list is limited by * device configuration and current interface existence. Loading @@ -2350,11 +2373,7 @@ public class ConnectivityManager { @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) @UnsupportedAppUsage public String[] getTetherableIfaces() { try { return mService.getTetherableIfaces(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().getTetherableIfaces(); } /** Loading @@ -2367,11 +2386,7 @@ public class ConnectivityManager { @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) @UnsupportedAppUsage public String[] getTetheredIfaces() { try { return mService.getTetheredIfaces(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().getTetheredIfaces(); } /** Loading @@ -2390,11 +2405,7 @@ public class ConnectivityManager { @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) @UnsupportedAppUsage public String[] getTetheringErroredIfaces() { try { return mService.getTetheringErroredIfaces(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().getTetheringErroredIfaces(); } /** Loading @@ -2405,11 +2416,7 @@ public class ConnectivityManager { */ @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public String[] getTetheredDhcpRanges() { try { return mService.getTetheredDhcpRanges(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().getTetheredDhcpRanges(); } /** Loading Loading @@ -2438,13 +2445,7 @@ public class ConnectivityManager { */ @UnsupportedAppUsage public int tether(String iface) { try { String pkgName = mContext.getOpPackageName(); Log.i(TAG, "tether caller:" + pkgName); return mService.tether(iface, pkgName); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().tether(iface); } /** Loading @@ -2467,13 +2468,7 @@ public class ConnectivityManager { */ @UnsupportedAppUsage public int untether(String iface) { try { String pkgName = mContext.getOpPackageName(); Log.i(TAG, "untether caller:" + pkgName); return mService.untether(iface, pkgName); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().untether(iface); } /** Loading @@ -2498,16 +2493,7 @@ public class ConnectivityManager { @RequiresPermission(anyOf = {android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public boolean isTetheringSupported() { String pkgName = mContext.getOpPackageName(); try { return mService.isTetheringSupported(pkgName); } catch (SecurityException e) { // This API is not available to this caller, but for backward-compatibility // this will just return false instead of throwing. return false; } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().isTetheringSupported(); } /** Loading Loading @@ -2576,14 +2562,7 @@ public class ConnectivityManager { } }; try { String pkgName = mContext.getOpPackageName(); Log.i(TAG, "startTethering caller:" + pkgName); mService.startTethering(type, wrappedCallback, showProvisioningUi, pkgName); } catch (RemoteException e) { Log.e(TAG, "Exception trying to start tethering.", e); wrappedCallback.send(TETHER_ERROR_SERVICE_UNAVAIL, null); } getTetheringManager().startTethering(type, wrappedCallback, showProvisioningUi); } /** Loading @@ -2599,13 +2578,7 @@ public class ConnectivityManager { @SystemApi @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void stopTethering(int type) { try { String pkgName = mContext.getOpPackageName(); Log.i(TAG, "stopTethering caller:" + pkgName); mService.stopTethering(type, pkgName); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } getTetheringManager().stopTethering(type); } /** Loading @@ -2627,10 +2600,6 @@ public class ConnectivityManager { public void onUpstreamChanged(@Nullable Network network) {} } @GuardedBy("mTetheringEventCallbacks") private final ArrayMap<OnTetheringEventCallback, ITetheringEventCallback> mTetheringEventCallbacks = new ArrayMap<>(); /** * Start listening to tethering change events. Any new added callback will receive the last * tethering status right away. If callback is registered when tethering has no upstream or Loading @@ -2648,27 +2617,7 @@ public class ConnectivityManager { @NonNull final OnTetheringEventCallback callback) { Preconditions.checkNotNull(callback, "OnTetheringEventCallback cannot be null."); synchronized (mTetheringEventCallbacks) { Preconditions.checkArgument(!mTetheringEventCallbacks.containsKey(callback), "callback was already registered."); ITetheringEventCallback remoteCallback = new ITetheringEventCallback.Stub() { @Override public void onUpstreamChanged(Network network) throws RemoteException { Binder.withCleanCallingIdentity(() -> executor.execute(() -> { callback.onUpstreamChanged(network); })); } }; try { String pkgName = mContext.getOpPackageName(); Log.i(TAG, "registerTetheringUpstreamCallback:" + pkgName); mService.registerTetheringEventCallback(remoteCallback, pkgName); mTetheringEventCallbacks.put(callback, remoteCallback); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } getTetheringManager().registerTetheringEventCallback(executor, callback); } /** Loading @@ -2682,17 +2631,7 @@ public class ConnectivityManager { @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void unregisterTetheringEventCallback( @NonNull final OnTetheringEventCallback callback) { synchronized (mTetheringEventCallbacks) { ITetheringEventCallback remoteCallback = mTetheringEventCallbacks.remove(callback); Preconditions.checkNotNull(remoteCallback, "callback was not registered."); try { String pkgName = mContext.getOpPackageName(); Log.i(TAG, "unregisterTetheringEventCallback:" + pkgName); mService.unregisterTetheringEventCallback(remoteCallback, pkgName); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } getTetheringManager().unregisterTetheringEventCallback(callback); } Loading @@ -2709,11 +2648,7 @@ public class ConnectivityManager { @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) @UnsupportedAppUsage public String[] getTetherableUsbRegexs() { try { return mService.getTetherableUsbRegexs(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().getTetherableUsbRegexs(); } /** Loading @@ -2729,11 +2664,7 @@ public class ConnectivityManager { @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) @UnsupportedAppUsage public String[] getTetherableWifiRegexs() { try { return mService.getTetherableWifiRegexs(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().getTetherableWifiRegexs(); } /** Loading @@ -2749,11 +2680,7 @@ public class ConnectivityManager { @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) @UnsupportedAppUsage public String[] getTetherableBluetoothRegexs() { try { return mService.getTetherableBluetoothRegexs(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().getTetherableBluetoothRegexs(); } /** Loading @@ -2775,13 +2702,7 @@ public class ConnectivityManager { */ @UnsupportedAppUsage public int setUsbTethering(boolean enable) { try { String pkgName = mContext.getOpPackageName(); Log.i(TAG, "setUsbTethering caller:" + pkgName); return mService.setUsbTethering(enable, pkgName); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().setUsbTethering(enable); } /** {@hide} */ Loading Loading @@ -2829,11 +2750,7 @@ public class ConnectivityManager { @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) @UnsupportedAppUsage public int getLastTetherError(String iface) { try { return mService.getLastTetherError(iface); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getTetheringManager().getLastTetherError(iface); } /** @hide */ Loading Loading @@ -2899,14 +2816,8 @@ public class ConnectivityManager { } }; try { String pkgName = mContext.getOpPackageName(); Log.i(TAG, "getLatestTetheringEntitlementResult:" + pkgName); mService.getLatestTetheringEntitlementResult(type, wrappedListener, showEntitlementUi, pkgName); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } getTetheringManager().requestLatestTetheringEntitlementResult(type, wrappedListener, showEntitlementUi); } /** Loading Loading @@ -4331,6 +4242,7 @@ public class ConnectivityManager { public void factoryReset() { try { mService.factoryReset(); getTetheringManager().stopAllTethering(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } Loading