Loading src/java/com/android/internal/telephony/IccPhoneBookInterfaceManager.java +2 −1 Original line number Diff line number Diff line Loading @@ -384,7 +384,8 @@ public abstract class IccPhoneBookInterfaceManager { AtomicBoolean status = new AtomicBoolean(false); Message response = mBaseHandler.obtainMessage(EVENT_LOAD_DONE, status); if (mAdnCache != null) { mAdnCache.requestLoadAllAdnLike(efid, mAdnCache.extensionEfForEf(efid), response); mAdnCache.requestLoadAllAdnLike(efid, mAdnCache.extensionEfForEf(efid), null, response); waitForResult(status); } else { loge("Failure while trying to load from SIM due to uninitialised adncache"); Loading src/java/com/android/internal/telephony/InboundSmsHandler.java +22 −15 Original line number Diff line number Diff line Loading @@ -830,7 +830,7 @@ public abstract class InboundSmsHandler extends StateMachine { intent.putExtra("pdus", pdus); intent.putExtra("format", tracker.getFormat()); if (isBlockedByFirewall(intent)) { if (isSmsBlockedByFirewall(intent)) { // send firewall block mms intent sendBlockRecordBroadcast(mContext, intent, true, resultReceiver); } else { Loading Loading @@ -1137,8 +1137,8 @@ public abstract class InboundSmsHandler extends StateMachine { * @param isSms judge it is a sms or mms * @param receiver which handler this broadcast at last */ public void sendBlockRecordBroadcast(Context context, Intent intent, boolean isSms, BroadcastReceiver receiver) { public void sendBlockRecordBroadcast(Context context, Intent intent, boolean isSms, BroadcastReceiver receiver) { final SmsMessage[] messages = Telephony.Sms.Intents.getMessagesFromIntent(intent); if (messages != null) { Intent sendIntent; Loading @@ -1160,30 +1160,37 @@ public abstract class InboundSmsHandler extends StateMachine { * @param intent is sms intent * @return this mms address is saved in firewall databases */ public boolean isBlockedByFirewall(Intent intent) { final SmsMessage[] messages = Telephony.Sms.Intents.getMessagesFromIntent(intent); String number = null; if (messages == null || messages.length < 1) { loge("Failed to parse SMS pdu"); return false; } number = messages[0].getDisplayOriginatingAddress(); public boolean isBlockedByFirewall(Intent intent, String address) { boolean isForbidden = false; // Add to check the firewall when firewall provider is built. final ContentResolver cr = mContext.getContentResolver(); if (cr.acquireProvider(FIREWALL_PROVIDER_URI) != null && null != number) { if (cr.acquireProvider(FIREWALL_PROVIDER_URI) != null && null != address) { Bundle extras = new Bundle(); extras.putString(EXTRA_NUMBER, number); extras.putString(EXTRA_NUMBER, address); extras.putLong(PhoneConstants.SUBSCRIPTION_KEY, mPhone.getSubId()); extras = cr.call(FIREWALL_PROVIDER_URI, IS_FORBIDDEN, null, extras); if (extras != null) { isForbidden = extras.getBoolean(IS_FORBIDDEN); } } log("isForbidden = "+isForbidden ); Log.d("RCS_UI", "isBlocked: address=" + address + ", isForbidden=" + isForbidden); return isForbidden; } public boolean isSmsBlockedByFirewall(Intent intent) { final SmsMessage[] messages = Telephony.Sms.Intents.getMessagesFromIntent(intent); if (messages == null || messages.length < 1) { loge("Failed to parse SMS pdu"); return false; } String number = messages[0].getDisplayOriginatingAddress(); return isBlockedByFirewall(intent, number); } public boolean isMmsBlockedByFirewall(Intent intent, String address) { return isBlockedByFirewall(intent, address); } /** * Log with debug level. * @param s the string to log Loading src/java/com/android/internal/telephony/ModemBindingPolicyHandler.java +35 −11 Original line number Diff line number Diff line Loading @@ -153,6 +153,7 @@ public class ModemBindingPolicyHandler extends Handler { //***** Events private static final int EVENT_MODEM_RAT_CAPS_AVAILABLE = 1; private static final int EVENT_UPDATE_BINDING_DONE = 2; private static final int EVENT_SET_NW_MODE_DONE = 3; //*****Constants private static final int SUCCESS = 1; Loading @@ -163,6 +164,7 @@ public class ModemBindingPolicyHandler extends Handler { private static ModemStackController mModemStackController; private CommandsInterface[] mCi; private Context mContext; private int mNumOfSetPrefNwModeSuccess = 0; private int mNumPhones = TelephonyManager.getDefault().getPhoneCount(); private boolean mModemRatCapabilitiesAvailable = false; private boolean mIsSetPrefNwModeInProgress = false; Loading @@ -170,6 +172,7 @@ public class ModemBindingPolicyHandler extends Handler { private int[] mPreferredStackId = new int[mNumPhones]; private int[] mCurrentStackId = new int[mNumPhones]; private int[] mPrefNwMode = new int[mNumPhones]; private int[] mNwModeinSubIdTable = new int[mNumPhones]; private HashMap<Integer, Message> mStoredResponse = new HashMap<Integer, Message>(); //Modem capabilities as per StackId Loading Loading @@ -230,11 +233,38 @@ public class ModemBindingPolicyHandler extends Handler { handleModemRatCapsAvailable(); break; case EVENT_SET_NW_MODE_DONE: handleSetPreferredNetwork(msg); break; default: break; } } private void handleSetPreferredNetwork(Message msg) { AsyncResult ar = (AsyncResult) msg.obj; int index = (Integer) ar.userObj; if (ar.exception == null) { mNumOfSetPrefNwModeSuccess++; // set nw mode success for all the subs, then update value to DB if (mNumOfSetPrefNwModeSuccess == mNumPhones) { for (int i = 0; i < mNumPhones; i++) { logd("Updating network mode in DB for slot[" + i + "] with " + mNwModeinSubIdTable[i]); TelephonyManager.putIntAtIndex(mContext.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE, i, mNwModeinSubIdTable[i]); } mNumOfSetPrefNwModeSuccess = 0; } } else { logd("Failed to set preferred network mode for slot" + index); mNumOfSetPrefNwModeSuccess = 0; } } private void handleUpdateBindingDone(AsyncResult ar) { mIsSetPrefNwModeInProgress = false; Loading @@ -259,37 +289,31 @@ public class ModemBindingPolicyHandler extends Handler { */ public void updatePrefNwTypeIfRequired(){ boolean updateRequired = false; int[] nwModeinSubIdTable = new int[mNumPhones]; syncPreferredNwModeFromDB(); SubscriptionController subCtrlr = SubscriptionController.getInstance(); for (int i=0; i < mNumPhones; i++ ) { long[] subIdList = subCtrlr.getSubId(i); if (subIdList != null && subIdList[0] > 0) { long subId = subIdList[0]; nwModeinSubIdTable[i] = subCtrlr.getNwMode(subId); if (nwModeinSubIdTable[i] == SubscriptionManager.DEFAULT_NW_MODE){ mNwModeinSubIdTable[i] = subCtrlr.getNwMode(subId); if (mNwModeinSubIdTable[i] == SubscriptionManager.DEFAULT_NW_MODE){ updateRequired = false; break; } if (nwModeinSubIdTable[i] != mPrefNwMode[i]) { if (mNwModeinSubIdTable[i] != mPrefNwMode[i]) { updateRequired = true; } } } if (updateRequired) { for (int i=0; i < mNumPhones; i++ ) { logd("Updating Value in DB for slot[" + i + "] with " + nwModeinSubIdTable[i]); TelephonyManager.putIntAtIndex( mContext.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE, i, nwModeinSubIdTable[i]); } if (FAILURE == updateStackBindingIfRequired(false)) { //In case of Update Stack Binding not required or failure, send setPrefNwType to //RIL immediately. In case of success after stack binding completed setPrefNwType //request is anyways sent. for (int i=0; i < mNumPhones; i++ ) { mCi[i].setPreferredNetworkType(nwModeinSubIdTable[i], null); Message msg = obtainMessage(EVENT_SET_NW_MODE_DONE, i); mCi[i].setPreferredNetworkType(mNwModeinSubIdTable[i], msg); } } } Loading src/java/com/android/internal/telephony/Phone.java +9 −0 Original line number Diff line number Diff line Loading @@ -897,6 +897,13 @@ public interface Phone { */ public void addParticipant(String dialString) throws CallStateException; /** * Initiate to add a participant in an IMS call. * * @exception CallStateException operation is not supported. */ public void addParticipant(String dialString, Message onComplete) throws CallStateException; /** * Handles PIN MMI commands (PIN/PIN2/PUK/PUK2), which are initiated * without SEND (so <code>dial</code> is not appropriate). Loading Loading @@ -1992,4 +1999,6 @@ public interface Phone { public void setLocalCallHold(int lchStatus); public boolean isImsVtCallPresent(); public void notifyCallForwardingIndicator(); } src/java/com/android/internal/telephony/PhoneBase.java +6 −0 Original line number Diff line number Diff line Loading @@ -2138,4 +2138,10 @@ public abstract class PhoneBase extends Handler implements Phone { throw new CallStateException("addParticipant is not supported in this phone " + this); } @Override public void addParticipant(String dialString, Message onComplete) throws CallStateException { throw new CallStateException("addParticipant is not supported in this phone " + this); } } Loading
src/java/com/android/internal/telephony/IccPhoneBookInterfaceManager.java +2 −1 Original line number Diff line number Diff line Loading @@ -384,7 +384,8 @@ public abstract class IccPhoneBookInterfaceManager { AtomicBoolean status = new AtomicBoolean(false); Message response = mBaseHandler.obtainMessage(EVENT_LOAD_DONE, status); if (mAdnCache != null) { mAdnCache.requestLoadAllAdnLike(efid, mAdnCache.extensionEfForEf(efid), response); mAdnCache.requestLoadAllAdnLike(efid, mAdnCache.extensionEfForEf(efid), null, response); waitForResult(status); } else { loge("Failure while trying to load from SIM due to uninitialised adncache"); Loading
src/java/com/android/internal/telephony/InboundSmsHandler.java +22 −15 Original line number Diff line number Diff line Loading @@ -830,7 +830,7 @@ public abstract class InboundSmsHandler extends StateMachine { intent.putExtra("pdus", pdus); intent.putExtra("format", tracker.getFormat()); if (isBlockedByFirewall(intent)) { if (isSmsBlockedByFirewall(intent)) { // send firewall block mms intent sendBlockRecordBroadcast(mContext, intent, true, resultReceiver); } else { Loading Loading @@ -1137,8 +1137,8 @@ public abstract class InboundSmsHandler extends StateMachine { * @param isSms judge it is a sms or mms * @param receiver which handler this broadcast at last */ public void sendBlockRecordBroadcast(Context context, Intent intent, boolean isSms, BroadcastReceiver receiver) { public void sendBlockRecordBroadcast(Context context, Intent intent, boolean isSms, BroadcastReceiver receiver) { final SmsMessage[] messages = Telephony.Sms.Intents.getMessagesFromIntent(intent); if (messages != null) { Intent sendIntent; Loading @@ -1160,30 +1160,37 @@ public abstract class InboundSmsHandler extends StateMachine { * @param intent is sms intent * @return this mms address is saved in firewall databases */ public boolean isBlockedByFirewall(Intent intent) { final SmsMessage[] messages = Telephony.Sms.Intents.getMessagesFromIntent(intent); String number = null; if (messages == null || messages.length < 1) { loge("Failed to parse SMS pdu"); return false; } number = messages[0].getDisplayOriginatingAddress(); public boolean isBlockedByFirewall(Intent intent, String address) { boolean isForbidden = false; // Add to check the firewall when firewall provider is built. final ContentResolver cr = mContext.getContentResolver(); if (cr.acquireProvider(FIREWALL_PROVIDER_URI) != null && null != number) { if (cr.acquireProvider(FIREWALL_PROVIDER_URI) != null && null != address) { Bundle extras = new Bundle(); extras.putString(EXTRA_NUMBER, number); extras.putString(EXTRA_NUMBER, address); extras.putLong(PhoneConstants.SUBSCRIPTION_KEY, mPhone.getSubId()); extras = cr.call(FIREWALL_PROVIDER_URI, IS_FORBIDDEN, null, extras); if (extras != null) { isForbidden = extras.getBoolean(IS_FORBIDDEN); } } log("isForbidden = "+isForbidden ); Log.d("RCS_UI", "isBlocked: address=" + address + ", isForbidden=" + isForbidden); return isForbidden; } public boolean isSmsBlockedByFirewall(Intent intent) { final SmsMessage[] messages = Telephony.Sms.Intents.getMessagesFromIntent(intent); if (messages == null || messages.length < 1) { loge("Failed to parse SMS pdu"); return false; } String number = messages[0].getDisplayOriginatingAddress(); return isBlockedByFirewall(intent, number); } public boolean isMmsBlockedByFirewall(Intent intent, String address) { return isBlockedByFirewall(intent, address); } /** * Log with debug level. * @param s the string to log Loading
src/java/com/android/internal/telephony/ModemBindingPolicyHandler.java +35 −11 Original line number Diff line number Diff line Loading @@ -153,6 +153,7 @@ public class ModemBindingPolicyHandler extends Handler { //***** Events private static final int EVENT_MODEM_RAT_CAPS_AVAILABLE = 1; private static final int EVENT_UPDATE_BINDING_DONE = 2; private static final int EVENT_SET_NW_MODE_DONE = 3; //*****Constants private static final int SUCCESS = 1; Loading @@ -163,6 +164,7 @@ public class ModemBindingPolicyHandler extends Handler { private static ModemStackController mModemStackController; private CommandsInterface[] mCi; private Context mContext; private int mNumOfSetPrefNwModeSuccess = 0; private int mNumPhones = TelephonyManager.getDefault().getPhoneCount(); private boolean mModemRatCapabilitiesAvailable = false; private boolean mIsSetPrefNwModeInProgress = false; Loading @@ -170,6 +172,7 @@ public class ModemBindingPolicyHandler extends Handler { private int[] mPreferredStackId = new int[mNumPhones]; private int[] mCurrentStackId = new int[mNumPhones]; private int[] mPrefNwMode = new int[mNumPhones]; private int[] mNwModeinSubIdTable = new int[mNumPhones]; private HashMap<Integer, Message> mStoredResponse = new HashMap<Integer, Message>(); //Modem capabilities as per StackId Loading Loading @@ -230,11 +233,38 @@ public class ModemBindingPolicyHandler extends Handler { handleModemRatCapsAvailable(); break; case EVENT_SET_NW_MODE_DONE: handleSetPreferredNetwork(msg); break; default: break; } } private void handleSetPreferredNetwork(Message msg) { AsyncResult ar = (AsyncResult) msg.obj; int index = (Integer) ar.userObj; if (ar.exception == null) { mNumOfSetPrefNwModeSuccess++; // set nw mode success for all the subs, then update value to DB if (mNumOfSetPrefNwModeSuccess == mNumPhones) { for (int i = 0; i < mNumPhones; i++) { logd("Updating network mode in DB for slot[" + i + "] with " + mNwModeinSubIdTable[i]); TelephonyManager.putIntAtIndex(mContext.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE, i, mNwModeinSubIdTable[i]); } mNumOfSetPrefNwModeSuccess = 0; } } else { logd("Failed to set preferred network mode for slot" + index); mNumOfSetPrefNwModeSuccess = 0; } } private void handleUpdateBindingDone(AsyncResult ar) { mIsSetPrefNwModeInProgress = false; Loading @@ -259,37 +289,31 @@ public class ModemBindingPolicyHandler extends Handler { */ public void updatePrefNwTypeIfRequired(){ boolean updateRequired = false; int[] nwModeinSubIdTable = new int[mNumPhones]; syncPreferredNwModeFromDB(); SubscriptionController subCtrlr = SubscriptionController.getInstance(); for (int i=0; i < mNumPhones; i++ ) { long[] subIdList = subCtrlr.getSubId(i); if (subIdList != null && subIdList[0] > 0) { long subId = subIdList[0]; nwModeinSubIdTable[i] = subCtrlr.getNwMode(subId); if (nwModeinSubIdTable[i] == SubscriptionManager.DEFAULT_NW_MODE){ mNwModeinSubIdTable[i] = subCtrlr.getNwMode(subId); if (mNwModeinSubIdTable[i] == SubscriptionManager.DEFAULT_NW_MODE){ updateRequired = false; break; } if (nwModeinSubIdTable[i] != mPrefNwMode[i]) { if (mNwModeinSubIdTable[i] != mPrefNwMode[i]) { updateRequired = true; } } } if (updateRequired) { for (int i=0; i < mNumPhones; i++ ) { logd("Updating Value in DB for slot[" + i + "] with " + nwModeinSubIdTable[i]); TelephonyManager.putIntAtIndex( mContext.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE, i, nwModeinSubIdTable[i]); } if (FAILURE == updateStackBindingIfRequired(false)) { //In case of Update Stack Binding not required or failure, send setPrefNwType to //RIL immediately. In case of success after stack binding completed setPrefNwType //request is anyways sent. for (int i=0; i < mNumPhones; i++ ) { mCi[i].setPreferredNetworkType(nwModeinSubIdTable[i], null); Message msg = obtainMessage(EVENT_SET_NW_MODE_DONE, i); mCi[i].setPreferredNetworkType(mNwModeinSubIdTable[i], msg); } } } Loading
src/java/com/android/internal/telephony/Phone.java +9 −0 Original line number Diff line number Diff line Loading @@ -897,6 +897,13 @@ public interface Phone { */ public void addParticipant(String dialString) throws CallStateException; /** * Initiate to add a participant in an IMS call. * * @exception CallStateException operation is not supported. */ public void addParticipant(String dialString, Message onComplete) throws CallStateException; /** * Handles PIN MMI commands (PIN/PIN2/PUK/PUK2), which are initiated * without SEND (so <code>dial</code> is not appropriate). Loading Loading @@ -1992,4 +1999,6 @@ public interface Phone { public void setLocalCallHold(int lchStatus); public boolean isImsVtCallPresent(); public void notifyCallForwardingIndicator(); }
src/java/com/android/internal/telephony/PhoneBase.java +6 −0 Original line number Diff line number Diff line Loading @@ -2138,4 +2138,10 @@ public abstract class PhoneBase extends Handler implements Phone { throw new CallStateException("addParticipant is not supported in this phone " + this); } @Override public void addParticipant(String dialString, Message onComplete) throws CallStateException { throw new CallStateException("addParticipant is not supported in this phone " + this); } }