Fix permissions on TelephonyManager
bug:19257083
Change-Id: Ib141f372feac21f53e61b3385663b2ff0ec1ec7f
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 0e82b99..d6216c5 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -1002,11 +1002,17 @@
Log.e(LOG_TAG, "silenseRinger not supported");
}
- public boolean isOffhook() {
- return isOffhookForSubscriber(getDefaultSubscription());
+ @Override
+ public boolean isOffhook(String callingPackage) {
+ return isOffhookForSubscriber(getDefaultSubscription(), callingPackage);
}
- public boolean isOffhookForSubscriber(int subId) {
+ @Override
+ public boolean isOffhookForSubscriber(int subId, String callingPackage) {
+ if (!canReadPhoneState(callingPackage, "isOffhookForSubscriber")) {
+ return false;
+ }
+
final Phone phone = getPhone(subId);
if (phone != null) {
return (phone.getState() == PhoneConstants.State.OFFHOOK);
@@ -1015,11 +1021,17 @@
}
}
- public boolean isRinging() {
- return (isRingingForSubscriber(getDefaultSubscription()));
+ @Override
+ public boolean isRinging(String callingPackage) {
+ return (isRingingForSubscriber(getDefaultSubscription(), callingPackage));
}
- public boolean isRingingForSubscriber(int subId) {
+ @Override
+ public boolean isRingingForSubscriber(int subId, String callingPackage) {
+ if (!canReadPhoneState(callingPackage, "isRingingForSubscriber")) {
+ return false;
+ }
+
final Phone phone = getPhone(subId);
if (phone != null) {
return (phone.getState() == PhoneConstants.State.RINGING);
@@ -1028,11 +1040,17 @@
}
}
- public boolean isIdle() {
- return isIdleForSubscriber(getDefaultSubscription());
+ @Override
+ public boolean isIdle(String callingPackage) {
+ return isIdleForSubscriber(getDefaultSubscription(), callingPackage);
}
- public boolean isIdleForSubscriber(int subId) {
+ @Override
+ public boolean isIdleForSubscriber(int subId, String callingPackage) {
+ if (!canReadPhoneState(callingPackage, "isIdleForSubscriber")) {
+ return false;
+ }
+
final Phone phone = getPhone(subId);
if (phone != null) {
return (phone.getState() == PhoneConstants.State.IDLE);
@@ -1205,11 +1223,20 @@
}
}
- public boolean isRadioOn() {
- return isRadioOnForSubscriber(getDefaultSubscription());
+ @Override
+ public boolean isRadioOn(String callingPackage) {
+ return isRadioOnForSubscriber(getDefaultSubscription(), callingPackage);
}
- public boolean isRadioOnForSubscriber(int subId) {
+ @Override
+ public boolean isRadioOnForSubscriber(int subId, String callingPackage) {
+ if (!canReadPhoneState(callingPackage, "isRadioOnForSubscriber")) {
+ return false;
+ }
+ return isRadioOnForSubscriber(subId);
+ }
+
+ private boolean isRadioOnForSubscriber(int subId) {
final Phone phone = getPhone(subId);
if (phone != null) {
return phone.getServiceState().getState() != ServiceState.STATE_POWER_OFF;
@@ -1625,6 +1652,7 @@
Log.e(LOG_TAG, "[PhoneIntfMgr] " + msg);
}
+ @Override
public int getActivePhoneType() {
return getActivePhoneTypeForSubscriber(getDefaultSubscription());
}
@@ -1642,12 +1670,16 @@
/**
* Returns the CDMA ERI icon index to display
*/
- public int getCdmaEriIconIndex() {
- return getCdmaEriIconIndexForSubscriber(getDefaultSubscription());
+ @Override
+ public int getCdmaEriIconIndex(String callingPackage) {
+ return getCdmaEriIconIndexForSubscriber(getDefaultSubscription(), callingPackage);
}
@Override
- public int getCdmaEriIconIndexForSubscriber(int subId) {
+ public int getCdmaEriIconIndexForSubscriber(int subId, String callingPackage) {
+ if (!canReadPhoneState(callingPackage, "getCdmaEriIconIndexForSubscriber")) {
+ return -1;
+ }
final Phone phone = getPhone(subId);
if (phone != null) {
return phone.getCdmaEriIconIndex();
@@ -1661,12 +1693,16 @@
* 0 - ON
* 1 - FLASHING
*/
- public int getCdmaEriIconMode() {
- return getCdmaEriIconModeForSubscriber(getDefaultSubscription());
+ @Override
+ public int getCdmaEriIconMode(String callingPackage) {
+ return getCdmaEriIconModeForSubscriber(getDefaultSubscription(), callingPackage);
}
@Override
- public int getCdmaEriIconModeForSubscriber(int subId) {
+ public int getCdmaEriIconModeForSubscriber(int subId, String callingPackage) {
+ if (!canReadPhoneState(callingPackage, "getCdmaEriIconModeForSubscriber")) {
+ return -1;
+ }
final Phone phone = getPhone(subId);
if (phone != null) {
return phone.getCdmaEriIconMode();
@@ -1678,12 +1714,16 @@
/**
* Returns the CDMA ERI text,
*/
- public String getCdmaEriText() {
- return getCdmaEriTextForSubscriber(getDefaultSubscription());
+ @Override
+ public String getCdmaEriText(String callingPackage) {
+ return getCdmaEriTextForSubscriber(getDefaultSubscription(), callingPackage);
}
@Override
- public String getCdmaEriTextForSubscriber(int subId) {
+ public String getCdmaEriTextForSubscriber(int subId, String callingPackage) {
+ if (!canReadPhoneState(callingPackage, "getCdmaEriIconTextForSubscriber")) {
+ return null;
+ }
final Phone phone = getPhone(subId);
if (phone != null) {
return phone.getCdmaEriText();
@@ -1764,17 +1804,20 @@
* @Deprecated to be removed Q3 2013 use {@link #getDataNetworkType}.
*/
@Override
- public int getNetworkType() {
- return getNetworkTypeForSubscriber(getDefaultSubscription());
+ public int getNetworkType(String callingPackage) {
+ return getNetworkTypeForSubscriber(getDefaultSubscription(), callingPackage);
}
/**
* Returns the network type for a subId
*/
@Override
- public int getNetworkTypeForSubscriber(int subId) {
+ public int getNetworkTypeForSubscriber(int subId, String callingPackage) {
+ if (!canReadPhoneState(callingPackage, "getNetworkTypeForSubscriber")) {
+ return TelephonyManager.NETWORK_TYPE_UNKNOWN;
+ }
final Phone phone = getPhone(subId);
- if (phone != null) {
+ if (phone != null) {
return phone.getServiceState().getDataNetworkType();
} else {
return TelephonyManager.NETWORK_TYPE_UNKNOWN;
@@ -1785,15 +1828,19 @@
* Returns the data network type
*/
@Override
- public int getDataNetworkType() {
- return getDataNetworkTypeForSubscriber(getDefaultSubscription());
+ public int getDataNetworkType(String callingPackage) {
+ return getDataNetworkTypeForSubscriber(getDefaultSubscription(), callingPackage);
}
/**
* Returns the data network type for a subId
*/
@Override
- public int getDataNetworkTypeForSubscriber(int subId) {
+ public int getDataNetworkTypeForSubscriber(int subId, String callingPackage) {
+ if (!canReadPhoneState(callingPackage, "getDataNetworkTypeForSubscriber")) {
+ return TelephonyManager.NETWORK_TYPE_UNKNOWN;
+ }
+
final Phone phone = getPhone(subId);
if (phone != null) {
return phone.getServiceState().getDataNetworkType();
@@ -1850,15 +1897,21 @@
* is a tri-state return value as for a period of time
* the mode may be unknown.
*
+ * @param callingPackage the name of the package making the call.
* @return {@link Phone#LTE_ON_CDMA_UNKNOWN}, {@link Phone#LTE_ON_CDMA_FALSE}
* or {@link Phone#LTE_ON_CDMA_TRUE}
*/
- public int getLteOnCdmaMode() {
- return getLteOnCdmaModeForSubscriber(getDefaultSubscription());
+ @Override
+ public int getLteOnCdmaMode(String callingPackage) {
+ return getLteOnCdmaModeForSubscriber(getDefaultSubscription(), callingPackage);
}
@Override
- public int getLteOnCdmaModeForSubscriber(int subId) {
+ public int getLteOnCdmaModeForSubscriber(int subId, String callingPackage) {
+ if (!canReadPhoneState(callingPackage, "getLteOnCdmaModeForSubscriber")) {
+ return PhoneConstants.LTE_ON_CDMA_UNKNOWN;
+ }
+
final Phone phone = getPhone(subId);
if (phone == null) {
return PhoneConstants.LTE_ON_CDMA_UNKNOWN;
@@ -2550,7 +2603,11 @@
}
@Override
- public int getRadioAccessFamily(int phoneId) {
+ public int getRadioAccessFamily(int phoneId, String callingPackage) {
+ if (!canReadPhoneState(callingPackage, "getRadioAccessFamily")) {
+ return RadioAccessFamily.RAF_UNKNOWN;
+ }
+
return ProxyController.getInstance().getRadioAccessFamily(phoneId);
}