am 0727a865: Merge "Add network condition reporting." into gingerbread
Merge commit '0727a865d83b944c2fecc0bf1228a36976fe5300' into gingerbread-plus-aosp * commit '0727a865d83b944c2fecc0bf1228a36976fe5300': Add network condition reporting.
This commit is contained in:
@@ -105,6 +105,14 @@ public class ConnectivityManager
|
||||
* it with {@link android.content.Intent#getStringExtra(String)}.
|
||||
*/
|
||||
public static final String EXTRA_EXTRA_INFO = "extraInfo";
|
||||
/**
|
||||
* The lookup key for an int that provides information about
|
||||
* our connection to the internet at large. 0 indicates no connection,
|
||||
* 100 indicates a great connection. Retrieve it with
|
||||
* {@link android.content.Intent@getIntExtra(String)}.
|
||||
* {@hide}
|
||||
*/
|
||||
public static final String EXTRA_INET_CONDITION = "inetCondition";
|
||||
|
||||
/**
|
||||
* Broadcast Action: The setting for background data usage has changed
|
||||
@@ -548,5 +556,17 @@ public class ConnectivityManager
|
||||
} catch (RemoteException e) {
|
||||
return TETHER_ERROR_SERVICE_UNAVAIL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param networkType The type of network you want to report on
|
||||
* @param percentage The quality of the connection 0 is bad, 100 is good
|
||||
* {@hide}
|
||||
*/
|
||||
public void reportInetCondition(int networkType, int percentage) {
|
||||
try {
|
||||
mService.reportInetCondition(networkType, percentage);
|
||||
} catch (RemoteException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,4 +74,6 @@ interface IConnectivityManager
|
||||
String[] getTetherableUsbRegexs();
|
||||
|
||||
String[] getTetherableWifiRegexs();
|
||||
|
||||
void reportInetCondition(int networkType, int percentage);
|
||||
}
|
||||
|
||||
@@ -92,6 +92,11 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
||||
private Context mContext;
|
||||
private int mNetworkPreference;
|
||||
private int mActiveDefaultNetwork = -1;
|
||||
// 0 is full bad, 100 is full good
|
||||
private int mDefaultInetCondition = 0;
|
||||
private int mDefaultInetConditionPublished = 0;
|
||||
private boolean mInetConditionChangeInFlight = false;
|
||||
private int mDefaultConnectionSequence = 0;
|
||||
|
||||
private int mNumDnsEntries;
|
||||
|
||||
@@ -1047,6 +1052,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
||||
intent.putExtra(ConnectivityManager.EXTRA_EXTRA_INFO,
|
||||
info.getExtraInfo());
|
||||
}
|
||||
intent.putExtra(ConnectivityManager.EXTRA_INET_CONDITION, mDefaultInetConditionPublished);
|
||||
sendStickyBroadcast(intent);
|
||||
}
|
||||
|
||||
@@ -1165,6 +1171,14 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
||||
}
|
||||
}
|
||||
mActiveDefaultNetwork = type;
|
||||
// this will cause us to come up initially as unconnected and switching
|
||||
// to connected after our normal pause unless somebody reports us as reall
|
||||
// disconnected
|
||||
mDefaultInetConditionPublished = 0;
|
||||
mDefaultConnectionSequence++;
|
||||
mInetConditionChangeInFlight = false;
|
||||
// Don't do this - if we never sign in stay, grey
|
||||
//reportNetworkCondition(mActiveDefaultNetwork, 100);
|
||||
}
|
||||
thisNet.setTeardownRequested(false);
|
||||
thisNet.updateNetworkSettings();
|
||||
@@ -1467,6 +1481,70 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
||||
FeatureUser u = (FeatureUser)msg.obj;
|
||||
u.expire();
|
||||
break;
|
||||
case NetworkStateTracker.EVENT_INET_CONDITION_CHANGE:
|
||||
if (DBG) {
|
||||
Slog.d(TAG, "Inet connectivity change, net=" +
|
||||
msg.arg1 + ", condition=" + msg.arg2 +
|
||||
",mActiveDefaultNetwork=" + mActiveDefaultNetwork);
|
||||
}
|
||||
if (mActiveDefaultNetwork == -1) {
|
||||
if (DBG) Slog.d(TAG, "no active default network - aborting");
|
||||
break;
|
||||
}
|
||||
if (mActiveDefaultNetwork != msg.arg1) {
|
||||
if (DBG) Slog.d(TAG, "given net not default - aborting");
|
||||
break;
|
||||
}
|
||||
mDefaultInetCondition = msg.arg2;
|
||||
int delay;
|
||||
if (mInetConditionChangeInFlight == false) {
|
||||
if (DBG) Slog.d(TAG, "starting a change hold");
|
||||
// setup a new hold to debounce this
|
||||
if (mDefaultInetCondition > 50) {
|
||||
delay = Settings.Secure.getInt(mContext.getContentResolver(),
|
||||
Settings.Secure.INET_CONDITION_DEBOUNCE_UP_DELAY, 500);
|
||||
} else {
|
||||
delay = Settings.Secure.getInt(mContext.getContentResolver(),
|
||||
Settings.Secure.INET_CONDITION_DEBOUNCE_DOWN_DELAY, 3000);
|
||||
}
|
||||
mInetConditionChangeInFlight = true;
|
||||
sendMessageDelayed(obtainMessage(
|
||||
NetworkStateTracker.EVENT_INET_CONDITION_HOLD_END,
|
||||
mActiveDefaultNetwork, mDefaultConnectionSequence), delay);
|
||||
} else {
|
||||
// we've set the new condition, when this hold ends that will get
|
||||
// picked up
|
||||
if (DBG) Slog.d(TAG, "currently in hold - not setting new end evt");
|
||||
}
|
||||
break;
|
||||
case NetworkStateTracker.EVENT_INET_CONDITION_HOLD_END:
|
||||
if (DBG) {
|
||||
Slog.d(TAG, "Inet hold end, net=" + msg.arg1 +
|
||||
", condition =" + mDefaultInetCondition +
|
||||
", published condition =" + mDefaultInetConditionPublished);
|
||||
}
|
||||
mInetConditionChangeInFlight = false;
|
||||
|
||||
if (mActiveDefaultNetwork == -1) {
|
||||
if (DBG) Slog.d(TAG, "no active default network - aborting");
|
||||
break;
|
||||
}
|
||||
if (mDefaultConnectionSequence != msg.arg2) {
|
||||
if (DBG) Slog.d(TAG, "event hold for obsolete network - aborting");
|
||||
break;
|
||||
}
|
||||
if (mDefaultInetConditionPublished == mDefaultInetCondition) {
|
||||
if (DBG) Slog.d(TAG, "no change in condition - aborting");
|
||||
break;
|
||||
}
|
||||
NetworkInfo networkInfo = mNetTrackers[mActiveDefaultNetwork].getNetworkInfo();
|
||||
if (networkInfo.isConnected() == false) {
|
||||
if (DBG) Slog.d(TAG, "default network not connected - aborting");
|
||||
break;
|
||||
}
|
||||
mDefaultInetConditionPublished = mDefaultInetCondition;
|
||||
sendConnectedBroadcast(networkInfo);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1550,4 +1628,15 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
||||
Settings.Secure.TETHER_SUPPORTED, defaultVal) != 0);
|
||||
return tetherEnabledInSettings && mTetheringConfigValid;
|
||||
}
|
||||
|
||||
// 100 percent is full good, 0 is full bad.
|
||||
public void reportInetCondition(int networkType, int percentage) {
|
||||
if (DBG) Slog.d(TAG, "reportNetworkCondition(" + networkType + ", " + percentage + ")");
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.STATUS_BAR,
|
||||
"ConnectivityService");
|
||||
|
||||
mHandler.sendMessage(mHandler.obtainMessage(
|
||||
NetworkStateTracker.EVENT_INET_CONDITION_CHANGE, networkType, percentage));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user