Loading src/java/com/android/internal/telephony/PhoneFactory.java +0 −71 Original line number Diff line number Diff line Loading @@ -317,18 +317,6 @@ public class PhoneFactory { Rlog.e(LOG_TAG, "Settings Exception Reading Dual Sim Voice Call Values"); } // FIXME can this be removed? We should not set defaults int phoneId = SubscriptionController.getInstance().getPhoneId(subId); // Set subscription to 0 if current subscription is invalid. // Ex: multisim.config property is TSTS and subscription is 2. // If user is trying to set multisim.config to DSDS and reboots // in this case index 2 is invalid so need to set to 0. if (phoneId < 0 || phoneId >= TelephonyManager.getDefault().getPhoneCount()) { Rlog.i(LOG_TAG, "Subscription is invalid..." + subId + " Set to 0"); subId = 0; setVoiceSubscription(subId); } return subId; } Loading Loading @@ -391,14 +379,6 @@ public class PhoneFactory { Rlog.e(LOG_TAG, "Settings Exception Reading Dual Sim Data Call Values"); } // FIXME can this be removed? We should not set defaults int phoneId = SubscriptionController.getInstance().getPhoneId(subId); if (phoneId < 0 || phoneId >= TelephonyManager.getDefault().getPhoneCount()) { subId = 0; Rlog.i(LOG_TAG, "Subscription is invalid..." + subId + " Set to 0"); setDataSubscription(subId); } return subId; } Loading @@ -412,60 +392,9 @@ public class PhoneFactory { Rlog.e(LOG_TAG, "Settings Exception Reading Dual Sim SMS Values"); } // FIXME can this be removed? We should not set defaults int phoneId = SubscriptionController.getInstance().getPhoneId(subId); if (phoneId < 0 || phoneId >= TelephonyManager.getDefault().getPhoneCount()) { Rlog.i(LOG_TAG, "Subscription is invalid..." + subId + " Set to 0"); subId = 0; setSMSSubscription(subId); } return subId; } //FIXME can this be removed, it is only called in getVoiceSubscription static public void setVoiceSubscription(int subId) { Settings.Global.putInt(sContext.getContentResolver(), Settings.Global.MULTI_SIM_VOICE_CALL_SUBSCRIPTION, subId); Rlog.d(LOG_TAG, "setVoiceSubscription : " + subId); } //FIXME can this be removed, it is only called in getDataSubscription static public void setDataSubscription(int subId) { boolean enabled; Settings.Global.putInt(sContext.getContentResolver(), Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION, subId); Rlog.d(LOG_TAG, "setDataSubscription: " + subId); // Update the current mobile data flag enabled = TelephonyManager.getIntWithSubId(sContext.getContentResolver(), Settings.Global.MOBILE_DATA, subId, 0) != 0; Settings.Global.putInt(sContext.getContentResolver(), Settings.Global.MOBILE_DATA + subId, enabled ? 1 : 0); Rlog.d(LOG_TAG, "set mobile_data: " + enabled); // Update the current data roaming flag enabled = TelephonyManager.getIntWithSubId(sContext.getContentResolver(), Settings.Global.DATA_ROAMING, subId, 0) != 0; Settings.Global.putInt(sContext.getContentResolver(), Settings.Global.DATA_ROAMING + subId, enabled ? 1 : 0); Rlog.d(LOG_TAG, "set data_roaming: " + enabled); } //FIXME can this be removed, it is only called in getSMSSubscription static public void setSMSSubscription(int subId) { Settings.Global.putInt(sContext.getContentResolver(), Settings.Global.MULTI_SIM_SMS_SUBSCRIPTION, subId); Intent intent = new Intent("com.android.mms.transaction.SEND_MESSAGE"); sContext.sendBroadcast(intent); // Change occured in SMS preferred sub, update the default // SMS interface Manager object with the new SMS preferred subscription. Rlog.d(LOG_TAG, "setSMSSubscription : " + subId); } /** * Makes a {@link ImsPhone} object. * @return the {@code ImsPhone} object or null if the exception occured Loading src/java/com/android/internal/telephony/ProxyController.java +35 −23 Original line number Diff line number Diff line Loading @@ -117,7 +117,7 @@ public class ProxyController { return sProxyController; } static public ProxyController getInstance() { public static ProxyController getInstance() { return sProxyController; } Loading Loading @@ -153,7 +153,10 @@ public class ProxyController { // Clear to be sure we're in the initial state clearTransaction(); for (int i = 0; i < mProxyPhones.length; i++) { mProxyPhones[i].registerForRadioCapabilityChanged( mHandler, EVENT_NOTIFICATION_RC_CHANGED, null); } logd("Constructor - Exit"); } Loading Loading @@ -231,6 +234,8 @@ public class ProxyController { // is one as this is a programming error. synchronized (mSetRadioAccessFamilyStatus) { for (int i = 0; i < mProxyPhones.length; i++) { logd("setRadioCapability: mSetRadioAccessFamilyStatus[" + i + "]=" + mSetRadioAccessFamilyStatus[i]); if (mSetRadioAccessFamilyStatus[i] != SET_RC_STATUS_IDLE) { throw new RuntimeException("setRadioCapability: Phone" + i + " is not idle"); } Loading @@ -252,10 +257,11 @@ public class ProxyController { mHandler.postDelayed(mSetRadioCapabilityRunnable, SET_RC_TIMEOUT_WAITING_MSEC); synchronized (mSetRadioAccessFamilyStatus) { logd("setRadioCapability: new request session id:" + mRadioCapabilitySessionId); logd("setRadioCapability: new request session id=" + mRadioCapabilitySessionId); mRadioAccessFamilyStatusCounter = rafs.length; for (int i = 0; i < rafs.length; i++) { int phoneId = rafs[i].getPhoneId(); logd("setRadioCapability: phoneId=" + phoneId + " status=STARTING"); mSetRadioAccessFamilyStatus[phoneId] = SET_RC_STATUS_STARTING; mOldRadioAccessFamily[phoneId] = mProxyPhones[phoneId].getRadioAccessFamily(); mNewRadioAccessFamily[phoneId] = rafs[i].getRadioAccessFamily(); Loading @@ -278,7 +284,7 @@ public class ProxyController { private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { logd("handleMessage msg.what:" + msg.what); logd("handleMessage msg.what=" + msg.what); switch (msg.what) { case EVENT_START_RC_RESPONSE: onStartRadioCapabilityResponse(msg); Loading Loading @@ -315,26 +321,26 @@ public class ProxyController { return; } mRadioAccessFamilyStatusCounter--; int id = rc.getPhoneId(); if (((AsyncResult) msg.obj).exception != null) { logd("onStartRadioCapabilityResponse: Error response session=" + rc.getSession()); mSetRadioAccessFamilyStatus[rc.getPhoneId()] = SET_RC_STATUS_FAIL; logd("onStartRadioCapabilityResponse: phoneId=" + id + " status=FAIL"); mSetRadioAccessFamilyStatus[id] = SET_RC_STATUS_FAIL; } else { mSetRadioAccessFamilyStatus[rc.getPhoneId()] = SET_RC_STATUS_STARTED; logd("onStartRadioCapabilityResponse: phoneId=" + id + " status=STARTED"); mSetRadioAccessFamilyStatus[id] = SET_RC_STATUS_STARTED; } if (mRadioAccessFamilyStatusCounter == 0) { mHandler.removeCallbacks(mSetRadioCapabilityRunnable); resetRadioAccessFamilyStatusCounter(); boolean success = checkAllRadioCapabilitySuccess(); logd("onStartRadioCapabilityResponse: success:" + success); logd("onStartRadioCapabilityResponse: success=" + success); if (!success) { issueFinish(RadioCapability.RC_STATUS_FAIL, mRadioCapabilitySessionId); } else { // All logical modem accepted the new radio access family, issue the APPLY for (int i = 0; i < mProxyPhones.length; i++) { mProxyPhones[i].registerForRadioCapabilityChanged( mHandler, EVENT_NOTIFICATION_RC_CHANGED, null); sendRadioCapabilityRequest( i, mRadioCapabilitySessionId, Loading @@ -343,6 +349,8 @@ public class ProxyController { mLogicalModemIds[i], RadioCapability.RC_STATUS_NONE, EVENT_APPLY_RC_RESPONSE); logd("onStartRadioCapabilityResponse: phoneId=" + i + " status=APPLYING"); mSetRadioAccessFamilyStatus[i] = SET_RC_STATUS_APPLYING; } } Loading @@ -365,8 +373,9 @@ public class ProxyController { if (((AsyncResult) msg.obj).exception != null) { synchronized (mSetRadioAccessFamilyStatus) { logd("onApplyRadioCapabilityResponse: Error response session=" + rc.getSession()); mSetRadioAccessFamilyStatus[rc.getPhoneId()] = SET_RC_STATUS_FAIL; mProxyPhones[rc.getPhoneId()].unregisterForRadioCapabilityChanged(mHandler); int id = rc.getPhoneId(); logd("onApplyRadioCapabilityResponse: phoneId=" + id + " status=FAIL"); mSetRadioAccessFamilyStatus[id] = SET_RC_STATUS_FAIL; } } else { logd("onApplyRadioCapabilityResponse: Valid start expecting notification rc=" + rc); Loading @@ -393,17 +402,19 @@ public class ProxyController { return; } int id = rc.getPhoneId(); if ((((AsyncResult) msg.obj).exception != null) || (rc.getStatus() == RadioCapability.RC_STATUS_FAIL)) { mSetRadioAccessFamilyStatus[rc.getPhoneId()] = SET_RC_STATUS_FAIL; logd("onNotificationRadioCapabilityChanged: phoneId=" + id + " status=FAIL"); mSetRadioAccessFamilyStatus[id] = SET_RC_STATUS_FAIL; } else { mSetRadioAccessFamilyStatus[rc.getPhoneId()] = SET_RC_STATUS_SUCCESS; logd("onNotificationRadioCapabilityChanged: phoneId=" + id + " status=SUCCESS"); mSetRadioAccessFamilyStatus[id] = SET_RC_STATUS_SUCCESS; } mProxyPhones[rc.getPhoneId()] .unregisterForRadioCapabilityChanged(mHandler); mRadioAccessFamilyStatusCounter--; if (mRadioAccessFamilyStatusCounter == 0) { logd("onNotificationRadioCapabilityChanged: removing callback from handler"); mHandler.removeCallbacks(mSetRadioCapabilityRunnable); resetRadioAccessFamilyStatusCounter(); boolean success = checkAllRadioCapabilitySuccess(); Loading Loading @@ -431,7 +442,7 @@ public class ProxyController { return; } synchronized (mSetRadioAccessFamilyStatus) { logd(" onFinishRadioCapabilityResponse mRadioAccessFamilyStatusCounter:" logd(" onFinishRadioCapabilityResponse mRadioAccessFamilyStatusCounter=" + mRadioAccessFamilyStatusCounter); mRadioAccessFamilyStatusCounter--; if (mRadioAccessFamilyStatusCounter == 0) { Loading @@ -445,7 +456,7 @@ public class ProxyController { synchronized(mSetRadioAccessFamilyStatus) { for (int i = 0; i < mProxyPhones.length; i++) { if (mSetRadioAccessFamilyStatus[i] != SET_RC_STATUS_FAIL) { logd("issueFinish: Phone" + i + " sessionId=" + sessionId logd("issueFinish: phoneId=" + i + " sessionId=" + sessionId + " status=" + status); sendRadioCapabilityRequest( i, Loading @@ -456,6 +467,7 @@ public class ProxyController { status, EVENT_FINISH_RC_RESPONSE); if (status == RadioCapability.RC_STATUS_FAIL) { logd("issueFinish: phoneId: " + i + " status: FAIL"); // At least one failed, mark them all failed. mSetRadioAccessFamilyStatus[i] = SET_RC_STATUS_FAIL; } Loading @@ -471,12 +483,12 @@ public class ProxyController { // Create the intent to broadcast Intent intent; boolean success = checkAllRadioCapabilitySuccess(); logd("onFinishRadioCapabilityResponse: success:" + success); logd("onFinishRadioCapabilityResponse: success=" + success); if (success) { ArrayList<RadioAccessFamily> phoneRAFList = new ArrayList<RadioAccessFamily>(); for (int i = 0; i < mProxyPhones.length; i++) { int raf = mProxyPhones[i].getRadioAccessFamily(); logd("radioAccessFamily[" + i + "]:" + raf); logd("radioAccessFamily[" + i + "]=" + raf); RadioAccessFamily phoneRC = new RadioAccessFamily(i, raf); phoneRAFList.add(phoneRC); } Loading @@ -496,9 +508,10 @@ public class ProxyController { // Clear this transaction private void clearTransaction() { logd("clearTransaction:"); logd("clearTransaction"); synchronized(mSetRadioAccessFamilyStatus) { for (int i = 0; i < mProxyPhones.length; i++) { logd("clearTransaction: phoneId=" + i + " status=IDLE"); mSetRadioAccessFamilyStatus[i] = SET_RC_STATUS_IDLE; mOldRadioAccessFamily[i] = 0; mNewRadioAccessFamily[i] = 0; Loading Loading @@ -544,7 +557,6 @@ public class ProxyController { private class RadioCapabilityRunnable implements Runnable { private int mSessionId; public RadioCapabilityRunnable() { } public void setTimeoutState(int sessionId) { Loading src/java/com/android/internal/telephony/RIL.java +2 −0 Original line number Diff line number Diff line Loading @@ -3121,6 +3121,8 @@ public final class RIL extends BaseCommands implements CommandsInterface { setCdmaSubscriptionSource(mCdmaSubscription, null); setCellInfoListRate(Integer.MAX_VALUE, null); notifyRegistrantsRilConnectionChanged(((int[])ret)[0]); getRadioCapability(null); break; } case RIL_UNSOL_CELL_INFO_LIST: { Loading src/java/com/android/internal/telephony/SubscriptionController.java +25 −3 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; import android.provider.Settings; import android.telephony.RadioAccessFamily; import android.telephony.Rlog; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; Loading Loading @@ -1168,12 +1169,33 @@ public class SubscriptionController extends ISub.Stub { } logdl("[setDefaultDataSubId] subId=" + subId); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION, subId); broadcastDefaultDataSubIdChanged(subId); int len = sProxyPhones.length; logdl("[setDefaultDataSubId] num phones=" + len); RadioAccessFamily[] rafs = new RadioAccessFamily[len]; for (int phoneId = 0; phoneId < len; phoneId++) { PhoneProxy phone = sProxyPhones[phoneId]; int raf = phone.getRadioAccessFamily(); int id = phone.getSubId(); logdl("[setDefaultDataSubId] phoneId=" + phoneId + " subId=" + id + " RAF=" + raf); // TODO(stuartscott): Need to set 3G or 2G depending on user's preference and modem // supported capabilities if (id == subId) { raf |= RadioAccessFamily.RAF_UMTS; } else { raf &= ~RadioAccessFamily.RAF_UMTS; } logdl("[setDefaultDataSubId] newRAF=" + raf); rafs[phoneId] = new RadioAccessFamily(phoneId, raf); } ProxyController.getInstance().setRadioCapability(rafs); // FIXME is this still needed? updateAllDataConnectionTrackers(); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION, subId); broadcastDefaultDataSubIdChanged(subId); } private void updateAllDataConnectionTrackers() { Loading Loading
src/java/com/android/internal/telephony/PhoneFactory.java +0 −71 Original line number Diff line number Diff line Loading @@ -317,18 +317,6 @@ public class PhoneFactory { Rlog.e(LOG_TAG, "Settings Exception Reading Dual Sim Voice Call Values"); } // FIXME can this be removed? We should not set defaults int phoneId = SubscriptionController.getInstance().getPhoneId(subId); // Set subscription to 0 if current subscription is invalid. // Ex: multisim.config property is TSTS and subscription is 2. // If user is trying to set multisim.config to DSDS and reboots // in this case index 2 is invalid so need to set to 0. if (phoneId < 0 || phoneId >= TelephonyManager.getDefault().getPhoneCount()) { Rlog.i(LOG_TAG, "Subscription is invalid..." + subId + " Set to 0"); subId = 0; setVoiceSubscription(subId); } return subId; } Loading Loading @@ -391,14 +379,6 @@ public class PhoneFactory { Rlog.e(LOG_TAG, "Settings Exception Reading Dual Sim Data Call Values"); } // FIXME can this be removed? We should not set defaults int phoneId = SubscriptionController.getInstance().getPhoneId(subId); if (phoneId < 0 || phoneId >= TelephonyManager.getDefault().getPhoneCount()) { subId = 0; Rlog.i(LOG_TAG, "Subscription is invalid..." + subId + " Set to 0"); setDataSubscription(subId); } return subId; } Loading @@ -412,60 +392,9 @@ public class PhoneFactory { Rlog.e(LOG_TAG, "Settings Exception Reading Dual Sim SMS Values"); } // FIXME can this be removed? We should not set defaults int phoneId = SubscriptionController.getInstance().getPhoneId(subId); if (phoneId < 0 || phoneId >= TelephonyManager.getDefault().getPhoneCount()) { Rlog.i(LOG_TAG, "Subscription is invalid..." + subId + " Set to 0"); subId = 0; setSMSSubscription(subId); } return subId; } //FIXME can this be removed, it is only called in getVoiceSubscription static public void setVoiceSubscription(int subId) { Settings.Global.putInt(sContext.getContentResolver(), Settings.Global.MULTI_SIM_VOICE_CALL_SUBSCRIPTION, subId); Rlog.d(LOG_TAG, "setVoiceSubscription : " + subId); } //FIXME can this be removed, it is only called in getDataSubscription static public void setDataSubscription(int subId) { boolean enabled; Settings.Global.putInt(sContext.getContentResolver(), Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION, subId); Rlog.d(LOG_TAG, "setDataSubscription: " + subId); // Update the current mobile data flag enabled = TelephonyManager.getIntWithSubId(sContext.getContentResolver(), Settings.Global.MOBILE_DATA, subId, 0) != 0; Settings.Global.putInt(sContext.getContentResolver(), Settings.Global.MOBILE_DATA + subId, enabled ? 1 : 0); Rlog.d(LOG_TAG, "set mobile_data: " + enabled); // Update the current data roaming flag enabled = TelephonyManager.getIntWithSubId(sContext.getContentResolver(), Settings.Global.DATA_ROAMING, subId, 0) != 0; Settings.Global.putInt(sContext.getContentResolver(), Settings.Global.DATA_ROAMING + subId, enabled ? 1 : 0); Rlog.d(LOG_TAG, "set data_roaming: " + enabled); } //FIXME can this be removed, it is only called in getSMSSubscription static public void setSMSSubscription(int subId) { Settings.Global.putInt(sContext.getContentResolver(), Settings.Global.MULTI_SIM_SMS_SUBSCRIPTION, subId); Intent intent = new Intent("com.android.mms.transaction.SEND_MESSAGE"); sContext.sendBroadcast(intent); // Change occured in SMS preferred sub, update the default // SMS interface Manager object with the new SMS preferred subscription. Rlog.d(LOG_TAG, "setSMSSubscription : " + subId); } /** * Makes a {@link ImsPhone} object. * @return the {@code ImsPhone} object or null if the exception occured Loading
src/java/com/android/internal/telephony/ProxyController.java +35 −23 Original line number Diff line number Diff line Loading @@ -117,7 +117,7 @@ public class ProxyController { return sProxyController; } static public ProxyController getInstance() { public static ProxyController getInstance() { return sProxyController; } Loading Loading @@ -153,7 +153,10 @@ public class ProxyController { // Clear to be sure we're in the initial state clearTransaction(); for (int i = 0; i < mProxyPhones.length; i++) { mProxyPhones[i].registerForRadioCapabilityChanged( mHandler, EVENT_NOTIFICATION_RC_CHANGED, null); } logd("Constructor - Exit"); } Loading Loading @@ -231,6 +234,8 @@ public class ProxyController { // is one as this is a programming error. synchronized (mSetRadioAccessFamilyStatus) { for (int i = 0; i < mProxyPhones.length; i++) { logd("setRadioCapability: mSetRadioAccessFamilyStatus[" + i + "]=" + mSetRadioAccessFamilyStatus[i]); if (mSetRadioAccessFamilyStatus[i] != SET_RC_STATUS_IDLE) { throw new RuntimeException("setRadioCapability: Phone" + i + " is not idle"); } Loading @@ -252,10 +257,11 @@ public class ProxyController { mHandler.postDelayed(mSetRadioCapabilityRunnable, SET_RC_TIMEOUT_WAITING_MSEC); synchronized (mSetRadioAccessFamilyStatus) { logd("setRadioCapability: new request session id:" + mRadioCapabilitySessionId); logd("setRadioCapability: new request session id=" + mRadioCapabilitySessionId); mRadioAccessFamilyStatusCounter = rafs.length; for (int i = 0; i < rafs.length; i++) { int phoneId = rafs[i].getPhoneId(); logd("setRadioCapability: phoneId=" + phoneId + " status=STARTING"); mSetRadioAccessFamilyStatus[phoneId] = SET_RC_STATUS_STARTING; mOldRadioAccessFamily[phoneId] = mProxyPhones[phoneId].getRadioAccessFamily(); mNewRadioAccessFamily[phoneId] = rafs[i].getRadioAccessFamily(); Loading @@ -278,7 +284,7 @@ public class ProxyController { private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { logd("handleMessage msg.what:" + msg.what); logd("handleMessage msg.what=" + msg.what); switch (msg.what) { case EVENT_START_RC_RESPONSE: onStartRadioCapabilityResponse(msg); Loading Loading @@ -315,26 +321,26 @@ public class ProxyController { return; } mRadioAccessFamilyStatusCounter--; int id = rc.getPhoneId(); if (((AsyncResult) msg.obj).exception != null) { logd("onStartRadioCapabilityResponse: Error response session=" + rc.getSession()); mSetRadioAccessFamilyStatus[rc.getPhoneId()] = SET_RC_STATUS_FAIL; logd("onStartRadioCapabilityResponse: phoneId=" + id + " status=FAIL"); mSetRadioAccessFamilyStatus[id] = SET_RC_STATUS_FAIL; } else { mSetRadioAccessFamilyStatus[rc.getPhoneId()] = SET_RC_STATUS_STARTED; logd("onStartRadioCapabilityResponse: phoneId=" + id + " status=STARTED"); mSetRadioAccessFamilyStatus[id] = SET_RC_STATUS_STARTED; } if (mRadioAccessFamilyStatusCounter == 0) { mHandler.removeCallbacks(mSetRadioCapabilityRunnable); resetRadioAccessFamilyStatusCounter(); boolean success = checkAllRadioCapabilitySuccess(); logd("onStartRadioCapabilityResponse: success:" + success); logd("onStartRadioCapabilityResponse: success=" + success); if (!success) { issueFinish(RadioCapability.RC_STATUS_FAIL, mRadioCapabilitySessionId); } else { // All logical modem accepted the new radio access family, issue the APPLY for (int i = 0; i < mProxyPhones.length; i++) { mProxyPhones[i].registerForRadioCapabilityChanged( mHandler, EVENT_NOTIFICATION_RC_CHANGED, null); sendRadioCapabilityRequest( i, mRadioCapabilitySessionId, Loading @@ -343,6 +349,8 @@ public class ProxyController { mLogicalModemIds[i], RadioCapability.RC_STATUS_NONE, EVENT_APPLY_RC_RESPONSE); logd("onStartRadioCapabilityResponse: phoneId=" + i + " status=APPLYING"); mSetRadioAccessFamilyStatus[i] = SET_RC_STATUS_APPLYING; } } Loading @@ -365,8 +373,9 @@ public class ProxyController { if (((AsyncResult) msg.obj).exception != null) { synchronized (mSetRadioAccessFamilyStatus) { logd("onApplyRadioCapabilityResponse: Error response session=" + rc.getSession()); mSetRadioAccessFamilyStatus[rc.getPhoneId()] = SET_RC_STATUS_FAIL; mProxyPhones[rc.getPhoneId()].unregisterForRadioCapabilityChanged(mHandler); int id = rc.getPhoneId(); logd("onApplyRadioCapabilityResponse: phoneId=" + id + " status=FAIL"); mSetRadioAccessFamilyStatus[id] = SET_RC_STATUS_FAIL; } } else { logd("onApplyRadioCapabilityResponse: Valid start expecting notification rc=" + rc); Loading @@ -393,17 +402,19 @@ public class ProxyController { return; } int id = rc.getPhoneId(); if ((((AsyncResult) msg.obj).exception != null) || (rc.getStatus() == RadioCapability.RC_STATUS_FAIL)) { mSetRadioAccessFamilyStatus[rc.getPhoneId()] = SET_RC_STATUS_FAIL; logd("onNotificationRadioCapabilityChanged: phoneId=" + id + " status=FAIL"); mSetRadioAccessFamilyStatus[id] = SET_RC_STATUS_FAIL; } else { mSetRadioAccessFamilyStatus[rc.getPhoneId()] = SET_RC_STATUS_SUCCESS; logd("onNotificationRadioCapabilityChanged: phoneId=" + id + " status=SUCCESS"); mSetRadioAccessFamilyStatus[id] = SET_RC_STATUS_SUCCESS; } mProxyPhones[rc.getPhoneId()] .unregisterForRadioCapabilityChanged(mHandler); mRadioAccessFamilyStatusCounter--; if (mRadioAccessFamilyStatusCounter == 0) { logd("onNotificationRadioCapabilityChanged: removing callback from handler"); mHandler.removeCallbacks(mSetRadioCapabilityRunnable); resetRadioAccessFamilyStatusCounter(); boolean success = checkAllRadioCapabilitySuccess(); Loading Loading @@ -431,7 +442,7 @@ public class ProxyController { return; } synchronized (mSetRadioAccessFamilyStatus) { logd(" onFinishRadioCapabilityResponse mRadioAccessFamilyStatusCounter:" logd(" onFinishRadioCapabilityResponse mRadioAccessFamilyStatusCounter=" + mRadioAccessFamilyStatusCounter); mRadioAccessFamilyStatusCounter--; if (mRadioAccessFamilyStatusCounter == 0) { Loading @@ -445,7 +456,7 @@ public class ProxyController { synchronized(mSetRadioAccessFamilyStatus) { for (int i = 0; i < mProxyPhones.length; i++) { if (mSetRadioAccessFamilyStatus[i] != SET_RC_STATUS_FAIL) { logd("issueFinish: Phone" + i + " sessionId=" + sessionId logd("issueFinish: phoneId=" + i + " sessionId=" + sessionId + " status=" + status); sendRadioCapabilityRequest( i, Loading @@ -456,6 +467,7 @@ public class ProxyController { status, EVENT_FINISH_RC_RESPONSE); if (status == RadioCapability.RC_STATUS_FAIL) { logd("issueFinish: phoneId: " + i + " status: FAIL"); // At least one failed, mark them all failed. mSetRadioAccessFamilyStatus[i] = SET_RC_STATUS_FAIL; } Loading @@ -471,12 +483,12 @@ public class ProxyController { // Create the intent to broadcast Intent intent; boolean success = checkAllRadioCapabilitySuccess(); logd("onFinishRadioCapabilityResponse: success:" + success); logd("onFinishRadioCapabilityResponse: success=" + success); if (success) { ArrayList<RadioAccessFamily> phoneRAFList = new ArrayList<RadioAccessFamily>(); for (int i = 0; i < mProxyPhones.length; i++) { int raf = mProxyPhones[i].getRadioAccessFamily(); logd("radioAccessFamily[" + i + "]:" + raf); logd("radioAccessFamily[" + i + "]=" + raf); RadioAccessFamily phoneRC = new RadioAccessFamily(i, raf); phoneRAFList.add(phoneRC); } Loading @@ -496,9 +508,10 @@ public class ProxyController { // Clear this transaction private void clearTransaction() { logd("clearTransaction:"); logd("clearTransaction"); synchronized(mSetRadioAccessFamilyStatus) { for (int i = 0; i < mProxyPhones.length; i++) { logd("clearTransaction: phoneId=" + i + " status=IDLE"); mSetRadioAccessFamilyStatus[i] = SET_RC_STATUS_IDLE; mOldRadioAccessFamily[i] = 0; mNewRadioAccessFamily[i] = 0; Loading Loading @@ -544,7 +557,6 @@ public class ProxyController { private class RadioCapabilityRunnable implements Runnable { private int mSessionId; public RadioCapabilityRunnable() { } public void setTimeoutState(int sessionId) { Loading
src/java/com/android/internal/telephony/RIL.java +2 −0 Original line number Diff line number Diff line Loading @@ -3121,6 +3121,8 @@ public final class RIL extends BaseCommands implements CommandsInterface { setCdmaSubscriptionSource(mCdmaSubscription, null); setCellInfoListRate(Integer.MAX_VALUE, null); notifyRegistrantsRilConnectionChanged(((int[])ret)[0]); getRadioCapability(null); break; } case RIL_UNSOL_CELL_INFO_LIST: { Loading
src/java/com/android/internal/telephony/SubscriptionController.java +25 −3 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; import android.provider.Settings; import android.telephony.RadioAccessFamily; import android.telephony.Rlog; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; Loading Loading @@ -1168,12 +1169,33 @@ public class SubscriptionController extends ISub.Stub { } logdl("[setDefaultDataSubId] subId=" + subId); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION, subId); broadcastDefaultDataSubIdChanged(subId); int len = sProxyPhones.length; logdl("[setDefaultDataSubId] num phones=" + len); RadioAccessFamily[] rafs = new RadioAccessFamily[len]; for (int phoneId = 0; phoneId < len; phoneId++) { PhoneProxy phone = sProxyPhones[phoneId]; int raf = phone.getRadioAccessFamily(); int id = phone.getSubId(); logdl("[setDefaultDataSubId] phoneId=" + phoneId + " subId=" + id + " RAF=" + raf); // TODO(stuartscott): Need to set 3G or 2G depending on user's preference and modem // supported capabilities if (id == subId) { raf |= RadioAccessFamily.RAF_UMTS; } else { raf &= ~RadioAccessFamily.RAF_UMTS; } logdl("[setDefaultDataSubId] newRAF=" + raf); rafs[phoneId] = new RadioAccessFamily(phoneId, raf); } ProxyController.getInstance().setRadioCapability(rafs); // FIXME is this still needed? updateAllDataConnectionTrackers(); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION, subId); broadcastDefaultDataSubIdChanged(subId); } private void updateAllDataConnectionTrackers() { Loading