Merge "Telephony(MSIM): Fix Cellular Data Preference" into nyc-dev
This commit is contained in:
@@ -71,6 +71,10 @@ public class SimSettings extends RestrictedSettingsFragment implements Indexable
|
|||||||
private int mNumSlots;
|
private int mNumSlots;
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
|
||||||
|
private int mPhoneCount = TelephonyManager.getDefault().getPhoneCount();
|
||||||
|
private int[] mCallState = new int[mPhoneCount];
|
||||||
|
private PhoneStateListener[] mPhoneStateListener = new PhoneStateListener[mPhoneCount];
|
||||||
|
|
||||||
public SimSettings() {
|
public SimSettings() {
|
||||||
super(DISALLOW_CONFIG_SIM);
|
super(DISALLOW_CONFIG_SIM);
|
||||||
}
|
}
|
||||||
@@ -177,7 +181,12 @@ public class SimSettings extends RestrictedSettingsFragment implements Indexable
|
|||||||
} else if (sir == null) {
|
} else if (sir == null) {
|
||||||
simPref.setSummary(R.string.sim_selection_required_pref);
|
simPref.setSummary(R.string.sim_selection_required_pref);
|
||||||
}
|
}
|
||||||
simPref.setEnabled(mSelectableSubInfos.size() >= 1);
|
|
||||||
|
boolean callStateIdle = isCallStateIdle();
|
||||||
|
final boolean ecbMode = SystemProperties.getBoolean(
|
||||||
|
TelephonyProperties.PROPERTY_INECM_MODE, false);
|
||||||
|
// Enable data preference in msim mode and call state idle
|
||||||
|
simPref.setEnabled((mSelectableSubInfos.size() >= 1) && callStateIdle && !ecbMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateCallValues() {
|
private void updateCallValues() {
|
||||||
@@ -199,10 +208,17 @@ public class SimSettings extends RestrictedSettingsFragment implements Indexable
|
|||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
|
mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
|
||||||
|
updateSubscriptions();
|
||||||
final TelephonyManager tm =
|
final TelephonyManager tm =
|
||||||
(TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
|
(TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
|
||||||
tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
|
if (mSelectableSubInfos.size() > 1) {
|
||||||
updateSubscriptions();
|
Log.d(TAG, "Register for call state change");
|
||||||
|
for (int i = 0; i < mPhoneCount; i++) {
|
||||||
|
int subId = mSelectableSubInfos.get(i).getSubscriptionId();
|
||||||
|
tm.listen(getPhoneStateListener(i, subId),
|
||||||
|
PhoneStateListener.LISTEN_CALL_STATE);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -210,25 +226,30 @@ public class SimSettings extends RestrictedSettingsFragment implements Indexable
|
|||||||
super.onPause();
|
super.onPause();
|
||||||
mSubscriptionManager.removeOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
|
mSubscriptionManager.removeOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
|
||||||
final TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
|
final TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
|
||||||
tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
|
for (int i = 0; i < mPhoneCount; i++) {
|
||||||
|
if (mPhoneStateListener[i] != null) {
|
||||||
|
tm.listen(mPhoneStateListener[i], PhoneStateListener.LISTEN_NONE);
|
||||||
|
mPhoneStateListener[i] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
|
private PhoneStateListener getPhoneStateListener(int phoneId, int subId) {
|
||||||
// Disable Sim selection for Data when voice call is going on as changing the default data
|
// Disable Sim selection for Data when voice call is going on as changing the default data
|
||||||
// sim causes a modem reset currently and call gets disconnected
|
// sim causes a modem reset currently and call gets disconnected
|
||||||
// ToDo : Add subtext on disabled preference to let user know that default data sim cannot
|
// ToDo : Add subtext on disabled preference to let user know that default data sim cannot
|
||||||
// be changed while call is going on
|
// be changed while call is going on
|
||||||
@Override
|
final int i = phoneId;
|
||||||
public void onCallStateChanged(int state, String incomingNumber) {
|
mPhoneStateListener[phoneId] = new PhoneStateListener(subId) {
|
||||||
if (DBG) log("PhoneStateListener.onCallStateChanged: state=" + state);
|
@Override
|
||||||
final Preference pref = findPreference(KEY_CELLULAR_DATA);
|
public void onCallStateChanged(int state, String incomingNumber) {
|
||||||
if (pref != null) {
|
if (DBG) log("PhoneStateListener.onCallStateChanged: state=" + state);
|
||||||
final boolean ecbMode = SystemProperties.getBoolean(
|
mCallState[i] = state;
|
||||||
TelephonyProperties.PROPERTY_INECM_MODE, false);
|
updateCellularDataValues();
|
||||||
pref.setEnabled((state == TelephonyManager.CALL_STATE_IDLE) && !ecbMode);
|
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
};
|
return mPhoneStateListener[phoneId];
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceTreeClick(final Preference preference) {
|
public boolean onPreferenceTreeClick(final Preference preference) {
|
||||||
@@ -327,4 +348,15 @@ public class SimSettings extends RestrictedSettingsFragment implements Indexable
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private boolean isCallStateIdle() {
|
||||||
|
boolean callStateIdle = true;
|
||||||
|
for (int i = 0; i < mCallState.length; i++) {
|
||||||
|
if (TelephonyManager.CALL_STATE_IDLE != mCallState[i]) {
|
||||||
|
callStateIdle = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Log.d(TAG, "isCallStateIdle " + callStateIdle);
|
||||||
|
return callStateIdle;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user