Add Restricted Mode settings observer to NetworkPolicyManagerService am: 8b6082b585

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1545866

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I8c42c4c0ac3dcf860d5daacaf2748ea951a9cade
This commit is contained in:
Patrick Rohr
2021-01-12 20:34:21 +00:00
committed by Automerger Merge Worker

View File

@@ -149,6 +149,7 @@ import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.UserInfo; import android.content.pm.UserInfo;
import android.content.res.Resources; import android.content.res.Resources;
import android.database.ContentObserver;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.ConnectivityManager.NetworkCallback; import android.net.ConnectivityManager.NetworkCallback;
import android.net.IConnectivityManager; import android.net.IConnectivityManager;
@@ -609,6 +610,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
@GuardedBy("mUidRulesFirstLock") @GuardedBy("mUidRulesFirstLock")
private final SparseBooleanArray mInternetPermissionMap = new SparseBooleanArray(); private final SparseBooleanArray mInternetPermissionMap = new SparseBooleanArray();
private RestrictedModeObserver mRestrictedModeObserver;
// TODO: keep allowlist of system-critical services that should never have // TODO: keep allowlist of system-critical services that should never have
// rules enforced, such as system, phone, and radio UIDs. // rules enforced, such as system, phone, and radio UIDs.
@@ -622,7 +625,35 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
int COUNT = IS_UID_NETWORKING_BLOCKED + 1; int COUNT = IS_UID_NETWORKING_BLOCKED + 1;
} }
public final StatLogger mStatLogger = new StatLogger(new String[] { private static class RestrictedModeObserver extends ContentObserver {
private final Context mContext;
private final RestrictedModeListener mListener;
RestrictedModeObserver(Context ctx, RestrictedModeListener listener) {
super(null);
mContext = ctx;
mListener = listener;
mContext.getContentResolver().registerContentObserver(
Settings.Global.getUriFor(Settings.Global.RESTRICTED_NETWORKING_MODE), false,
this);
}
public boolean isRestrictedModeEnabled() {
return Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.RESTRICTED_NETWORKING_MODE, 0) != 0;
}
@Override
public void onChange(boolean selfChange) {
mListener.onChange(isRestrictedModeEnabled());
}
public interface RestrictedModeListener {
void onChange(boolean enabled);
}
}
public final StatLogger mStatLogger = new StatLogger(new String[]{
"updateNetworkEnabledNL()", "updateNetworkEnabledNL()",
"isUidNetworkingBlocked()", "isUidNetworkingBlocked()",
}); });
@@ -797,9 +828,14 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
mRestrictPower = mPowerManagerInternal.getLowPowerState( mRestrictPower = mPowerManagerInternal.getLowPowerState(
ServiceType.NETWORK_FIREWALL).batterySaverEnabled; ServiceType.NETWORK_FIREWALL).batterySaverEnabled;
mRestrictedNetworkingMode = Settings.Global.getInt( mRestrictedModeObserver = new RestrictedModeObserver(mContext,
mContext.getContentResolver(), enabled -> {
Settings.Global.RESTRICTED_NETWORKING_MODE, 0) != 0; synchronized (mUidRulesFirstLock) {
mRestrictedNetworkingMode = enabled;
updateRestrictedModeAllowlistUL();
}
});
mRestrictedNetworkingMode = mRestrictedModeObserver.isRestrictedModeEnabled();
mSystemReady = true; mSystemReady = true;