Adds read/modify permission checks to ImsService

This change adds READ/MODIFY_PHONE_STATE permission checks
to the ImsService to ensure that processes without those
permissions do not access this service illegally.

Test: Manual
Change-Id: I7740a9a6b6a12d3f9162aa5d055e7770b05fdff1
diff --git a/telephony/java/android/telephony/ims/ImsService.java b/telephony/java/android/telephony/ims/ImsService.java
index fe8dbfb..406f01e 100644
--- a/telephony/java/android/telephony/ims/ImsService.java
+++ b/telephony/java/android/telephony/ims/ImsService.java
@@ -41,6 +41,9 @@
 import com.android.ims.internal.IImsUt;
 import com.android.internal.annotations.VisibleForTesting;
 
+import static android.Manifest.permission.MODIFY_PHONE_STATE;
+import static android.Manifest.permission.READ_PHONE_STATE;
+
 /**
  * Main ImsService implementation, which binds via the Telephony ImsResolver. Services that extend
  * ImsService must register the service in their AndroidManifest to be detected by the framework.
@@ -94,6 +97,7 @@
         public void createImsFeature(int slotId, int feature, IImsFeatureStatusCallback c)
                 throws RemoteException {
             synchronized (mFeatures) {
+                enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "createImsFeature");
                 onCreateImsFeatureInternal(slotId, feature, c);
             }
         }
@@ -101,6 +105,7 @@
         @Override
         public void removeImsFeature(int slotId, int feature) throws RemoteException {
             synchronized (mFeatures) {
+                enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "removeImsFeature");
                 onRemoveImsFeatureInternal(slotId, feature);
             }
         }
@@ -108,6 +113,7 @@
         @Override
         public int startSession(int slotId, int featureType, PendingIntent incomingCallIntent,
                 IImsRegistrationListener listener) throws RemoteException {
+            enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "startSession");
             synchronized (mFeatures) {
                 MMTelFeature feature = resolveMMTelFeature(slotId, featureType);
                 if (feature != null) {
@@ -120,6 +126,7 @@
         @Override
         public void endSession(int slotId, int featureType, int sessionId) throws RemoteException {
             synchronized (mFeatures) {
+                enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "endSession");
                 MMTelFeature feature = resolveMMTelFeature(slotId, featureType);
                 if (feature != null) {
                     feature.endSession(sessionId);
@@ -130,6 +137,7 @@
         @Override
         public boolean isConnected(int slotId, int featureType, int callSessionType, int callType)
                 throws RemoteException {
+            enforceCallingOrSelfPermission(READ_PHONE_STATE, "isConnected");
             synchronized (mFeatures) {
                 MMTelFeature feature = resolveMMTelFeature(slotId, featureType);
                 if (feature != null) {
@@ -141,6 +149,7 @@
 
         @Override
         public boolean isOpened(int slotId, int featureType) throws RemoteException {
+            enforceCallingOrSelfPermission(READ_PHONE_STATE, "isOpened");
             synchronized (mFeatures) {
                 MMTelFeature feature = resolveMMTelFeature(slotId, featureType);
                 if (feature != null) {
@@ -152,6 +161,7 @@
 
         @Override
         public int getFeatureStatus(int slotId, int featureType) throws RemoteException {
+            enforceCallingOrSelfPermission(READ_PHONE_STATE, "getFeatureStatus");
             int status = ImsFeature.STATE_NOT_AVAILABLE;
             synchronized (mFeatures) {
                 SparseArray<ImsFeature> featureMap = mFeatures.get(slotId);
@@ -168,6 +178,7 @@
         @Override
         public void addRegistrationListener(int slotId, int featureType,
                 IImsRegistrationListener listener) throws RemoteException {
+            enforceCallingOrSelfPermission(READ_PHONE_STATE, "addRegistrationListener");
             synchronized (mFeatures) {
                 MMTelFeature feature = resolveMMTelFeature(slotId, featureType);
                 if (feature != null) {
@@ -179,6 +190,7 @@
         @Override
         public void removeRegistrationListener(int slotId, int featureType,
                 IImsRegistrationListener listener) throws RemoteException {
+            enforceCallingOrSelfPermission(READ_PHONE_STATE, "removeRegistrationListener");
             synchronized (mFeatures) {
                 MMTelFeature feature = resolveMMTelFeature(slotId, featureType);
                 if (feature != null) {
@@ -190,6 +202,7 @@
         @Override
         public ImsCallProfile createCallProfile(int slotId, int featureType, int sessionId,
                 int callSessionType, int callType) throws RemoteException {
+            enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "createCallProfile");
             synchronized (mFeatures) {
                 MMTelFeature feature = resolveMMTelFeature(slotId, featureType);
                 if (feature != null) {
@@ -202,6 +215,7 @@
         @Override
         public IImsCallSession createCallSession(int slotId, int featureType, int sessionId,
                 ImsCallProfile profile, IImsCallSessionListener listener) throws RemoteException {
+            enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "createCallSession");
             synchronized (mFeatures) {
                 MMTelFeature feature = resolveMMTelFeature(slotId, featureType);
                 if (feature != null) {
@@ -214,6 +228,7 @@
         @Override
         public IImsCallSession getPendingCallSession(int slotId, int featureType, int sessionId,
                 String callId) throws RemoteException {
+            enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "getPendingCallSession");
             synchronized (mFeatures) {
                 MMTelFeature feature = resolveMMTelFeature(slotId, featureType);
                 if (feature != null) {
@@ -226,6 +241,7 @@
         @Override
         public IImsUt getUtInterface(int slotId, int featureType)
                 throws RemoteException {
+            enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "getUtInterface");
             synchronized (mFeatures) {
                 MMTelFeature feature = resolveMMTelFeature(slotId, featureType);
                 if (feature != null) {
@@ -238,6 +254,7 @@
         @Override
         public IImsConfig getConfigInterface(int slotId, int featureType)
                 throws RemoteException {
+            enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "getConfigInterface");
             synchronized (mFeatures) {
                 MMTelFeature feature = resolveMMTelFeature(slotId, featureType);
                 if (feature != null) {
@@ -249,6 +266,7 @@
 
         @Override
         public void turnOnIms(int slotId, int featureType) throws RemoteException {
+            enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "turnOnIms");
             synchronized (mFeatures) {
                 MMTelFeature feature = resolveMMTelFeature(slotId, featureType);
                 if (feature != null) {
@@ -259,6 +277,7 @@
 
         @Override
         public void turnOffIms(int slotId, int featureType) throws RemoteException {
+            enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "turnOffIms");
             synchronized (mFeatures) {
                 MMTelFeature feature = resolveMMTelFeature(slotId, featureType);
                 if (feature != null) {
@@ -270,6 +289,7 @@
         @Override
         public IImsEcbm getEcbmInterface(int slotId, int featureType)
                 throws RemoteException {
+            enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "getEcbmInterface");
             synchronized (mFeatures) {
                 MMTelFeature feature = resolveMMTelFeature(slotId, featureType);
                 if (feature != null) {
@@ -282,6 +302,7 @@
         @Override
         public void setUiTTYMode(int slotId, int featureType, int uiTtyMode, Message onComplete)
                 throws RemoteException {
+            enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "setUiTTYMode");
             synchronized (mFeatures) {
                 MMTelFeature feature = resolveMMTelFeature(slotId, featureType);
                 if (feature != null) {
@@ -293,6 +314,7 @@
         @Override
         public IImsMultiEndpoint getMultiEndpointInterface(int slotId, int featureType)
                 throws RemoteException {
+            enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "getMultiEndpointInterface");
             synchronized (mFeatures) {
                 MMTelFeature feature = resolveMMTelFeature(slotId, featureType);
                 if (feature != null) {