Merge "DO NOT MERGE: Revert "LTE Changes for Telephony including Multiple PDN support and IPV6 support"" into honeycomb-mr1
This commit is contained in:
@ -221,32 +221,12 @@ public class ConnectivityManager
|
|||||||
|
|
||||||
/** {@hide} */
|
/** {@hide} */
|
||||||
public static final int TYPE_DUMMY = 8;
|
public static final int TYPE_DUMMY = 8;
|
||||||
|
|
||||||
/** {@hide} */
|
/** {@hide} */
|
||||||
public static final int TYPE_ETHERNET = 9;
|
public static final int TYPE_ETHERNET = 9;
|
||||||
/**
|
/** {@hide} TODO: Need to adjust this for WiMAX. */
|
||||||
* Over the air Adminstration.
|
public static final int MAX_RADIO_TYPE = TYPE_DUMMY;
|
||||||
* {@hide}
|
/** {@hide} TODO: Need to adjust this for WiMAX. */
|
||||||
*/
|
public static final int MAX_NETWORK_TYPE = TYPE_DUMMY;
|
||||||
public static final int TYPE_MOBILE_FOTA = 10;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* IP Multimedia Subsystem
|
|
||||||
* {@hide}
|
|
||||||
*/
|
|
||||||
public static final int TYPE_MOBILE_IMS = 11;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Carrier Branded Services
|
|
||||||
* {@hide}
|
|
||||||
*/
|
|
||||||
public static final int TYPE_MOBILE_CBS = 12;
|
|
||||||
|
|
||||||
/** {@hide} */
|
|
||||||
public static final int MAX_RADIO_TYPE = TYPE_MOBILE_CBS;
|
|
||||||
|
|
||||||
/** {@hide} */
|
|
||||||
public static final int MAX_NETWORK_TYPE = TYPE_MOBILE_CBS;
|
|
||||||
|
|
||||||
public static final int DEFAULT_NETWORK_PREFERENCE = TYPE_WIFI;
|
public static final int DEFAULT_NETWORK_PREFERENCE = TYPE_WIFI;
|
||||||
|
|
||||||
|
@ -437,8 +437,7 @@ public class MobileDataStateTracker implements NetworkStateTracker {
|
|||||||
retValue = true;
|
retValue = true;
|
||||||
break;
|
break;
|
||||||
case Phone.APN_REQUEST_STARTED:
|
case Phone.APN_REQUEST_STARTED:
|
||||||
// set IDLE here , avoid the following second FAILED not sent out
|
// no need to do anything - we're already due some status update intents
|
||||||
mNetworkInfo.setDetailedState(DetailedState.IDLE, null, null);
|
|
||||||
retValue = true;
|
retValue = true;
|
||||||
break;
|
break;
|
||||||
case Phone.APN_REQUEST_FAILED:
|
case Phone.APN_REQUEST_FAILED:
|
||||||
@ -547,12 +546,6 @@ public class MobileDataStateTracker implements NetworkStateTracker {
|
|||||||
return Phone.APN_TYPE_DUN;
|
return Phone.APN_TYPE_DUN;
|
||||||
case ConnectivityManager.TYPE_MOBILE_HIPRI:
|
case ConnectivityManager.TYPE_MOBILE_HIPRI:
|
||||||
return Phone.APN_TYPE_HIPRI;
|
return Phone.APN_TYPE_HIPRI;
|
||||||
case ConnectivityManager.TYPE_MOBILE_FOTA:
|
|
||||||
return Phone.APN_TYPE_FOTA;
|
|
||||||
case ConnectivityManager.TYPE_MOBILE_IMS:
|
|
||||||
return Phone.APN_TYPE_IMS;
|
|
||||||
case ConnectivityManager.TYPE_MOBILE_CBS:
|
|
||||||
return Phone.APN_TYPE_CBS;
|
|
||||||
default:
|
default:
|
||||||
sloge("Error mapping networkType " + netType + " to apnType.");
|
sloge("Error mapping networkType " + netType + " to apnType.");
|
||||||
return null;
|
return null;
|
||||||
|
@ -1723,14 +1723,6 @@ public final class Telephony {
|
|||||||
|
|
||||||
public static final String TYPE = "type";
|
public static final String TYPE = "type";
|
||||||
|
|
||||||
public static final String INACTIVE_TIMER = "inactivetimer";
|
|
||||||
|
|
||||||
// Only if enabled try Data Connection.
|
|
||||||
public static final String ENABLED = "enabled";
|
|
||||||
|
|
||||||
// Rules apply based on class.
|
|
||||||
public static final String CLASS = "class";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The protocol to be used to connect to this APN.
|
* The protocol to be used to connect to this APN.
|
||||||
*
|
*
|
||||||
|
@ -51,11 +51,6 @@
|
|||||||
manager will disable alpha trasformation in animations where not
|
manager will disable alpha trasformation in animations where not
|
||||||
strictly needed. -->
|
strictly needed. -->
|
||||||
<bool name="config_sf_limitedAlpha">false</bool>
|
<bool name="config_sf_limitedAlpha">false</bool>
|
||||||
|
|
||||||
<!-- Default value used to block data calls if ims is not
|
|
||||||
connected. If you use the ims apn DCT will block
|
|
||||||
any other apn from connecting until ims apn is connected-->
|
|
||||||
<bool name="ImsConnectedDefaultValue">false</bool>
|
|
||||||
|
|
||||||
<!-- Flag indicating whether the surface flinger is inefficient
|
<!-- Flag indicating whether the surface flinger is inefficient
|
||||||
at performing a blur. Used by parts of the UI to turn off
|
at performing a blur. Used by parts of the UI to turn off
|
||||||
@ -138,9 +133,6 @@
|
|||||||
<item>"mobile_mms,2,0,2"</item>
|
<item>"mobile_mms,2,0,2"</item>
|
||||||
<item>"mobile_supl,3,0,2"</item>
|
<item>"mobile_supl,3,0,2"</item>
|
||||||
<item>"mobile_hipri,5,0,3"</item>
|
<item>"mobile_hipri,5,0,3"</item>
|
||||||
<item>"mobile_fota,8,0,2"</item>
|
|
||||||
<item>"mobile_ims,9,0,2"</item>
|
|
||||||
<item>"mobile_cbs,10,0,2"</item>
|
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<!-- This string array should be overridden by the device to present a list of radio
|
<!-- This string array should be overridden by the device to present a list of radio
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 258 B |
@ -246,16 +246,6 @@ public class PhoneStatusBarPolicy {
|
|||||||
R.drawable.stat_sys_data_fully_out_3g,
|
R.drawable.stat_sys_data_fully_out_3g,
|
||||||
R.drawable.stat_sys_data_fully_inandout_3g }
|
R.drawable.stat_sys_data_fully_inandout_3g }
|
||||||
};
|
};
|
||||||
private static final int[][] sDataNetType_4g = {
|
|
||||||
{ R.drawable.stat_sys_data_connected_4g,
|
|
||||||
R.drawable.stat_sys_data_in_4g,
|
|
||||||
R.drawable.stat_sys_data_out_4g,
|
|
||||||
R.drawable.stat_sys_data_inandout_4g },
|
|
||||||
{ R.drawable.stat_sys_data_fully_connected_4g,
|
|
||||||
R.drawable.stat_sys_data_fully_in_4g,
|
|
||||||
R.drawable.stat_sys_data_fully_out_4g,
|
|
||||||
R.drawable.stat_sys_data_fully_inandout_4g }
|
|
||||||
};
|
|
||||||
private static final int[][] sDataNetType_e = {
|
private static final int[][] sDataNetType_e = {
|
||||||
{ R.drawable.stat_sys_data_connected_e,
|
{ R.drawable.stat_sys_data_connected_e,
|
||||||
R.drawable.stat_sys_data_in_e,
|
R.drawable.stat_sys_data_in_e,
|
||||||
@ -680,12 +670,9 @@ public class PhoneStatusBarPolicy {
|
|||||||
case TelephonyManager.NETWORK_TYPE_EVDO_0: //fall through
|
case TelephonyManager.NETWORK_TYPE_EVDO_0: //fall through
|
||||||
case TelephonyManager.NETWORK_TYPE_EVDO_A:
|
case TelephonyManager.NETWORK_TYPE_EVDO_A:
|
||||||
case TelephonyManager.NETWORK_TYPE_EVDO_B:
|
case TelephonyManager.NETWORK_TYPE_EVDO_B:
|
||||||
case TelephonyManager.NETWORK_TYPE_EHRPD:
|
|
||||||
mDataIconList = sDataNetType_3g[mInetCondition];
|
mDataIconList = sDataNetType_3g[mInetCondition];
|
||||||
break;
|
break;
|
||||||
case TelephonyManager.NETWORK_TYPE_LTE:
|
// TODO - add support for NETWORK_TYPE_LTE and NETWORK_TYPE_EHRPD
|
||||||
mDataIconList = sDataNetType_4g[mInetCondition];
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
mDataIconList = sDataNetType_g[mInetCondition];
|
mDataIconList = sDataNetType_g[mInetCondition];
|
||||||
break;
|
break;
|
||||||
|
@ -428,14 +428,10 @@ public class NetworkController extends BroadcastReceiver {
|
|||||||
case TelephonyManager.NETWORK_TYPE_EVDO_0: //fall through
|
case TelephonyManager.NETWORK_TYPE_EVDO_0: //fall through
|
||||||
case TelephonyManager.NETWORK_TYPE_EVDO_A:
|
case TelephonyManager.NETWORK_TYPE_EVDO_A:
|
||||||
case TelephonyManager.NETWORK_TYPE_EVDO_B:
|
case TelephonyManager.NETWORK_TYPE_EVDO_B:
|
||||||
case TelephonyManager.NETWORK_TYPE_EHRPD:
|
|
||||||
mDataIconList = TelephonyIcons.DATA_3G[mInetCondition];
|
mDataIconList = TelephonyIcons.DATA_3G[mInetCondition];
|
||||||
mDataTypeIconId = R.drawable.stat_sys_signal_3g;
|
mDataTypeIconId = R.drawable.stat_sys_signal_3g;
|
||||||
break;
|
break;
|
||||||
case TelephonyManager.NETWORK_TYPE_LTE:
|
// TODO - add support for NETWORK_TYPE_LTE and NETWORK_TYPE_EHRPD
|
||||||
mDataIconList = TelephonyIcons.DATA_4G[mInetCondition];
|
|
||||||
mDataTypeIconId = R.drawable.stat_sys_signal_4g;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
mDataIconList = TelephonyIcons.DATA_G[mInetCondition];
|
mDataIconList = TelephonyIcons.DATA_G[mInetCondition];
|
||||||
mDataTypeIconId = R.drawable.stat_sys_signal_gprs;
|
mDataTypeIconId = R.drawable.stat_sys_signal_gprs;
|
||||||
|
@ -124,18 +124,5 @@ class TelephonyIcons {
|
|||||||
R.drawable.stat_sys_data_fully_inandout_1x }
|
R.drawable.stat_sys_data_fully_inandout_1x }
|
||||||
};
|
};
|
||||||
|
|
||||||
// LTE and eHRPD
|
|
||||||
static final int[][] DATA_4G = {
|
|
||||||
{ R.drawable.stat_sys_data_connected_4g,
|
|
||||||
R.drawable.stat_sys_data_in_4g,
|
|
||||||
R.drawable.stat_sys_data_out_4g,
|
|
||||||
R.drawable.stat_sys_data_inandout_4g },
|
|
||||||
{ R.drawable.stat_sys_data_fully_connected_4g,
|
|
||||||
R.drawable.stat_sys_data_fully_in_4g,
|
|
||||||
R.drawable.stat_sys_data_fully_out_4g,
|
|
||||||
R.drawable.stat_sys_data_fully_inandout_4g }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -696,10 +696,15 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||||||
// TODO - move this into the MobileDataStateTracker
|
// TODO - move this into the MobileDataStateTracker
|
||||||
int usedNetworkType = networkType;
|
int usedNetworkType = networkType;
|
||||||
if(networkType == ConnectivityManager.TYPE_MOBILE) {
|
if(networkType == ConnectivityManager.TYPE_MOBILE) {
|
||||||
usedNetworkType = convertFeatureToNetworkType(feature);
|
if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_MMS)) {
|
||||||
if (usedNetworkType < 0) {
|
usedNetworkType = ConnectivityManager.TYPE_MOBILE_MMS;
|
||||||
Slog.e(TAG, "Can't match any netTracker!");
|
} else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_SUPL)) {
|
||||||
usedNetworkType = networkType;
|
usedNetworkType = ConnectivityManager.TYPE_MOBILE_SUPL;
|
||||||
|
} else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_DUN) ||
|
||||||
|
TextUtils.equals(feature, Phone.FEATURE_ENABLE_DUN_ALWAYS)) {
|
||||||
|
usedNetworkType = ConnectivityManager.TYPE_MOBILE_DUN;
|
||||||
|
} else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_HIPRI)) {
|
||||||
|
usedNetworkType = ConnectivityManager.TYPE_MOBILE_HIPRI;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
NetworkStateTracker network = mNetTrackers[usedNetworkType];
|
NetworkStateTracker network = mNetTrackers[usedNetworkType];
|
||||||
@ -843,9 +848,15 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||||||
// TODO - move to MobileDataStateTracker
|
// TODO - move to MobileDataStateTracker
|
||||||
int usedNetworkType = networkType;
|
int usedNetworkType = networkType;
|
||||||
if (networkType == ConnectivityManager.TYPE_MOBILE) {
|
if (networkType == ConnectivityManager.TYPE_MOBILE) {
|
||||||
usedNetworkType = convertFeatureToNetworkType(feature);
|
if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_MMS)) {
|
||||||
if (usedNetworkType < 0) {
|
usedNetworkType = ConnectivityManager.TYPE_MOBILE_MMS;
|
||||||
usedNetworkType = networkType;
|
} else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_SUPL)) {
|
||||||
|
usedNetworkType = ConnectivityManager.TYPE_MOBILE_SUPL;
|
||||||
|
} else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_DUN) ||
|
||||||
|
TextUtils.equals(feature, Phone.FEATURE_ENABLE_DUN_ALWAYS)) {
|
||||||
|
usedNetworkType = ConnectivityManager.TYPE_MOBILE_DUN;
|
||||||
|
} else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_HIPRI)) {
|
||||||
|
usedNetworkType = ConnectivityManager.TYPE_MOBILE_HIPRI;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tracker = mNetTrackers[usedNetworkType];
|
tracker = mNetTrackers[usedNetworkType];
|
||||||
@ -2163,24 +2174,4 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||||||
private void loge(String s) {
|
private void loge(String s) {
|
||||||
Slog.e(TAG, s);
|
Slog.e(TAG, s);
|
||||||
}
|
}
|
||||||
int convertFeatureToNetworkType(String feature){
|
|
||||||
int networkType = -1;
|
|
||||||
if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_MMS)) {
|
|
||||||
networkType = ConnectivityManager.TYPE_MOBILE_MMS;
|
|
||||||
} else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_SUPL)) {
|
|
||||||
networkType = ConnectivityManager.TYPE_MOBILE_SUPL;
|
|
||||||
} else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_DUN) ||
|
|
||||||
TextUtils.equals(feature, Phone.FEATURE_ENABLE_DUN_ALWAYS)) {
|
|
||||||
networkType = ConnectivityManager.TYPE_MOBILE_DUN;
|
|
||||||
} else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_HIPRI)) {
|
|
||||||
networkType = ConnectivityManager.TYPE_MOBILE_HIPRI;
|
|
||||||
} else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_FOTA)) {
|
|
||||||
networkType = ConnectivityManager.TYPE_MOBILE_FOTA;
|
|
||||||
} else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_IMS)) {
|
|
||||||
networkType = ConnectivityManager.TYPE_MOBILE_IMS;
|
|
||||||
} else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_CBS)) {
|
|
||||||
networkType = ConnectivityManager.TYPE_MOBILE_CBS;
|
|
||||||
}
|
|
||||||
return networkType;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -91,10 +91,6 @@ public class ServiceState implements Parcelable {
|
|||||||
public static final int RADIO_TECHNOLOGY_HSPA = 11;
|
public static final int RADIO_TECHNOLOGY_HSPA = 11;
|
||||||
/** @hide */
|
/** @hide */
|
||||||
public static final int RADIO_TECHNOLOGY_EVDO_B = 12;
|
public static final int RADIO_TECHNOLOGY_EVDO_B = 12;
|
||||||
/** @hide */
|
|
||||||
public static final int RADIO_TECHNOLOGY_LTE = 13;
|
|
||||||
/** @hide */
|
|
||||||
public static final int RADIO_TECHNOLOGY_EHRPD = 14;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Available registration states for GSM, UMTS and CDMA.
|
* Available registration states for GSM, UMTS and CDMA.
|
||||||
@ -428,12 +424,6 @@ public class ServiceState implements Parcelable {
|
|||||||
case 12:
|
case 12:
|
||||||
radioTechnology = "EvDo rev. B";
|
radioTechnology = "EvDo rev. B";
|
||||||
break;
|
break;
|
||||||
case 13:
|
|
||||||
radioTechnology = "LTE";
|
|
||||||
break;
|
|
||||||
case 14:
|
|
||||||
radioTechnology = "eHRPD";
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
Log.w(LOG_TAG, "mRadioTechnology variable out of range.");
|
Log.w(LOG_TAG, "mRadioTechnology variable out of range.");
|
||||||
break;
|
break;
|
||||||
|
@ -1,164 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2006 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.android.internal.telephony;
|
|
||||||
|
|
||||||
import android.app.PendingIntent;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import com.android.internal.telephony.gsm.GsmDataConnection;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Maintain the Apn context
|
|
||||||
*/
|
|
||||||
public class ApnContext {
|
|
||||||
|
|
||||||
public static final int PENDING_ACTION_NONE = 1;
|
|
||||||
public static final int PENDING_ACTION_RECONNECT = 2;
|
|
||||||
public static final int PENDING_ACTION_APN_DISABLE = 3;
|
|
||||||
public final String LOG_TAG;
|
|
||||||
|
|
||||||
int pendingAction;
|
|
||||||
|
|
||||||
protected static final boolean DBG = true;
|
|
||||||
|
|
||||||
String mApnType;
|
|
||||||
|
|
||||||
DataConnectionTracker.State mState;
|
|
||||||
|
|
||||||
ArrayList<ApnSetting> mWaitingApns = null;
|
|
||||||
|
|
||||||
private int mWaitingApnsPermanentFailureCountDown = 0;
|
|
||||||
|
|
||||||
ApnSetting mApnSetting;
|
|
||||||
|
|
||||||
GsmDataConnection mDataConnection;
|
|
||||||
|
|
||||||
String mReason;
|
|
||||||
|
|
||||||
PendingIntent mReconnectIntent;
|
|
||||||
|
|
||||||
public ApnContext(String apnType, String logTag) {
|
|
||||||
mApnType = apnType;
|
|
||||||
mState = DataConnectionTracker.State.IDLE;
|
|
||||||
setReason(Phone.REASON_DATA_ENABLED);
|
|
||||||
pendingAction = PENDING_ACTION_NONE;
|
|
||||||
LOG_TAG = logTag;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPendingAction() {
|
|
||||||
return pendingAction;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPendingAction(int pa) {
|
|
||||||
pendingAction = pa;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPermFailCount() {
|
|
||||||
return mWaitingApnsPermanentFailureCountDown;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void decPermFailCount() {
|
|
||||||
mWaitingApnsPermanentFailureCountDown--;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getApnType() {
|
|
||||||
return mApnType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public GsmDataConnection getDataConnection() {
|
|
||||||
return mDataConnection;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDataConnection(GsmDataConnection dataConnection) {
|
|
||||||
mDataConnection = dataConnection;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ApnSetting getApnSetting() {
|
|
||||||
return mApnSetting;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setApnSetting(ApnSetting apnSetting) {
|
|
||||||
mApnSetting = apnSetting;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setWaitingApns(ArrayList<ApnSetting> waitingApns) {
|
|
||||||
mWaitingApns = waitingApns;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ApnSetting getNextApn() {
|
|
||||||
ArrayList<ApnSetting> list = mWaitingApns;
|
|
||||||
ApnSetting apn = null;
|
|
||||||
|
|
||||||
if (list != null) {
|
|
||||||
if (!list.isEmpty()) {
|
|
||||||
apn = list.get(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return apn;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void removeNextApn() {
|
|
||||||
if ((mWaitingApns != null) && (!mWaitingApns.isEmpty())) {
|
|
||||||
mWaitingApns.remove(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArrayList<ApnSetting> getWaitingApns() {
|
|
||||||
return mWaitingApns;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setState(DataConnectionTracker.State s) {
|
|
||||||
if (DBG)
|
|
||||||
log("setState: " + s + " for type " + mApnType + ", previous state:" + mState);
|
|
||||||
|
|
||||||
mState = s;
|
|
||||||
|
|
||||||
if (mState == DataConnectionTracker.State.FAILED) {
|
|
||||||
if (mWaitingApns != null)
|
|
||||||
mWaitingApns.clear(); // when teardown the connection and set to IDLE
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public DataConnectionTracker.State getState() {
|
|
||||||
return mState;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setReason(String reason) {
|
|
||||||
if (DBG)
|
|
||||||
log("set reason as " + reason + ", for type " + mApnType + ",current state " + mState);
|
|
||||||
mReason = reason;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getReason() {
|
|
||||||
return mReason;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setReconnectIntent(PendingIntent intent) {
|
|
||||||
if (DBG)
|
|
||||||
log("set ReconnectIntent for type " + mApnType);
|
|
||||||
mReconnectIntent = intent;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PendingIntent getReconnectIntent() {
|
|
||||||
return mReconnectIntent;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void log(String s) {
|
|
||||||
Log.d(LOG_TAG, "[ApnContext] " + s);
|
|
||||||
}
|
|
||||||
}
|
|
@ -38,17 +38,12 @@ public class ApnSetting {
|
|||||||
public String numeric;
|
public String numeric;
|
||||||
public String protocol;
|
public String protocol;
|
||||||
public String roamingProtocol;
|
public String roamingProtocol;
|
||||||
public boolean enabled;
|
|
||||||
|
|
||||||
int timer;
|
|
||||||
int apnclass;
|
|
||||||
|
|
||||||
public ApnSetting(int id, String numeric, String carrier, String apn,
|
public ApnSetting(int id, String numeric, String carrier, String apn,
|
||||||
String proxy, String port,
|
String proxy, String port,
|
||||||
String mmsc, String mmsProxy, String mmsPort,
|
String mmsc, String mmsProxy, String mmsPort,
|
||||||
String user, String password, int authType, String[] types,
|
String user, String password, int authType, String[] types,
|
||||||
String protocol, String roamingProtocol,
|
String protocol, String roamingProtocol) {
|
||||||
boolean enabled, int timer, int apnclass) {
|
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.numeric = numeric;
|
this.numeric = numeric;
|
||||||
this.carrier = carrier;
|
this.carrier = carrier;
|
||||||
@ -64,9 +59,6 @@ public class ApnSetting {
|
|||||||
this.types = types;
|
this.types = types;
|
||||||
this.protocol = protocol;
|
this.protocol = protocol;
|
||||||
this.roamingProtocol = roamingProtocol;
|
this.roamingProtocol = roamingProtocol;
|
||||||
this.enabled = enabled;
|
|
||||||
this.timer = timer;
|
|
||||||
this.apnclass = apnclass;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -85,7 +77,7 @@ public class ApnSetting {
|
|||||||
* v2 format:
|
* v2 format:
|
||||||
* [ApnSettingV2] <carrier>, <apn>, <proxy>, <port>, <mmsc>, <mmsproxy>,
|
* [ApnSettingV2] <carrier>, <apn>, <proxy>, <port>, <mmsc>, <mmsproxy>,
|
||||||
* <mmsport>, <user>, <password, <authtype>, <mcc>, <mnc>,
|
* <mmsport>, <user>, <password, <authtype>, <mcc>, <mnc>,
|
||||||
* <type>[| <type>...], <protocol>, <roaming_protocol>, <enabled>, <timer>, <apnclass>
|
* <type>[| <type>...], <protocol>, <roaming_protocol>
|
||||||
*
|
*
|
||||||
* Note that the strings generated by toString() do not contain the username
|
* Note that the strings generated by toString() do not contain the username
|
||||||
* and password and thus cannot be read by this method.
|
* and password and thus cannot be read by this method.
|
||||||
@ -118,16 +110,11 @@ public class ApnSetting {
|
|||||||
|
|
||||||
String[] typeArray;
|
String[] typeArray;
|
||||||
String protocol, roamingProtocol;
|
String protocol, roamingProtocol;
|
||||||
boolean enabled;
|
|
||||||
int timer, apnclass;
|
|
||||||
if (version == 1) {
|
if (version == 1) {
|
||||||
typeArray = new String[a.length - 13];
|
typeArray = new String[a.length - 13];
|
||||||
System.arraycopy(a, 13, typeArray, 0, a.length - 13);
|
System.arraycopy(a, 13, typeArray, 0, a.length - 13);
|
||||||
protocol = RILConstants.SETUP_DATA_PROTOCOL_IP;
|
protocol = RILConstants.SETUP_DATA_PROTOCOL_IP;
|
||||||
roamingProtocol = RILConstants.SETUP_DATA_PROTOCOL_IP;
|
roamingProtocol = RILConstants.SETUP_DATA_PROTOCOL_IP;
|
||||||
enabled = true;
|
|
||||||
timer = 0;
|
|
||||||
apnclass = 0;
|
|
||||||
} else {
|
} else {
|
||||||
if (a.length < 16) {
|
if (a.length < 16) {
|
||||||
return null;
|
return null;
|
||||||
@ -135,14 +122,10 @@ public class ApnSetting {
|
|||||||
typeArray = a[13].split("\\s*\\|\\s*");
|
typeArray = a[13].split("\\s*\\|\\s*");
|
||||||
protocol = a[14];
|
protocol = a[14];
|
||||||
roamingProtocol = a[15];
|
roamingProtocol = a[15];
|
||||||
enabled = Integer.parseInt(a[16]) != 0;
|
|
||||||
timer = Integer.parseInt(a[17]);
|
|
||||||
apnclass = Integer.parseInt(a[18]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return new ApnSetting(-1,a[10]+a[11],a[0],a[1],a[2],a[3],a[7],a[8],
|
return new ApnSetting(-1,a[10]+a[11],a[0],a[1],a[2],a[3],a[7],a[8],
|
||||||
a[9],a[4],a[5],authType,typeArray,protocol,roamingProtocol,
|
a[9],a[4],a[5],authType,typeArray,protocol,roamingProtocol);
|
||||||
enabled,timer,apnclass);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
@ -166,9 +149,6 @@ public class ApnSetting {
|
|||||||
}
|
}
|
||||||
sb.append(", ").append(protocol);
|
sb.append(", ").append(protocol);
|
||||||
sb.append(", ").append(roamingProtocol);
|
sb.append(", ").append(roamingProtocol);
|
||||||
sb.append(", ").append(enabled);
|
|
||||||
sb.append(", ").append(timer);
|
|
||||||
sb.append(", ").append(apnclass);
|
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,9 +34,6 @@ public abstract class BaseCommands implements CommandsInterface {
|
|||||||
//***** Instance Variables
|
//***** Instance Variables
|
||||||
protected Context mContext;
|
protected Context mContext;
|
||||||
protected RadioState mState = RadioState.RADIO_UNAVAILABLE;
|
protected RadioState mState = RadioState.RADIO_UNAVAILABLE;
|
||||||
protected RadioState mSimState = RadioState.RADIO_UNAVAILABLE;
|
|
||||||
protected RadioState mRuimState = RadioState.RADIO_UNAVAILABLE;
|
|
||||||
protected RadioState mNvState = RadioState.RADIO_UNAVAILABLE;
|
|
||||||
protected Object mStateMonitor = new Object();
|
protected Object mStateMonitor = new Object();
|
||||||
|
|
||||||
protected RegistrantList mRadioStateChangedRegistrants = new RegistrantList();
|
protected RegistrantList mRadioStateChangedRegistrants = new RegistrantList();
|
||||||
@ -108,18 +105,6 @@ public abstract class BaseCommands implements CommandsInterface {
|
|||||||
return mState;
|
return mState;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RadioState getSimState() {
|
|
||||||
return mSimState;
|
|
||||||
}
|
|
||||||
|
|
||||||
public RadioState getRuimState() {
|
|
||||||
return mRuimState;
|
|
||||||
}
|
|
||||||
|
|
||||||
public RadioState getNvState() {
|
|
||||||
return mNvState;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void registerForRadioStateChanged(Handler h, int what, Object obj) {
|
public void registerForRadioStateChanged(Handler h, int what, Object obj) {
|
||||||
Registrant r = new Registrant (h, what, obj);
|
Registrant r = new Registrant (h, what, obj);
|
||||||
@ -215,7 +200,7 @@ public abstract class BaseCommands implements CommandsInterface {
|
|||||||
synchronized (mStateMonitor) {
|
synchronized (mStateMonitor) {
|
||||||
mSIMReadyRegistrants.add(r);
|
mSIMReadyRegistrants.add(r);
|
||||||
|
|
||||||
if (mSimState.isSIMReady()) {
|
if (mState.isSIMReady()) {
|
||||||
r.notifyRegistrant(new AsyncResult(null, null, null));
|
r.notifyRegistrant(new AsyncResult(null, null, null));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -234,7 +219,7 @@ public abstract class BaseCommands implements CommandsInterface {
|
|||||||
synchronized (mStateMonitor) {
|
synchronized (mStateMonitor) {
|
||||||
mRUIMReadyRegistrants.add(r);
|
mRUIMReadyRegistrants.add(r);
|
||||||
|
|
||||||
if (mRuimState.isRUIMReady()) {
|
if (mState.isRUIMReady()) {
|
||||||
r.notifyRegistrant(new AsyncResult(null, null, null));
|
r.notifyRegistrant(new AsyncResult(null, null, null));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -253,7 +238,7 @@ public abstract class BaseCommands implements CommandsInterface {
|
|||||||
synchronized (mStateMonitor) {
|
synchronized (mStateMonitor) {
|
||||||
mNVReadyRegistrants.add(r);
|
mNVReadyRegistrants.add(r);
|
||||||
|
|
||||||
if (mNvState.isNVReady()) {
|
if (mState.isNVReady()) {
|
||||||
r.notifyRegistrant(new AsyncResult(null, null, null));
|
r.notifyRegistrant(new AsyncResult(null, null, null));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -271,7 +256,7 @@ public abstract class BaseCommands implements CommandsInterface {
|
|||||||
synchronized (mStateMonitor) {
|
synchronized (mStateMonitor) {
|
||||||
mSIMLockedRegistrants.add(r);
|
mSIMLockedRegistrants.add(r);
|
||||||
|
|
||||||
if (mSimState == RadioState.SIM_LOCKED_OR_ABSENT) {
|
if (mState == RadioState.SIM_LOCKED_OR_ABSENT) {
|
||||||
r.notifyRegistrant(new AsyncResult(null, null, null));
|
r.notifyRegistrant(new AsyncResult(null, null, null));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -289,7 +274,7 @@ public abstract class BaseCommands implements CommandsInterface {
|
|||||||
synchronized (mStateMonitor) {
|
synchronized (mStateMonitor) {
|
||||||
mRUIMLockedRegistrants.add(r);
|
mRUIMLockedRegistrants.add(r);
|
||||||
|
|
||||||
if (mRuimState == RadioState.RUIM_LOCKED_OR_ABSENT) {
|
if (mState == RadioState.RUIM_LOCKED_OR_ABSENT) {
|
||||||
r.notifyRegistrant(new AsyncResult(null, null, null));
|
r.notifyRegistrant(new AsyncResult(null, null, null));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -668,22 +653,6 @@ public abstract class BaseCommands implements CommandsInterface {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: Use Constants or Enums
|
|
||||||
if(mState.getType() == 0) {
|
|
||||||
mSimState = mState;
|
|
||||||
mRuimState = mState;
|
|
||||||
mNvState = mState;
|
|
||||||
}
|
|
||||||
else if (mState.getType() == 1) {
|
|
||||||
mSimState = mState;
|
|
||||||
}
|
|
||||||
else if (mState.getType() == 2) {
|
|
||||||
mRuimState = mState;
|
|
||||||
}
|
|
||||||
else if (mState.getType() == 3) {
|
|
||||||
mNvState = mState;
|
|
||||||
}
|
|
||||||
|
|
||||||
mRadioStateChangedRegistrants.notifyRegistrants();
|
mRadioStateChangedRegistrants.notifyRegistrants();
|
||||||
|
|
||||||
if (mState.isAvailable() && !oldState.isAvailable()) {
|
if (mState.isAvailable() && !oldState.isAvailable()) {
|
||||||
|
@ -119,10 +119,6 @@ public abstract class CallTracker extends Handler {
|
|||||||
|
|
||||||
//***** Overridden from Handler
|
//***** Overridden from Handler
|
||||||
public abstract void handleMessage (Message msg);
|
public abstract void handleMessage (Message msg);
|
||||||
public abstract void registerForVoiceCallStarted(Handler h, int what, Object obj);
|
|
||||||
public abstract void unregisterForVoiceCallStarted(Handler h);
|
|
||||||
public abstract void registerForVoiceCallEnded(Handler h, int what, Object obj);
|
|
||||||
public abstract void unregisterForVoiceCallEnded(Handler h);
|
|
||||||
|
|
||||||
protected abstract void log(String msg);
|
protected abstract void log(String msg);
|
||||||
|
|
||||||
|
@ -20,29 +20,25 @@ import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
|
|||||||
|
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.SystemProperties;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@hide}
|
* {@hide}
|
||||||
*/
|
*/
|
||||||
public interface CommandsInterface {
|
public interface CommandsInterface {
|
||||||
// TODO: Get rid of mot from property.
|
|
||||||
static final boolean LTE_AVAILABLE_ON_CDMA =
|
|
||||||
SystemProperties.getBoolean("ro.mot.lte_on_cdma", false);
|
|
||||||
enum RadioState {
|
enum RadioState {
|
||||||
RADIO_OFF(0), /* Radio explictly powered off (eg CFUN=0) */
|
RADIO_OFF, /* Radio explicitly powered off (e.g. CFUN=0) */
|
||||||
RADIO_UNAVAILABLE(0), /* Radio unavailable (eg, resetting or not booted) */
|
RADIO_UNAVAILABLE, /* Radio unavailable (e.g. resetting or not booted) */
|
||||||
SIM_NOT_READY(1), /* Radio is on, but the SIM interface is not ready */
|
SIM_NOT_READY, /* Radio is on, but the SIM interface is not ready */
|
||||||
SIM_LOCKED_OR_ABSENT(1), /* SIM PIN locked, PUK required, network
|
SIM_LOCKED_OR_ABSENT, /* SIM PIN locked, PUK required, network
|
||||||
personalization, or SIM absent */
|
personalization, or SIM absent */
|
||||||
SIM_READY(1), /* Radio is on and SIM interface is available */
|
SIM_READY, /* Radio is on and SIM interface is available */
|
||||||
RUIM_NOT_READY(2), /* Radio is on, but the RUIM interface is not ready */
|
RUIM_NOT_READY, /* Radio is on, but the RUIM interface is not ready */
|
||||||
RUIM_READY(2), /* Radio is on and the RUIM interface is available */
|
RUIM_READY, /* Radio is on and the RUIM interface is available */
|
||||||
RUIM_LOCKED_OR_ABSENT(2), /* RUIM PIN locked, PUK required, network
|
RUIM_LOCKED_OR_ABSENT, /* RUIM PIN locked, PUK required, network
|
||||||
personalization locked, or RUIM absent */
|
personalization locked, or RUIM absent */
|
||||||
NV_NOT_READY(3), /* Radio is on, but the NV interface is not available */
|
NV_NOT_READY, /* Radio is on, but the NV interface is not available */
|
||||||
NV_READY(3); /* Radio is on and the NV interface is available */
|
NV_READY; /* Radio is on and the NV interface is available */
|
||||||
|
|
||||||
public boolean isOn() /* and available...*/ {
|
public boolean isOn() /* and available...*/ {
|
||||||
return this == SIM_NOT_READY
|
return this == SIM_NOT_READY
|
||||||
@ -54,14 +50,6 @@ public interface CommandsInterface {
|
|||||||
|| this == NV_NOT_READY
|
|| this == NV_NOT_READY
|
||||||
|| this == NV_READY;
|
|| this == NV_READY;
|
||||||
}
|
}
|
||||||
private int stateType;
|
|
||||||
private RadioState (int type) {
|
|
||||||
stateType = type;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getType() {
|
|
||||||
return stateType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isAvailable() {
|
public boolean isAvailable() {
|
||||||
return this != RADIO_UNAVAILABLE;
|
return this != RADIO_UNAVAILABLE;
|
||||||
@ -80,25 +68,17 @@ public interface CommandsInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isGsm() {
|
public boolean isGsm() {
|
||||||
if (LTE_AVAILABLE_ON_CDMA) {
|
return this == SIM_NOT_READY
|
||||||
return false;
|
|| this == SIM_LOCKED_OR_ABSENT
|
||||||
} else {
|
|| this == SIM_READY;
|
||||||
return this == SIM_NOT_READY
|
|
||||||
|| this == SIM_LOCKED_OR_ABSENT
|
|
||||||
|| this == SIM_READY;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isCdma() {
|
public boolean isCdma() {
|
||||||
if (LTE_AVAILABLE_ON_CDMA) {
|
return this == RUIM_NOT_READY
|
||||||
return true;
|
|| this == RUIM_READY
|
||||||
} else {
|
|| this == RUIM_LOCKED_OR_ABSENT
|
||||||
return this == RUIM_NOT_READY
|
|| this == NV_NOT_READY
|
||||||
|| this == RUIM_READY
|
|| this == NV_READY;
|
||||||
|| this == RUIM_LOCKED_OR_ABSENT
|
|
||||||
|| this == NV_NOT_READY
|
|
||||||
|| this == NV_READY;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,9 +153,6 @@ public interface CommandsInterface {
|
|||||||
//***** Methods
|
//***** Methods
|
||||||
|
|
||||||
RadioState getRadioState();
|
RadioState getRadioState();
|
||||||
RadioState getSimState();
|
|
||||||
RadioState getRuimState();
|
|
||||||
RadioState getNvState();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires on any RadioState transition
|
* Fires on any RadioState transition
|
||||||
|
@ -97,14 +97,14 @@ public abstract class DataConnectionTracker extends Handler {
|
|||||||
protected static final int EVENT_RADIO_OFF_OR_NOT_AVAILABLE = 12;
|
protected static final int EVENT_RADIO_OFF_OR_NOT_AVAILABLE = 12;
|
||||||
protected static final int EVENT_VOICE_CALL_STARTED = 14;
|
protected static final int EVENT_VOICE_CALL_STARTED = 14;
|
||||||
protected static final int EVENT_VOICE_CALL_ENDED = 15;
|
protected static final int EVENT_VOICE_CALL_ENDED = 15;
|
||||||
protected static final int EVENT_DATA_CONNECTION_DETACHED = 19;
|
protected static final int EVENT_GPRS_DETACHED = 19;
|
||||||
protected static final int EVENT_LINK_STATE_CHANGED = 20;
|
protected static final int EVENT_LINK_STATE_CHANGED = 20;
|
||||||
protected static final int EVENT_ROAMING_ON = 21;
|
protected static final int EVENT_ROAMING_ON = 21;
|
||||||
protected static final int EVENT_ROAMING_OFF = 22;
|
protected static final int EVENT_ROAMING_OFF = 22;
|
||||||
protected static final int EVENT_ENABLE_NEW_APN = 23;
|
protected static final int EVENT_ENABLE_NEW_APN = 23;
|
||||||
protected static final int EVENT_RESTORE_DEFAULT_APN = 24;
|
protected static final int EVENT_RESTORE_DEFAULT_APN = 24;
|
||||||
protected static final int EVENT_DISCONNECT_DONE = 25;
|
protected static final int EVENT_DISCONNECT_DONE = 25;
|
||||||
protected static final int EVENT_DATA_CONNECTION_ATTACHED = 26;
|
protected static final int EVENT_GPRS_ATTACHED = 26;
|
||||||
protected static final int EVENT_START_NETSTAT_POLL = 27;
|
protected static final int EVENT_START_NETSTAT_POLL = 27;
|
||||||
protected static final int EVENT_START_RECOVERY = 28;
|
protected static final int EVENT_START_RECOVERY = 28;
|
||||||
protected static final int EVENT_APN_CHANGED = 29;
|
protected static final int EVENT_APN_CHANGED = 29;
|
||||||
@ -117,8 +117,8 @@ public abstract class DataConnectionTracker extends Handler {
|
|||||||
protected static final int EVENT_RESTART_RADIO = 36;
|
protected static final int EVENT_RESTART_RADIO = 36;
|
||||||
protected static final int EVENT_SET_INTERNAL_DATA_ENABLE = 37;
|
protected static final int EVENT_SET_INTERNAL_DATA_ENABLE = 37;
|
||||||
protected static final int EVENT_RESET_DONE = 38;
|
protected static final int EVENT_RESET_DONE = 38;
|
||||||
|
|
||||||
public static final int CMD_SET_DATA_ENABLE = 39;
|
public static final int CMD_SET_DATA_ENABLE = 39;
|
||||||
public static final int EVENT_CLEAN_UP_ALL_CONNECTIONS = 40;
|
|
||||||
|
|
||||||
/***** Constants *****/
|
/***** Constants *****/
|
||||||
|
|
||||||
@ -128,10 +128,7 @@ public abstract class DataConnectionTracker extends Handler {
|
|||||||
protected static final int APN_SUPL_ID = 2;
|
protected static final int APN_SUPL_ID = 2;
|
||||||
protected static final int APN_DUN_ID = 3;
|
protected static final int APN_DUN_ID = 3;
|
||||||
protected static final int APN_HIPRI_ID = 4;
|
protected static final int APN_HIPRI_ID = 4;
|
||||||
protected static final int APN_IMS_ID = 5;
|
protected static final int APN_NUM_TYPES = 5;
|
||||||
protected static final int APN_FOTA_ID = 6;
|
|
||||||
protected static final int APN_CBS_ID = 7;
|
|
||||||
protected static final int APN_NUM_TYPES = 8;
|
|
||||||
|
|
||||||
public static final int DISABLED = 0;
|
public static final int DISABLED = 0;
|
||||||
public static final int ENABLED = 1;
|
public static final int ENABLED = 1;
|
||||||
@ -264,8 +261,15 @@ public abstract class DataConnectionTracker extends Handler {
|
|||||||
startNetStatPoll();
|
startNetStatPoll();
|
||||||
} else if (action.equals(getActionIntentReconnectAlarm())) {
|
} else if (action.equals(getActionIntentReconnectAlarm())) {
|
||||||
log("Reconnect alarm. Previous state was " + mState);
|
log("Reconnect alarm. Previous state was " + mState);
|
||||||
onActionIntentReconnectAlarm(intent);
|
|
||||||
|
|
||||||
|
String reason = intent.getStringExtra(INTENT_RECONNECT_ALARM_EXTRA_REASON);
|
||||||
|
if (mState == State.FAILED) {
|
||||||
|
Message msg = obtainMessage(EVENT_CLEAN_UP_CONNECTION);
|
||||||
|
msg.arg1 = 0; // tearDown is false
|
||||||
|
msg.obj = reason;
|
||||||
|
sendMessage(msg);
|
||||||
|
}
|
||||||
|
sendMessage(obtainMessage(EVENT_TRY_SETUP_DATA));
|
||||||
} else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
|
} else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
|
||||||
final android.net.NetworkInfo networkInfo = (NetworkInfo)
|
final android.net.NetworkInfo networkInfo = (NetworkInfo)
|
||||||
intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
|
intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
|
||||||
@ -283,18 +287,6 @@ public abstract class DataConnectionTracker extends Handler {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
protected void onActionIntentReconnectAlarm(Intent intent) {
|
|
||||||
String reason = intent.getStringExtra(INTENT_RECONNECT_ALARM_EXTRA_REASON);
|
|
||||||
if (mState == State.FAILED) {
|
|
||||||
Message msg = obtainMessage(EVENT_CLEAN_UP_CONNECTION);
|
|
||||||
msg.arg1 = 0; // tearDown is false
|
|
||||||
msg.arg2 = 0;
|
|
||||||
msg.obj = reason;
|
|
||||||
sendMessage(msg);
|
|
||||||
}
|
|
||||||
sendMessage(obtainMessage(EVENT_TRY_SETUP_DATA));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default constructor
|
* Default constructor
|
||||||
*/
|
*/
|
||||||
@ -342,10 +334,22 @@ public abstract class DataConnectionTracker extends Handler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public State getState() {
|
public State getState() {
|
||||||
// TODO: reimplement to use apnType better yet REMOVE.
|
|
||||||
return mState;
|
return mState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getStateInString() {
|
||||||
|
switch (mState) {
|
||||||
|
case IDLE: return "IDLE";
|
||||||
|
case INITING: return "INIT";
|
||||||
|
case CONNECTING: return "CING";
|
||||||
|
case SCANNING: return "SCAN";
|
||||||
|
case CONNECTED: return "CNTD";
|
||||||
|
case DISCONNECTING: return "DING";
|
||||||
|
case FAILED: return "FAIL";
|
||||||
|
default: return "ERRO";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the data connections
|
* @return the data connections
|
||||||
*/
|
*/
|
||||||
@ -370,7 +374,7 @@ public abstract class DataConnectionTracker extends Handler {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getActiveApnType() {
|
public String getActiveApnType() {
|
||||||
String result;
|
String result;
|
||||||
if (mActiveApn != null) {
|
if (mActiveApn != null) {
|
||||||
result = apnIdToType(mActiveApn.id);
|
result = apnIdToType(mActiveApn.id);
|
||||||
@ -380,7 +384,7 @@ public abstract class DataConnectionTracker extends Handler {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getActiveApnString() {
|
protected String getActiveApnString() {
|
||||||
String result = null;
|
String result = null;
|
||||||
if (mActiveApn != null) {
|
if (mActiveApn != null) {
|
||||||
result = mActiveApn.apn;
|
result = mActiveApn.apn;
|
||||||
@ -388,6 +392,17 @@ public abstract class DataConnectionTracker extends Handler {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The data connection is expected to be setup while device
|
||||||
|
* 1. has Icc card
|
||||||
|
* 2. registered for data service
|
||||||
|
* 3. user doesn't explicitly disable data service
|
||||||
|
* 4. wifi is not on
|
||||||
|
*
|
||||||
|
* @return false while no data connection if all above requirements are met.
|
||||||
|
*/
|
||||||
|
public abstract boolean isDataConnectionAsDesired();
|
||||||
|
|
||||||
//The data roaming setting is now located in the shared preferences.
|
//The data roaming setting is now located in the shared preferences.
|
||||||
// See if the requested preference value is the same as that stored in
|
// See if the requested preference value is the same as that stored in
|
||||||
// the shared values. If it is not, then update it.
|
// the shared values. If it is not, then update it.
|
||||||
@ -428,8 +443,7 @@ public abstract class DataConnectionTracker extends Handler {
|
|||||||
protected abstract void onResetDone(AsyncResult ar);
|
protected abstract void onResetDone(AsyncResult ar);
|
||||||
protected abstract void onVoiceCallStarted();
|
protected abstract void onVoiceCallStarted();
|
||||||
protected abstract void onVoiceCallEnded();
|
protected abstract void onVoiceCallEnded();
|
||||||
protected abstract void onCleanUpConnection(boolean tearDown, int apnId, String reason);
|
protected abstract void onCleanUpConnection(boolean tearDown, String reason);
|
||||||
protected abstract void onCleanUpAllConnections();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleMessage(Message msg) {
|
public void handleMessage(Message msg) {
|
||||||
@ -484,15 +498,11 @@ public abstract class DataConnectionTracker extends Handler {
|
|||||||
onVoiceCallEnded();
|
onVoiceCallEnded();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVENT_CLEAN_UP_ALL_CONNECTIONS: {
|
case EVENT_CLEAN_UP_CONNECTION:
|
||||||
onCleanUpAllConnections();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case EVENT_CLEAN_UP_CONNECTION: {
|
|
||||||
boolean tearDown = (msg.arg1 == 0) ? false : true;
|
boolean tearDown = (msg.arg1 == 0) ? false : true;
|
||||||
onCleanUpConnection(tearDown, msg.arg2, (String) msg.obj);
|
onCleanUpConnection(tearDown, (String) msg.obj);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case EVENT_SET_INTERNAL_DATA_ENABLE: {
|
case EVENT_SET_INTERNAL_DATA_ENABLE: {
|
||||||
boolean enabled = (msg.arg1 == ENABLED) ? true : false;
|
boolean enabled = (msg.arg1 == ENABLED) ? true : false;
|
||||||
onSetInternalDataEnabled(enabled);
|
onSetInternalDataEnabled(enabled);
|
||||||
@ -547,12 +557,6 @@ public abstract class DataConnectionTracker extends Handler {
|
|||||||
return APN_DUN_ID;
|
return APN_DUN_ID;
|
||||||
} else if (TextUtils.equals(type, Phone.APN_TYPE_HIPRI)) {
|
} else if (TextUtils.equals(type, Phone.APN_TYPE_HIPRI)) {
|
||||||
return APN_HIPRI_ID;
|
return APN_HIPRI_ID;
|
||||||
} else if (TextUtils.equals(type, Phone.APN_TYPE_IMS)) {
|
|
||||||
return APN_IMS_ID;
|
|
||||||
} else if (TextUtils.equals(type, Phone.APN_TYPE_FOTA)) {
|
|
||||||
return APN_FOTA_ID;
|
|
||||||
} else if (TextUtils.equals(type, Phone.APN_TYPE_CBS)) {
|
|
||||||
return APN_CBS_ID;
|
|
||||||
} else {
|
} else {
|
||||||
return APN_INVALID_ID;
|
return APN_INVALID_ID;
|
||||||
}
|
}
|
||||||
@ -570,12 +574,6 @@ public abstract class DataConnectionTracker extends Handler {
|
|||||||
return Phone.APN_TYPE_DUN;
|
return Phone.APN_TYPE_DUN;
|
||||||
case APN_HIPRI_ID:
|
case APN_HIPRI_ID:
|
||||||
return Phone.APN_TYPE_HIPRI;
|
return Phone.APN_TYPE_HIPRI;
|
||||||
case APN_IMS_ID:
|
|
||||||
return Phone.APN_TYPE_IMS;
|
|
||||||
case APN_FOTA_ID:
|
|
||||||
return Phone.APN_TYPE_FOTA;
|
|
||||||
case APN_CBS_ID:
|
|
||||||
return Phone.APN_TYPE_CBS;
|
|
||||||
default:
|
default:
|
||||||
log("Unknown id (" + id + ") in apnIdToType");
|
log("Unknown id (" + id + ") in apnIdToType");
|
||||||
return Phone.APN_TYPE_DEFAULT;
|
return Phone.APN_TYPE_DEFAULT;
|
||||||
@ -828,7 +826,7 @@ public abstract class DataConnectionTracker extends Handler {
|
|||||||
dataEnabled[apnId] = false;
|
dataEnabled[apnId] = false;
|
||||||
enabledCount--;
|
enabledCount--;
|
||||||
if (enabledCount == 0) {
|
if (enabledCount == 0) {
|
||||||
onCleanUpConnection(true, apnId, Phone.REASON_DATA_DISABLED);
|
onCleanUpConnection(true, Phone.REASON_DATA_DISABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
// send the disconnect msg manually, since the normal route wont send
|
// send the disconnect msg manually, since the normal route wont send
|
||||||
@ -886,7 +884,7 @@ public abstract class DataConnectionTracker extends Handler {
|
|||||||
mRetryMgr.resetRetryCount();
|
mRetryMgr.resetRetryCount();
|
||||||
onTrySetupData(Phone.REASON_DATA_ENABLED);
|
onTrySetupData(Phone.REASON_DATA_ENABLED);
|
||||||
} else {
|
} else {
|
||||||
cleanUpAllConnections();
|
onCleanUpConnection(true, Phone.REASON_DATA_DISABLED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -896,17 +894,6 @@ public abstract class DataConnectionTracker extends Handler {
|
|||||||
return mDataEnabled;
|
return mDataEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void cleanUpAllConnections() {
|
|
||||||
Message msg = obtainMessage(EVENT_CLEAN_UP_ALL_CONNECTIONS);
|
|
||||||
sendMessage(msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isAnyActiveDataConnections() {
|
|
||||||
// TODO: Remember if there are any connected or
|
|
||||||
// loop asking each DC/APN?
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void onSetDataEnabled(boolean enable) {
|
protected void onSetDataEnabled(boolean enable) {
|
||||||
boolean prevEnabled = getAnyDataEnabled();
|
boolean prevEnabled = getAnyDataEnabled();
|
||||||
if (mDataEnabled != enable) {
|
if (mDataEnabled != enable) {
|
||||||
@ -920,7 +907,7 @@ public abstract class DataConnectionTracker extends Handler {
|
|||||||
mRetryMgr.resetRetryCount();
|
mRetryMgr.resetRetryCount();
|
||||||
onTrySetupData(Phone.REASON_DATA_ENABLED);
|
onTrySetupData(Phone.REASON_DATA_ENABLED);
|
||||||
} else {
|
} else {
|
||||||
onCleanUpConnection(true, APN_DEFAULT_ID, Phone.REASON_DATA_DISABLED);
|
onCleanUpConnection(true, Phone.REASON_DATA_DISABLED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,6 @@ import android.util.Log;
|
|||||||
|
|
||||||
import com.android.internal.telephony.PhoneBase;
|
import com.android.internal.telephony.PhoneBase;
|
||||||
import com.android.internal.telephony.CommandsInterface.RadioState;
|
import com.android.internal.telephony.CommandsInterface.RadioState;
|
||||||
import android.os.SystemProperties;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@hide}
|
* {@hide}
|
||||||
@ -86,10 +85,6 @@ public abstract class IccCard {
|
|||||||
private static final int EVENT_QUERY_FACILITY_FDN_DONE = 10;
|
private static final int EVENT_QUERY_FACILITY_FDN_DONE = 10;
|
||||||
private static final int EVENT_CHANGE_FACILITY_FDN_DONE = 11;
|
private static final int EVENT_CHANGE_FACILITY_FDN_DONE = 11;
|
||||||
|
|
||||||
// FIXME: remove mot from property
|
|
||||||
static final boolean LTE_AVAILABLE_ON_CDMA =
|
|
||||||
SystemProperties.getBoolean("ro.mot.lte_on_cdma", false);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
UNKNOWN is a transient state, for example, after uesr inputs ICC pin under
|
UNKNOWN is a transient state, for example, after uesr inputs ICC pin under
|
||||||
PIN_REQUIRED state, the query for ICC status returns UNKNOWN before it
|
PIN_REQUIRED state, the query for ICC status returns UNKNOWN before it
|
||||||
@ -431,9 +426,6 @@ public abstract class IccCard {
|
|||||||
broadcastIccStateChangedIntent(INTENT_VALUE_ICC_LOCKED,
|
broadcastIccStateChangedIntent(INTENT_VALUE_ICC_LOCKED,
|
||||||
INTENT_VALUE_LOCKED_NETWORK);
|
INTENT_VALUE_LOCKED_NETWORK);
|
||||||
}
|
}
|
||||||
if (oldState != State.READY && newState == State.READY && LTE_AVAILABLE_ON_CDMA) {
|
|
||||||
mPhone.mSIMRecords.onSimReady();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -620,16 +612,14 @@ public abstract class IccCard {
|
|||||||
currentRadioState == RadioState.SIM_NOT_READY ||
|
currentRadioState == RadioState.SIM_NOT_READY ||
|
||||||
currentRadioState == RadioState.RUIM_NOT_READY ||
|
currentRadioState == RadioState.RUIM_NOT_READY ||
|
||||||
currentRadioState == RadioState.NV_NOT_READY ||
|
currentRadioState == RadioState.NV_NOT_READY ||
|
||||||
(currentRadioState == RadioState.NV_READY && !LTE_AVAILABLE_ON_CDMA)) {
|
currentRadioState == RadioState.NV_READY) {
|
||||||
return IccCard.State.NOT_READY;
|
return IccCard.State.NOT_READY;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( currentRadioState == RadioState.SIM_LOCKED_OR_ABSENT ||
|
if( currentRadioState == RadioState.SIM_LOCKED_OR_ABSENT ||
|
||||||
currentRadioState == RadioState.SIM_READY ||
|
currentRadioState == RadioState.SIM_READY ||
|
||||||
currentRadioState == RadioState.RUIM_LOCKED_OR_ABSENT ||
|
currentRadioState == RadioState.RUIM_LOCKED_OR_ABSENT ||
|
||||||
currentRadioState == RadioState.RUIM_READY ||
|
currentRadioState == RadioState.RUIM_READY) {
|
||||||
(currentRadioState == RadioState.NV_READY && LTE_AVAILABLE_ON_CDMA)) {
|
|
||||||
|
|
||||||
|
|
||||||
int index;
|
int index;
|
||||||
|
|
||||||
|
@ -28,8 +28,7 @@ public class IccCardApplication {
|
|||||||
APPTYPE_SIM,
|
APPTYPE_SIM,
|
||||||
APPTYPE_USIM,
|
APPTYPE_USIM,
|
||||||
APPTYPE_RUIM,
|
APPTYPE_RUIM,
|
||||||
APPTYPE_CSIM,
|
APPTYPE_CSIM
|
||||||
APPTYPE_ISIM
|
|
||||||
};
|
};
|
||||||
|
|
||||||
public enum AppState{
|
public enum AppState{
|
||||||
@ -116,7 +115,6 @@ public class IccCardApplication {
|
|||||||
case 2: newType = AppType.APPTYPE_USIM; break;
|
case 2: newType = AppType.APPTYPE_USIM; break;
|
||||||
case 3: newType = AppType.APPTYPE_RUIM; break;
|
case 3: newType = AppType.APPTYPE_RUIM; break;
|
||||||
case 4: newType = AppType.APPTYPE_CSIM; break;
|
case 4: newType = AppType.APPTYPE_CSIM; break;
|
||||||
case 5: newType = AppType.APPTYPE_ISIM; break;
|
|
||||||
default:
|
default:
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
"Unrecognized RIL_AppType: " +type);
|
"Unrecognized RIL_AppType: " +type);
|
||||||
|
@ -58,13 +58,6 @@ public interface IccConstants {
|
|||||||
static final int EF_CST = 0x6f32;
|
static final int EF_CST = 0x6f32;
|
||||||
static final int EF_RUIM_SPN =0x6F41;
|
static final int EF_RUIM_SPN =0x6F41;
|
||||||
|
|
||||||
//ISIM access
|
|
||||||
static final int EF_IMPU = 0x6f04;
|
|
||||||
static final int EF_IMPI = 0x6f02;
|
|
||||||
static final int EF_DOMAIN = 0x6f03;
|
|
||||||
static final int EF_IST = 0x6f07;
|
|
||||||
static final int EF_PCSCF = 0x6f09;
|
|
||||||
|
|
||||||
// SMS record length from TS 51.011 10.5.3
|
// SMS record length from TS 51.011 10.5.3
|
||||||
static public final int SMS_RECORD_LENGTH = 176;
|
static public final int SMS_RECORD_LENGTH = 176;
|
||||||
|
|
||||||
@ -74,7 +67,4 @@ public interface IccConstants {
|
|||||||
static final String DF_GRAPHICS = "5F50";
|
static final String DF_GRAPHICS = "5F50";
|
||||||
static final String DF_GSM = "7F20";
|
static final String DF_GSM = "7F20";
|
||||||
static final String DF_CDMA = "7F25";
|
static final String DF_CDMA = "7F25";
|
||||||
|
|
||||||
//ISIM access
|
|
||||||
static final String DF_ADFISIM = "7FFF";
|
|
||||||
}
|
}
|
||||||
|
@ -125,12 +125,6 @@ public interface Phone {
|
|||||||
static final String APN_TYPE_DUN = "dun";
|
static final String APN_TYPE_DUN = "dun";
|
||||||
/** APN type for HiPri traffic */
|
/** APN type for HiPri traffic */
|
||||||
static final String APN_TYPE_HIPRI = "hipri";
|
static final String APN_TYPE_HIPRI = "hipri";
|
||||||
/** APN type for FOTA */
|
|
||||||
static final String APN_TYPE_FOTA = "fota";
|
|
||||||
/** APN type for IMS */
|
|
||||||
static final String APN_TYPE_IMS = "ims";
|
|
||||||
/** APN type for CBS */
|
|
||||||
static final String APN_TYPE_CBS = "cbs";
|
|
||||||
|
|
||||||
// "Features" accessible through the connectivity manager
|
// "Features" accessible through the connectivity manager
|
||||||
static final String FEATURE_ENABLE_MMS = "enableMMS";
|
static final String FEATURE_ENABLE_MMS = "enableMMS";
|
||||||
@ -138,9 +132,6 @@ public interface Phone {
|
|||||||
static final String FEATURE_ENABLE_DUN = "enableDUN";
|
static final String FEATURE_ENABLE_DUN = "enableDUN";
|
||||||
static final String FEATURE_ENABLE_HIPRI = "enableHIPRI";
|
static final String FEATURE_ENABLE_HIPRI = "enableHIPRI";
|
||||||
static final String FEATURE_ENABLE_DUN_ALWAYS = "enableDUNAlways";
|
static final String FEATURE_ENABLE_DUN_ALWAYS = "enableDUNAlways";
|
||||||
static final String FEATURE_ENABLE_FOTA = "enableFOTA";
|
|
||||||
static final String FEATURE_ENABLE_IMS = "enableIMS";
|
|
||||||
static final String FEATURE_ENABLE_CBS = "enableCBS";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return codes for <code>enableApnType()</code>
|
* Return codes for <code>enableApnType()</code>
|
||||||
@ -149,7 +140,6 @@ public interface Phone {
|
|||||||
static final int APN_REQUEST_STARTED = 1;
|
static final int APN_REQUEST_STARTED = 1;
|
||||||
static final int APN_TYPE_NOT_AVAILABLE = 2;
|
static final int APN_TYPE_NOT_AVAILABLE = 2;
|
||||||
static final int APN_REQUEST_FAILED = 3;
|
static final int APN_REQUEST_FAILED = 3;
|
||||||
static final int APN_ALREADY_INACTIVE = 4;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -174,7 +164,6 @@ public interface Phone {
|
|||||||
static final String REASON_PS_RESTRICT_ENABLED = "psRestrictEnabled";
|
static final String REASON_PS_RESTRICT_ENABLED = "psRestrictEnabled";
|
||||||
static final String REASON_PS_RESTRICT_DISABLED = "psRestrictDisabled";
|
static final String REASON_PS_RESTRICT_DISABLED = "psRestrictDisabled";
|
||||||
static final String REASON_SIM_LOADED = "simLoaded";
|
static final String REASON_SIM_LOADED = "simLoaded";
|
||||||
static final String REASON_NW_TYPE_CHANGED = "nwTypeChanged";
|
|
||||||
|
|
||||||
// Used for band mode selection methods
|
// Used for band mode selection methods
|
||||||
static final int BM_UNSPECIFIED = 0; // selected by baseband automatically
|
static final int BM_UNSPECIFIED = 0; // selected by baseband automatically
|
||||||
@ -204,7 +193,6 @@ public interface Phone {
|
|||||||
int NT_MODE_EVDO_NO_CDMA = RILConstants.NETWORK_MODE_EVDO_NO_CDMA;
|
int NT_MODE_EVDO_NO_CDMA = RILConstants.NETWORK_MODE_EVDO_NO_CDMA;
|
||||||
int NT_MODE_GLOBAL = RILConstants.NETWORK_MODE_GLOBAL;
|
int NT_MODE_GLOBAL = RILConstants.NETWORK_MODE_GLOBAL;
|
||||||
|
|
||||||
int NT_MODE_LTE_ONLY = RILConstants.NETWORK_MODE_LTE_ONLY;
|
|
||||||
int PREFERRED_NT_MODE = RILConstants.PREFERRED_NETWORK_MODE;
|
int PREFERRED_NT_MODE = RILConstants.PREFERRED_NETWORK_MODE;
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,8 +38,6 @@ import android.util.Log;
|
|||||||
|
|
||||||
import com.android.internal.R;
|
import com.android.internal.R;
|
||||||
import com.android.internal.telephony.test.SimulatedRadioControl;
|
import com.android.internal.telephony.test.SimulatedRadioControl;
|
||||||
import com.android.internal.telephony.gsm.SIMRecords;
|
|
||||||
import com.android.internal.telephony.gsm.SimCard;
|
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
@ -118,9 +116,6 @@ public abstract class PhoneBase extends Handler implements Phone {
|
|||||||
int mCallRingDelay;
|
int mCallRingDelay;
|
||||||
public boolean mIsTheCurrentActivePhone = true;
|
public boolean mIsTheCurrentActivePhone = true;
|
||||||
boolean mIsVoiceCapable = true;
|
boolean mIsVoiceCapable = true;
|
||||||
public SIMRecords mSIMRecords;
|
|
||||||
public SimCard mSimCard;
|
|
||||||
public SMSDispatcher mSMS;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set a system property, unless we're in unit test mode
|
* Set a system property, unless we're in unit test mode
|
||||||
@ -242,8 +237,7 @@ public abstract class PhoneBase extends Handler implements Phone {
|
|||||||
public void dispose() {
|
public void dispose() {
|
||||||
synchronized(PhoneProxy.lockForRadioTechnologyChange) {
|
synchronized(PhoneProxy.lockForRadioTechnologyChange) {
|
||||||
mCM.unSetOnCallRing(this);
|
mCM.unSetOnCallRing(this);
|
||||||
// Must cleanup all connectionS and needs to use sendMessage!
|
mDataConnection.onCleanUpConnection(false, REASON_RADIO_TURNED_OFF);
|
||||||
mDataConnection.cleanUpAllConnections();
|
|
||||||
mIsTheCurrentActivePhone = false;
|
mIsTheCurrentActivePhone = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -667,20 +661,6 @@ public abstract class PhoneBase extends Handler implements Phone {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves the ServiceStateTracker of the phone instance.
|
|
||||||
*/
|
|
||||||
public ServiceStateTracker getServiceStateTracker() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get call tracker
|
|
||||||
*/
|
|
||||||
public CallTracker getCallTracker() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Query the status of the CDMA roaming preference
|
* Query the status of the CDMA roaming preference
|
||||||
*/
|
*/
|
||||||
@ -1100,14 +1080,4 @@ public abstract class PhoneBase extends Handler implements Phone {
|
|||||||
Log.e(LOG_TAG, "Error! " + name + "() in PhoneBase should not be " +
|
Log.e(LOG_TAG, "Error! " + name + "() in PhoneBase should not be " +
|
||||||
"called, GSMPhone inactive.");
|
"called, GSMPhone inactive.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Called by SimRecords which is constructed with a PhoneBase instead of a GSMPhone.
|
|
||||||
public void notifyCallForwardingIndicator() {
|
|
||||||
// This function should be overridden by the class GSMPhone. Not implemented in CDMAPhone.
|
|
||||||
Log.e(LOG_TAG, "Error! This function should never be executed, inactive CDMAPhone.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void notifyDataConnectionFailed(String reason, String apnType) {
|
|
||||||
mNotifier.notifyDataConnectionFailed(this, reason, apnType);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -21,10 +21,8 @@ import android.net.LocalServerSocket;
|
|||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.os.SystemProperties;
|
|
||||||
|
|
||||||
import com.android.internal.telephony.cdma.CDMAPhone;
|
import com.android.internal.telephony.cdma.CDMAPhone;
|
||||||
import com.android.internal.telephony.cdma.CDMALTEPhone;
|
|
||||||
import com.android.internal.telephony.gsm.GSMPhone;
|
import com.android.internal.telephony.gsm.GSMPhone;
|
||||||
import com.android.internal.telephony.sip.SipPhone;
|
import com.android.internal.telephony.sip.SipPhone;
|
||||||
import com.android.internal.telephony.sip.SipPhoneFactory;
|
import com.android.internal.telephony.sip.SipPhoneFactory;
|
||||||
@ -36,9 +34,6 @@ public class PhoneFactory {
|
|||||||
static final String LOG_TAG = "PHONE";
|
static final String LOG_TAG = "PHONE";
|
||||||
static final int SOCKET_OPEN_RETRY_MILLIS = 2 * 1000;
|
static final int SOCKET_OPEN_RETRY_MILLIS = 2 * 1000;
|
||||||
static final int SOCKET_OPEN_MAX_RETRY = 3;
|
static final int SOCKET_OPEN_MAX_RETRY = 3;
|
||||||
static final boolean LTE_AVAILABLE_ON_CDMA =
|
|
||||||
SystemProperties.getBoolean("ro.mot.lte_on_cdma", false);
|
|
||||||
|
|
||||||
//***** Class Variables
|
//***** Class Variables
|
||||||
|
|
||||||
static private Phone sProxyPhone = null;
|
static private Phone sProxyPhone = null;
|
||||||
@ -120,15 +115,9 @@ public class PhoneFactory {
|
|||||||
sProxyPhone = new PhoneProxy(new GSMPhone(context,
|
sProxyPhone = new PhoneProxy(new GSMPhone(context,
|
||||||
sCommandsInterface, sPhoneNotifier));
|
sCommandsInterface, sPhoneNotifier));
|
||||||
} else if (phoneType == Phone.PHONE_TYPE_CDMA) {
|
} else if (phoneType == Phone.PHONE_TYPE_CDMA) {
|
||||||
if (LTE_AVAILABLE_ON_CDMA == false ) {
|
Log.i(LOG_TAG, "Creating CDMAPhone");
|
||||||
Log.i(LOG_TAG, "Creating CDMAPhone");
|
sProxyPhone = new PhoneProxy(new CDMAPhone(context,
|
||||||
sProxyPhone = new PhoneProxy(new CDMAPhone(context,
|
sCommandsInterface, sPhoneNotifier));
|
||||||
sCommandsInterface, sPhoneNotifier));
|
|
||||||
} else {
|
|
||||||
Log.i(LOG_TAG, "Creating CDMALTEPhone");
|
|
||||||
sProxyPhone = new PhoneProxy(new CDMALTEPhone(context,
|
|
||||||
sCommandsInterface, sPhoneNotifier));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sMadeDefaults = true;
|
sMadeDefaults = true;
|
||||||
@ -158,13 +147,6 @@ public class PhoneFactory {
|
|||||||
|
|
||||||
case RILConstants.NETWORK_MODE_GLOBAL:
|
case RILConstants.NETWORK_MODE_GLOBAL:
|
||||||
return Phone.PHONE_TYPE_CDMA;
|
return Phone.PHONE_TYPE_CDMA;
|
||||||
|
|
||||||
case RILConstants.NETWORK_MODE_LTE_ONLY:
|
|
||||||
if (SystemProperties.getBoolean("ro.mot.lte_on_cdma", false)) {
|
|
||||||
return Phone.PHONE_TYPE_CDMA;
|
|
||||||
} else {
|
|
||||||
return Phone.PHONE_TYPE_GSM;
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
return Phone.PHONE_TYPE_GSM;
|
return Phone.PHONE_TYPE_GSM;
|
||||||
}
|
}
|
||||||
@ -184,13 +166,8 @@ public class PhoneFactory {
|
|||||||
|
|
||||||
public static Phone getCdmaPhone() {
|
public static Phone getCdmaPhone() {
|
||||||
synchronized(PhoneProxy.lockForRadioTechnologyChange) {
|
synchronized(PhoneProxy.lockForRadioTechnologyChange) {
|
||||||
if (LTE_AVAILABLE_ON_CDMA == false) {
|
Phone phone = new CDMAPhone(sContext, sCommandsInterface, sPhoneNotifier);
|
||||||
Phone phone = new CDMAPhone(sContext, sCommandsInterface, sPhoneNotifier);
|
return phone;
|
||||||
return phone;
|
|
||||||
} else {
|
|
||||||
Phone phone = new CDMALTEPhone(sContext, sCommandsInterface, sPhoneNotifier);
|
|
||||||
return phone;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -741,10 +741,6 @@ public class PhoneProxy extends Handler implements Phone {
|
|||||||
return mActivePhone.getCdmaEriIconMode();
|
return mActivePhone.getCdmaEriIconMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Phone getActivePhone() {
|
|
||||||
return mActivePhone;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sendBurstDtmf(String dtmfString, int on, int off, Message onComplete){
|
public void sendBurstDtmf(String dtmfString, int on, int off, Message onComplete){
|
||||||
mActivePhone.sendBurstDtmf(dtmfString, on, off, onComplete);
|
mActivePhone.sendBurstDtmf(dtmfString, on, off, onComplete);
|
||||||
}
|
}
|
||||||
|
@ -638,13 +638,6 @@ public final class RIL extends BaseCommands implements CommandsInterface {
|
|||||||
case RILConstants.NETWORK_MODE_GLOBAL:
|
case RILConstants.NETWORK_MODE_GLOBAL:
|
||||||
mPhoneType = RILConstants.CDMA_PHONE;
|
mPhoneType = RILConstants.CDMA_PHONE;
|
||||||
break;
|
break;
|
||||||
case RILConstants.NETWORK_MODE_LTE_ONLY:
|
|
||||||
if (SystemProperties.getBoolean("ro.mot.lte_on_cdma", false)) {
|
|
||||||
mPhoneType = RILConstants.CDMA_PHONE;
|
|
||||||
} else {
|
|
||||||
mPhoneType = RILConstants.GSM_PHONE;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
mPhoneType = RILConstants.CDMA_PHONE;
|
mPhoneType = RILConstants.CDMA_PHONE;
|
||||||
}
|
}
|
||||||
@ -2071,14 +2064,6 @@ public final class RIL extends BaseCommands implements CommandsInterface {
|
|||||||
*/
|
*/
|
||||||
if (RILJ_LOGD) Log.d(LOG_TAG, "Radio ON @ init; reset to OFF");
|
if (RILJ_LOGD) Log.d(LOG_TAG, "Radio ON @ init; reset to OFF");
|
||||||
setRadioPower(false, null);
|
setRadioPower(false, null);
|
||||||
// MultimodeRIL needs to know the preferred network at power up.
|
|
||||||
RILRequest rrPnt = RILRequest.obtain(
|
|
||||||
RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE, null);
|
|
||||||
rrPnt.mp.writeInt(1);
|
|
||||||
rrPnt.mp.writeInt(mNetworkMode);
|
|
||||||
if (RILJ_LOGD) riljLog(rrPnt.serialString() + "> "
|
|
||||||
+ requestToString(rrPnt.mRequest) + " : " + mNetworkMode);
|
|
||||||
send(rrPnt);
|
|
||||||
} else {
|
} else {
|
||||||
if (DBG) Log.d(LOG_TAG, "Radio OFF @ init");
|
if (DBG) Log.d(LOG_TAG, "Radio OFF @ init");
|
||||||
setRadioState(newState);
|
setRadioState(newState);
|
||||||
|
@ -66,8 +66,6 @@ public interface RILConstants {
|
|||||||
int NETWORK_MODE_EVDO_NO_CDMA = 6; /* EvDo only */
|
int NETWORK_MODE_EVDO_NO_CDMA = 6; /* EvDo only */
|
||||||
int NETWORK_MODE_GLOBAL = 7; /* GSM/WCDMA, CDMA, and EvDo (auto mode, according to PRL)
|
int NETWORK_MODE_GLOBAL = 7; /* GSM/WCDMA, CDMA, and EvDo (auto mode, according to PRL)
|
||||||
AVAILABLE Application Settings menu*/
|
AVAILABLE Application Settings menu*/
|
||||||
int NETWORK_MODE_LTE_ONLY = 8; /* LTE Only mode. Used only for testing purposes.Not
|
|
||||||
user selectable from regular UI */
|
|
||||||
int PREFERRED_NETWORK_MODE = NETWORK_MODE_WCDMA_PREF;
|
int PREFERRED_NETWORK_MODE = NETWORK_MODE_WCDMA_PREF;
|
||||||
|
|
||||||
/* CDMA subscription source. See ril.h RIL_REQUEST_CDMA_SET_SUBSCRIPTION */
|
/* CDMA subscription source. See ril.h RIL_REQUEST_CDMA_SET_SUBSCRIPTION */
|
||||||
@ -140,12 +138,10 @@ cat include/telephony/ril.h | \
|
|||||||
int RIL_RESTRICTED_STATE_PS_ALL = 0x10;
|
int RIL_RESTRICTED_STATE_PS_ALL = 0x10;
|
||||||
|
|
||||||
/** Data profile for RIL_REQUEST_SETUP_DATA_CALL */
|
/** Data profile for RIL_REQUEST_SETUP_DATA_CALL */
|
||||||
public static final int DATA_PROFILE_DEFAULT = 0;
|
static final int DATA_PROFILE_DEFAULT = 0;
|
||||||
public static final int DATA_PROFILE_TETHERED = 1;
|
static final int DATA_PROFILE_TETHERED = 1;
|
||||||
public static final int DATA_PROFILE_IMS = 2;
|
static final int DATA_PROFILE_OEM_BASE = 1000;
|
||||||
public static final int DATA_PROFILE_FOTA = 3;
|
|
||||||
public static final int DATA_PROFILE_CBS = 4;
|
|
||||||
public static final int DATA_PROFILE_OEM_BASE = 1000;
|
|
||||||
|
|
||||||
int RIL_REQUEST_GET_SIM_STATUS = 1;
|
int RIL_REQUEST_GET_SIM_STATUS = 1;
|
||||||
int RIL_REQUEST_ENTER_SIM_PIN = 2;
|
int RIL_REQUEST_ENTER_SIM_PIN = 2;
|
||||||
|
@ -582,7 +582,7 @@ public abstract class SMSDispatcher extends Handler {
|
|||||||
* {@link Activity#RESULT_OK} if the message has been broadcast
|
* {@link Activity#RESULT_OK} if the message has been broadcast
|
||||||
* to applications
|
* to applications
|
||||||
*/
|
*/
|
||||||
public abstract int dispatchMessage(SmsMessageBase sms);
|
protected abstract int dispatchMessage(SmsMessageBase sms);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -916,7 +916,7 @@ public abstract class SMSDispatcher extends Handler {
|
|||||||
* @param response
|
* @param response
|
||||||
* Callback message is empty on completion
|
* Callback message is empty on completion
|
||||||
*/
|
*/
|
||||||
public abstract void activateCellBroadcastSms(int activate, Message response);
|
protected abstract void activateCellBroadcastSms(int activate, Message response);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Query the current configuration of cell broadcast SMS.
|
* Query the current configuration of cell broadcast SMS.
|
||||||
@ -925,7 +925,7 @@ public abstract class SMSDispatcher extends Handler {
|
|||||||
* Callback message contains the configuration from the modem on completion
|
* Callback message contains the configuration from the modem on completion
|
||||||
* @see #setCellBroadcastConfig
|
* @see #setCellBroadcastConfig
|
||||||
*/
|
*/
|
||||||
public abstract void getCellBroadcastSmsConfig(Message response);
|
protected abstract void getCellBroadcastSmsConfig(Message response);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configure cell broadcast SMS.
|
* Configure cell broadcast SMS.
|
||||||
@ -937,7 +937,7 @@ public abstract class SMSDispatcher extends Handler {
|
|||||||
* @param response
|
* @param response
|
||||||
* Callback message is empty on completion
|
* Callback message is empty on completion
|
||||||
*/
|
*/
|
||||||
public abstract void setCellBroadcastConfig(int[] configValuesArray, Message response);
|
protected abstract void setCellBroadcastConfig(int[] configValuesArray, Message response);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send an acknowledge message.
|
* Send an acknowledge message.
|
||||||
@ -1006,27 +1006,6 @@ public abstract class SMSDispatcher extends Handler {
|
|||||||
return new SmsTracker(data, sentIntent, deliveryIntent);
|
return new SmsTracker(data, sentIntent, deliveryIntent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initSipStack(boolean isObg) {
|
|
||||||
// This function should be overridden by the classes that support
|
|
||||||
// switching modes such as the CdmaSMSDispatcher.
|
|
||||||
// Not implemented in GsmSMSDispatcher.
|
|
||||||
Log.e(TAG, "Error! This function should never be executed.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void switchToCdma() {
|
|
||||||
// This function should be overridden by the classes that support
|
|
||||||
// switching modes such as the CdmaSMSDispatcher.
|
|
||||||
// Not implemented in GsmSMSDispatcher.
|
|
||||||
Log.e(TAG, "Error! This function should never be executed.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void switchToGsm() {
|
|
||||||
// This function should be overridden by the classes that support
|
|
||||||
// switching modes such as the CdmaSMSDispatcher.
|
|
||||||
// Not implemented in GsmSMSDispatcher.
|
|
||||||
Log.e(TAG, "Error! This function should never be executed.");
|
|
||||||
}
|
|
||||||
|
|
||||||
private DialogInterface.OnClickListener mListener =
|
private DialogInterface.OnClickListener mListener =
|
||||||
new DialogInterface.OnClickListener() {
|
new DialogInterface.OnClickListener() {
|
||||||
|
|
||||||
|
@ -45,8 +45,6 @@ public abstract class ServiceStateTracker extends Handler {
|
|||||||
protected static final int DATA_ACCESS_HSUPA = 10;
|
protected static final int DATA_ACCESS_HSUPA = 10;
|
||||||
protected static final int DATA_ACCESS_HSPA = 11;
|
protected static final int DATA_ACCESS_HSPA = 11;
|
||||||
protected static final int DATA_ACCESS_CDMA_EvDo_B = 12;
|
protected static final int DATA_ACCESS_CDMA_EvDo_B = 12;
|
||||||
protected static final int DATA_ACCESS_LTE = 13;
|
|
||||||
protected static final int DATA_ACCESS_EHRPD = 14;
|
|
||||||
|
|
||||||
protected CommandsInterface cm;
|
protected CommandsInterface cm;
|
||||||
|
|
||||||
@ -282,51 +280,12 @@ public abstract class ServiceStateTracker extends Handler {
|
|||||||
protected abstract void setPowerStateToDesired();
|
protected abstract void setPowerStateToDesired();
|
||||||
protected abstract void log(String s);
|
protected abstract void log(String s);
|
||||||
|
|
||||||
private void logUnexpectedGsmMethodCall(String name) {
|
|
||||||
log("SSST" + "Error! " + name + "() in ServiceStateTracker should not be " +
|
|
||||||
"called, GsmServiceStateTracker inactive.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract int getCurrentDataConnectionState();
|
|
||||||
public abstract boolean isConcurrentVoiceAndDataAllowed();
|
|
||||||
public void registerForDataConnectionAttached(Handler h, int what, Object obj) {
|
|
||||||
logUnexpectedGsmMethodCall("registerForDataConnectionAttached");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unregisterForDataConnectionAttached(Handler h) {
|
|
||||||
logUnexpectedGsmMethodCall("unregisterForDataConnectionAttached");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void registerForDataConnectionDetached(Handler h, int what, Object obj) {
|
|
||||||
logUnexpectedGsmMethodCall("registerForDataConnectionDetached");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unregisterForDataConnectionDetached(Handler h) {
|
|
||||||
logUnexpectedGsmMethodCall("unregisterForDataConnectionDetached");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void registerForPsRestrictedEnabled(Handler h, int what, Object obj) {
|
|
||||||
logUnexpectedGsmMethodCall("registerForPsRestrictedEnabled");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unregisterForPsRestrictedEnabled(Handler h) {
|
|
||||||
logUnexpectedGsmMethodCall("unregisterForPsRestrictedEnabled");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void registerForPsRestrictedDisabled(Handler h, int what, Object obj) {
|
|
||||||
logUnexpectedGsmMethodCall("registerForPsRestrictedDisabled");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unregisterForPsRestrictedDisabled(Handler h) {
|
|
||||||
logUnexpectedGsmMethodCall("registerForPsRestrictedDisabled");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clean up existing voice and data connection then turn off radio power.
|
* Clean up existing voice and data connection then turn off radio power.
|
||||||
*
|
*
|
||||||
* Hang up the existing voice calls to decrease call drop rate.
|
* Hang up the existing voice calls to decrease call drop rate.
|
||||||
*/
|
*/
|
||||||
public abstract void powerOffRadioSafely();
|
protected abstract void powerOffRadioSafely();
|
||||||
|
|
||||||
/** Cancel a pending (if any) pollState() operation */
|
/** Cancel a pending (if any) pollState() operation */
|
||||||
protected void cancelPollState() {
|
protected void cancelPollState() {
|
||||||
|
@ -1,180 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2006 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.android.internal.telephony.cdma;
|
|
||||||
|
|
||||||
import android.os.SystemProperties;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.net.Uri;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.provider.Telephony;
|
|
||||||
import android.content.ContentValues;
|
|
||||||
import android.database.SQLException;
|
|
||||||
import android.telephony.ServiceState;
|
|
||||||
import android.telephony.SignalStrength;
|
|
||||||
|
|
||||||
import com.android.internal.telephony.gsm.SIMRecords;
|
|
||||||
import com.android.internal.telephony.gsm.SimCard;
|
|
||||||
import com.android.internal.telephony.ServiceStateTracker;
|
|
||||||
import com.android.internal.telephony.DataConnectionTracker;
|
|
||||||
import com.android.internal.telephony.CommandsInterface;
|
|
||||||
import com.android.internal.telephony.Phone;
|
|
||||||
import com.android.internal.telephony.PhoneBase;
|
|
||||||
import com.android.internal.telephony.PhoneNotifier;
|
|
||||||
import com.android.internal.telephony.PhoneProxy;
|
|
||||||
import com.android.internal.telephony.IccCard;
|
|
||||||
import com.android.internal.telephony.gsm.GsmDataConnectionTracker;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
public class CDMALTEPhone extends CDMAPhone {
|
|
||||||
static final String LOG_TAG = "CDMA";
|
|
||||||
|
|
||||||
private static final boolean DBG = true;
|
|
||||||
|
|
||||||
// Constructors
|
|
||||||
public CDMALTEPhone(Context context, CommandsInterface ci, PhoneNotifier notifier) {
|
|
||||||
this(context, ci, notifier, false);
|
|
||||||
log("CDMALTEPhone Constructors");
|
|
||||||
}
|
|
||||||
|
|
||||||
public CDMALTEPhone(Context context, CommandsInterface ci, PhoneNotifier notifier,
|
|
||||||
boolean unitTestMode) {
|
|
||||||
super(context, ci, notifier, false);
|
|
||||||
mSST = new CdmaLteServiceStateTracker(this);
|
|
||||||
init(context, notifier);
|
|
||||||
|
|
||||||
mSIMRecords = new SIMRecords(this);
|
|
||||||
mSimCard = new SimCard(this, LOG_TAG, DBG);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void dispose() {
|
|
||||||
synchronized (PhoneProxy.lockForRadioTechnologyChange) {
|
|
||||||
super.dispose();
|
|
||||||
mSIMRecords.dispose();
|
|
||||||
mSimCard.dispose();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeReferences() {
|
|
||||||
super.removeReferences();
|
|
||||||
this.mSIMRecords = null;
|
|
||||||
this.mSimCard = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ServiceStateTracker getServiceStateTracker() {
|
|
||||||
return mSST;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IccCard getIccCard() {
|
|
||||||
return mSimCard;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getIccSerialNumber() {
|
|
||||||
return mSIMRecords.iccid;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DataState getDataConnectionState(String apnType) {
|
|
||||||
boolean isCdmaDataConnectionTracker = false;
|
|
||||||
if (mDataConnection instanceof CdmaDataConnectionTracker) {
|
|
||||||
isCdmaDataConnectionTracker = true;
|
|
||||||
}
|
|
||||||
log("getDataConnectionState");
|
|
||||||
DataState ret = DataState.DISCONNECTED;
|
|
||||||
|
|
||||||
if (!isCdmaDataConnectionTracker && (SystemProperties.get("adb.connected", "").length()
|
|
||||||
> 0)) {
|
|
||||||
// We're connected to an ADB host and we have USB networking
|
|
||||||
// turned on. No matter what the radio state is,
|
|
||||||
// we report data connected
|
|
||||||
|
|
||||||
ret = DataState.CONNECTED;
|
|
||||||
} else if (mSST == null) {
|
|
||||||
// Radio Technology Change is ongoning, dispose() and
|
|
||||||
// removeReferences() have
|
|
||||||
// already been called
|
|
||||||
|
|
||||||
ret = DataState.DISCONNECTED;
|
|
||||||
} else if (mSST.getCurrentCdmaDataConnectionState() != ServiceState.STATE_IN_SERVICE) {
|
|
||||||
// If we're out of service, open TCP sockets may still work
|
|
||||||
// but no data will flow
|
|
||||||
ret = DataState.DISCONNECTED;
|
|
||||||
} else if (mDataConnection.isApnTypeEnabled(apnType) == false) {
|
|
||||||
ret = DataState.DISCONNECTED;
|
|
||||||
} else {
|
|
||||||
DataConnectionTracker.State state;
|
|
||||||
if (isCdmaDataConnectionTracker) {
|
|
||||||
state = mDataConnection.getState();
|
|
||||||
} else {
|
|
||||||
state = ((GsmDataConnectionTracker)mDataConnection).getState(apnType);
|
|
||||||
}
|
|
||||||
switch (state) {
|
|
||||||
case FAILED:
|
|
||||||
case IDLE:
|
|
||||||
ret = DataState.DISCONNECTED;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CONNECTED:
|
|
||||||
case DISCONNECTING:
|
|
||||||
if (mCT.state != Phone.State.IDLE && !mSST.isConcurrentVoiceAndDataAllowed()) {
|
|
||||||
ret = DataState.SUSPENDED;
|
|
||||||
} else {
|
|
||||||
ret = DataState.CONNECTED;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case INITING:
|
|
||||||
case CONNECTING:
|
|
||||||
case SCANNING:
|
|
||||||
ret = DataState.CONNECTING;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean updateCurrentCarrierInProvider() {
|
|
||||||
if (mSIMRecords != null) {
|
|
||||||
try {
|
|
||||||
Uri uri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current");
|
|
||||||
ContentValues map = new ContentValues();
|
|
||||||
map.put(Telephony.Carriers.NUMERIC, mSIMRecords.getSIMOperatorNumeric());
|
|
||||||
mContext.getContentResolver().insert(uri, map);
|
|
||||||
return true;
|
|
||||||
} catch (SQLException e) {
|
|
||||||
Log.e(LOG_TAG, "[CDMALTEPhone] Can't store current operator", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getActiveApn(String apnType) {
|
|
||||||
if (mDataConnection instanceof CdmaDataConnectionTracker)
|
|
||||||
return mDataConnection.getActiveApnString();
|
|
||||||
|
|
||||||
return ((GsmDataConnectionTracker)mDataConnection).getActiveApnString(apnType);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void log(String s) {
|
|
||||||
if (DBG)
|
|
||||||
Log.d(LOG_TAG, "[CDMALTEPhone] " + s);
|
|
||||||
}
|
|
||||||
}
|
|
@ -66,7 +66,6 @@ import com.android.internal.telephony.ServiceStateTracker;
|
|||||||
import com.android.internal.telephony.TelephonyIntents;
|
import com.android.internal.telephony.TelephonyIntents;
|
||||||
import com.android.internal.telephony.TelephonyProperties;
|
import com.android.internal.telephony.TelephonyProperties;
|
||||||
import com.android.internal.telephony.UUSInfo;
|
import com.android.internal.telephony.UUSInfo;
|
||||||
import com.android.internal.telephony.CallTracker;
|
|
||||||
|
|
||||||
import static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ALPHA;
|
import static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ALPHA;
|
||||||
import static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC;
|
import static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC;
|
||||||
@ -98,6 +97,7 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
|
|
||||||
// Instance Variables
|
// Instance Variables
|
||||||
CdmaCallTracker mCT;
|
CdmaCallTracker mCT;
|
||||||
|
CdmaSMSDispatcher mSMS;
|
||||||
CdmaServiceStateTracker mSST;
|
CdmaServiceStateTracker mSST;
|
||||||
RuimRecords mRuimRecords;
|
RuimRecords mRuimRecords;
|
||||||
RuimCard mRuimCard;
|
RuimCard mRuimCard;
|
||||||
@ -141,21 +141,16 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
public CDMAPhone(Context context, CommandsInterface ci, PhoneNotifier notifier) {
|
public CDMAPhone(Context context, CommandsInterface ci, PhoneNotifier notifier) {
|
||||||
super(notifier, context, ci, false);
|
this(context,ci,notifier, false);
|
||||||
mSST = new CdmaServiceStateTracker (this);
|
|
||||||
init(context, notifier);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public CDMAPhone(Context context, CommandsInterface ci, PhoneNotifier notifier,
|
public CDMAPhone(Context context, CommandsInterface ci, PhoneNotifier notifier,
|
||||||
boolean unitTestMode) {
|
boolean unitTestMode) {
|
||||||
super(notifier, context, ci, unitTestMode);
|
super(notifier, context, ci, unitTestMode);
|
||||||
mSST = new CdmaServiceStateTracker (this);
|
|
||||||
init(context, notifier);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void init(Context context, PhoneNotifier notifier) {
|
|
||||||
mCM.setPhoneType(Phone.PHONE_TYPE_CDMA);
|
mCM.setPhoneType(Phone.PHONE_TYPE_CDMA);
|
||||||
mCT = new CdmaCallTracker(this);
|
mCT = new CdmaCallTracker(this);
|
||||||
|
mSST = new CdmaServiceStateTracker (this);
|
||||||
mSMS = new CdmaSMSDispatcher(this);
|
mSMS = new CdmaSMSDispatcher(this);
|
||||||
mIccFileHandler = new RuimFileHandler(this);
|
mIccFileHandler = new RuimFileHandler(this);
|
||||||
mRuimRecords = new RuimRecords(this);
|
mRuimRecords = new RuimRecords(this);
|
||||||
@ -275,18 +270,10 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
return mSST.ss;
|
return mSST.ss;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CallTracker getCallTracker() {
|
|
||||||
return mCT;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Phone.State getState() {
|
public Phone.State getState() {
|
||||||
return mCT.state;
|
return mCT.state;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ServiceStateTracker getServiceStateTracker() {
|
|
||||||
return mSST;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPhoneName() {
|
public String getPhoneName() {
|
||||||
return "CDMA";
|
return "CDMA";
|
||||||
}
|
}
|
||||||
@ -638,7 +625,7 @@ public class CDMAPhone extends PhoneBase {
|
|||||||
case CONNECTED:
|
case CONNECTED:
|
||||||
case DISCONNECTING:
|
case DISCONNECTING:
|
||||||
if ( mCT.state != Phone.State.IDLE
|
if ( mCT.state != Phone.State.IDLE
|
||||||
&& !mSST.isConcurrentVoiceAndDataAllowed()) {
|
&& !mSST.isConcurrentVoiceAndData()) {
|
||||||
ret = DataState.SUSPENDED;
|
ret = DataState.SUSPENDED;
|
||||||
} else {
|
} else {
|
||||||
ret = DataState.CONNECTED;
|
ret = DataState.CONNECTED;
|
||||||
|
@ -134,10 +134,6 @@ public final class CdmaCallTracker extends CallTracker {
|
|||||||
public void registerForVoiceCallStarted(Handler h, int what, Object obj) {
|
public void registerForVoiceCallStarted(Handler h, int what, Object obj) {
|
||||||
Registrant r = new Registrant(h, what, obj);
|
Registrant r = new Registrant(h, what, obj);
|
||||||
voiceCallStartedRegistrants.add(r);
|
voiceCallStartedRegistrants.add(r);
|
||||||
// Notify if in call when registering
|
|
||||||
if (state != Phone.State.IDLE) {
|
|
||||||
r.notifyRegistrant(new AsyncResult(null, null, null));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
public void unregisterForVoiceCallStarted(Handler h) {
|
public void unregisterForVoiceCallStarted(Handler h) {
|
||||||
voiceCallStartedRegistrants.remove(h);
|
voiceCallStartedRegistrants.remove(h);
|
||||||
|
@ -430,7 +430,7 @@ public class CdmaConnection extends Connection {
|
|||||||
} else if (serviceState == ServiceState.STATE_OUT_OF_SERVICE
|
} else if (serviceState == ServiceState.STATE_OUT_OF_SERVICE
|
||||||
|| serviceState == ServiceState.STATE_EMERGENCY_ONLY) {
|
|| serviceState == ServiceState.STATE_EMERGENCY_ONLY) {
|
||||||
return DisconnectCause.OUT_OF_SERVICE;
|
return DisconnectCause.OUT_OF_SERVICE;
|
||||||
} else if (phone.mCM.getNvState() != CommandsInterface.RadioState.NV_READY
|
} else if (phone.mCM.getRadioState() != CommandsInterface.RadioState.NV_READY
|
||||||
&& phone.getIccCard().getState() != RuimCard.State.READY) {
|
&& phone.getIccCard().getState() != RuimCard.State.READY) {
|
||||||
return DisconnectCause.ICC_ERROR;
|
return DisconnectCause.ICC_ERROR;
|
||||||
} else if (causeCode==CallFailCause.NORMAL_CLEARING) {
|
} else if (causeCode==CallFailCause.NORMAL_CLEARING) {
|
||||||
|
@ -167,6 +167,30 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The data connection is expected to be setup while device
|
||||||
|
* 1. has ruim card or non-volatile data store
|
||||||
|
* 2. registered to data connection service
|
||||||
|
* 3. user doesn't explicitly disable data service
|
||||||
|
* 4. wifi is not on
|
||||||
|
*
|
||||||
|
* @return false while no data connection if all above requirements are met.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean isDataConnectionAsDesired() {
|
||||||
|
boolean roaming = mPhone.getServiceState().getRoaming();
|
||||||
|
|
||||||
|
if (((mPhone.mCM.getRadioState() == CommandsInterface.RadioState.NV_READY) ||
|
||||||
|
mCdmaPhone.mRuimRecords.getRecordsLoaded()) &&
|
||||||
|
(mCdmaPhone.mSST.getCurrentCdmaDataConnectionState() ==
|
||||||
|
ServiceState.STATE_IN_SERVICE) &&
|
||||||
|
(!roaming || getDataOnRoamingEnabled()) &&
|
||||||
|
!mIsWifiConnected ) {
|
||||||
|
return (mState == State.CONNECTED);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean isDataAllowed() {
|
protected boolean isDataAllowed() {
|
||||||
int psState = mCdmaPhone.mSST.getCurrentCdmaDataConnectionState();
|
int psState = mCdmaPhone.mSST.getCurrentCdmaDataConnectionState();
|
||||||
@ -176,9 +200,9 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
|
|||||||
boolean allowed =
|
boolean allowed =
|
||||||
(psState == ServiceState.STATE_IN_SERVICE ||
|
(psState == ServiceState.STATE_IN_SERVICE ||
|
||||||
mAutoAttachOnCreation) &&
|
mAutoAttachOnCreation) &&
|
||||||
(mPhone.mCM.getNvState() == CommandsInterface.RadioState.NV_READY ||
|
(mPhone.mCM.getRadioState() == CommandsInterface.RadioState.NV_READY ||
|
||||||
mCdmaPhone.mRuimRecords.getRecordsLoaded()) &&
|
mCdmaPhone.mRuimRecords.getRecordsLoaded()) &&
|
||||||
(mCdmaPhone.mSST.isConcurrentVoiceAndDataAllowed() ||
|
(mCdmaPhone.mSST.isConcurrentVoiceAndData() ||
|
||||||
mPhone.getState() == Phone.State.IDLE) &&
|
mPhone.getState() == Phone.State.IDLE) &&
|
||||||
!roaming &&
|
!roaming &&
|
||||||
mInternalDataEnabled &&
|
mInternalDataEnabled &&
|
||||||
@ -190,11 +214,11 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
|
|||||||
if (!((psState == ServiceState.STATE_IN_SERVICE) || mAutoAttachOnCreation)) {
|
if (!((psState == ServiceState.STATE_IN_SERVICE) || mAutoAttachOnCreation)) {
|
||||||
reason += " - psState= " + psState;
|
reason += " - psState= " + psState;
|
||||||
}
|
}
|
||||||
if (!(mPhone.mCM.getNvState() == CommandsInterface.RadioState.NV_READY ||
|
if (!(mPhone.mCM.getRadioState() == CommandsInterface.RadioState.NV_READY ||
|
||||||
mCdmaPhone.mRuimRecords.getRecordsLoaded())) {
|
mCdmaPhone.mRuimRecords.getRecordsLoaded())) {
|
||||||
reason += " - radioState= " + mPhone.mCM.getNvState() + " - RUIM not loaded";
|
reason += " - radioState= " + mPhone.mCM.getRadioState() + " - RUIM not loaded";
|
||||||
}
|
}
|
||||||
if (!(mCdmaPhone.mSST.isConcurrentVoiceAndDataAllowed() ||
|
if (!(mCdmaPhone.mSST.isConcurrentVoiceAndData() ||
|
||||||
mPhone.getState() == Phone.State.IDLE)) {
|
mPhone.getState() == Phone.State.IDLE)) {
|
||||||
reason += " - concurrentVoiceAndData not allowed and state= " + mPhone.getState();
|
reason += " - concurrentVoiceAndData not allowed and state= " + mPhone.getState();
|
||||||
}
|
}
|
||||||
@ -238,7 +262,9 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cleanup the CDMA data connection (only one is supported)
|
* Cleanup all connections.
|
||||||
|
*
|
||||||
|
* TODO: Cleanup only a specified connection passed as a parameter.
|
||||||
*
|
*
|
||||||
* @param tearDown true if the underlying DataConnection should be disconnected.
|
* @param tearDown true if the underlying DataConnection should be disconnected.
|
||||||
* @param reason for the clean up.
|
* @param reason for the clean up.
|
||||||
@ -311,7 +337,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
|
|||||||
apnId = mDefaultApnId;
|
apnId = mDefaultApnId;
|
||||||
}
|
}
|
||||||
mActiveApn = new ApnSetting(apnId, "", "", "", "", "", "", "", "", "",
|
mActiveApn = new ApnSetting(apnId, "", "", "", "", "", "", "", "", "",
|
||||||
"", 0, types, "IP", "IP", true, 0, 0);
|
"", 0, types, "IP", "IP");
|
||||||
if (DBG) log("setupData: mActiveApn=" + mActiveApn);
|
if (DBG) log("setupData: mActiveApn=" + mActiveApn);
|
||||||
|
|
||||||
Message msg = obtainMessage();
|
Message msg = obtainMessage();
|
||||||
@ -360,7 +386,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
|
|||||||
protected void restartRadio() {
|
protected void restartRadio() {
|
||||||
if (DBG) log("Cleanup connection and wait " +
|
if (DBG) log("Cleanup connection and wait " +
|
||||||
(TIME_DELAYED_TO_RESTART_RADIO / 1000) + "s to restart radio");
|
(TIME_DELAYED_TO_RESTART_RADIO / 1000) + "s to restart radio");
|
||||||
cleanUpAllConnections();
|
cleanUpConnection(true, Phone.REASON_RADIO_TURNED_OFF);
|
||||||
sendEmptyMessageDelayed(EVENT_RESTART_RADIO, TIME_DELAYED_TO_RESTART_RADIO);
|
sendEmptyMessageDelayed(EVENT_RESTART_RADIO, TIME_DELAYED_TO_RESTART_RADIO);
|
||||||
mPendingRestartRadio = true;
|
mPendingRestartRadio = true;
|
||||||
}
|
}
|
||||||
@ -517,14 +543,14 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
|
|||||||
|
|
||||||
protected void onRecordsLoaded() {
|
protected void onRecordsLoaded() {
|
||||||
if (mState == State.FAILED) {
|
if (mState == State.FAILED) {
|
||||||
cleanUpAllConnections();
|
cleanUpConnection(false, null);
|
||||||
}
|
}
|
||||||
sendMessage(obtainMessage(EVENT_TRY_SETUP_DATA, Phone.REASON_SIM_LOADED));
|
sendMessage(obtainMessage(EVENT_TRY_SETUP_DATA, Phone.REASON_SIM_LOADED));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onNVReady() {
|
protected void onNVReady() {
|
||||||
if (mState == State.FAILED) {
|
if (mState == State.FAILED) {
|
||||||
cleanUpAllConnections();
|
cleanUpConnection(false, null);
|
||||||
}
|
}
|
||||||
sendMessage(obtainMessage(EVENT_TRY_SETUP_DATA));
|
sendMessage(obtainMessage(EVENT_TRY_SETUP_DATA));
|
||||||
}
|
}
|
||||||
@ -534,7 +560,6 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected void onEnableNewApn() {
|
protected void onEnableNewApn() {
|
||||||
// No mRequestedApnType check; only one connection is supported
|
|
||||||
cleanUpConnection(true, Phone.REASON_APN_SWITCHED);
|
cleanUpConnection(true, Phone.REASON_APN_SWITCHED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -563,7 +588,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
|
|||||||
trySetupData(Phone.REASON_ROAMING_ON);
|
trySetupData(Phone.REASON_ROAMING_ON);
|
||||||
} else {
|
} else {
|
||||||
if (DBG) log("Tear down data connection on roaming.");
|
if (DBG) log("Tear down data connection on roaming.");
|
||||||
cleanUpAllConnections();
|
cleanUpConnection(true, Phone.REASON_ROAMING_ON);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -584,7 +609,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
|
|||||||
notifyDataAvailability(null);
|
notifyDataAvailability(null);
|
||||||
|
|
||||||
if (mState != State.IDLE) {
|
if (mState != State.IDLE) {
|
||||||
cleanUpAllConnections();
|
cleanUpConnection(true, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -601,7 +626,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
|
|||||||
log("We're on the simulator; assuming radio off is meaningless");
|
log("We're on the simulator; assuming radio off is meaningless");
|
||||||
} else {
|
} else {
|
||||||
if (DBG) log("Radio is off and clean up all connection");
|
if (DBG) log("Radio is off and clean up all connection");
|
||||||
cleanUpAllConnections();
|
cleanUpConnection(false, Phone.REASON_RADIO_TURNED_OFF);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -686,7 +711,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected void onVoiceCallStarted() {
|
protected void onVoiceCallStarted() {
|
||||||
if (mState == State.CONNECTED && !mCdmaPhone.mSST.isConcurrentVoiceAndDataAllowed()) {
|
if (mState == State.CONNECTED && !mCdmaPhone.mSST.isConcurrentVoiceAndData()) {
|
||||||
stopNetStatPoll();
|
stopNetStatPoll();
|
||||||
notifyDataConnection(Phone.REASON_VOICE_CALL_STARTED);
|
notifyDataConnection(Phone.REASON_VOICE_CALL_STARTED);
|
||||||
notifyDataAvailability(Phone.REASON_VOICE_CALL_STARTED);
|
notifyDataAvailability(Phone.REASON_VOICE_CALL_STARTED);
|
||||||
@ -699,7 +724,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
|
|||||||
@Override
|
@Override
|
||||||
protected void onVoiceCallEnded() {
|
protected void onVoiceCallEnded() {
|
||||||
if (mState == State.CONNECTED) {
|
if (mState == State.CONNECTED) {
|
||||||
if (!mCdmaPhone.mSST.isConcurrentVoiceAndDataAllowed()) {
|
if (!mCdmaPhone.mSST.isConcurrentVoiceAndData()) {
|
||||||
startNetStatPoll();
|
startNetStatPoll();
|
||||||
notifyDataConnection(Phone.REASON_VOICE_CALL_ENDED);
|
notifyDataConnection(Phone.REASON_VOICE_CALL_ENDED);
|
||||||
} else {
|
} else {
|
||||||
@ -715,17 +740,10 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCleanUpConnection(boolean tearDown, int apnId, String reason) {
|
protected void onCleanUpConnection(boolean tearDown, String reason) {
|
||||||
// No apnId check; only one connection is supported
|
|
||||||
cleanUpConnection(tearDown, reason);
|
cleanUpConnection(tearDown, reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onCleanUpAllConnections() {
|
|
||||||
// Only one CDMA connection is supported
|
|
||||||
cleanUpConnection(true, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createAllDataConnectionList() {
|
private void createAllDataConnectionList() {
|
||||||
CdmaDataConnection dataConn;
|
CdmaDataConnection dataConn;
|
||||||
|
|
||||||
|
@ -1,567 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2008 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.android.internal.telephony.cdma;
|
|
||||||
|
|
||||||
import com.android.internal.telephony.DataConnectionTracker;
|
|
||||||
import com.android.internal.telephony.TelephonyProperties;
|
|
||||||
import com.android.internal.telephony.MccTable;
|
|
||||||
import com.android.internal.telephony.EventLogTags;
|
|
||||||
import com.android.internal.telephony.RILConstants;
|
|
||||||
|
|
||||||
import android.telephony.SignalStrength;
|
|
||||||
import android.telephony.ServiceState;
|
|
||||||
import android.telephony.cdma.CdmaCellLocation;
|
|
||||||
import android.os.AsyncResult;
|
|
||||||
import android.os.Handler;
|
|
||||||
import android.os.Message;
|
|
||||||
import android.os.Registrant;
|
|
||||||
import android.os.RegistrantList;
|
|
||||||
import android.os.AsyncResult;
|
|
||||||
import android.os.Message;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
import android.util.EventLog;
|
|
||||||
|
|
||||||
import com.android.internal.telephony.gsm.RestrictedState;
|
|
||||||
import com.android.internal.telephony.gsm.GsmDataConnectionTracker;
|
|
||||||
|
|
||||||
public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
|
|
||||||
static final String LOG_TAG = "CDMA";
|
|
||||||
|
|
||||||
CDMALTEPhone mCdmaLtePhone;
|
|
||||||
|
|
||||||
private RestrictedState rs;
|
|
||||||
|
|
||||||
private int gprsState = ServiceState.STATE_OUT_OF_SERVICE;
|
|
||||||
|
|
||||||
private int newGPRSState = ServiceState.STATE_OUT_OF_SERVICE;
|
|
||||||
|
|
||||||
private RegistrantList gprsAttachedRegistrants = new RegistrantList();
|
|
||||||
|
|
||||||
private RegistrantList gprsDetachedRegistrants = new RegistrantList();
|
|
||||||
|
|
||||||
private RegistrantList psRestrictEnabledRegistrants = new RegistrantList();
|
|
||||||
|
|
||||||
private RegistrantList psRestrictDisabledRegistrants = new RegistrantList();
|
|
||||||
|
|
||||||
public CdmaLteServiceStateTracker(CDMALTEPhone phone) {
|
|
||||||
super(phone);
|
|
||||||
mCdmaLtePhone = phone;
|
|
||||||
rs = new RestrictedState();
|
|
||||||
log("CdmaLteServiceStateTracker Constructors");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Added 9 new functions needed in GsmDataConnectionTracker, functions were
|
|
||||||
// copied over from GsmServiceStateTracker.
|
|
||||||
/**
|
|
||||||
* Registration point for transition into GPRS attached.
|
|
||||||
*
|
|
||||||
* @param h handler to notify
|
|
||||||
* @param what what code of message when delivered
|
|
||||||
* @param obj placed in Message.obj
|
|
||||||
*/
|
|
||||||
public void registerForDataConnectionAttached(Handler h, int what, Object obj) {
|
|
||||||
log("registerForDataConnectionAttached ");
|
|
||||||
Registrant r = new Registrant(h, what, obj);
|
|
||||||
gprsAttachedRegistrants.add(r);
|
|
||||||
|
|
||||||
if (gprsState == ServiceState.STATE_IN_SERVICE) {
|
|
||||||
r.notifyRegistrant();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unregisterForDataConnectionAttached(Handler h) {
|
|
||||||
gprsAttachedRegistrants.remove(h);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registration point for transition into GPRS detached.
|
|
||||||
*
|
|
||||||
* @param h handler to notify
|
|
||||||
* @param what what code of message when delivered
|
|
||||||
* @param obj placed in Message.obj
|
|
||||||
*/
|
|
||||||
public void registerForDataConnectionDetached(Handler h, int what, Object obj) {
|
|
||||||
log("registerForDataConnectionDetached ");
|
|
||||||
Registrant r = new Registrant(h, what, obj);
|
|
||||||
gprsDetachedRegistrants.add(r);
|
|
||||||
if (gprsState == ServiceState.STATE_OUT_OF_SERVICE) {
|
|
||||||
r.notifyRegistrant();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unregisterForDataConnectionDetached(Handler h) {
|
|
||||||
gprsDetachedRegistrants.remove(h);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registration point for transition into packet service restricted zone.
|
|
||||||
*
|
|
||||||
* @param h handler to notify
|
|
||||||
* @param what what code of message when delivered
|
|
||||||
* @param obj placed in Message.obj
|
|
||||||
*/
|
|
||||||
public void registerForPsRestrictedEnabled(Handler h, int what, Object obj) {
|
|
||||||
log("registerForPsRestrictedEnabled ");
|
|
||||||
Registrant r = new Registrant(h, what, obj);
|
|
||||||
psRestrictEnabledRegistrants.add(r);
|
|
||||||
|
|
||||||
if (rs.isPsRestricted()) {
|
|
||||||
r.notifyRegistrant();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unregisterForPsRestrictedEnabled(Handler h) {
|
|
||||||
psRestrictEnabledRegistrants.remove(h);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registration point for transition out of packet service restricted zone.
|
|
||||||
*
|
|
||||||
* @param h handler to notify
|
|
||||||
* @param what what code of message when delivered
|
|
||||||
* @param obj placed in Message.obj
|
|
||||||
*/
|
|
||||||
public void registerForPsRestrictedDisabled(Handler h, int what, Object obj) {
|
|
||||||
log("registerForPsRestrictedDisabled ");
|
|
||||||
Registrant r = new Registrant(h, what, obj);
|
|
||||||
psRestrictDisabledRegistrants.add(r);
|
|
||||||
|
|
||||||
if (rs.isPsRestricted()) {
|
|
||||||
r.notifyRegistrant();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unregisterForPsRestrictedDisabled(Handler h) {
|
|
||||||
psRestrictDisabledRegistrants.remove(h);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return The current GPRS state. IN_SERVICE is the same as "attached" and
|
|
||||||
* OUT_OF_SERVICE is the same as detached.
|
|
||||||
*/
|
|
||||||
public int getCurrentDataConnectionState() {
|
|
||||||
return gprsState;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handleMessage(Message msg) {
|
|
||||||
AsyncResult ar;
|
|
||||||
int[] ints;
|
|
||||||
String[] strings;
|
|
||||||
if (msg.what == EVENT_POLL_STATE_GPRS) {
|
|
||||||
log("handleMessage EVENT_POLL_STATE_GPRS");
|
|
||||||
ar = (AsyncResult)msg.obj;
|
|
||||||
handlePollStateResult(msg.what, ar);
|
|
||||||
} else {
|
|
||||||
super.handleMessage(msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The LTE data connection state, only return true here
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected boolean checkAdditionalDataAvaiable() {
|
|
||||||
return newGPRSState != ServiceState.STATE_IN_SERVICE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle the result of one of the pollState()-related requests
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected void handlePollStateResultMessage(int what, AsyncResult ar) {
|
|
||||||
if (what == EVENT_POLL_STATE_GPRS) {
|
|
||||||
log("handlePollStateResultMessage EVENT_POLL_STATE_GPRS");
|
|
||||||
String states[] = (String[])ar.result;
|
|
||||||
|
|
||||||
int type = 0;
|
|
||||||
int regState = -1;
|
|
||||||
if (states.length > 0) {
|
|
||||||
try {
|
|
||||||
regState = Integer.parseInt(states[0]);
|
|
||||||
|
|
||||||
// states[3] (if present) is the current radio technology
|
|
||||||
if (states.length >= 4 && states[3] != null) {
|
|
||||||
type = Integer.parseInt(states[3]);
|
|
||||||
}
|
|
||||||
} catch (NumberFormatException ex) {
|
|
||||||
Log.w(LOG_TAG,
|
|
||||||
"[CdmaLteServiceStateTracker] error parsing GprsRegistrationState: "
|
|
||||||
+ ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
newGPRSState = regCodeToServiceState(regState);
|
|
||||||
// Not sure if this is needed in CDMALTE phone.
|
|
||||||
// mDataRoaming = regCodeIsRoaming(regState);
|
|
||||||
if (newGPRSState == ServiceState.STATE_IN_SERVICE) {
|
|
||||||
this.newCdmaDataConnectionState = newGPRSState;
|
|
||||||
newNetworkType = type;
|
|
||||||
newSS.setRadioTechnology(type);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
super.handlePollStateResultMessage(what, ar);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void setSignalStrengthDefaultValues() {
|
|
||||||
mSignalStrength = new SignalStrength(99, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void pollState() {
|
|
||||||
pollingContext = new int[1];
|
|
||||||
pollingContext[0] = 0;
|
|
||||||
|
|
||||||
switch (cm.getRadioState()) {
|
|
||||||
case RADIO_UNAVAILABLE:
|
|
||||||
newSS.setStateOutOfService();
|
|
||||||
newCellLoc.setStateInvalid();
|
|
||||||
setSignalStrengthDefaultValues();
|
|
||||||
mGotCountryCode = false;
|
|
||||||
|
|
||||||
pollStateDone();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RADIO_OFF:
|
|
||||||
newSS.setStateOff();
|
|
||||||
newCellLoc.setStateInvalid();
|
|
||||||
setSignalStrengthDefaultValues();
|
|
||||||
mGotCountryCode = false;
|
|
||||||
|
|
||||||
pollStateDone();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SIM_NOT_READY:
|
|
||||||
case SIM_LOCKED_OR_ABSENT:
|
|
||||||
case SIM_READY:
|
|
||||||
log("Radio Technology Change ongoing, setting SS to off");
|
|
||||||
newSS.setStateOff();
|
|
||||||
newCellLoc.setStateInvalid();
|
|
||||||
setSignalStrengthDefaultValues();
|
|
||||||
mGotCountryCode = false;
|
|
||||||
// NOTE: pollStateDone() is not needed in this case
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
// Issue all poll-related commands at once, then count
|
|
||||||
// down the responses which are allowed to arrive
|
|
||||||
// out-of-order.
|
|
||||||
|
|
||||||
pollingContext[0]++;
|
|
||||||
// RIL_REQUEST_OPERATOR is necessary for CDMA
|
|
||||||
cm.getOperator(obtainMessage(EVENT_POLL_STATE_OPERATOR_CDMA, pollingContext));
|
|
||||||
|
|
||||||
pollingContext[0]++;
|
|
||||||
// RIL_REQUEST_VOICE_REGISTRATION_STATE is necessary for CDMA
|
|
||||||
cm.getVoiceRegistrationState(obtainMessage(EVENT_POLL_STATE_REGISTRATION_CDMA,
|
|
||||||
pollingContext));
|
|
||||||
|
|
||||||
int networkMode = android.provider.Settings.Secure.getInt(phone.getContext()
|
|
||||||
.getContentResolver(),
|
|
||||||
android.provider.Settings.Secure.PREFERRED_NETWORK_MODE,
|
|
||||||
RILConstants.PREFERRED_NETWORK_MODE);
|
|
||||||
Log.v(LOG_TAG, "[CdmaLteServiceStateTracker] The network mode here is = "
|
|
||||||
+ networkMode);
|
|
||||||
if ((networkMode == RILConstants.NETWORK_MODE_GLOBAL)
|
|
||||||
|| (networkMode == RILConstants.NETWORK_MODE_LTE_ONLY)) {
|
|
||||||
pollingContext[0]++;
|
|
||||||
// RIL_REQUEST_DATA_REGISTRATION_STATE
|
|
||||||
cm.getDataRegistrationState(obtainMessage(EVENT_POLL_STATE_GPRS,
|
|
||||||
pollingContext));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static String networkTypeToString(int type) {
|
|
||||||
String ret = "unknown";
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case DATA_ACCESS_CDMA_IS95A:
|
|
||||||
case DATA_ACCESS_CDMA_IS95B:
|
|
||||||
ret = "CDMA";
|
|
||||||
break;
|
|
||||||
case DATA_ACCESS_CDMA_1xRTT:
|
|
||||||
ret = "CDMA - 1xRTT";
|
|
||||||
break;
|
|
||||||
case DATA_ACCESS_CDMA_EvDo_0:
|
|
||||||
ret = "CDMA - EvDo rev. 0";
|
|
||||||
break;
|
|
||||||
case DATA_ACCESS_CDMA_EvDo_A:
|
|
||||||
ret = "CDMA - EvDo rev. A";
|
|
||||||
break;
|
|
||||||
case DATA_ACCESS_CDMA_EvDo_B:
|
|
||||||
ret = "CDMA - EvDo rev. B";
|
|
||||||
break;
|
|
||||||
case DATA_ACCESS_LTE:
|
|
||||||
ret = "LTE";
|
|
||||||
break;
|
|
||||||
case DATA_ACCESS_EHRPD:
|
|
||||||
ret = "CDMA - eHRPD";
|
|
||||||
default:
|
|
||||||
if (DBG) {
|
|
||||||
Log.e(LOG_TAG, " [CdmaLteServiceStateTracker] Wrong network."
|
|
||||||
+ " Can not return a string.");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void pollStateDone() {
|
|
||||||
log("Poll ServiceState done: oldSS=[" + ss + "] newSS=[" + newSS + "]");
|
|
||||||
|
|
||||||
boolean hasRegistered = ss.getState() != ServiceState.STATE_IN_SERVICE
|
|
||||||
&& newSS.getState() == ServiceState.STATE_IN_SERVICE;
|
|
||||||
|
|
||||||
boolean hasDeregistered = ss.getState() == ServiceState.STATE_IN_SERVICE
|
|
||||||
&& newSS.getState() != ServiceState.STATE_IN_SERVICE;
|
|
||||||
|
|
||||||
boolean hasCdmaDataConnectionAttached =
|
|
||||||
this.cdmaDataConnectionState != ServiceState.STATE_IN_SERVICE
|
|
||||||
&& this.newCdmaDataConnectionState == ServiceState.STATE_IN_SERVICE;
|
|
||||||
|
|
||||||
boolean hasCdmaDataConnectionDetached =
|
|
||||||
this.cdmaDataConnectionState == ServiceState.STATE_IN_SERVICE
|
|
||||||
&& this.newCdmaDataConnectionState != ServiceState.STATE_IN_SERVICE;
|
|
||||||
|
|
||||||
boolean hasCdmaDataConnectionChanged =
|
|
||||||
cdmaDataConnectionState != newCdmaDataConnectionState;
|
|
||||||
|
|
||||||
boolean hasNetworkTypeChanged = networkType != newNetworkType;
|
|
||||||
|
|
||||||
boolean hasChanged = !newSS.equals(ss);
|
|
||||||
|
|
||||||
boolean hasRoamingOn = !ss.getRoaming() && newSS.getRoaming();
|
|
||||||
|
|
||||||
boolean hasRoamingOff = ss.getRoaming() && !newSS.getRoaming();
|
|
||||||
|
|
||||||
boolean hasLocationChanged = !newCellLoc.equals(cellLoc);
|
|
||||||
|
|
||||||
boolean has4gHandoff =
|
|
||||||
((networkType == DATA_ACCESS_LTE) && (newNetworkType == DATA_ACCESS_EHRPD))
|
|
||||||
|| ((networkType == DATA_ACCESS_EHRPD) && (newNetworkType == DATA_ACCESS_LTE));
|
|
||||||
|
|
||||||
boolean hasMultiApnSupport =
|
|
||||||
(((newNetworkType == DATA_ACCESS_LTE) || (newNetworkType == DATA_ACCESS_EHRPD))
|
|
||||||
&& ((networkType != DATA_ACCESS_LTE) && (networkType != DATA_ACCESS_EHRPD)));
|
|
||||||
|
|
||||||
boolean hasLostMultiApnSupport =
|
|
||||||
((newNetworkType >= DATA_ACCESS_CDMA_IS95A)
|
|
||||||
&& (newNetworkType <= DATA_ACCESS_CDMA_EvDo_A));
|
|
||||||
|
|
||||||
log("hasRegistered = " + hasRegistered + " hasCdmaDataConnectionAttached = "
|
|
||||||
+ hasCdmaDataConnectionAttached + " hasCdmaDataConnectionChanged = "
|
|
||||||
+ hasCdmaDataConnectionChanged + " hasNetworkTypeChanged = "
|
|
||||||
+ hasNetworkTypeChanged + " has4gHandoff = " + has4gHandoff
|
|
||||||
+ " hasMultiApnSupport = " + hasMultiApnSupport + " hasLostMultiApnSupport = "
|
|
||||||
+ hasLostMultiApnSupport);
|
|
||||||
// Add an event log when connection state changes
|
|
||||||
if (ss.getState() != newSS.getState()
|
|
||||||
|| cdmaDataConnectionState != newCdmaDataConnectionState) {
|
|
||||||
EventLog.writeEvent(EventLogTags.CDMA_SERVICE_STATE_CHANGE, ss.getState(),
|
|
||||||
cdmaDataConnectionState, newSS.getState(), newCdmaDataConnectionState);
|
|
||||||
}
|
|
||||||
|
|
||||||
ServiceState tss;
|
|
||||||
tss = ss;
|
|
||||||
ss = newSS;
|
|
||||||
newSS = tss;
|
|
||||||
// clean slate for next time
|
|
||||||
newSS.setStateOutOfService();
|
|
||||||
|
|
||||||
// TODO: 4G Tech Handoff
|
|
||||||
// if (has4gHandoff) {
|
|
||||||
// Message msg = phone.mDataConnection.obtainMessage(
|
|
||||||
// DataConnectionTracker.EVENT_4G_TECHNOLOGY_CHANGE);
|
|
||||||
// phone.mDataConnection.sendMessage(msg);
|
|
||||||
// }
|
|
||||||
|
|
||||||
if ((hasMultiApnSupport)
|
|
||||||
&& (phone.mDataConnection instanceof CdmaDataConnectionTracker)) {
|
|
||||||
log("GsmDataConnectionTracker Created");
|
|
||||||
phone.mDataConnection.dispose();
|
|
||||||
phone.mDataConnection = new GsmDataConnectionTracker(mCdmaLtePhone);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((hasLostMultiApnSupport)
|
|
||||||
&& (phone.mDataConnection instanceof GsmDataConnectionTracker)) {
|
|
||||||
log("GsmDataConnectionTracker disposed");
|
|
||||||
phone.mDataConnection.dispose();
|
|
||||||
phone.mDataConnection = new CdmaDataConnectionTracker((CDMAPhone)phone);
|
|
||||||
}
|
|
||||||
|
|
||||||
CdmaCellLocation tcl = cellLoc;
|
|
||||||
cellLoc = newCellLoc;
|
|
||||||
newCellLoc = tcl;
|
|
||||||
|
|
||||||
cdmaDataConnectionState = newCdmaDataConnectionState;
|
|
||||||
networkType = newNetworkType;
|
|
||||||
|
|
||||||
gprsState = newCdmaDataConnectionState;
|
|
||||||
|
|
||||||
newSS.setStateOutOfService(); // clean slate for next time
|
|
||||||
|
|
||||||
if (hasNetworkTypeChanged) {
|
|
||||||
phone.setSystemProperty(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE,
|
|
||||||
networkTypeToString(networkType));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasRegistered) {
|
|
||||||
networkAttachedRegistrants.notifyRegistrants();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasChanged) {
|
|
||||||
if (cm.getNvState().isNVReady()) {
|
|
||||||
String eriText;
|
|
||||||
// Now the CDMAPhone sees the new ServiceState so it can get the
|
|
||||||
// new ERI text
|
|
||||||
if (ss.getState() == ServiceState.STATE_IN_SERVICE) {
|
|
||||||
eriText = phone.getCdmaEriText();
|
|
||||||
} else {
|
|
||||||
// Note that ServiceState.STATE_OUT_OF_SERVICE is valid used
|
|
||||||
// for
|
|
||||||
// mRegistrationState 0,2,3 and 4
|
|
||||||
eriText = phone.getContext()
|
|
||||||
.getText(com.android.internal.R.string.roamingTextSearching).toString();
|
|
||||||
}
|
|
||||||
ss.setCdmaEriText(eriText);
|
|
||||||
}
|
|
||||||
|
|
||||||
String operatorNumeric;
|
|
||||||
|
|
||||||
phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ALPHA,
|
|
||||||
ss.getOperatorAlphaLong());
|
|
||||||
|
|
||||||
operatorNumeric = ss.getOperatorNumeric();
|
|
||||||
phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_NUMERIC, operatorNumeric);
|
|
||||||
|
|
||||||
if (operatorNumeric == null) {
|
|
||||||
phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, "");
|
|
||||||
} else {
|
|
||||||
String isoCountryCode = "";
|
|
||||||
try {
|
|
||||||
isoCountryCode = MccTable.countryCodeForMcc(Integer.parseInt(operatorNumeric
|
|
||||||
.substring(0, 3)));
|
|
||||||
} catch (NumberFormatException ex) {
|
|
||||||
Log.w(LOG_TAG, "countryCodeForMcc error" + ex);
|
|
||||||
} catch (StringIndexOutOfBoundsException ex) {
|
|
||||||
Log.w(LOG_TAG, "countryCodeForMcc error" + ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY,
|
|
||||||
isoCountryCode);
|
|
||||||
mGotCountryCode = true;
|
|
||||||
if (mNeedFixZone) {
|
|
||||||
fixTimeZone(isoCountryCode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISROAMING,
|
|
||||||
ss.getRoaming() ? "true" : "false");
|
|
||||||
|
|
||||||
updateSpnDisplay();
|
|
||||||
phone.notifyServiceStateChanged(ss);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasCdmaDataConnectionAttached) {
|
|
||||||
cdmaDataConnectionAttachedRegistrants.notifyRegistrants();
|
|
||||||
gprsAttachedRegistrants.notifyRegistrants();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasCdmaDataConnectionDetached) {
|
|
||||||
cdmaDataConnectionDetachedRegistrants.notifyRegistrants();
|
|
||||||
gprsDetachedRegistrants.notifyRegistrants();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((hasCdmaDataConnectionChanged || hasNetworkTypeChanged)
|
|
||||||
&& (phone.mDataConnection instanceof CdmaDataConnectionTracker)) {
|
|
||||||
phone.notifyDataConnection();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasRoamingOn) {
|
|
||||||
roamingOnRegistrants.notifyRegistrants();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasRoamingOff) {
|
|
||||||
roamingOffRegistrants.notifyRegistrants();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasLocationChanged) {
|
|
||||||
phone.notifyLocationChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void onSignalStrengthResult(AsyncResult ar) {
|
|
||||||
SignalStrength oldSignalStrength = mSignalStrength;
|
|
||||||
|
|
||||||
if (ar.exception != null) {
|
|
||||||
// Most likely radio is resetting/disconnected change to default
|
|
||||||
// values.
|
|
||||||
setSignalStrengthDefaultValues();
|
|
||||||
} else {
|
|
||||||
int[] ints = (int[])ar.result;
|
|
||||||
int lteCqi = 99, lteRsrp = -1;
|
|
||||||
int lteRssi = 99;
|
|
||||||
int offset = 2;
|
|
||||||
int cdmaDbm = (ints[offset] > 0) ? -ints[offset] : -120;
|
|
||||||
int cdmaEcio = (ints[offset + 1] > 0) ? -ints[offset + 1] : -160;
|
|
||||||
int evdoRssi = (ints[offset + 2] > 0) ? -ints[offset + 2] : -120;
|
|
||||||
int evdoEcio = (ints[offset + 3] > 0) ? -ints[offset + 3] : -1;
|
|
||||||
int evdoSnr = ((ints[offset + 4] > 0) && (ints[offset + 4] <= 8)) ? ints[offset + 4]
|
|
||||||
: -1;
|
|
||||||
if (networkType == ServiceState.RADIO_TECHNOLOGY_LTE) {
|
|
||||||
lteRssi = (ints[offset + 5] >= 0) ? ints[offset + 5] : 99;
|
|
||||||
lteRsrp = (ints[offset + 6] > 0) ? -ints[offset + 7] : -1;
|
|
||||||
lteCqi = (ints[offset + 7] >= 0) ? ints[offset + 6] : 99;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (networkType != ServiceState.RADIO_TECHNOLOGY_LTE) {
|
|
||||||
mSignalStrength = new SignalStrength(99, -1, cdmaDbm, cdmaEcio, evdoRssi, evdoEcio,
|
|
||||||
evdoSnr, false);
|
|
||||||
} else {
|
|
||||||
mSignalStrength = new SignalStrength(99, -1, cdmaDbm, cdmaEcio, evdoRssi, evdoEcio,
|
|
||||||
evdoSnr, lteRssi, lteRsrp, -1, -1, lteCqi, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
phone.notifySignalStrength();
|
|
||||||
} catch (NullPointerException ex) {
|
|
||||||
log("onSignalStrengthResult() Phone already destroyed: " + ex
|
|
||||||
+ "SignalStrength not notified");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isConcurrentVoiceAndDataAllowed() {
|
|
||||||
// Note: it needs to be confirmed which CDMA network types
|
|
||||||
// can support voice and data calls concurrently.
|
|
||||||
// For the time-being, the return value will be false.
|
|
||||||
// return (networkType >= DATA_ACCESS_LTE);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void log(String s) {
|
|
||||||
if (DBG)
|
|
||||||
Log.d(LOG_TAG, "[CdmaLteServiceStateTracker] " + s);
|
|
||||||
}
|
|
||||||
}
|
|
@ -94,7 +94,7 @@ final class CdmaSMSDispatcher extends SMSDispatcher {
|
|||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public int dispatchMessage(SmsMessageBase smsb) {
|
protected int dispatchMessage(SmsMessageBase smsb) {
|
||||||
|
|
||||||
// If sms is null, means there was a parsing error.
|
// If sms is null, means there was a parsing error.
|
||||||
if (smsb == null) {
|
if (smsb == null) {
|
||||||
@ -485,19 +485,19 @@ final class CdmaSMSDispatcher extends SMSDispatcher {
|
|||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public void activateCellBroadcastSms(int activate, Message response) {
|
protected void activateCellBroadcastSms(int activate, Message response) {
|
||||||
mCm.setCdmaBroadcastActivation((activate == 0), response);
|
mCm.setCdmaBroadcastActivation((activate == 0), response);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public void getCellBroadcastSmsConfig(Message response) {
|
protected void getCellBroadcastSmsConfig(Message response) {
|
||||||
mCm.getCdmaBroadcastConfig(response);
|
mCm.getCdmaBroadcastConfig(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public void setCellBroadcastConfig(int[] configValuesArray, Message response) {
|
protected void setCellBroadcastConfig(int[] configValuesArray, Message response) {
|
||||||
mCm.setCdmaBroadcastConfig(configValuesArray, response);
|
mCm.setCdmaBroadcastConfig(configValuesArray, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ import java.util.TimeZone;
|
|||||||
/**
|
/**
|
||||||
* {@hide}
|
* {@hide}
|
||||||
*/
|
*/
|
||||||
public class CdmaServiceStateTracker extends ServiceStateTracker {
|
final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||||
static final String LOG_TAG = "CDMA";
|
static final String LOG_TAG = "CDMA";
|
||||||
|
|
||||||
CDMAPhone phone;
|
CDMAPhone phone;
|
||||||
@ -88,8 +88,8 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
/**
|
/**
|
||||||
* Values correspond to ServiceStateTracker.DATA_ACCESS_ definitions.
|
* Values correspond to ServiceStateTracker.DATA_ACCESS_ definitions.
|
||||||
*/
|
*/
|
||||||
protected int networkType = 0;
|
private int networkType = 0;
|
||||||
protected int newNetworkType = 0;
|
private int newNetworkType = 0;
|
||||||
|
|
||||||
private boolean mCdmaRoaming = false;
|
private boolean mCdmaRoaming = false;
|
||||||
private int mRoamingIndicator;
|
private int mRoamingIndicator;
|
||||||
@ -99,23 +99,23 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
/**
|
/**
|
||||||
* Initially assume no data connection.
|
* Initially assume no data connection.
|
||||||
*/
|
*/
|
||||||
protected int cdmaDataConnectionState = ServiceState.STATE_OUT_OF_SERVICE;
|
private int cdmaDataConnectionState = ServiceState.STATE_OUT_OF_SERVICE;
|
||||||
protected int newCdmaDataConnectionState = ServiceState.STATE_OUT_OF_SERVICE;
|
private int newCdmaDataConnectionState = ServiceState.STATE_OUT_OF_SERVICE;
|
||||||
protected int mRegistrationState = -1;
|
private int mRegistrationState = -1;
|
||||||
protected RegistrantList cdmaDataConnectionAttachedRegistrants = new RegistrantList();
|
private RegistrantList cdmaDataConnectionAttachedRegistrants = new RegistrantList();
|
||||||
protected RegistrantList cdmaDataConnectionDetachedRegistrants = new RegistrantList();
|
private RegistrantList cdmaDataConnectionDetachedRegistrants = new RegistrantList();
|
||||||
protected RegistrantList cdmaForSubscriptionInfoReadyRegistrants = new RegistrantList();
|
private RegistrantList cdmaForSubscriptionInfoReadyRegistrants = new RegistrantList();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sometimes we get the NITZ time before we know what country we
|
* Sometimes we get the NITZ time before we know what country we
|
||||||
* are in. Keep the time zone information from the NITZ string so
|
* are in. Keep the time zone information from the NITZ string so
|
||||||
* we can fix the time zone once know the country.
|
* we can fix the time zone once know the country.
|
||||||
*/
|
*/
|
||||||
protected boolean mNeedFixZone = false;
|
private boolean mNeedFixZone = false;
|
||||||
private int mZoneOffset;
|
private int mZoneOffset;
|
||||||
private boolean mZoneDst;
|
private boolean mZoneDst;
|
||||||
private long mZoneTime;
|
private long mZoneTime;
|
||||||
protected boolean mGotCountryCode = false;
|
private boolean mGotCountryCode = false;
|
||||||
String mSavedTimeZone;
|
String mSavedTimeZone;
|
||||||
long mSavedTime;
|
long mSavedTime;
|
||||||
long mSavedAtTime;
|
long mSavedAtTime;
|
||||||
@ -566,21 +566,37 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
cm.setRadioPower(true, null);
|
cm.setRadioPower(true, null);
|
||||||
} else if (!mDesiredPowerState && cm.getRadioState().isOn()) {
|
} else if (!mDesiredPowerState && cm.getRadioState().isOn()) {
|
||||||
DataConnectionTracker dcTracker = phone.mDataConnection;
|
DataConnectionTracker dcTracker = phone.mDataConnection;
|
||||||
|
if (! dcTracker.isDataConnectionAsDesired()) {
|
||||||
|
EventLog.writeEvent(EventLogTags.DATA_NETWORK_STATUS_ON_RADIO_OFF,
|
||||||
|
dcTracker.getStateInString(),
|
||||||
|
dcTracker.getAnyDataEnabled() ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
// If it's on and available and we want it off gracefully
|
// If it's on and available and we want it off gracefully
|
||||||
powerOffRadioSafely();
|
powerOffRadioSafely();
|
||||||
} // Otherwise, we're in the desired state
|
} // Otherwise, we're in the desired state
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Consider moving this method to DataConnectionTracker
|
|
||||||
@Override
|
@Override
|
||||||
public void powerOffRadioSafely() {
|
protected void powerOffRadioSafely() {
|
||||||
DataConnectionTracker dcTracker = phone.mDataConnection;
|
DataConnectionTracker dcTracker = phone.mDataConnection;
|
||||||
|
|
||||||
|
Message msg = dcTracker.obtainMessage(DataConnectionTracker.EVENT_CLEAN_UP_CONNECTION);
|
||||||
|
msg.obj = CDMAPhone.REASON_RADIO_TURNED_OFF;
|
||||||
|
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (!mPendingRadioPowerOffAfterDataOff) {
|
if (!mPendingRadioPowerOffAfterDataOff) {
|
||||||
if (dcTracker.isAnyActiveDataConnections()) {
|
DataConnectionTracker.State currentState = dcTracker.getState();
|
||||||
dcTracker.cleanUpAllConnections();
|
if (currentState != DataConnectionTracker.State.CONNECTED
|
||||||
|
&& currentState != DataConnectionTracker.State.DISCONNECTING
|
||||||
|
&& currentState != DataConnectionTracker.State.INITING) {
|
||||||
|
msg.arg1 = 0; // tearDown is false as it is not needed.
|
||||||
|
dcTracker.sendMessage(msg);
|
||||||
|
if (DBG) log("Data disconnected, turn off radio right away.");
|
||||||
|
hangupAndPowerOff();
|
||||||
|
} else {
|
||||||
|
msg.arg1 = 1; // tearDown is true
|
||||||
|
dcTracker.sendMessage(msg);
|
||||||
if (sendEmptyMessageDelayed(EVENT_SET_RADIO_POWER_OFF, 30000)) {
|
if (sendEmptyMessageDelayed(EVENT_SET_RADIO_POWER_OFF, 30000)) {
|
||||||
if (DBG) log("Wait upto 30s for data to disconnect, then turn off radio.");
|
if (DBG) log("Wait upto 30s for data to disconnect, then turn off radio.");
|
||||||
mPendingRadioPowerOffAfterDataOff = true;
|
mPendingRadioPowerOffAfterDataOff = true;
|
||||||
@ -588,10 +604,6 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
Log.w(LOG_TAG, "Cannot send delayed Msg, turn off radio right away.");
|
Log.w(LOG_TAG, "Cannot send delayed Msg, turn off radio right away.");
|
||||||
hangupAndPowerOff();
|
hangupAndPowerOff();
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
dcTracker.cleanUpAllConnections();
|
|
||||||
if (DBG) log("Data disconnected, turn off radio right away.");
|
|
||||||
hangupAndPowerOff();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -635,167 +647,14 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The LTE data connection state, only return true here
|
* Handle the result of one of the pollState()-related requests
|
||||||
*/
|
|
||||||
protected boolean checkAdditionalDataAvaiable(){
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hanlde the PollStateResult message
|
|
||||||
*/
|
|
||||||
protected void handlePollStateResultMessage(int what, AsyncResult ar){
|
|
||||||
int ints[];
|
|
||||||
String states[];
|
|
||||||
switch (what) {
|
|
||||||
case EVENT_POLL_STATE_REGISTRATION_CDMA: // Handle RIL_REQUEST_REGISTRATION_STATE.
|
|
||||||
states = (String[])ar.result;
|
|
||||||
|
|
||||||
int registrationState = 4; //[0] registrationState
|
|
||||||
int radioTechnology = -1; //[3] radioTechnology
|
|
||||||
int baseStationId = -1; //[4] baseStationId
|
|
||||||
//[5] baseStationLatitude
|
|
||||||
int baseStationLatitude = CdmaCellLocation.INVALID_LAT_LONG;
|
|
||||||
//[6] baseStationLongitude
|
|
||||||
int baseStationLongitude = CdmaCellLocation.INVALID_LAT_LONG;
|
|
||||||
int cssIndicator = 0; //[7] init with 0, because it is treated as a boolean
|
|
||||||
int systemId = 0; //[8] systemId
|
|
||||||
int networkId = 0; //[9] networkId
|
|
||||||
int roamingIndicator = -1; //[10] Roaming indicator
|
|
||||||
int systemIsInPrl = 0; //[11] Indicates if current system is in PRL
|
|
||||||
int defaultRoamingIndicator = 0; //[12] Is default roaming indicator from PRL
|
|
||||||
int reasonForDenial = 0; //[13] Denial reason if registrationState = 3
|
|
||||||
|
|
||||||
if (states.length == 14) {
|
|
||||||
try {
|
|
||||||
if (states[0] != null) {
|
|
||||||
registrationState = Integer.parseInt(states[0]);
|
|
||||||
}
|
|
||||||
if (states[3] != null) {
|
|
||||||
radioTechnology = Integer.parseInt(states[3]);
|
|
||||||
}
|
|
||||||
if (states[4] != null) {
|
|
||||||
baseStationId = Integer.parseInt(states[4]);
|
|
||||||
}
|
|
||||||
if (states[5] != null) {
|
|
||||||
baseStationLatitude = Integer.parseInt(states[5]);
|
|
||||||
}
|
|
||||||
if (states[6] != null) {
|
|
||||||
baseStationLongitude = Integer.parseInt(states[6]);
|
|
||||||
}
|
|
||||||
// Some carriers only return lat-lngs of 0,0
|
|
||||||
if (baseStationLatitude == 0 && baseStationLongitude == 0) {
|
|
||||||
baseStationLatitude = CdmaCellLocation.INVALID_LAT_LONG;
|
|
||||||
baseStationLongitude = CdmaCellLocation.INVALID_LAT_LONG;
|
|
||||||
}
|
|
||||||
if (states[7] != null) {
|
|
||||||
cssIndicator = Integer.parseInt(states[7]);
|
|
||||||
}
|
|
||||||
if (states[8] != null) {
|
|
||||||
systemId = Integer.parseInt(states[8]);
|
|
||||||
}
|
|
||||||
if (states[9] != null) {
|
|
||||||
networkId = Integer.parseInt(states[9]);
|
|
||||||
}
|
|
||||||
if (states[10] != null) {
|
|
||||||
roamingIndicator = Integer.parseInt(states[10]);
|
|
||||||
}
|
|
||||||
if (states[11] != null) {
|
|
||||||
systemIsInPrl = Integer.parseInt(states[11]);
|
|
||||||
}
|
|
||||||
if (states[12] != null) {
|
|
||||||
defaultRoamingIndicator = Integer.parseInt(states[12]);
|
|
||||||
}
|
|
||||||
if (states[13] != null) {
|
|
||||||
reasonForDenial = Integer.parseInt(states[13]);
|
|
||||||
}
|
|
||||||
} catch (NumberFormatException ex) {
|
|
||||||
Log.w(LOG_TAG, "error parsing RegistrationState: " + ex);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new RuntimeException("Warning! Wrong number of parameters returned from "
|
|
||||||
+ "RIL_REQUEST_REGISTRATION_STATE: expected 14 got "
|
|
||||||
+ states.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
mRegistrationState = registrationState;
|
|
||||||
// When registration state is roaming and TSB58
|
|
||||||
// roaming indicator is not in the carrier-specified
|
|
||||||
// list of ERIs for home system, mCdmaRoaming is true.
|
|
||||||
mCdmaRoaming =
|
|
||||||
regCodeIsRoaming(registrationState) && !isRoamIndForHomeSystem(states[10]);
|
|
||||||
newSS.setState (regCodeToServiceState(registrationState));
|
|
||||||
|
|
||||||
if(checkAdditionalDataAvaiable()) {
|
|
||||||
this.newCdmaDataConnectionState =
|
|
||||||
radioTechnologyToDataServiceState(radioTechnology);
|
|
||||||
newSS.setRadioTechnology(radioTechnology);
|
|
||||||
newNetworkType = radioTechnology;
|
|
||||||
}
|
|
||||||
|
|
||||||
newSS.setCssIndicator(cssIndicator);
|
|
||||||
newSS.setSystemAndNetworkId(systemId, networkId);
|
|
||||||
mRoamingIndicator = roamingIndicator;
|
|
||||||
mIsInPrl = (systemIsInPrl == 0) ? false : true;
|
|
||||||
mDefaultRoamingIndicator = defaultRoamingIndicator;
|
|
||||||
|
|
||||||
|
|
||||||
// Values are -1 if not available.
|
|
||||||
newCellLoc.setCellLocationData(baseStationId, baseStationLatitude,
|
|
||||||
baseStationLongitude, systemId, networkId);
|
|
||||||
|
|
||||||
if (reasonForDenial == 0) {
|
|
||||||
mRegistrationDeniedReason = ServiceStateTracker.REGISTRATION_DENIED_GEN;
|
|
||||||
} else if (reasonForDenial == 1) {
|
|
||||||
mRegistrationDeniedReason = ServiceStateTracker.REGISTRATION_DENIED_AUTH;
|
|
||||||
} else {
|
|
||||||
mRegistrationDeniedReason = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mRegistrationState == 3) {
|
|
||||||
if (DBG) log("Registration denied, " + mRegistrationDeniedReason);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EVENT_POLL_STATE_OPERATOR_CDMA: // Handle RIL_REQUEST_OPERATOR
|
|
||||||
String opNames[] = (String[])ar.result;
|
|
||||||
|
|
||||||
if (opNames != null && opNames.length >= 3) {
|
|
||||||
// If the NUMERIC field isn't valid use PROPERTY_CDMA_HOME_OPERATOR_NUMERIC
|
|
||||||
if ((opNames[2] == null) || (opNames[2].length() < 5)
|
|
||||||
|| ("00000".equals(opNames[2]))) {
|
|
||||||
opNames[2] = SystemProperties.get(
|
|
||||||
CDMAPhone.PROPERTY_CDMA_HOME_OPERATOR_NUMERIC, "00000");
|
|
||||||
if (DBG) {
|
|
||||||
log("RIL_REQUEST_OPERATOR.response[2], the numeric, " +
|
|
||||||
" is bad. Using SystemProperties '" +
|
|
||||||
CDMAPhone.PROPERTY_CDMA_HOME_OPERATOR_NUMERIC +
|
|
||||||
"'= " + opNames[2]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (cm.getNvState().isNVReady()) {
|
|
||||||
// In CDMA in case on NV, the ss.mOperatorAlphaLong is set later with the
|
|
||||||
// ERI text, so here it is ignored what is coming from the modem.
|
|
||||||
newSS.setOperatorName(null, opNames[1], opNames[2]);
|
|
||||||
} else {
|
|
||||||
newSS.setOperatorName(opNames[0], opNames[1], opNames[2]);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Log.w(LOG_TAG, "error parsing opNames");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
Log.e(LOG_TAG, "RIL response handle in wrong phone!"
|
|
||||||
+ " Expected CDMA RIL request and get GSM RIL request.");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle the result of one of the pollState() - related requests
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void handlePollStateResult (int what, AsyncResult ar) {
|
protected void handlePollStateResult (int what, AsyncResult ar) {
|
||||||
|
int ints[];
|
||||||
|
String states[];
|
||||||
|
|
||||||
// Ignore stale requests from last poll.
|
// Ignore stale requests from last poll.
|
||||||
if (ar.userObj != pollingContext) return;
|
if (ar.userObj != pollingContext) return;
|
||||||
|
|
||||||
@ -825,7 +684,148 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
ar.exception);
|
ar.exception);
|
||||||
}
|
}
|
||||||
} else try {
|
} else try {
|
||||||
handlePollStateResultMessage(what, ar);
|
switch (what) {
|
||||||
|
case EVENT_POLL_STATE_REGISTRATION_CDMA: // Handle RIL_REQUEST_REGISTRATION_STATE.
|
||||||
|
states = (String[])ar.result;
|
||||||
|
|
||||||
|
int registrationState = 4; //[0] registrationState
|
||||||
|
int radioTechnology = -1; //[3] radioTechnology
|
||||||
|
int baseStationId = -1; //[4] baseStationId
|
||||||
|
//[5] baseStationLatitude
|
||||||
|
int baseStationLatitude = CdmaCellLocation.INVALID_LAT_LONG;
|
||||||
|
//[6] baseStationLongitude
|
||||||
|
int baseStationLongitude = CdmaCellLocation.INVALID_LAT_LONG;
|
||||||
|
int cssIndicator = 0; //[7] init with 0, because it is treated as a boolean
|
||||||
|
int systemId = 0; //[8] systemId
|
||||||
|
int networkId = 0; //[9] networkId
|
||||||
|
int roamingIndicator = -1; //[10] Roaming indicator
|
||||||
|
int systemIsInPrl = 0; //[11] Indicates if current system is in PRL
|
||||||
|
int defaultRoamingIndicator = 0; //[12] Is default roaming indicator from PRL
|
||||||
|
int reasonForDenial = 0; //[13] Denial reason if registrationState = 3
|
||||||
|
|
||||||
|
if (states.length == 14) {
|
||||||
|
try {
|
||||||
|
if (states[0] != null) {
|
||||||
|
registrationState = Integer.parseInt(states[0]);
|
||||||
|
}
|
||||||
|
if (states[3] != null) {
|
||||||
|
radioTechnology = Integer.parseInt(states[3]);
|
||||||
|
}
|
||||||
|
if (states[4] != null) {
|
||||||
|
baseStationId = Integer.parseInt(states[4]);
|
||||||
|
}
|
||||||
|
if (states[5] != null) {
|
||||||
|
baseStationLatitude = Integer.parseInt(states[5]);
|
||||||
|
}
|
||||||
|
if (states[6] != null) {
|
||||||
|
baseStationLongitude = Integer.parseInt(states[6]);
|
||||||
|
}
|
||||||
|
// Some carriers only return lat-lngs of 0,0
|
||||||
|
if (baseStationLatitude == 0 && baseStationLongitude == 0) {
|
||||||
|
baseStationLatitude = CdmaCellLocation.INVALID_LAT_LONG;
|
||||||
|
baseStationLongitude = CdmaCellLocation.INVALID_LAT_LONG;
|
||||||
|
}
|
||||||
|
if (states[7] != null) {
|
||||||
|
cssIndicator = Integer.parseInt(states[7]);
|
||||||
|
}
|
||||||
|
if (states[8] != null) {
|
||||||
|
systemId = Integer.parseInt(states[8]);
|
||||||
|
}
|
||||||
|
if (states[9] != null) {
|
||||||
|
networkId = Integer.parseInt(states[9]);
|
||||||
|
}
|
||||||
|
if (states[10] != null) {
|
||||||
|
roamingIndicator = Integer.parseInt(states[10]);
|
||||||
|
}
|
||||||
|
if (states[11] != null) {
|
||||||
|
systemIsInPrl = Integer.parseInt(states[11]);
|
||||||
|
}
|
||||||
|
if (states[12] != null) {
|
||||||
|
defaultRoamingIndicator = Integer.parseInt(states[12]);
|
||||||
|
}
|
||||||
|
if (states[13] != null) {
|
||||||
|
reasonForDenial = Integer.parseInt(states[13]);
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException ex) {
|
||||||
|
Log.w(LOG_TAG, "error parsing RegistrationState: " + ex);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException("Warning! Wrong number of parameters returned from "
|
||||||
|
+ "RIL_REQUEST_REGISTRATION_STATE: expected 14 got "
|
||||||
|
+ states.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
mRegistrationState = registrationState;
|
||||||
|
// When registration state is roaming and TSB58
|
||||||
|
// roaming indicator is not in the carrier-specified
|
||||||
|
// list of ERIs for home system, mCdmaRoaming is true.
|
||||||
|
mCdmaRoaming =
|
||||||
|
regCodeIsRoaming(registrationState) && !isRoamIndForHomeSystem(states[10]);
|
||||||
|
newSS.setState (regCodeToServiceState(registrationState));
|
||||||
|
|
||||||
|
this.newCdmaDataConnectionState =
|
||||||
|
radioTechnologyToDataServiceState(radioTechnology);
|
||||||
|
newSS.setRadioTechnology(radioTechnology);
|
||||||
|
newNetworkType = radioTechnology;
|
||||||
|
|
||||||
|
newSS.setCssIndicator(cssIndicator);
|
||||||
|
newSS.setSystemAndNetworkId(systemId, networkId);
|
||||||
|
mRoamingIndicator = roamingIndicator;
|
||||||
|
mIsInPrl = (systemIsInPrl == 0) ? false : true;
|
||||||
|
mDefaultRoamingIndicator = defaultRoamingIndicator;
|
||||||
|
|
||||||
|
|
||||||
|
// Values are -1 if not available.
|
||||||
|
newCellLoc.setCellLocationData(baseStationId, baseStationLatitude,
|
||||||
|
baseStationLongitude, systemId, networkId);
|
||||||
|
|
||||||
|
if (reasonForDenial == 0) {
|
||||||
|
mRegistrationDeniedReason = ServiceStateTracker.REGISTRATION_DENIED_GEN;
|
||||||
|
} else if (reasonForDenial == 1) {
|
||||||
|
mRegistrationDeniedReason = ServiceStateTracker.REGISTRATION_DENIED_AUTH;
|
||||||
|
} else {
|
||||||
|
mRegistrationDeniedReason = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mRegistrationState == 3) {
|
||||||
|
if (DBG) log("Registration denied, " + mRegistrationDeniedReason);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EVENT_POLL_STATE_OPERATOR_CDMA: // Handle RIL_REQUEST_OPERATOR
|
||||||
|
String opNames[] = (String[])ar.result;
|
||||||
|
|
||||||
|
if (opNames != null && opNames.length >= 3) {
|
||||||
|
// If the NUMERIC field isn't valid use PROPERTY_CDMA_HOME_OPERATOR_NUMERIC
|
||||||
|
if ((opNames[2] == null) || (opNames[2].length() < 5)
|
||||||
|
|| ("00000".equals(opNames[2]))) {
|
||||||
|
opNames[2] = SystemProperties.get(
|
||||||
|
CDMAPhone.PROPERTY_CDMA_HOME_OPERATOR_NUMERIC, "00000");
|
||||||
|
if (DBG) {
|
||||||
|
log("RIL_REQUEST_OPERATOR.response[2], the numeric, " +
|
||||||
|
" is bad. Using SystemProperties '" +
|
||||||
|
CDMAPhone.PROPERTY_CDMA_HOME_OPERATOR_NUMERIC +
|
||||||
|
"'= " + opNames[2]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (cm.getRadioState().isNVReady()) {
|
||||||
|
// In CDMA in case on NV, the ss.mOperatorAlphaLong is set later with the
|
||||||
|
// ERI text, so here it is ignored what is coming from the modem.
|
||||||
|
newSS.setOperatorName(null, opNames[1], opNames[2]);
|
||||||
|
} else {
|
||||||
|
newSS.setOperatorName(opNames[0], opNames[1], opNames[2]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Log.w(LOG_TAG, "error parsing opNames");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
Log.e(LOG_TAG, "RIL response handle in wrong phone!"
|
||||||
|
+ " Expected CDMA RIL request and get GSM RIL request.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
} catch (RuntimeException ex) {
|
} catch (RuntimeException ex) {
|
||||||
Log.e(LOG_TAG, "Exception while polling service state. "
|
Log.e(LOG_TAG, "Exception while polling service state. "
|
||||||
+ "Probably malformed RIL response.", ex);
|
+ "Probably malformed RIL response.", ex);
|
||||||
@ -896,8 +896,9 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setSignalStrengthDefaultValues() {
|
private void setSignalStrengthDefaultValues() {
|
||||||
mSignalStrength = new SignalStrength(99, -1, -1, -1, -1, -1, -1, false);
|
mSignalStrength = new SignalStrength(99, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -908,7 +909,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
* and start over again if the radio notifies us that some
|
* and start over again if the radio notifies us that some
|
||||||
* event has changed
|
* event has changed
|
||||||
*/
|
*/
|
||||||
protected void
|
private void
|
||||||
pollState() {
|
pollState() {
|
||||||
pollingContext = new int[1];
|
pollingContext = new int[1];
|
||||||
pollingContext[0] = 0;
|
pollingContext[0] = 0;
|
||||||
@ -963,7 +964,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static String networkTypeToString(int type) {
|
private static String networkTypeToString(int type) {
|
||||||
String ret = "unknown";
|
String ret = "unknown";
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
@ -993,7 +994,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void fixTimeZone(String isoCountryCode) {
|
private void fixTimeZone(String isoCountryCode) {
|
||||||
TimeZone zone = null;
|
TimeZone zone = null;
|
||||||
// If the offset is (0, false) and the time zone property
|
// If the offset is (0, false) and the time zone property
|
||||||
// is set, use the time zone property rather than GMT.
|
// is set, use the time zone property rather than GMT.
|
||||||
@ -1030,7 +1031,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void pollStateDone() {
|
private void pollStateDone() {
|
||||||
if (DBG) log("Poll ServiceState done: oldSS=[" + ss + "] newSS=[" + newSS + "]");
|
if (DBG) log("Poll ServiceState done: oldSS=[" + ss + "] newSS=[" + newSS + "]");
|
||||||
|
|
||||||
boolean hasRegistered =
|
boolean hasRegistered =
|
||||||
@ -1233,7 +1234,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
* send signal-strength-changed notification if changed
|
* send signal-strength-changed notification if changed
|
||||||
* Called both for solicited and unsolicited signal strength updates
|
* Called both for solicited and unsolicited signal strength updates
|
||||||
*/
|
*/
|
||||||
protected void
|
private void
|
||||||
onSignalStrengthResult(AsyncResult ar) {
|
onSignalStrengthResult(AsyncResult ar) {
|
||||||
SignalStrength oldSignalStrength = mSignalStrength;
|
SignalStrength oldSignalStrength = mSignalStrength;
|
||||||
|
|
||||||
@ -1252,7 +1253,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
//log(String.format("onSignalStrengthResult cdmaDbm=%d cdmaEcio=%d evdoRssi=%d evdoEcio=%d evdoSnr=%d",
|
//log(String.format("onSignalStrengthResult cdmaDbm=%d cdmaEcio=%d evdoRssi=%d evdoEcio=%d evdoSnr=%d",
|
||||||
// cdmaDbm, cdmaEcio, evdoRssi, evdoEcio, evdoSnr));
|
// cdmaDbm, cdmaEcio, evdoRssi, evdoEcio, evdoSnr));
|
||||||
mSignalStrength = new SignalStrength(99, -1, cdmaDbm, cdmaEcio,
|
mSignalStrength = new SignalStrength(99, -1, cdmaDbm, cdmaEcio,
|
||||||
evdoRssi, evdoEcio, evdoSnr, false);
|
evdoRssi, evdoEcio, evdoSnr, -1, -1, -1, -1, -1, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -1288,7 +1289,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** code is registration state 0-5 from TS 27.007 7.2 */
|
/** code is registration state 0-5 from TS 27.007 7.2 */
|
||||||
protected int
|
private int
|
||||||
regCodeToServiceState(int code) {
|
regCodeToServiceState(int code) {
|
||||||
switch (code) {
|
switch (code) {
|
||||||
case 0: // Not searching and not registered
|
case 0: // Not searching and not registered
|
||||||
@ -1317,13 +1318,6 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
return cdmaDataConnectionState;
|
return cdmaDataConnectionState;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: In the future, we need remove getCurrentCdmaDataConnectionState
|
|
||||||
*/
|
|
||||||
public int getCurrentDataConnectionState() {
|
|
||||||
return cdmaDataConnectionState;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* code is registration state 0-5 from TS 27.007 7.2
|
* code is registration state 0-5 from TS 27.007 7.2
|
||||||
* returns true if registered roam, false otherwise
|
* returns true if registered roam, false otherwise
|
||||||
@ -1668,7 +1662,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
|
|||||||
* @return true if phone is camping on a technology
|
* @return true if phone is camping on a technology
|
||||||
* that could support voice and data simultaneously.
|
* that could support voice and data simultaneously.
|
||||||
*/
|
*/
|
||||||
public boolean isConcurrentVoiceAndDataAllowed() {
|
boolean isConcurrentVoiceAndData() {
|
||||||
// Note: it needs to be confirmed which CDMA network types
|
// Note: it needs to be confirmed which CDMA network types
|
||||||
// can support voice and data calls concurrently.
|
// can support voice and data calls concurrently.
|
||||||
// For the time-being, the return value will be false.
|
// For the time-being, the return value will be false.
|
||||||
|
@ -33,7 +33,6 @@ import android.telephony.CellLocation;
|
|||||||
import android.telephony.PhoneNumberUtils;
|
import android.telephony.PhoneNumberUtils;
|
||||||
import android.telephony.ServiceState;
|
import android.telephony.ServiceState;
|
||||||
import android.telephony.SignalStrength;
|
import android.telephony.SignalStrength;
|
||||||
import com.android.internal.telephony.CallTracker;
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
@ -73,7 +72,6 @@ import com.android.internal.telephony.TelephonyProperties;
|
|||||||
import com.android.internal.telephony.UUSInfo;
|
import com.android.internal.telephony.UUSInfo;
|
||||||
import com.android.internal.telephony.test.SimulatedRadioControl;
|
import com.android.internal.telephony.test.SimulatedRadioControl;
|
||||||
import com.android.internal.telephony.IccVmNotSupportedException;
|
import com.android.internal.telephony.IccVmNotSupportedException;
|
||||||
import com.android.internal.telephony.ServiceStateTracker;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
@ -102,6 +100,9 @@ public class GSMPhone extends PhoneBase {
|
|||||||
// Instance Variables
|
// Instance Variables
|
||||||
GsmCallTracker mCT;
|
GsmCallTracker mCT;
|
||||||
GsmServiceStateTracker mSST;
|
GsmServiceStateTracker mSST;
|
||||||
|
GsmSMSDispatcher mSMS;
|
||||||
|
SIMRecords mSIMRecords;
|
||||||
|
SimCard mSimCard;
|
||||||
CatService mStkService;
|
CatService mStkService;
|
||||||
ArrayList <GsmMmiCode> mPendingMMIs = new ArrayList<GsmMmiCode>();
|
ArrayList <GsmMmiCode> mPendingMMIs = new ArrayList<GsmMmiCode>();
|
||||||
SimPhoneBookInterfaceManager mSimPhoneBookIntManager;
|
SimPhoneBookInterfaceManager mSimPhoneBookIntManager;
|
||||||
@ -282,14 +283,6 @@ public class GSMPhone extends PhoneBase {
|
|||||||
return mSIMRecords.getVoiceCallForwardingFlag();
|
return mSIMRecords.getVoiceCallForwardingFlag();
|
||||||
}
|
}
|
||||||
|
|
||||||
public CallTracker getCallTracker() {
|
|
||||||
return mCT;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ServiceStateTracker getServiceStateTracker() {
|
|
||||||
return mSST;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<? extends MmiCode>
|
public List<? extends MmiCode>
|
||||||
getPendingMmiCodes() {
|
getPendingMmiCodes() {
|
||||||
return mPendingMMIs;
|
return mPendingMMIs;
|
||||||
@ -321,7 +314,7 @@ public class GSMPhone extends PhoneBase {
|
|||||||
case CONNECTED:
|
case CONNECTED:
|
||||||
case DISCONNECTING:
|
case DISCONNECTING:
|
||||||
if ( mCT.state != Phone.State.IDLE
|
if ( mCT.state != Phone.State.IDLE
|
||||||
&& !mSST.isConcurrentVoiceAndDataAllowed()) {
|
&& !mSST.isConcurrentVoiceAndData()) {
|
||||||
ret = DataState.SUSPENDED;
|
ret = DataState.SUSPENDED;
|
||||||
} else {
|
} else {
|
||||||
ret = DataState.CONNECTED;
|
ret = DataState.CONNECTED;
|
||||||
@ -411,7 +404,7 @@ public class GSMPhone extends PhoneBase {
|
|||||||
mNotifier.notifySignalStrength(this);
|
mNotifier.notifySignalStrength(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void
|
/*package*/ void
|
||||||
notifyDataConnectionFailed(String reason, String apnType) {
|
notifyDataConnectionFailed(String reason, String apnType) {
|
||||||
mNotifier.notifyDataConnectionFailed(this, reason, apnType);
|
mNotifier.notifyDataConnectionFailed(this, reason, apnType);
|
||||||
}
|
}
|
||||||
|
@ -19,12 +19,10 @@ package com.android.internal.telephony.gsm;
|
|||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Patterns;
|
import android.util.Patterns;
|
||||||
import android.text.TextUtils;
|
|
||||||
|
|
||||||
import com.android.internal.telephony.ApnSetting;
|
import com.android.internal.telephony.ApnSetting;
|
||||||
import com.android.internal.telephony.DataConnection;
|
import com.android.internal.telephony.DataConnection;
|
||||||
import com.android.internal.telephony.Phone;
|
import com.android.internal.telephony.Phone;
|
||||||
import com.android.internal.telephony.PhoneBase;
|
|
||||||
import com.android.internal.telephony.RILConstants;
|
import com.android.internal.telephony.RILConstants;
|
||||||
import com.android.internal.telephony.RetryManager;
|
import com.android.internal.telephony.RetryManager;
|
||||||
|
|
||||||
@ -38,10 +36,8 @@ public class GsmDataConnection extends DataConnection {
|
|||||||
//***** Instance Variables
|
//***** Instance Variables
|
||||||
private ApnSetting apn;
|
private ApnSetting apn;
|
||||||
|
|
||||||
protected int mProfileId = RILConstants.DATA_PROFILE_DEFAULT;
|
|
||||||
protected String mActiveApnType = Phone.APN_TYPE_DEFAULT;
|
|
||||||
//***** Constructor
|
//***** Constructor
|
||||||
private GsmDataConnection(PhoneBase phone, String name, RetryManager rm) {
|
private GsmDataConnection(GSMPhone phone, String name, RetryManager rm) {
|
||||||
super(phone, name, rm);
|
super(phone, name, rm);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,7 +49,7 @@ public class GsmDataConnection extends DataConnection {
|
|||||||
* @param rm the RetryManager
|
* @param rm the RetryManager
|
||||||
* @return GsmDataConnection that was created.
|
* @return GsmDataConnection that was created.
|
||||||
*/
|
*/
|
||||||
static GsmDataConnection makeDataConnection(PhoneBase phone, int id, RetryManager rm) {
|
static GsmDataConnection makeDataConnection(GSMPhone phone, int id, RetryManager rm) {
|
||||||
synchronized (mCountLock) {
|
synchronized (mCountLock) {
|
||||||
mCount += 1;
|
mCount += 1;
|
||||||
}
|
}
|
||||||
@ -106,29 +102,11 @@ public class GsmDataConnection extends DataConnection {
|
|||||||
|
|
||||||
phone.mCM.setupDataCall(
|
phone.mCM.setupDataCall(
|
||||||
Integer.toString(RILConstants.SETUP_DATA_TECH_GSM),
|
Integer.toString(RILConstants.SETUP_DATA_TECH_GSM),
|
||||||
Integer.toString(mProfileId),
|
Integer.toString(RILConstants.DATA_PROFILE_DEFAULT),
|
||||||
apn.apn, apn.user, apn.password,
|
apn.apn, apn.user, apn.password, Integer.toString(authType),
|
||||||
Integer.toString(authType),
|
|
||||||
protocol, msg);
|
protocol, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setProfileId(int profileId) {
|
|
||||||
mProfileId = profileId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getProfileId() {
|
|
||||||
return mProfileId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getCid() {
|
|
||||||
// 'cid' has been defined in parent class
|
|
||||||
return cid;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setActiveApnType(String apnType) {
|
|
||||||
mActiveApnType = apnType;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void clearSettings() {
|
protected void clearSettings() {
|
||||||
super.clearSettings();
|
super.clearSettings();
|
||||||
@ -172,35 +150,17 @@ public class GsmDataConnection extends DataConnection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setHttpProxy(String httpProxy, String httpPort) {
|
private void setHttpProxy(String httpProxy, String httpPort) {
|
||||||
|
if (httpProxy == null || httpProxy.length() == 0) {
|
||||||
if (DBG) log("set http proxy for"
|
phone.setSystemProperty("net.gprs.http-proxy", null);
|
||||||
+ "' APN: '" + mActiveApnType
|
return;
|
||||||
+ "' proxy: '" + apn.proxy + "' port: '" + apn.port);
|
|
||||||
if(TextUtils.equals(mActiveApnType, Phone.APN_TYPE_DEFAULT)) {
|
|
||||||
if (httpProxy == null || httpProxy.length() == 0) {
|
|
||||||
phone.setSystemProperty("net.gprs.http-proxy", null);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (httpPort == null || httpPort.length() == 0) {
|
|
||||||
httpPort = "8080"; // Default to port 8080
|
|
||||||
}
|
|
||||||
|
|
||||||
phone.setSystemProperty("net.gprs.http-proxy",
|
|
||||||
"http://" + httpProxy + ":" + httpPort + "/");
|
|
||||||
} else {
|
|
||||||
if (httpProxy == null || httpProxy.length() == 0) {
|
|
||||||
phone.setSystemProperty("net.gprs.http-proxy." + mActiveApnType, null);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (httpPort == null || httpPort.length() == 0) {
|
|
||||||
httpPort = "8080"; // Default to port 8080
|
|
||||||
}
|
|
||||||
|
|
||||||
phone.setSystemProperty("net.gprs.http-proxy." + mActiveApnType,
|
|
||||||
"http://" + httpProxy + ":" + httpPort + "/");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (httpPort == null || httpPort.length() == 0) {
|
||||||
|
httpPort = "8080"; // Default to port 8080
|
||||||
|
}
|
||||||
|
|
||||||
|
phone.setSystemProperty("net.gprs.http-proxy",
|
||||||
|
"http://" + httpProxy + ":" + httpPort + "/");
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isIpAddress(String address) {
|
private boolean isIpAddress(String address) {
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -99,7 +99,7 @@ final class GsmSMSDispatcher extends SMSDispatcher {
|
|||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public int dispatchMessage(SmsMessageBase smsb) {
|
protected int dispatchMessage(SmsMessageBase smsb) {
|
||||||
|
|
||||||
// If sms is null, means there was a parsing error.
|
// If sms is null, means there was a parsing error.
|
||||||
if (smsb == null) {
|
if (smsb == null) {
|
||||||
@ -383,7 +383,7 @@ final class GsmSMSDispatcher extends SMSDispatcher {
|
|||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public void activateCellBroadcastSms(int activate, Message response) {
|
protected void activateCellBroadcastSms(int activate, Message response) {
|
||||||
// Unless CBS is implemented for GSM, this point should be unreachable.
|
// Unless CBS is implemented for GSM, this point should be unreachable.
|
||||||
Log.e(TAG, "Error! The functionality cell broadcast sms is not implemented for GSM.");
|
Log.e(TAG, "Error! The functionality cell broadcast sms is not implemented for GSM.");
|
||||||
response.recycle();
|
response.recycle();
|
||||||
@ -391,7 +391,7 @@ final class GsmSMSDispatcher extends SMSDispatcher {
|
|||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public void getCellBroadcastSmsConfig(Message response){
|
protected void getCellBroadcastSmsConfig(Message response){
|
||||||
// Unless CBS is implemented for GSM, this point should be unreachable.
|
// Unless CBS is implemented for GSM, this point should be unreachable.
|
||||||
Log.e(TAG, "Error! The functionality cell broadcast sms is not implemented for GSM.");
|
Log.e(TAG, "Error! The functionality cell broadcast sms is not implemented for GSM.");
|
||||||
response.recycle();
|
response.recycle();
|
||||||
@ -399,7 +399,7 @@ final class GsmSMSDispatcher extends SMSDispatcher {
|
|||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public void setCellBroadcastConfig(int[] configValuesArray, Message response) {
|
protected void setCellBroadcastConfig(int[] configValuesArray, Message response) {
|
||||||
// Unless CBS is implemented for GSM, this point should be unreachable.
|
// Unless CBS is implemented for GSM, this point should be unreachable.
|
||||||
Log.e(TAG, "Error! The functionality cell broadcast sms is not implemented for GSM.");
|
Log.e(TAG, "Error! The functionality cell broadcast sms is not implemented for GSM.");
|
||||||
response.recycle();
|
response.recycle();
|
||||||
|
@ -278,8 +278,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
|
|||||||
* @param what what code of message when delivered
|
* @param what what code of message when delivered
|
||||||
* @param obj placed in Message.obj
|
* @param obj placed in Message.obj
|
||||||
*/
|
*/
|
||||||
@Override
|
void registerForGprsAttached(Handler h, int what, Object obj) {
|
||||||
public void registerForDataConnectionAttached(Handler h, int what, Object obj) {
|
|
||||||
Registrant r = new Registrant(h, what, obj);
|
Registrant r = new Registrant(h, what, obj);
|
||||||
gprsAttachedRegistrants.add(r);
|
gprsAttachedRegistrants.add(r);
|
||||||
|
|
||||||
@ -288,8 +287,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
void unregisterForGprsAttached(Handler h) {
|
||||||
public void unregisterForDataConnectionAttached(Handler h) {
|
|
||||||
gprsAttachedRegistrants.remove(h);
|
gprsAttachedRegistrants.remove(h);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -331,7 +329,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
|
|||||||
* @param what what code of message when delivered
|
* @param what what code of message when delivered
|
||||||
* @param obj placed in Message.obj
|
* @param obj placed in Message.obj
|
||||||
*/
|
*/
|
||||||
public void registerForPsRestrictedEnabled(Handler h, int what, Object obj) {
|
void registerForPsRestrictedEnabled(Handler h, int what, Object obj) {
|
||||||
Log.d(LOG_TAG, "[DSAC DEB] " + "registerForPsRestrictedEnabled ");
|
Log.d(LOG_TAG, "[DSAC DEB] " + "registerForPsRestrictedEnabled ");
|
||||||
Registrant r = new Registrant(h, what, obj);
|
Registrant r = new Registrant(h, what, obj);
|
||||||
psRestrictEnabledRegistrants.add(r);
|
psRestrictEnabledRegistrants.add(r);
|
||||||
@ -341,7 +339,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unregisterForPsRestrictedEnabled(Handler h) {
|
void unregisterForPsRestrictedEnabled(Handler h) {
|
||||||
psRestrictEnabledRegistrants.remove(h);
|
psRestrictEnabledRegistrants.remove(h);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -351,7 +349,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
|
|||||||
* @param what what code of message when delivered
|
* @param what what code of message when delivered
|
||||||
* @param obj placed in Message.obj
|
* @param obj placed in Message.obj
|
||||||
*/
|
*/
|
||||||
public void registerForPsRestrictedDisabled(Handler h, int what, Object obj) {
|
void registerForPsRestrictedDisabled(Handler h, int what, Object obj) {
|
||||||
Log.d(LOG_TAG, "[DSAC DEB] " + "registerForPsRestrictedDisabled ");
|
Log.d(LOG_TAG, "[DSAC DEB] " + "registerForPsRestrictedDisabled ");
|
||||||
Registrant r = new Registrant(h, what, obj);
|
Registrant r = new Registrant(h, what, obj);
|
||||||
psRestrictDisabledRegistrants.add(r);
|
psRestrictDisabledRegistrants.add(r);
|
||||||
@ -361,7 +359,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unregisterForPsRestrictedDisabled(Handler h) {
|
void unregisterForPsRestrictedDisabled(Handler h) {
|
||||||
psRestrictDisabledRegistrants.remove(h);
|
psRestrictDisabledRegistrants.remove(h);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -569,21 +567,33 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
|
|||||||
&& cm.getRadioState() == CommandsInterface.RadioState.RADIO_OFF) {
|
&& cm.getRadioState() == CommandsInterface.RadioState.RADIO_OFF) {
|
||||||
cm.setRadioPower(true, null);
|
cm.setRadioPower(true, null);
|
||||||
} else if (!mDesiredPowerState && cm.getRadioState().isOn()) {
|
} else if (!mDesiredPowerState && cm.getRadioState().isOn()) {
|
||||||
|
DataConnectionTracker dcTracker = phone.mDataConnection;
|
||||||
|
if (! dcTracker.isDataConnectionAsDesired()) {
|
||||||
|
EventLog.writeEvent(EventLogTags.DATA_NETWORK_STATUS_ON_RADIO_OFF,
|
||||||
|
dcTracker.getStateInString(), dcTracker.getAnyDataEnabled() ? 1 : 0);
|
||||||
|
}
|
||||||
// If it's on and available and we want it off gracefully
|
// If it's on and available and we want it off gracefully
|
||||||
powerOffRadioSafely();
|
powerOffRadioSafely();
|
||||||
} // Otherwise, we're in the desired state
|
} // Otherwise, we're in the desired state
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void powerOffRadioSafely() {
|
protected void powerOffRadioSafely() {
|
||||||
// Cleanup all connections
|
// clean data connection
|
||||||
DataConnectionTracker dcTracker = phone.mDataConnection;
|
DataConnectionTracker dcTracker = phone.mDataConnection;
|
||||||
Message msg = dcTracker.obtainMessage(DataConnectionTracker.EVENT_CLEAN_UP_ALL_CONNECTIONS);
|
Message msg = dcTracker.obtainMessage(DataConnectionTracker.EVENT_CLEAN_UP_CONNECTION);
|
||||||
|
msg.arg1 = 1; // tearDown is true
|
||||||
|
msg.obj = GSMPhone.REASON_RADIO_TURNED_OFF;
|
||||||
dcTracker.sendMessage(msg);
|
dcTracker.sendMessage(msg);
|
||||||
|
|
||||||
// poll data state up to 15 times, with a 100ms delay
|
// poll data state up to 15 times, with a 100ms delay
|
||||||
// totaling 1.5 sec. Normal data disable action will finish in 100ms.
|
// totaling 1.5 sec. Normal data disable action will finish in 100ms.
|
||||||
for (int i = 0; i < MAX_NUM_DATA_STATE_READS; i++) {
|
for (int i = 0; i < MAX_NUM_DATA_STATE_READS; i++) {
|
||||||
|
if (dcTracker.getState() != DataConnectionTracker.State.CONNECTED
|
||||||
|
&& dcTracker.getState() != DataConnectionTracker.State.DISCONNECTING) {
|
||||||
|
Log.d(LOG_TAG, "Data shutdown complete.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
SystemClock.sleep(DATA_STATE_POLL_SLEEP_MS);
|
SystemClock.sleep(DATA_STATE_POLL_SLEEP_MS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1063,7 +1073,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (hasNetworkTypeChanged) {
|
if (hasNetworkTypeChanged) {
|
||||||
phone.notifyDataConnection(Phone.REASON_NW_TYPE_CHANGED, Phone.APN_TYPE_ALL);
|
phone.notifyDataConnection();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasRoamingOn) {
|
if (hasRoamingOn) {
|
||||||
@ -1391,15 +1401,11 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
|
|||||||
return gprsState;
|
return gprsState;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getCurrentDataConnectionState() {
|
|
||||||
return gprsState;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return true if phone is camping on a technology (eg UMTS)
|
* @return true if phone is camping on a technology (eg UMTS)
|
||||||
* that could support voice and data simultaneously.
|
* that could support voice and data simultaneously.
|
||||||
*/
|
*/
|
||||||
public boolean isConcurrentVoiceAndDataAllowed() {
|
boolean isConcurrentVoiceAndData() {
|
||||||
return (networkType >= DATA_ACCESS_UMTS);
|
return (networkType >= DATA_ACCESS_UMTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,7 +35,6 @@ import com.android.internal.telephony.IccUtils;
|
|||||||
import com.android.internal.telephony.IccVmFixedException;
|
import com.android.internal.telephony.IccVmFixedException;
|
||||||
import com.android.internal.telephony.IccVmNotSupportedException;
|
import com.android.internal.telephony.IccVmNotSupportedException;
|
||||||
import com.android.internal.telephony.MccTable;
|
import com.android.internal.telephony.MccTable;
|
||||||
import com.android.internal.telephony.PhoneBase;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
@ -166,7 +165,7 @@ public final class SIMRecords extends IccRecords {
|
|||||||
|
|
||||||
// ***** Constructor
|
// ***** Constructor
|
||||||
|
|
||||||
public SIMRecords(PhoneBase p) {
|
SIMRecords(GSMPhone p) {
|
||||||
super(p);
|
super(p);
|
||||||
|
|
||||||
adnCache = new AdnRecordCache(phone);
|
adnCache = new AdnRecordCache(phone);
|
||||||
@ -365,7 +364,7 @@ public final class SIMRecords extends IccRecords {
|
|||||||
|
|
||||||
countVoiceMessages = countWaiting;
|
countVoiceMessages = countWaiting;
|
||||||
|
|
||||||
phone.notifyMessageWaitingIndicator();
|
((GSMPhone) phone).notifyMessageWaitingIndicator();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (efMWIS != null) {
|
if (efMWIS != null) {
|
||||||
@ -414,7 +413,7 @@ public final class SIMRecords extends IccRecords {
|
|||||||
|
|
||||||
callForwardingEnabled = enable;
|
callForwardingEnabled = enable;
|
||||||
|
|
||||||
phone.notifyCallForwardingIndicator();
|
((GSMPhone) phone).notifyCallForwardingIndicator();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (mEfCfis != null) {
|
if (mEfCfis != null) {
|
||||||
@ -471,7 +470,7 @@ public final class SIMRecords extends IccRecords {
|
|||||||
/** Returns the 5 or 6 digit MCC/MNC of the operator that
|
/** Returns the 5 or 6 digit MCC/MNC of the operator that
|
||||||
* provided the SIM card. Returns null of SIM is not yet ready
|
* provided the SIM card. Returns null of SIM is not yet ready
|
||||||
*/
|
*/
|
||||||
public String getSIMOperatorNumeric() {
|
String getSIMOperatorNumeric() {
|
||||||
if (imsi == null || mncLength == UNINITIALIZED || mncLength == UNKNOWN) {
|
if (imsi == null || mncLength == UNINITIALIZED || mncLength == UNKNOWN) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -548,7 +547,7 @@ public final class SIMRecords extends IccRecords {
|
|||||||
// finally have both the imsi and the mncLength and can parse the imsi properly
|
// finally have both the imsi and the mncLength and can parse the imsi properly
|
||||||
MccTable.updateMccMncConfiguration(phone, imsi.substring(0, 3 + mncLength));
|
MccTable.updateMccMncConfiguration(phone, imsi.substring(0, 3 + mncLength));
|
||||||
}
|
}
|
||||||
phone.mSimCard.broadcastIccStateChangedIntent(
|
((GSMPhone) phone).mSimCard.broadcastIccStateChangedIntent(
|
||||||
SimCard.INTENT_VALUE_ICC_IMSI, null);
|
SimCard.INTENT_VALUE_ICC_IMSI, null);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -703,7 +702,7 @@ public final class SIMRecords extends IccRecords {
|
|||||||
countVoiceMessages = -1;
|
countVoiceMessages = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
phone.notifyMessageWaitingIndicator();
|
((GSMPhone) phone).notifyMessageWaitingIndicator();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVENT_GET_VOICE_MAIL_INDICATOR_CPHS_DONE:
|
case EVENT_GET_VOICE_MAIL_INDICATOR_CPHS_DONE:
|
||||||
@ -732,7 +731,7 @@ public final class SIMRecords extends IccRecords {
|
|||||||
countVoiceMessages = 0;
|
countVoiceMessages = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
phone.notifyMessageWaitingIndicator();
|
((GSMPhone) phone).notifyMessageWaitingIndicator();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -843,7 +842,7 @@ public final class SIMRecords extends IccRecords {
|
|||||||
callForwardingEnabled =
|
callForwardingEnabled =
|
||||||
((data[0] & CFF_LINE1_MASK) == CFF_UNCONDITIONAL_ACTIVE);
|
((data[0] & CFF_LINE1_MASK) == CFF_UNCONDITIONAL_ACTIVE);
|
||||||
|
|
||||||
phone.notifyCallForwardingIndicator();
|
((GSMPhone) phone).notifyCallForwardingIndicator();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1043,7 +1042,7 @@ public final class SIMRecords extends IccRecords {
|
|||||||
// Refer TS 51.011 Section 10.3.46 for the content description
|
// Refer TS 51.011 Section 10.3.46 for the content description
|
||||||
callForwardingEnabled = ((data[1] & 0x01) != 0);
|
callForwardingEnabled = ((data[1] & 0x01) != 0);
|
||||||
|
|
||||||
phone.notifyCallForwardingIndicator();
|
((GSMPhone) phone).notifyCallForwardingIndicator();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVENT_GET_CSP_CPHS_DONE:
|
case EVENT_GET_CSP_CPHS_DONE:
|
||||||
@ -1153,7 +1152,7 @@ public final class SIMRecords extends IccRecords {
|
|||||||
System.arraycopy(ba, 1, pdu, 0, n - 1);
|
System.arraycopy(ba, 1, pdu, 0, n - 1);
|
||||||
SmsMessage message = SmsMessage.createFromPdu(pdu);
|
SmsMessage message = SmsMessage.createFromPdu(pdu);
|
||||||
|
|
||||||
phone.mSMS.dispatchMessage(message);
|
((GSMPhone) phone).mSMS.dispatchMessage(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1179,7 +1178,7 @@ public final class SIMRecords extends IccRecords {
|
|||||||
System.arraycopy(ba, 1, pdu, 0, n - 1);
|
System.arraycopy(ba, 1, pdu, 0, n - 1);
|
||||||
SmsMessage message = SmsMessage.createFromPdu(pdu);
|
SmsMessage message = SmsMessage.createFromPdu(pdu);
|
||||||
|
|
||||||
phone.mSMS.dispatchMessage(message);
|
((GSMPhone) phone).mSMS.dispatchMessage(message);
|
||||||
|
|
||||||
// 3GPP TS 51.011 v5.0.0 (20011-12) 10.5.3
|
// 3GPP TS 51.011 v5.0.0 (20011-12) 10.5.3
|
||||||
// 1 == "received by MS from network; message read"
|
// 1 == "received by MS from network; message read"
|
||||||
@ -1229,7 +1228,7 @@ public final class SIMRecords extends IccRecords {
|
|||||||
|
|
||||||
recordsLoadedRegistrants.notifyRegistrants(
|
recordsLoadedRegistrants.notifyRegistrants(
|
||||||
new AsyncResult(null, null, null));
|
new AsyncResult(null, null, null));
|
||||||
phone.mSimCard.broadcastIccStateChangedIntent(
|
((GSMPhone) phone).mSimCard.broadcastIccStateChangedIntent(
|
||||||
SimCard.INTENT_VALUE_ICC_LOADED, null);
|
SimCard.INTENT_VALUE_ICC_LOADED, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1250,11 +1249,11 @@ public final class SIMRecords extends IccRecords {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onSimReady() {
|
private void onSimReady() {
|
||||||
/* broadcast intent SIM_READY here so that we can make sure
|
/* broadcast intent SIM_READY here so that we can make sure
|
||||||
READY is sent before IMSI ready
|
READY is sent before IMSI ready
|
||||||
*/
|
*/
|
||||||
phone.mSimCard.broadcastIccStateChangedIntent(
|
((GSMPhone) phone).mSimCard.broadcastIccStateChangedIntent(
|
||||||
SimCard.INTENT_VALUE_ICC_READY, null);
|
SimCard.INTENT_VALUE_ICC_READY, null);
|
||||||
|
|
||||||
fetchSimRecords();
|
fetchSimRecords();
|
||||||
|
@ -19,8 +19,6 @@ package com.android.internal.telephony.gsm;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.android.internal.telephony.IccCard;
|
import com.android.internal.telephony.IccCard;
|
||||||
import com.android.internal.telephony.PhoneBase;
|
|
||||||
import android.os.SystemProperties;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@hide}
|
* {@hide}
|
||||||
@ -36,21 +34,6 @@ public final class SimCard extends IccCard {
|
|||||||
updateStateProperty();
|
updateStateProperty();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* We have the Sim card for LTE on CDMA phone
|
|
||||||
*/
|
|
||||||
public SimCard(PhoneBase phone, String logTag, Boolean dbg) {
|
|
||||||
super(phone, logTag, dbg);
|
|
||||||
mPhone.mCM.registerForSIMLockedOrAbsent(mHandler, EVENT_ICC_LOCKED_OR_ABSENT, null);
|
|
||||||
mPhone.mCM.registerForOffOrNotAvailable(mHandler, EVENT_RADIO_OFF_OR_NOT_AVAILABLE, null);
|
|
||||||
mPhone.mCM.registerForSIMReady(mHandler, EVENT_ICC_READY, null);
|
|
||||||
updateStateProperty();
|
|
||||||
|
|
||||||
if(SystemProperties.getBoolean("ro.mot.lte_on_cdma", false)) {
|
|
||||||
mPhone.mCM.registerForNVReady(mHandler, EVENT_ICC_READY, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void dispose() {
|
public void dispose() {
|
||||||
//Unregister for all events
|
//Unregister for all events
|
||||||
|
@ -58,21 +58,21 @@ public class ApnSettingTest extends TestCase {
|
|||||||
testString = "Vodafone IT,web.omnitel.it,,,,,,,,,222,10,,DUN";
|
testString = "Vodafone IT,web.omnitel.it,,,,,,,,,222,10,,DUN";
|
||||||
expected_apn = new ApnSetting(
|
expected_apn = new ApnSetting(
|
||||||
-1, "22210", "Vodafone IT", "web.omnitel.it", "", "",
|
-1, "22210", "Vodafone IT", "web.omnitel.it", "", "",
|
||||||
"", "", "", "", "", 0, dunTypes, "IP", "IP", true, 0, 0);
|
"", "", "", "", "", 0, dunTypes, "IP", "IP");
|
||||||
assertApnSettingEqual(expected_apn, ApnSetting.fromString(testString));
|
assertApnSettingEqual(expected_apn, ApnSetting.fromString(testString));
|
||||||
|
|
||||||
// A v2 string.
|
// A v2 string.
|
||||||
testString = "[ApnSettingV2] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP";
|
testString = "[ApnSettingV2] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP";
|
||||||
expected_apn = new ApnSetting(
|
expected_apn = new ApnSetting(
|
||||||
-1, "12345", "Name", "apn", "", "",
|
-1, "12345", "Name", "apn", "", "",
|
||||||
"", "", "", "", "", 0, mmsTypes, "IPV6", "IP", true, 0, 0);
|
"", "", "", "", "", 0, mmsTypes, "IPV6", "IP");
|
||||||
assertApnSettingEqual(expected_apn, ApnSetting.fromString(testString));
|
assertApnSettingEqual(expected_apn, ApnSetting.fromString(testString));
|
||||||
|
|
||||||
// A v2 string with spaces.
|
// A v2 string with spaces.
|
||||||
testString = "[ApnSettingV2] Name,apn, ,,,,,,,,123,45,,mms|*,IPV4V6, IP";
|
testString = "[ApnSettingV2] Name,apn, ,,,,,,,,123,45,,mms|*,IPV4V6, IP";
|
||||||
expected_apn = new ApnSetting(
|
expected_apn = new ApnSetting(
|
||||||
-1, "12345", "Name", "apn", "", "",
|
-1, "12345", "Name", "apn", "", "",
|
||||||
"", "", "", "", "", 0, mmsTypes, "IPV4V6", "IP", true, 0, 0);
|
"", "", "", "", "", 0, mmsTypes, "IPV4V6", "IP");
|
||||||
assertApnSettingEqual(expected_apn, ApnSetting.fromString(testString));
|
assertApnSettingEqual(expected_apn, ApnSetting.fromString(testString));
|
||||||
|
|
||||||
// Return null if insufficient fields given.
|
// Return null if insufficient fields given.
|
||||||
@ -87,7 +87,7 @@ public class ApnSettingTest extends TestCase {
|
|||||||
String[] incorrectTypes = {"mms|*", "IPV6"};
|
String[] incorrectTypes = {"mms|*", "IPV6"};
|
||||||
expected_apn = new ApnSetting(
|
expected_apn = new ApnSetting(
|
||||||
-1, "12345", "Name", "apn", "", "",
|
-1, "12345", "Name", "apn", "", "",
|
||||||
"", "", "", "", "", 0, incorrectTypes, "IP", "IP", true, 0, 0);
|
"", "", "", "", "", 0, incorrectTypes, "IP", "IP");
|
||||||
assertApnSettingEqual(expected_apn, ApnSetting.fromString(testString));
|
assertApnSettingEqual(expected_apn, ApnSetting.fromString(testString));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ public class ApnSettingTest extends TestCase {
|
|||||||
ApnSetting apn = new ApnSetting(
|
ApnSetting apn = new ApnSetting(
|
||||||
99, "12345", "Name", "apn", "proxy", "port",
|
99, "12345", "Name", "apn", "proxy", "port",
|
||||||
"mmsc", "mmsproxy", "mmsport", "user", "password", 0,
|
"mmsc", "mmsproxy", "mmsport", "user", "password", 0,
|
||||||
types, "IPV4V6", "IP", true, 0, 0);
|
types, "IPV4V6", "IP");
|
||||||
String expected = "[ApnSettingV2] Name, 99, 12345, apn, proxy, " +
|
String expected = "[ApnSettingV2] Name, 99, 12345, apn, proxy, " +
|
||||||
"mmsc, mmsproxy, mmsport, port, 0, default | *, " +
|
"mmsc, mmsproxy, mmsport, port, 0, default | *, " +
|
||||||
"IPV4V6, IP";
|
"IPV4V6, IP";
|
||||||
|
Reference in New Issue
Block a user