From 431ae9a53b85ac40b92cc36e2a8e583b1fd00c81 Mon Sep 17 00:00:00 2001 From: Peter Fong Date: Mon, 24 Jun 2019 12:56:40 -0700 Subject: Cleanup UiAutomator connection so it won't block other from using since UiAutomator only support a single connection at a time. --- .../mobly/snippet/bundled/WifiManagerSnippet.java | 24 ++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java b/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java index 3c46708..1cb1680 100644 --- a/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java +++ b/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java @@ -16,6 +16,7 @@ package com.google.android.mobly.snippet.bundled; +import android.app.UiAutomation; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -35,6 +36,8 @@ import com.google.android.mobly.snippet.bundled.utils.Utils; import com.google.android.mobly.snippet.rpc.Rpc; import com.google.android.mobly.snippet.rpc.RpcMinSdk; import com.google.android.mobly.snippet.util.Log; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import org.json.JSONArray; @@ -49,6 +52,10 @@ public class WifiManagerSnippet implements Snippet { public WifiManagerSnippetException(String msg) { super(msg); } + + public WifiManagerSnippetException(String msg, Throwable err) { + super(msg, err); + } } private static final int TIMEOUT_TOGGLE_STATE = 30; @@ -57,15 +64,24 @@ public class WifiManagerSnippet implements Snippet { private final JsonSerializer mJsonSerializer = new JsonSerializer(); private volatile boolean mIsScanResultAvailable = false; - public WifiManagerSnippet() { + public WifiManagerSnippet() throws WifiManagerSnippetException { mContext = InstrumentationRegistry.getInstrumentation().getContext(); mWifiManager = (WifiManager) mContext.getApplicationContext().getSystemService(Context.WIFI_SERVICE); if (Build.VERSION.SDK_INT >= 29) { - InstrumentationRegistry.getInstrumentation() - .getUiAutomation() - .adoptShellPermissionIdentity(); + UiAutomation uia = InstrumentationRegistry.getInstrumentation().getUiAutomation(); + uia.adoptShellPermissionIdentity(); + try { + Class cls = Class.forName("android.app.UiAutomation"); + Method destroyMethod = cls.getDeclaredMethod("destroy"); + destroyMethod.invoke(uia); + } catch (NoSuchMethodException + | IllegalAccessException + | ClassNotFoundException + | InvocationTargetException e) { + throw new WifiManagerSnippetException("Failed to cleaup Ui Automation", e); + } } } -- cgit v1.2.3 From a45ca74497012a1c0c0ae4531983e42cecfe8092 Mon Sep 17 00:00:00 2001 From: Peter Fong Date: Wed, 26 Jun 2019 09:19:09 -0700 Subject: updated to use target sdk version to check if shell permission is needed --- .../android/mobly/snippet/bundled/WifiManagerSnippet.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java b/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java index 1cb1680..f14f379 100644 --- a/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java +++ b/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java @@ -69,7 +69,7 @@ public class WifiManagerSnippet implements Snippet { mWifiManager = (WifiManager) mContext.getApplicationContext().getSystemService(Context.WIFI_SERVICE); - if (Build.VERSION.SDK_INT >= 29) { + if (mContext.getApplicationContext().getApplicationInfo().targetSdkVersion >= 29) { UiAutomation uia = InstrumentationRegistry.getInstrumentation().getUiAutomation(); uia.adoptShellPermissionIdentity(); try { @@ -77,10 +77,10 @@ public class WifiManagerSnippet implements Snippet { Method destroyMethod = cls.getDeclaredMethod("destroy"); destroyMethod.invoke(uia); } catch (NoSuchMethodException - | IllegalAccessException - | ClassNotFoundException - | InvocationTargetException e) { - throw new WifiManagerSnippetException("Failed to cleaup Ui Automation", e); + | IllegalAccessException + | ClassNotFoundException + | InvocationTargetException e) { + throw new WifiManagerSnippetException("Failed to cleaup Ui Automation", e); } } } -- cgit v1.2.3 From 9da2670f6df85bce85ea0e3e4fa4de5a594d4966 Mon Sep 17 00:00:00 2001 From: Peter Fong Date: Wed, 26 Jun 2019 13:24:37 -0700 Subject: Refactored out shell permission adoption routine --- .../mobly/snippet/bundled/WifiManagerSnippet.java | 39 ++++++++++++++-------- 1 file changed, 26 insertions(+), 13 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java b/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java index f14f379..442db0a 100644 --- a/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java +++ b/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java @@ -64,24 +64,17 @@ public class WifiManagerSnippet implements Snippet { private final JsonSerializer mJsonSerializer = new JsonSerializer(); private volatile boolean mIsScanResultAvailable = false; - public WifiManagerSnippet() throws WifiManagerSnippetException { + public WifiManagerSnippet() throws Throwable { mContext = InstrumentationRegistry.getInstrumentation().getContext(); mWifiManager = (WifiManager) mContext.getApplicationContext().getSystemService(Context.WIFI_SERVICE); + + // Starting in Android Q (29), additional restrictions are added for wifi operation. See + // below Android Q privacy changes for additional details. + // https://developer.android.com/preview/privacy/camera-connectivity if (mContext.getApplicationContext().getApplicationInfo().targetSdkVersion >= 29) { - UiAutomation uia = InstrumentationRegistry.getInstrumentation().getUiAutomation(); - uia.adoptShellPermissionIdentity(); - try { - Class cls = Class.forName("android.app.UiAutomation"); - Method destroyMethod = cls.getDeclaredMethod("destroy"); - destroyMethod.invoke(uia); - } catch (NoSuchMethodException - | IllegalAccessException - | ClassNotFoundException - | InvocationTargetException e) { - throw new WifiManagerSnippetException("Failed to cleaup Ui Automation", e); - } + adoptShellPermissionIdentity(); } } @@ -405,6 +398,26 @@ public class WifiManagerSnippet implements Snippet { @Override public void shutdown() {} + /** + * Elevate permission by adopting shell's identity. + * + * @throws Throwable + */ + private void adoptShellPermissionIdentity() throws Throwable { + UiAutomation uia = InstrumentationRegistry.getInstrumentation().getUiAutomation(); + uia.adoptShellPermissionIdentity(); + try { + Class cls = Class.forName("android.app.UiAutomation"); + Method destroyMethod = cls.getDeclaredMethod("destroy"); + destroyMethod.invoke(uia); + } catch (NoSuchMethodException + | IllegalAccessException + | ClassNotFoundException + | InvocationTargetException e) { + throw new WifiManagerSnippetException("Failed to cleaup Ui Automation", e); + } + } + private class WifiScanReceiver extends BroadcastReceiver { @Override -- cgit v1.2.3 From e62de2e63ff6ff41cb1f36ca84e4fba03626f3bd Mon Sep 17 00:00:00 2001 From: Peter Fong Date: Thu, 27 Jun 2019 09:49:42 -0700 Subject: Renamed and embedded sdk check in method --- .../mobly/snippet/bundled/WifiManagerSnippet.java | 41 +++++++++++----------- 1 file changed, 21 insertions(+), 20 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java b/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java index 442db0a..3ad85a2 100644 --- a/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java +++ b/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java @@ -69,13 +69,7 @@ public class WifiManagerSnippet implements Snippet { mWifiManager = (WifiManager) mContext.getApplicationContext().getSystemService(Context.WIFI_SERVICE); - - // Starting in Android Q (29), additional restrictions are added for wifi operation. See - // below Android Q privacy changes for additional details. - // https://developer.android.com/preview/privacy/camera-connectivity - if (mContext.getApplicationContext().getApplicationInfo().targetSdkVersion >= 29) { - adoptShellPermissionIdentity(); - } + elevatePermissionIfRequired(); } @Rpc( @@ -399,22 +393,29 @@ public class WifiManagerSnippet implements Snippet { public void shutdown() {} /** - * Elevate permission by adopting shell's identity. + * Elevates permission as require for proper wifi controls. * * @throws Throwable */ - private void adoptShellPermissionIdentity() throws Throwable { - UiAutomation uia = InstrumentationRegistry.getInstrumentation().getUiAutomation(); - uia.adoptShellPermissionIdentity(); - try { - Class cls = Class.forName("android.app.UiAutomation"); - Method destroyMethod = cls.getDeclaredMethod("destroy"); - destroyMethod.invoke(uia); - } catch (NoSuchMethodException - | IllegalAccessException - | ClassNotFoundException - | InvocationTargetException e) { - throw new WifiManagerSnippetException("Failed to cleaup Ui Automation", e); + private void elevatePermissionIfRequired() throws Throwable { + // Starting in Android Q (29), additional restrictions are added for wifi operation. See + // below Android Q privacy changes for additional details. + // https://developer.android.com/preview/privacy/camera-connectivity + if (mContext.getApplicationContext().getApplicationInfo().targetSdkVersion >= 29 + && Build.VERSION.SDK_INT >= 29) { + Log.d("Elevating permission require to enable support for wifi operation in Android Q+"); + UiAutomation uia = InstrumentationRegistry.getInstrumentation().getUiAutomation(); + uia.adoptShellPermissionIdentity(); + try { + Class cls = Class.forName("android.app.UiAutomation"); + Method destroyMethod = cls.getDeclaredMethod("destroy"); + destroyMethod.invoke(uia); + } catch (NoSuchMethodException + | IllegalAccessException + | ClassNotFoundException + | InvocationTargetException e) { + throw new WifiManagerSnippetException("Failed to cleaup Ui Automation", e); + } } } -- cgit v1.2.3 From 58d8b2c889389e098253f574144098fef46f21e6 Mon Sep 17 00:00:00 2001 From: Peter Fong Date: Mon, 1 Jul 2019 11:37:07 -0700 Subject: Minor review comment fixes --- .../android/mobly/snippet/bundled/WifiManagerSnippet.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java b/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java index 3ad85a2..8d8f19a 100644 --- a/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java +++ b/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java @@ -69,7 +69,7 @@ public class WifiManagerSnippet implements Snippet { mWifiManager = (WifiManager) mContext.getApplicationContext().getSystemService(Context.WIFI_SERVICE); - elevatePermissionIfRequired(); + adaptShellPermissionIfRequired(); } @Rpc( @@ -395,12 +395,13 @@ public class WifiManagerSnippet implements Snippet { /** * Elevates permission as require for proper wifi controls. * + * Starting in Android Q (29), additional restrictions are added for wifi operation. See + * below Android Q privacy changes for additional details. + * https://developer.android.com/preview/privacy/camera-connectivity + * * @throws Throwable */ - private void elevatePermissionIfRequired() throws Throwable { - // Starting in Android Q (29), additional restrictions are added for wifi operation. See - // below Android Q privacy changes for additional details. - // https://developer.android.com/preview/privacy/camera-connectivity + private void adaptShellPermissionIfRequired() throws Throwable { if (mContext.getApplicationContext().getApplicationInfo().targetSdkVersion >= 29 && Build.VERSION.SDK_INT >= 29) { Log.d("Elevating permission require to enable support for wifi operation in Android Q+"); -- cgit v1.2.3