Telephony(MSIM): Fix Cellular Data Preference
While voice call is active, if cellular data preference updated via updateCellularDataValues(), the cellular data preference option getting enabled. To fix this consider the call state while updating cellular data preference in updateCellularDataValues(). bug:27635796 Change-Id: I5306f021e8bdeecc845d50a3b55b9c07d1b2c837
This commit is contained in:
committed by
Robb Glasser
parent
2cfda2a3bd
commit
c4d7823c85
@@ -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