Get resource based on subId for multi-SIM
The resource loading is done based on the last SIM to come up which is not a deterministic design. Thus, update the way to get the resource based on the subId. Test: atest FrameworksNetTests Test: manually test with avoid bad wifi feature supported sim Bug: 138956509 Change-Id: Ib5b085d97103889600773d269e03b939c29ca47d Merged-In: Ib5b085d97103889600773d269e03b939c29ca47d (cherry picked from commit 5e994ea02c7a820543f3726186240548676f4b4e)
This commit is contained in:
@@ -16,29 +16,32 @@
|
||||
|
||||
package android.net.util;
|
||||
|
||||
import static android.provider.Settings.Global.NETWORK_AVOID_BAD_WIFI;
|
||||
import static android.provider.Settings.Global.NETWORK_METERED_MULTIPATH_PREFERENCE;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.res.Resources;
|
||||
import android.database.ContentObserver;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.os.UserHandle;
|
||||
import android.provider.Settings;
|
||||
import android.telephony.PhoneStateListener;
|
||||
import android.telephony.SubscriptionManager;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.util.Slog;
|
||||
|
||||
import com.android.internal.R;
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.R;
|
||||
|
||||
import static android.provider.Settings.Global.NETWORK_AVOID_BAD_WIFI;
|
||||
import static android.provider.Settings.Global.NETWORK_METERED_MULTIPATH_PREFERENCE;
|
||||
|
||||
/**
|
||||
* A class to encapsulate management of the "Smart Networking" capability of
|
||||
* avoiding bad Wi-Fi when, for example upstream connectivity is lost or
|
||||
@@ -69,6 +72,7 @@ public class MultinetworkPolicyTracker {
|
||||
|
||||
private volatile boolean mAvoidBadWifi = true;
|
||||
private volatile int mMeteredMultipathPreference;
|
||||
private int mActiveSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
||||
|
||||
public MultinetworkPolicyTracker(Context ctx, Handler handler) {
|
||||
this(ctx, handler, null);
|
||||
@@ -95,6 +99,14 @@ public class MultinetworkPolicyTracker {
|
||||
}
|
||||
};
|
||||
|
||||
TelephonyManager.from(ctx).listen(new PhoneStateListener() {
|
||||
@Override
|
||||
public void onActiveDataSubscriptionIdChanged(int subId) {
|
||||
mActiveSubId = subId;
|
||||
reevaluate();
|
||||
}
|
||||
}, PhoneStateListener.LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE);
|
||||
|
||||
updateAvoidBadWifi();
|
||||
updateMeteredMultipathPreference();
|
||||
}
|
||||
@@ -131,7 +143,12 @@ public class MultinetworkPolicyTracker {
|
||||
* Whether the device or carrier configuration disables avoiding bad wifi by default.
|
||||
*/
|
||||
public boolean configRestrictsAvoidBadWifi() {
|
||||
return (mContext.getResources().getInteger(R.integer.config_networkAvoidBadWifi) == 0);
|
||||
return (getResourcesForActiveSubId().getInteger(R.integer.config_networkAvoidBadWifi) == 0);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private Resources getResourcesForActiveSubId() {
|
||||
return SubscriptionManager.getResourcesForSubId(mContext, mActiveSubId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user