Modify some TelephonyManager APIs in PhoneInterfaceManager.
+ Allow some TelephonyManager API to return proper values when called
from service with INTERACT_ACROSS_USERS_FULL with secondary user logged in.
Bug: 26609435
Change-Id: I542001a4b63adf22076330de2d843f60d543c7da
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 2b1cb6f..6ee7099 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -1442,7 +1442,8 @@
return null;
}
- if (checkIfCallerIsSelfOrForegroundUser()) {
+ if (checkIfCallerIsSelfOrForegroundUser() ||
+ checkCallerInteractAcrossUsersFull()) {
if (DBG_LOC) log("getCellLocation: is active user");
Bundle data = new Bundle();
Phone phone = getPhone(mSubscriptionController.getDefaultDataSubId());
@@ -1517,7 +1518,8 @@
return null;
}
- if (checkIfCallerIsSelfOrForegroundUser()) {
+ if (checkIfCallerIsSelfOrForegroundUser() ||
+ checkCallerInteractAcrossUsersFull()) {
if (DBG_LOC) log("getNeighboringCellInfo: is active user");
ArrayList<NeighboringCellInfo> cells = null;
@@ -1547,7 +1549,8 @@
return null;
}
- if (checkIfCallerIsSelfOrForegroundUser()) {
+ if (checkIfCallerIsSelfOrForegroundUser() ||
+ checkCallerInteractAcrossUsersFull()) {
if (DBG_LOC) log("getAllCellInfo: is active user");
List<CellInfo> cellInfos = new ArrayList<CellInfo>();
for (Phone phone : PhoneFactory.getPhones()) {
@@ -1570,6 +1573,15 @@
// Internal helper methods.
//
+ /**
+ * Returns true if the caller holds INTERACT_ACROSS_USERS_FULL.
+ */
+ private boolean checkCallerInteractAcrossUsersFull() {
+ return mPhone.getContext().checkCallingOrSelfPermission(
+ android.Manifest.permission.INTERACT_ACROSS_USERS_FULL)
+ == PackageManager.PERMISSION_GRANTED;
+ }
+
private static boolean checkIfCallerIsSelfOrForegroundUser() {
boolean ok;