Merge "Run callbacks on ConnectivityService thread"
am: bef5d2165d
Change-Id: I7a8d035ec7453c5351eb2646c631c19964cb0f88
This commit is contained in:
@@ -64,7 +64,7 @@ public class MultinetworkPolicyTracker {
|
||||
|
||||
private final Context mContext;
|
||||
private final Handler mHandler;
|
||||
private final Runnable mReevaluateRunnable;
|
||||
private final Runnable mAvoidBadWifiCallback;
|
||||
private final List<Uri> mSettingsUris;
|
||||
private final ContentResolver mResolver;
|
||||
private final SettingObserver mSettingObserver;
|
||||
@@ -81,12 +81,7 @@ public class MultinetworkPolicyTracker {
|
||||
public MultinetworkPolicyTracker(Context ctx, Handler handler, Runnable avoidBadWifiCallback) {
|
||||
mContext = ctx;
|
||||
mHandler = handler;
|
||||
mReevaluateRunnable = () -> {
|
||||
if (updateAvoidBadWifi() && avoidBadWifiCallback != null) {
|
||||
avoidBadWifiCallback.run();
|
||||
}
|
||||
updateMeteredMultipathPreference();
|
||||
};
|
||||
mAvoidBadWifiCallback = avoidBadWifiCallback;
|
||||
mSettingsUris = Arrays.asList(
|
||||
Settings.Global.getUriFor(NETWORK_AVOID_BAD_WIFI),
|
||||
Settings.Global.getUriFor(NETWORK_METERED_MULTIPATH_PREFERENCE));
|
||||
@@ -95,15 +90,15 @@ public class MultinetworkPolicyTracker {
|
||||
mBroadcastReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
reevaluate();
|
||||
reevaluateInternal();
|
||||
}
|
||||
};
|
||||
|
||||
TelephonyManager.from(ctx).listen(new PhoneStateListener() {
|
||||
TelephonyManager.from(ctx).listen(new PhoneStateListener(handler.getLooper()) {
|
||||
@Override
|
||||
public void onActiveDataSubscriptionIdChanged(int subId) {
|
||||
mActiveSubId = subId;
|
||||
reevaluate();
|
||||
reevaluateInternal();
|
||||
}
|
||||
}, PhoneStateListener.LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE);
|
||||
|
||||
@@ -119,7 +114,7 @@ public class MultinetworkPolicyTracker {
|
||||
final IntentFilter intentFilter = new IntentFilter();
|
||||
intentFilter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
|
||||
mContext.registerReceiverAsUser(
|
||||
mBroadcastReceiver, UserHandle.ALL, intentFilter, null, null);
|
||||
mBroadcastReceiver, UserHandle.ALL, intentFilter, null, mHandler);
|
||||
|
||||
reevaluate();
|
||||
}
|
||||
@@ -164,7 +159,17 @@ public class MultinetworkPolicyTracker {
|
||||
|
||||
@VisibleForTesting
|
||||
public void reevaluate() {
|
||||
mHandler.post(mReevaluateRunnable);
|
||||
mHandler.post(this::reevaluateInternal);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reevaluate the settings. Must be called on the handler thread.
|
||||
*/
|
||||
private void reevaluateInternal() {
|
||||
if (updateAvoidBadWifi() && mAvoidBadWifiCallback != null) {
|
||||
mAvoidBadWifiCallback.run();
|
||||
}
|
||||
updateMeteredMultipathPreference();
|
||||
}
|
||||
|
||||
public boolean updateAvoidBadWifi() {
|
||||
|
||||
@@ -1102,7 +1102,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
mSettingsObserver = new SettingsObserver(mContext, mHandler);
|
||||
registerSettingsCallbacks();
|
||||
|
||||
final DataConnectionStats dataConnectionStats = new DataConnectionStats(mContext);
|
||||
final DataConnectionStats dataConnectionStats = new DataConnectionStats(mContext, mHandler);
|
||||
dataConnectionStats.startMonitoring();
|
||||
|
||||
mKeepaliveTracker = new KeepaliveTracker(mContext, mHandler);
|
||||
|
||||
@@ -21,6 +21,8 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.RemoteException;
|
||||
import android.telephony.PhoneStateListener;
|
||||
import android.telephony.ServiceState;
|
||||
@@ -39,15 +41,19 @@ public class DataConnectionStats extends BroadcastReceiver {
|
||||
|
||||
private final Context mContext;
|
||||
private final IBatteryStats mBatteryStats;
|
||||
private final Handler mListenerHandler;
|
||||
private final PhoneStateListener mPhoneStateListener;
|
||||
|
||||
private IccCardConstants.State mSimState = IccCardConstants.State.READY;
|
||||
private SignalStrength mSignalStrength;
|
||||
private ServiceState mServiceState;
|
||||
private int mDataState = TelephonyManager.DATA_DISCONNECTED;
|
||||
|
||||
public DataConnectionStats(Context context) {
|
||||
public DataConnectionStats(Context context, Handler listenerHandler) {
|
||||
mContext = context;
|
||||
mBatteryStats = BatteryStatsService.getService();
|
||||
mListenerHandler = listenerHandler;
|
||||
mPhoneStateListener = new PhoneStateListenerImpl(listenerHandler.getLooper());
|
||||
}
|
||||
|
||||
public void startMonitoring() {
|
||||
@@ -63,7 +69,7 @@ public class DataConnectionStats extends BroadcastReceiver {
|
||||
filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED);
|
||||
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
|
||||
filter.addAction(ConnectivityManager.INET_CONDITION_ACTION);
|
||||
mContext.registerReceiver(this, filter);
|
||||
mContext.registerReceiver(this, filter, null /* broadcastPermission */, mListenerHandler);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -128,7 +134,11 @@ public class DataConnectionStats extends BroadcastReceiver {
|
||||
&& mServiceState.getState() != ServiceState.STATE_POWER_OFF;
|
||||
}
|
||||
|
||||
private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
|
||||
private class PhoneStateListenerImpl extends PhoneStateListener {
|
||||
PhoneStateListenerImpl(Looper looper) {
|
||||
super(looper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
|
||||
mSignalStrength = signalStrength;
|
||||
|
||||
Reference in New Issue
Block a user