summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author David Su <dysu@google.com> 2020-01-16 18:18:24 -0800
committer David Su <dysu@google.com> 2020-01-17 18:48:42 +0000
commita4d9a65ff5765d20a3d7601546e8039e68f244f6 (patch)
tree5b8920cd9230d64c0101e73ca07cf6f4010abc30
parent6c82ddd6881ae5a2bf7348a6dd2a80661a6e9c62 (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.java23
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);
+ }
}
}