Do not throw on call to isTetheringSupported w/o permission
...just return false instead.
Test: Made an app to test this. Made sure it doesn't have
Test: the required permission. Checked it crashes with
Test: SecurityException without this change. Checked that it
Test: doesn't with it.
Merged-In: Ib5b17a7f68c1327f47fe1f54c0454c51f4226907
Change-Id: Id20d3c240ec5d70d085e0366b92ab3a514f3e7c8
(cherry picked from commit ffacaef813)
This commit is contained in:
@@ -2084,16 +2084,30 @@ public class ConnectivityManager {
|
|||||||
* {@code ro.tether.denied} system property, Settings.TETHER_SUPPORTED or
|
* {@code ro.tether.denied} system property, Settings.TETHER_SUPPORTED or
|
||||||
* due to device configuration.
|
* due to device configuration.
|
||||||
*
|
*
|
||||||
|
* <p>If this app does not have permission to use this API, it will always
|
||||||
|
* return false rather than throw an exception.</p>
|
||||||
|
*
|
||||||
|
* <p>If the device has a hotspot provisioning app, the caller is required to hold the
|
||||||
|
* {@link android.Manifest.permission.TETHER_PRIVILEGED} permission.</p>
|
||||||
|
*
|
||||||
|
* <p>Otherwise, this method requires the caller to hold the ability to modify system
|
||||||
|
* settings as determined by {@link android.provider.Settings.System#canWrite}.</p>
|
||||||
|
*
|
||||||
* @return a boolean - {@code true} indicating Tethering is supported.
|
* @return a boolean - {@code true} indicating Tethering is supported.
|
||||||
*
|
*
|
||||||
* {@hide}
|
* {@hide}
|
||||||
*/
|
*/
|
||||||
@SystemApi
|
@SystemApi
|
||||||
@RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED)
|
@RequiresPermission(anyOf = {android.Manifest.permission.TETHER_PRIVILEGED,
|
||||||
|
android.Manifest.permission.WRITE_SETTINGS})
|
||||||
public boolean isTetheringSupported() {
|
public boolean isTetheringSupported() {
|
||||||
try {
|
|
||||||
String pkgName = mContext.getOpPackageName();
|
String pkgName = mContext.getOpPackageName();
|
||||||
|
try {
|
||||||
return mService.isTetheringSupported(pkgName);
|
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) {
|
} catch (RemoteException e) {
|
||||||
throw e.rethrowFromSystemServer();
|
throw e.rethrowFromSystemServer();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user