[NAN] Provide calling package name to service
Useful for permission checks.
Bug: 30000323
Change-Id: I8c7f06cff346437aa24ca5da9822cbd7b20c59c4
(cherry picked from commit 7531a28e2611039a8120305c14a96b8c61fff563)
diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java
index 55744b9..42ddf10 100644
--- a/core/java/android/app/SystemServiceRegistry.java
+++ b/core/java/android/app/SystemServiceRegistry.java
@@ -515,15 +515,15 @@
}});
registerService(Context.WIFI_NAN_SERVICE, WifiNanManager.class,
- new StaticServiceFetcher<WifiNanManager>() {
+ new CachedServiceFetcher<WifiNanManager>() {
@Override
- public WifiNanManager createService() {
+ public WifiNanManager createService(ContextImpl ctx) {
IBinder b = ServiceManager.getService(Context.WIFI_NAN_SERVICE);
IWifiNanManager service = IWifiNanManager.Stub.asInterface(b);
if (service == null) {
return null;
}
- return new WifiNanManager(service);
+ return new WifiNanManager(ctx.getOuterContext(), service);
}});
registerService(Context.WIFI_SCANNING_SERVICE, WifiScanner.class,
diff --git a/wifi/java/android/net/wifi/nan/IWifiNanManager.aidl b/wifi/java/android/net/wifi/nan/IWifiNanManager.aidl
index b8dd1a5..17ec1bc 100644
--- a/wifi/java/android/net/wifi/nan/IWifiNanManager.aidl
+++ b/wifi/java/android/net/wifi/nan/IWifiNanManager.aidl
@@ -38,7 +38,7 @@
boolean isUsageEnabled();
// client API
- int connect(in IBinder binder, in IWifiNanEventCallback callback,
+ int connect(in IBinder binder, in String callingPackage, in IWifiNanEventCallback callback,
in ConfigRequest configRequest);
void disconnect(int clientId, in IBinder binder);
diff --git a/wifi/java/android/net/wifi/nan/WifiNanManager.java b/wifi/java/android/net/wifi/nan/WifiNanManager.java
index dfb1afe..8a499d3 100644
--- a/wifi/java/android/net/wifi/nan/WifiNanManager.java
+++ b/wifi/java/android/net/wifi/nan/WifiNanManager.java
@@ -22,6 +22,7 @@
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.annotation.SystemApi;
+import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkRequest;
import android.net.wifi.RttManager;
@@ -220,6 +221,7 @@
public static final int WIFI_NAN_DATA_PATH_ROLE_RESPONDER = 1;
+ private final Context mContext;
private final IWifiNanManager mService;
private final Object mLock = new Object(); // lock access to the following vars
@@ -239,7 +241,8 @@
/**
* {@hide}
*/
- public WifiNanManager(IWifiNanManager service) {
+ public WifiNanManager(Context context, IWifiNanManager service) {
+ mContext = context;
mService = service;
}
@@ -324,7 +327,7 @@
mLooper = looper;
try {
- mClientId = mService.connect(mBinder,
+ mClientId = mService.connect(mBinder, mContext.getOpPackageName(),
new WifiNanEventCallbackProxy(this, looper, callback), configRequest);
} catch (RemoteException e) {
mClientId = INVALID_CLIENT_ID;