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);
     }