Automated import from //branches/donutburger/...@140756,140756
This commit is contained in:
committed by
The Android Open Source Project
parent
7732336309
commit
9587f8696a
@@ -32,11 +32,15 @@ public class ApnSetting {
|
||||
String user;
|
||||
String password;
|
||||
String[] types;
|
||||
int id;
|
||||
String numeric;
|
||||
|
||||
|
||||
ApnSetting(String carrier, String apn, String proxy, String port,
|
||||
ApnSetting(int id, String numeric, String carrier, String apn, String proxy, String port,
|
||||
String mmsc, String mmsProxy, String mmsPort,
|
||||
String user, String password, String[] types) {
|
||||
this.id = id;
|
||||
this.numeric = numeric;
|
||||
this.carrier = carrier;
|
||||
this.apn = apn;
|
||||
this.proxy = proxy;
|
||||
@@ -52,6 +56,8 @@ public class ApnSetting {
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(carrier)
|
||||
.append(", ").append(id)
|
||||
.append(", ").append(numeric)
|
||||
.append(", ").append(apn)
|
||||
.append(", ").append(proxy)
|
||||
.append(", ").append(mmsc)
|
||||
|
||||
@@ -20,6 +20,7 @@ import android.app.AlarmManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
@@ -28,6 +29,7 @@ import android.database.ContentObserver;
|
||||
import android.database.Cursor;
|
||||
import android.net.NetworkInfo;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncResult;
|
||||
import android.os.Handler;
|
||||
import android.os.INetStatService;
|
||||
@@ -149,6 +151,8 @@ final class DataConnectionTracker extends Handler
|
||||
*/
|
||||
private ArrayList<ApnSetting> waitingApns = null;
|
||||
|
||||
private ApnSetting preferredApn = null;
|
||||
|
||||
/**
|
||||
* pdpList holds all the PDP connection, i.e. IP Link in GPRS
|
||||
*/
|
||||
@@ -255,6 +259,10 @@ final class DataConnectionTracker extends Handler
|
||||
static final int EVENT_PS_RESTRICT_ENABLED = 30;
|
||||
static final int EVENT_PS_RESTRICT_DISABLED = 31;
|
||||
|
||||
static final Uri PREFERAPN_URI = Uri.parse("content://telephony/carriers/preferapn");
|
||||
static final String APN_ID = "apn_id";
|
||||
private boolean canSetPreferApn = false;
|
||||
|
||||
BroadcastReceiver mIntentReceiver = new BroadcastReceiver ()
|
||||
{
|
||||
@Override
|
||||
@@ -787,6 +795,8 @@ final class DataConnectionTracker extends Handler
|
||||
String[] types = parseTypes(
|
||||
cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.TYPE)));
|
||||
ApnSetting apn = new ApnSetting(
|
||||
cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers._ID)),
|
||||
cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.NUMERIC)),
|
||||
cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.NAME)),
|
||||
cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.APN)),
|
||||
cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.PROXY)),
|
||||
@@ -1459,6 +1469,11 @@ final class DataConnectionTracker extends Handler
|
||||
}
|
||||
if (isApnTypeActive(Phone.APN_TYPE_DEFAULT)) {
|
||||
SystemProperties.set("gsm.defaultpdpcontext.active", "true");
|
||||
if (canSetPreferApn && preferredApn == null) {
|
||||
Log.d(LOG_TAG, "PREFERED APN is null");
|
||||
preferredApn = mActiveApn;
|
||||
setPreferredApn(preferredApn.id);
|
||||
}
|
||||
} else {
|
||||
SystemProperties.set("gsm.defaultpdpcontext.active", "false");
|
||||
}
|
||||
@@ -1679,6 +1694,13 @@ final class DataConnectionTracker extends Handler
|
||||
if (allApns.isEmpty()) {
|
||||
if (DBG) log("No APN found for carrier: " + operator);
|
||||
notifyNoData(PdpConnection.PdpFailCause.BAD_APN);
|
||||
} else {
|
||||
preferredApn = getPreferredApn();
|
||||
Log.d(LOG_TAG, "Get PreferredAPN");
|
||||
if (preferredApn != null && !preferredApn.numeric.equals(operator)) {
|
||||
preferredApn = null;
|
||||
setPreferredApn(-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1699,6 +1721,22 @@ final class DataConnectionTracker extends Handler
|
||||
*/
|
||||
private ArrayList<ApnSetting> buildWaitingApns() {
|
||||
ArrayList<ApnSetting> apnList = new ArrayList<ApnSetting>();
|
||||
String operator = phone.mSIMRecords.getSIMOperatorNumeric();
|
||||
|
||||
if (mRequestedApnType.equals(Phone.APN_TYPE_DEFAULT)) {
|
||||
if (canSetPreferApn && preferredApn != null) {
|
||||
Log.i(LOG_TAG, "Preferred APN:" + operator + ":"
|
||||
+ preferredApn.numeric + ":" + preferredApn);
|
||||
if (preferredApn.numeric.equals(operator)) {
|
||||
Log.i(LOG_TAG, "Waiting APN set to preferred APN");
|
||||
apnList.add(preferredApn);
|
||||
return apnList;
|
||||
} else {
|
||||
setPreferredApn(-1);
|
||||
preferredApn = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (allApns != null) {
|
||||
for (ApnSetting apn : allApns) {
|
||||
@@ -1745,4 +1783,53 @@ final class DataConnectionTracker extends Handler
|
||||
reconnectAfterFail(cause, reason);
|
||||
}
|
||||
}
|
||||
|
||||
private void setPreferredApn(int pos) {
|
||||
if (!canSetPreferApn) {
|
||||
return;
|
||||
}
|
||||
|
||||
ContentResolver resolver = phone.getContext().getContentResolver();
|
||||
resolver.delete(PREFERAPN_URI, null, null);
|
||||
|
||||
if (pos >= 0) {
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(APN_ID, pos);
|
||||
resolver.insert(PREFERAPN_URI, values);
|
||||
}
|
||||
}
|
||||
|
||||
private ApnSetting getPreferredApn() {
|
||||
if (allApns.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Cursor cursor = phone.getContext().getContentResolver().query(
|
||||
PREFERAPN_URI, new String[] { "_id", "name", "apn" },
|
||||
null, null, Telephony.Carriers.DEFAULT_SORT_ORDER);
|
||||
|
||||
if (cursor != null) {
|
||||
canSetPreferApn = true;
|
||||
} else {
|
||||
canSetPreferApn = false;
|
||||
}
|
||||
|
||||
if (canSetPreferApn && cursor.getCount() > 0) {
|
||||
int pos;
|
||||
cursor.moveToFirst();
|
||||
pos = cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers._ID));
|
||||
for(ApnSetting p:allApns) {
|
||||
if (p.id == pos) {
|
||||
cursor.close();
|
||||
return p;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user