Loading src/java/com/android/internal/telephony/Phone.java +6 −1 Original line number Diff line number Diff line Loading @@ -2098,4 +2098,9 @@ public interface Phone { * Returns the modem activity information */ public void getModemActivityInfo(Message response); /** * Set boolean broadcastEmergencyCallStateChanges */ public void setBroadcastEmergencyCallStateChanges(boolean broadcast); } src/java/com/android/internal/telephony/PhoneBase.java +22 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.internal.telephony; import android.app.ActivityManagerNative; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; Loading @@ -33,6 +34,7 @@ import android.os.Message; import android.os.Registrant; import android.os.RegistrantList; import android.os.SystemProperties; import android.os.UserHandle; import android.preference.PreferenceManager; import android.provider.Settings; import android.telecom.VideoProfile; Loading Loading @@ -87,6 +89,7 @@ import java.util.concurrent.atomic.AtomicReference; public abstract class PhoneBase extends Handler implements Phone { private static final String LOG_TAG = "PhoneBase"; private static final boolean DBG = true; private boolean mImsIntentReceiverRegistered = false; private BroadcastReceiver mImsIntentReceiver = new BroadcastReceiver() { Loading Loading @@ -250,6 +253,8 @@ public abstract class PhoneBase extends Handler implements Phone { protected int mReportInterval = 0; // ms protected int mLceStatus = RILConstants.LCE_NOT_AVAILABLE; private boolean mBroadcastEmergencyCallStateChanges = false; @Override public String getPhoneName() { return mName; Loading Loading @@ -2605,6 +2610,21 @@ public abstract class PhoneBase extends Handler implements Phone { return false; } public void sendEmergencyCallStateChange(boolean callActive) { if (mBroadcastEmergencyCallStateChanges) { Intent intent = new Intent(TelephonyIntents.ACTION_EMERGENCY_CALL_STATE_CHANGED); intent.putExtra(PhoneConstants.PHONE_IN_EMERGENCY_CALL, callActive); SubscriptionManager.putPhoneIdAndSubIdExtra(intent, getPhoneId()); ActivityManagerNative.broadcastStickyIntent(intent, null, UserHandle.USER_ALL); if (DBG) Rlog.d(LOG_TAG, "sendEmergencyCallStateChange"); } } @Override public void setBroadcastEmergencyCallStateChanges(boolean broadcast) { mBroadcastEmergencyCallStateChanges = broadcast; } public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println("PhoneBase: subId=" + getSubId()); pw.println(" mPhoneId=" + mPhoneId); Loading src/java/com/android/internal/telephony/PhoneProxy.java +20 −0 Original line number Diff line number Diff line Loading @@ -175,6 +175,21 @@ public class PhoneProxy extends Handler implements Phone { } // Force update IMS service ImsManager.updateImsServiceConfig(mContext, mPhoneId, true); // Update broadcastEmergencyCallStateChanges CarrierConfigManager configMgr = (CarrierConfigManager) mActivePhone.getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE); PersistableBundle b = configMgr.getConfigForSubId(mActivePhone.getSubId()); if (b != null) { boolean broadcastEmergencyCallStateChanges = b.getBoolean( CarrierConfigManager.KEY_BROADCAST_EMERGENCY_CALL_STATE_CHANGES_BOOL); logd("broadcastEmergencyCallStateChanges =" + broadcastEmergencyCallStateChanges); mActivePhone.setBroadcastEmergencyCallStateChanges( broadcastEmergencyCallStateChanges); } else { loge("didn't get broadcastEmergencyCallStateChanges from carrier config"); } break; default: Loading Loading @@ -1639,6 +1654,11 @@ public class PhoneProxy extends Handler implements Phone { return mActivePhone.isWifiCallingEnabled(); } @Override public void setBroadcastEmergencyCallStateChanges(boolean broadcast) { mActivePhone.setBroadcastEmergencyCallStateChanges(broadcast); } public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { try { ((PhoneBase)mActivePhone).dump(fd, pw, args); Loading src/java/com/android/internal/telephony/PhoneSubInfoController.java +56 −7 Original line number Diff line number Diff line Loading @@ -18,6 +18,9 @@ package com.android.internal.telephony; import android.app.AppOpsManager; import android.content.Context; import android.os.Binder; import android.os.RemoteException; import android.os.ServiceManager; import android.telephony.SubscriptionManager; Loading @@ -28,22 +31,68 @@ import java.lang.NullPointerException; public class PhoneSubInfoController extends IPhoneSubInfo.Stub { private static final String TAG = "PhoneSubInfoController"; private Phone[] mPhone; public PhoneSubInfoController(Phone[] phone) { mPhone = phone; private final Phone[] mPhone; private final Context mContext; private final AppOpsManager mAppOps; public PhoneSubInfoController(Phone[] phones) { mPhone = phones; Context context = null; AppOpsManager appOpsManager = null; for (Phone phone : mPhone) { if (phone != null) { context = phone.getContext(); appOpsManager = context.getSystemService(AppOpsManager.class); break; } } mContext = context; mAppOps = appOpsManager; if (ServiceManager.getService("iphonesubinfo") == null) { ServiceManager.addService("iphonesubinfo", this); } } // try-state // either have permission (true), don't (exception), or explicitly turned off (false) private boolean canReadPhoneState(String callingPackage, String message) { if (mContext == null) return false; try { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, message); // SKIP checking for run-time permission since caller or self has PRIVILEDGED permission return true; } catch (SecurityException e) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.READ_PHONE_STATE, message); } if (mAppOps.noteOp(AppOpsManager.OP_READ_PHONE_STATE, Binder.getCallingUid(), callingPackage) != AppOpsManager.MODE_ALLOWED) { return false; } return true; } public String getDeviceId(String callingPackage) { return getDeviceIdForPhone(SubscriptionManager.getPhoneId(getDefaultSubscription())); return getDeviceIdForPhone(SubscriptionManager.getPhoneId(getDefaultSubscription()), callingPackage); } public String getDeviceIdForPhone(int phoneId, String callingPackage) { if (!canReadPhoneState(callingPackage, "getDeviceId")) { return null; } public String getDeviceIdForPhone(int phoneId) { Phone phone = getPhone(phoneId); final Phone phone = getPhone(phoneId); if (phone != null) { phone.getContext().enforceCallingOrSelfPermission( android.Manifest.permission.READ_PHONE_STATE, "Requires READ_PHONE_STATE"); return phone.getDeviceId(); } else { Rlog.e(TAG,"getDeviceIdForPhone phone " + phoneId + " is null"); Loading src/java/com/android/internal/telephony/PhoneSubInfoProxy.java +1 −1 Original line number Diff line number Diff line Loading @@ -152,7 +152,7 @@ public class PhoneSubInfoProxy extends IPhoneSubInfo.Stub { } @Override public String getDeviceIdForPhone(int phoneId) throws RemoteException { public String getDeviceIdForPhone(int phoneId, String callingPackage) throws RemoteException { // FIXME: getDeviceIdForPhone return null; } Loading Loading
src/java/com/android/internal/telephony/Phone.java +6 −1 Original line number Diff line number Diff line Loading @@ -2098,4 +2098,9 @@ public interface Phone { * Returns the modem activity information */ public void getModemActivityInfo(Message response); /** * Set boolean broadcastEmergencyCallStateChanges */ public void setBroadcastEmergencyCallStateChanges(boolean broadcast); }
src/java/com/android/internal/telephony/PhoneBase.java +22 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.internal.telephony; import android.app.ActivityManagerNative; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; Loading @@ -33,6 +34,7 @@ import android.os.Message; import android.os.Registrant; import android.os.RegistrantList; import android.os.SystemProperties; import android.os.UserHandle; import android.preference.PreferenceManager; import android.provider.Settings; import android.telecom.VideoProfile; Loading Loading @@ -87,6 +89,7 @@ import java.util.concurrent.atomic.AtomicReference; public abstract class PhoneBase extends Handler implements Phone { private static final String LOG_TAG = "PhoneBase"; private static final boolean DBG = true; private boolean mImsIntentReceiverRegistered = false; private BroadcastReceiver mImsIntentReceiver = new BroadcastReceiver() { Loading Loading @@ -250,6 +253,8 @@ public abstract class PhoneBase extends Handler implements Phone { protected int mReportInterval = 0; // ms protected int mLceStatus = RILConstants.LCE_NOT_AVAILABLE; private boolean mBroadcastEmergencyCallStateChanges = false; @Override public String getPhoneName() { return mName; Loading Loading @@ -2605,6 +2610,21 @@ public abstract class PhoneBase extends Handler implements Phone { return false; } public void sendEmergencyCallStateChange(boolean callActive) { if (mBroadcastEmergencyCallStateChanges) { Intent intent = new Intent(TelephonyIntents.ACTION_EMERGENCY_CALL_STATE_CHANGED); intent.putExtra(PhoneConstants.PHONE_IN_EMERGENCY_CALL, callActive); SubscriptionManager.putPhoneIdAndSubIdExtra(intent, getPhoneId()); ActivityManagerNative.broadcastStickyIntent(intent, null, UserHandle.USER_ALL); if (DBG) Rlog.d(LOG_TAG, "sendEmergencyCallStateChange"); } } @Override public void setBroadcastEmergencyCallStateChanges(boolean broadcast) { mBroadcastEmergencyCallStateChanges = broadcast; } public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println("PhoneBase: subId=" + getSubId()); pw.println(" mPhoneId=" + mPhoneId); Loading
src/java/com/android/internal/telephony/PhoneProxy.java +20 −0 Original line number Diff line number Diff line Loading @@ -175,6 +175,21 @@ public class PhoneProxy extends Handler implements Phone { } // Force update IMS service ImsManager.updateImsServiceConfig(mContext, mPhoneId, true); // Update broadcastEmergencyCallStateChanges CarrierConfigManager configMgr = (CarrierConfigManager) mActivePhone.getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE); PersistableBundle b = configMgr.getConfigForSubId(mActivePhone.getSubId()); if (b != null) { boolean broadcastEmergencyCallStateChanges = b.getBoolean( CarrierConfigManager.KEY_BROADCAST_EMERGENCY_CALL_STATE_CHANGES_BOOL); logd("broadcastEmergencyCallStateChanges =" + broadcastEmergencyCallStateChanges); mActivePhone.setBroadcastEmergencyCallStateChanges( broadcastEmergencyCallStateChanges); } else { loge("didn't get broadcastEmergencyCallStateChanges from carrier config"); } break; default: Loading Loading @@ -1639,6 +1654,11 @@ public class PhoneProxy extends Handler implements Phone { return mActivePhone.isWifiCallingEnabled(); } @Override public void setBroadcastEmergencyCallStateChanges(boolean broadcast) { mActivePhone.setBroadcastEmergencyCallStateChanges(broadcast); } public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { try { ((PhoneBase)mActivePhone).dump(fd, pw, args); Loading
src/java/com/android/internal/telephony/PhoneSubInfoController.java +56 −7 Original line number Diff line number Diff line Loading @@ -18,6 +18,9 @@ package com.android.internal.telephony; import android.app.AppOpsManager; import android.content.Context; import android.os.Binder; import android.os.RemoteException; import android.os.ServiceManager; import android.telephony.SubscriptionManager; Loading @@ -28,22 +31,68 @@ import java.lang.NullPointerException; public class PhoneSubInfoController extends IPhoneSubInfo.Stub { private static final String TAG = "PhoneSubInfoController"; private Phone[] mPhone; public PhoneSubInfoController(Phone[] phone) { mPhone = phone; private final Phone[] mPhone; private final Context mContext; private final AppOpsManager mAppOps; public PhoneSubInfoController(Phone[] phones) { mPhone = phones; Context context = null; AppOpsManager appOpsManager = null; for (Phone phone : mPhone) { if (phone != null) { context = phone.getContext(); appOpsManager = context.getSystemService(AppOpsManager.class); break; } } mContext = context; mAppOps = appOpsManager; if (ServiceManager.getService("iphonesubinfo") == null) { ServiceManager.addService("iphonesubinfo", this); } } // try-state // either have permission (true), don't (exception), or explicitly turned off (false) private boolean canReadPhoneState(String callingPackage, String message) { if (mContext == null) return false; try { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, message); // SKIP checking for run-time permission since caller or self has PRIVILEDGED permission return true; } catch (SecurityException e) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.READ_PHONE_STATE, message); } if (mAppOps.noteOp(AppOpsManager.OP_READ_PHONE_STATE, Binder.getCallingUid(), callingPackage) != AppOpsManager.MODE_ALLOWED) { return false; } return true; } public String getDeviceId(String callingPackage) { return getDeviceIdForPhone(SubscriptionManager.getPhoneId(getDefaultSubscription())); return getDeviceIdForPhone(SubscriptionManager.getPhoneId(getDefaultSubscription()), callingPackage); } public String getDeviceIdForPhone(int phoneId, String callingPackage) { if (!canReadPhoneState(callingPackage, "getDeviceId")) { return null; } public String getDeviceIdForPhone(int phoneId) { Phone phone = getPhone(phoneId); final Phone phone = getPhone(phoneId); if (phone != null) { phone.getContext().enforceCallingOrSelfPermission( android.Manifest.permission.READ_PHONE_STATE, "Requires READ_PHONE_STATE"); return phone.getDeviceId(); } else { Rlog.e(TAG,"getDeviceIdForPhone phone " + phoneId + " is null"); Loading
src/java/com/android/internal/telephony/PhoneSubInfoProxy.java +1 −1 Original line number Diff line number Diff line Loading @@ -152,7 +152,7 @@ public class PhoneSubInfoProxy extends IPhoneSubInfo.Stub { } @Override public String getDeviceIdForPhone(int phoneId) throws RemoteException { public String getDeviceIdForPhone(int phoneId, String callingPackage) throws RemoteException { // FIXME: getDeviceIdForPhone return null; } Loading