diff options
| author | 2020-01-16 18:18:24 -0800 | |
|---|---|---|
| committer | 2020-01-17 18:48:42 +0000 | |
| commit | a4d9a65ff5765d20a3d7601546e8039e68f244f6 (patch) | |
| tree | 5b8920cd9230d64c0101e73ca07cf6f4010abc30 | |
| parent | 6c82ddd6881ae5a2bf7348a6dd2a80661a6e9c62 (diff) | |
WifiNetworkSpecifier: get context reflectively
Temporarily use reflection to get the context
in order to allow framework-wifi to build
against @SystemApi stubs. Will remove reflective
call once refactor is complete to allow
WifiNetworkSpecifier to get the context using
formal APIs.
Bug: 144102365
Test: Ran CTS Verifier NetworkRequest tests, verified package name
in adb logs.
Change-Id: Ib507b449f81e9ce88cdb9190e9f8390eb25819b7
| -rw-r--r-- | wifi/java/android/net/wifi/WifiNetworkSpecifier.java | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/wifi/java/android/net/wifi/WifiNetworkSpecifier.java b/wifi/java/android/net/wifi/WifiNetworkSpecifier.java index 07afd7fb6714..444e1ef041e8 100644 --- a/wifi/java/android/net/wifi/WifiNetworkSpecifier.java +++ b/wifi/java/android/net/wifi/WifiNetworkSpecifier.java @@ -20,7 +20,7 @@ import static com.android.internal.util.Preconditions.checkNotNull; import android.annotation.NonNull; import android.annotation.Nullable; -import android.app.ActivityThread; +import android.app.Application; import android.net.MacAddress; import android.net.MatchAllNetworkSpecifier; import android.net.NetworkRequest; @@ -30,8 +30,11 @@ import android.os.Parcelable; import android.os.PatternMatcher; import android.os.Process; import android.text.TextUtils; +import android.util.Log; import android.util.Pair; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.nio.charset.CharsetEncoder; import java.nio.charset.StandardCharsets; import java.util.Objects; @@ -41,6 +44,7 @@ import java.util.Objects; * {@link WifiNetworkSpecifier.Builder} class to create an instance. */ public final class WifiNetworkSpecifier extends NetworkSpecifier implements Parcelable { + private static final String TAG = "WifiNetworkSpecifier"; /** * Builder used to create {@link WifiNetworkSpecifier} objects. @@ -436,7 +440,22 @@ public final class WifiNetworkSpecifier extends NetworkSpecifier implements Parc mBssidPatternMatcher, buildWifiConfiguration(), Process.myUid(), - ActivityThread.currentApplication().getApplicationContext().getOpPackageName()); + getCurrentApplicationReflectively().getApplicationContext().getOpPackageName()); + } + + // TODO(b/144102365): Remove once refactor is complete + private static Application getCurrentApplicationReflectively() { + try { + // reflection for static method android.app.ActivityThread#currentApplication() + Class<?> klass = Class.forName("android.app.ActivityThread"); + Method currentApplicationMethod = klass.getDeclaredMethod("currentApplication"); + Object result = currentApplicationMethod.invoke(null); + return (Application) result; + } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException + | InvocationTargetException e) { + Log.e(TAG, "Failed to call ActivityThread#currentApplication() reflectively!", e); + throw new RuntimeException(e); + } } } |