Merge "Fixed data icon disappeared issue"
This commit is contained in:
commit
3630793506
@ -47,6 +47,7 @@ import android.os.RemoteException;
|
|||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.provider.DeviceConfig;
|
import android.provider.DeviceConfig;
|
||||||
import android.telecom.TelecomManager;
|
import android.telecom.TelecomManager;
|
||||||
|
import android.telephony.AccessNetworkConstants;
|
||||||
import android.telephony.Annotation;
|
import android.telephony.Annotation;
|
||||||
import android.telephony.Annotation.RadioPowerState;
|
import android.telephony.Annotation.RadioPowerState;
|
||||||
import android.telephony.Annotation.SrvccState;
|
import android.telephony.Annotation.SrvccState;
|
||||||
@ -1960,42 +1961,8 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
|
|||||||
|
|
||||||
ApnSetting apnSetting = preciseState.getApnSetting();
|
ApnSetting apnSetting = preciseState.getApnSetting();
|
||||||
|
|
||||||
int apnTypes = apnSetting.getApnTypeBitmask();
|
|
||||||
int state = preciseState.getState();
|
|
||||||
int networkType = preciseState.getNetworkType();
|
|
||||||
|
|
||||||
synchronized (mRecords) {
|
synchronized (mRecords) {
|
||||||
if (validatePhoneId(phoneId)) {
|
if (validatePhoneId(phoneId)) {
|
||||||
// We only call the callback when the change is for default APN type.
|
|
||||||
if ((ApnSetting.TYPE_DEFAULT & apnTypes) != 0
|
|
||||||
&& (mDataConnectionState[phoneId] != state
|
|
||||||
|| mDataConnectionNetworkType[phoneId] != networkType)) {
|
|
||||||
String str = "onDataConnectionStateChanged("
|
|
||||||
+ TelephonyUtils.dataStateToString(state)
|
|
||||||
+ ", " + getNetworkTypeName(networkType)
|
|
||||||
+ ") subId=" + subId + ", phoneId=" + phoneId;
|
|
||||||
log(str);
|
|
||||||
mLocalLog.log(str);
|
|
||||||
for (Record r : mRecords) {
|
|
||||||
if (r.matchTelephonyCallbackEvent(
|
|
||||||
TelephonyCallback.EVENT_DATA_CONNECTION_STATE_CHANGED)
|
|
||||||
&& idMatch(r, subId, phoneId)) {
|
|
||||||
try {
|
|
||||||
if (DBG) {
|
|
||||||
log("Notify data connection state changed on sub: " + subId);
|
|
||||||
}
|
|
||||||
r.callback.onDataConnectionStateChanged(state, networkType);
|
|
||||||
} catch (RemoteException ex) {
|
|
||||||
mRemoveList.add(r.binder);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
handleRemoveListLocked();
|
|
||||||
|
|
||||||
mDataConnectionState[phoneId] = state;
|
|
||||||
mDataConnectionNetworkType[phoneId] = networkType;
|
|
||||||
}
|
|
||||||
|
|
||||||
Pair<Integer, ApnSetting> key = Pair.create(preciseState.getTransportType(),
|
Pair<Integer, ApnSetting> key = Pair.create(preciseState.getTransportType(),
|
||||||
preciseState.getApnSetting());
|
preciseState.getApnSetting());
|
||||||
PreciseDataConnectionState oldState = mPreciseDataConnectionStates.get(phoneId)
|
PreciseDataConnectionState oldState = mPreciseDataConnectionStates.get(phoneId)
|
||||||
@ -2027,6 +1994,73 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
|
|||||||
if (preciseState.getState() != TelephonyManager.DATA_DISCONNECTED) {
|
if (preciseState.getState() != TelephonyManager.DATA_DISCONNECTED) {
|
||||||
mPreciseDataConnectionStates.get(phoneId).put(key, preciseState);
|
mPreciseDataConnectionStates.get(phoneId).put(key, preciseState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Note that below is just the workaround for reporting the correct data connection
|
||||||
|
// state. The actual fix should be put in the new data stack in T.
|
||||||
|
// TODO: Remove the code below in T.
|
||||||
|
|
||||||
|
// Collect all possible candidate data connection state for internet. Key is the
|
||||||
|
// data connection state, value is the precise data connection state.
|
||||||
|
Map<Integer, PreciseDataConnectionState> internetConnections = new ArrayMap<>();
|
||||||
|
if (preciseState.getState() == TelephonyManager.DATA_DISCONNECTED
|
||||||
|
&& preciseState.getApnSetting().getApnTypes()
|
||||||
|
.contains(ApnSetting.TYPE_DEFAULT)) {
|
||||||
|
internetConnections.put(TelephonyManager.DATA_DISCONNECTED, preciseState);
|
||||||
|
}
|
||||||
|
for (Map.Entry<Pair<Integer, ApnSetting>, PreciseDataConnectionState> entry :
|
||||||
|
mPreciseDataConnectionStates.get(phoneId).entrySet()) {
|
||||||
|
if (entry.getKey().first == AccessNetworkConstants.TRANSPORT_TYPE_WWAN
|
||||||
|
&& entry.getKey().second.getApnTypes()
|
||||||
|
.contains(ApnSetting.TYPE_DEFAULT)) {
|
||||||
|
internetConnections.put(entry.getValue().getState(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If any internet data is in connected state, then report connected, then check
|
||||||
|
// suspended, connecting, disconnecting, and disconnected. The order is very
|
||||||
|
// important.
|
||||||
|
int[] statesInPriority = new int[]{TelephonyManager.DATA_CONNECTED,
|
||||||
|
TelephonyManager.DATA_SUSPENDED, TelephonyManager.DATA_CONNECTING,
|
||||||
|
TelephonyManager.DATA_DISCONNECTING,
|
||||||
|
TelephonyManager.DATA_DISCONNECTED};
|
||||||
|
int state = TelephonyManager.DATA_DISCONNECTED;
|
||||||
|
int networkType = TelephonyManager.NETWORK_TYPE_UNKNOWN;
|
||||||
|
for (int s : statesInPriority) {
|
||||||
|
if (internetConnections.containsKey(s)) {
|
||||||
|
state = s;
|
||||||
|
networkType = internetConnections.get(s).getNetworkType();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mDataConnectionState[phoneId] != state
|
||||||
|
|| mDataConnectionNetworkType[phoneId] != networkType) {
|
||||||
|
String str = "onDataConnectionStateChanged("
|
||||||
|
+ TelephonyUtils.dataStateToString(state)
|
||||||
|
+ ", " + TelephonyManager.getNetworkTypeName(networkType)
|
||||||
|
+ ") subId=" + subId + ", phoneId=" + phoneId;
|
||||||
|
log(str);
|
||||||
|
mLocalLog.log(str);
|
||||||
|
for (Record r : mRecords) {
|
||||||
|
if (r.matchTelephonyCallbackEvent(
|
||||||
|
TelephonyCallback.EVENT_DATA_CONNECTION_STATE_CHANGED)
|
||||||
|
&& idMatch(r, subId, phoneId)) {
|
||||||
|
try {
|
||||||
|
if (DBG) {
|
||||||
|
log("Notify data connection state changed on sub: " + subId);
|
||||||
|
}
|
||||||
|
r.callback.onDataConnectionStateChanged(state, networkType);
|
||||||
|
} catch (RemoteException ex) {
|
||||||
|
mRemoveList.add(r.binder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mDataConnectionState[phoneId] = state;
|
||||||
|
mDataConnectionNetworkType[phoneId] = networkType;
|
||||||
|
|
||||||
|
handleRemoveListLocked();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user