Merge commit 'ac5d7e74caad0c58eb781265d3924c8b406f6b1c' from
oc-mr1-dev-plus-aosp into stage-aosp-master
Change-Id: I30866e08761de3375fbf589aeb84a5142838242c
diff --git a/android/app/AndroidManifest.xml b/android/app/AndroidManifest.xml
index 2f4e150..73a4154 100644
--- a/android/app/AndroidManifest.xml
+++ b/android/app/AndroidManifest.xml
@@ -211,7 +211,8 @@
android:label=""
android:excludeFromRecents="true"
android:configChanges="orientation|keyboardHidden"
- android:enabled="@bool/profile_supported_opp">
+ android:enabled="@bool/profile_supported_opp"
+ android:theme="@android:style/Theme.DeviceDefault.Settings">
<intent-filter>
<action android:name="com.android.bluetooth.action.TransferHistory" />
<category android:name="android.intent.category.DEFAULT" />
diff --git a/android/app/src/com/android/bluetooth/gatt/ContextMap.java b/android/app/src/com/android/bluetooth/gatt/ContextMap.java
index b328b9c..af59262 100644
--- a/android/app/src/com/android/bluetooth/gatt/ContextMap.java
+++ b/android/app/src/com/android/bluetooth/gatt/ContextMap.java
@@ -85,6 +85,12 @@
/** Flag to signal that transport is congested */
public Boolean isCongested = false;
+ /** Whether the calling app has location permission */
+ boolean hasLocationPermisson;
+
+ /** Whether the calling app has peers mac address permission */
+ boolean hasPeersMacAddressPermission;
+
/** Internal callback info queue, waiting to be send on congestion clear */
private List<CallbackInfo> mCongestionQueue = new ArrayList<CallbackInfo>();
@@ -154,7 +160,7 @@
/**
* Add an entry to the application context list.
*/
- void add(UUID uuid, WorkSource workSource, C callback, T info, GattService service) {
+ App add(UUID uuid, WorkSource workSource, C callback, T info, GattService service) {
int appUid = Binder.getCallingUid();
String appName = service.getPackageManager().getNameForUid(appUid);
if (appName == null) {
@@ -167,8 +173,10 @@
appScanStats = new AppScanStats(appName, workSource, this, service);
mAppScanStats.put(appUid, appScanStats);
}
- mApps.add(new App(uuid, callback, info, appName, appScanStats));
+ App app = new App(uuid, callback, info, appName, appScanStats);
+ mApps.add(app);
appScanStats.isRegistered = true;
+ return app;
}
}
diff --git a/android/app/src/com/android/bluetooth/gatt/GattService.java b/android/app/src/com/android/bluetooth/gatt/GattService.java
index b9c4883..319736e 100644
--- a/android/app/src/com/android/bluetooth/gatt/GattService.java
+++ b/android/app/src/com/android/bluetooth/gatt/GattService.java
@@ -63,6 +63,7 @@
import com.android.bluetooth.util.NumberUtils;
import com.android.internal.annotations.VisibleForTesting;
+import java.security.Security;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -1037,7 +1038,7 @@
if (cbApp.callback != null) {
cbApp.linkToDeath(new ScannerDeathRecipient(scannerId));
} else {
- continuePiStartScan(scannerId, cbApp.info);
+ continuePiStartScan(scannerId, cbApp);
}
} else {
mScannerMap.remove(scannerId);
@@ -1919,26 +1920,36 @@
piInfo.settings = settings;
piInfo.filters = filters;
piInfo.callingPackage = callingPackage;
- mScannerMap.add(uuid, null, null, piInfo, this);
+ ScannerMap.App app = mScannerMap.add(uuid, null, null, piInfo, this);
+ try {
+ app.hasLocationPermisson =
+ Utils.checkCallerHasLocationPermission(this, mAppOps, callingPackage);
+ } catch (SecurityException se) {
+ // No need to throw here. Just mark as not granted.
+ app.hasLocationPermisson = false;
+ }
+ try {
+ app.hasPeersMacAddressPermission = Utils.checkCallerHasPeersMacAddressPermission(this);
+ } catch (SecurityException se) {
+ // No need to throw here. Just mark as not granted.
+ app.hasPeersMacAddressPermission = false;
+ }
mScanManager.registerScanner(uuid);
}
- void continuePiStartScan(int scannerId, PendingIntentInfo piInfo) {
+ void continuePiStartScan(int scannerId, ScannerMap.App app) {
+ final PendingIntentInfo piInfo = app.info;
final ScanClient scanClient =
new ScanClient(scannerId, piInfo.settings, piInfo.filters, null);
- scanClient.hasLocationPermission =
- true; // Utils.checkCallerHasLocationPermission(this, mAppOps,
- // piInfo.callingPackage);
- scanClient.hasPeersMacAddressPermission =
- true; // Utils.checkCallerHasPeersMacAddressPermission(
- // this);
+ scanClient.hasLocationPermission = app.hasLocationPermisson;
+ scanClient.hasPeersMacAddressPermission = app.hasPeersMacAddressPermission;
scanClient.legacyForegroundApp = Utils.isLegacyForegroundApp(this, piInfo.callingPackage);
- AppScanStats app = mScannerMap.getAppScanStatsById(scannerId);
- if (app != null) {
- scanClient.stats = app;
+ AppScanStats scanStats = mScannerMap.getAppScanStatsById(scannerId);
+ if (scanStats != null) {
+ scanClient.stats = scanStats;
boolean isFilteredScan = (piInfo.filters != null) && !piInfo.filters.isEmpty();
- app.recordScanStart(piInfo.settings, isFilteredScan, scannerId);
+ scanStats.recordScanStart(piInfo.settings, isFilteredScan, scannerId);
}
mScanManager.startScan(scanClient);