Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 29908052 authored by tumatanquang's avatar tumatanquang Committed by Nolen Johnson
Browse files

Add CLI commands to restrict Wi-Fi, Cellular, and VPN data

* The creates a CLI accessible version of per-app cellular data,
  VPN, and wifi restrictions.

Reference: https://review.lineageos.org/c/259455


Signed-off-by: default avatartumatanquang <baobaoxich@yahoo.com>
Change-Id: I005cacdd7be3e6311ef47465d3fca7fa847d3b7e
parent 3ec7bad8
Loading
Loading
Loading
Loading
+78 −0
Original line number Diff line number Diff line
@@ -19,6 +19,9 @@ package com.android.server.net;
import static android.net.NetworkPolicyManager.POLICY_ALLOW_METERED_BACKGROUND;
import static android.net.NetworkPolicyManager.POLICY_NONE;
import static android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND;
import static android.net.NetworkPolicyManager.POLICY_REJECT_WIFI;
import static android.net.NetworkPolicyManager.POLICY_REJECT_CELLULAR;
import static android.net.NetworkPolicyManager.POLICY_REJECT_VPN;

import android.content.Context;
import android.net.NetworkPolicyManager;
@@ -83,6 +86,12 @@ class NetworkPolicyManagerShellCommand extends ShellCommand {
        pw.println("    Adds a UID to the whitelist for restrict background usage.");
        pw.println("  add restrict-background-blacklist UID");
        pw.println("    Adds a UID to the blacklist for restrict background usage.");
        pw.println("  add restrict-wifi-data-blacklist UID");
        pw.println("    Adds a UID to the blacklist for restrict Wi-Fi data usage.");
        pw.println("  add restrict-mobile-data-blacklist UID");
        pw.println("    Adds a UID to the blacklist for restrict Mobile data usage.");
        pw.println("  add restrict-vpn-data-blacklist UID");
        pw.println("    Adds a UID to the blacklist for restrict VPN data usage.");
        pw.println("  add app-idle-whitelist UID");
        pw.println("    Adds a UID to the temporary app idle whitelist.");
        pw.println("  get restrict-background");
@@ -95,10 +104,22 @@ class NetworkPolicyManagerShellCommand extends ShellCommand {
        pw.println("    Lists UIDs that are whitelisted for restrict background usage.");
        pw.println("  list restrict-background-blacklist");
        pw.println("    Lists UIDs that are blacklisted for restrict background usage.");
        pw.println("  list restrict-wifi-data-blacklist");
        pw.println("    Lists UIDs that are blacklisted for restrict Wi-Fi data usage.");
        pw.println("  list restrict-mobile-data-blacklist");
        pw.println("    Lists UIDs that are blacklisted for restrict Mobile data usage.");
        pw.println("  list restrict-vpn-data-blacklist");
        pw.println("    Lists UIDs that are blacklisted for restrict VPN data usage.");
        pw.println("  remove restrict-background-whitelist UID");
        pw.println("    Removes a UID from the whitelist for restrict background usage.");
        pw.println("  remove restrict-background-blacklist UID");
        pw.println("    Removes a UID from the blacklist for restrict background usage.");
        pw.println("  remove restrict-wifi-data-blacklist UID");
        pw.println("    Removes a UID from the blacklist for restrict Wi-Fi data usage.");
        pw.println("  remove restrict-mobile-data-blacklist UID");
        pw.println("    Removes a UID from the blacklist for restrict Mobile data usage.");
        pw.println("  remove restrict-vpn-data-blacklist UID");
        pw.println("    Removes a UID from the blacklist for restrict VPN data usage.");
        pw.println("  remove app-idle-whitelist UID");
        pw.println("    Removes a UID from the temporary app idle whitelist.");
        pw.println("  set metered-network ID [undefined|true|false]");
@@ -161,6 +182,12 @@ class NetworkPolicyManagerShellCommand extends ShellCommand {
                return listRestrictBackgroundWhitelist();
            case "restrict-background-blacklist":
                return listRestrictBackgroundBlacklist();
            case "restrict-wifi-data-blacklist":
                return listRestrictWiFiDataBlacklist();
            case "restrict-mobile-data-blacklist":
                return listRestrictCellularDataBlacklist();
            case "restrict-vpn-data-blacklist":
                return listRestrictVpnDataBlacklist();
        }
        pw.println("Error: unknown list type '" + type + "'");
        return -1;
@@ -178,6 +205,12 @@ class NetworkPolicyManagerShellCommand extends ShellCommand {
                return addRestrictBackgroundWhitelist();
            case "restrict-background-blacklist":
                return addRestrictBackgroundBlacklist();
            case "restrict-wifi-data-blacklist":
                return addRestrictWiFiDataBlacklist();
            case "restrict-mobile-data-blacklist":
                return addRestrictCellularDataBlacklist();
            case "restrict-vpn-data-blacklist":
                return addRestrictVpnDataBlacklist();
            case "app-idle-whitelist":
                return addAppIdleWhitelist();
        }
@@ -197,6 +230,12 @@ class NetworkPolicyManagerShellCommand extends ShellCommand {
                return removeRestrictBackgroundWhitelist();
            case "restrict-background-blacklist":
                return removeRestrictBackgroundBlacklist();
            case "restrict-wifi-data-blacklist":
                return removeRestrictWiFiDataBlacklist();
            case "restrict-mobile-data-blacklist":
                return removeRestrictCellularDataBlacklist();
            case "restrict-vpn-data-blacklist":
                return removeRestrictVpnDataBlacklist();
            case "app-idle-whitelist":
                return removeAppIdleWhitelist();
        }
@@ -251,6 +290,21 @@ class NetworkPolicyManagerShellCommand extends ShellCommand {
                POLICY_REJECT_METERED_BACKGROUND);
    }

    private int listRestrictWiFiDataBlacklist() throws RemoteException {
        return listUidPolicies("Restrict Wi-Fi data blacklisted UIDs",
                POLICY_REJECT_WIFI);
    }

    private int listRestrictCellularDataBlacklist() throws RemoteException {
        return listUidPolicies("Restrict Mobile data blacklisted UIDs",
                POLICY_REJECT_CELLULAR);
    }

    private int listRestrictVpnDataBlacklist() throws RemoteException {
        return listUidPolicies("Restrict VPN data blacklisted UIDs",
                POLICY_REJECT_VPN);
    }

    private int listAppIdleWhitelist() throws RemoteException {
        final PrintWriter pw = getOutPrintWriter();
        final int[] uids = mInterface.getAppIdleWhitelist();
@@ -323,10 +377,34 @@ class NetworkPolicyManagerShellCommand extends ShellCommand {
        return setUidPolicy(POLICY_REJECT_METERED_BACKGROUND);
    }

    private int addRestrictWiFiDataBlacklist() throws RemoteException {
        return setUidPolicy(POLICY_REJECT_WIFI);
    }

    private int addRestrictCellularDataBlacklist() throws RemoteException {
        return setUidPolicy(POLICY_REJECT_CELLULAR);
    }

    private int addRestrictVpnDataBlacklist() throws RemoteException {
        return setUidPolicy(POLICY_REJECT_VPN);
    }

    private int removeRestrictBackgroundBlacklist() throws RemoteException {
        return resetUidPolicy("not blacklisted", POLICY_REJECT_METERED_BACKGROUND);
    }

    private int removeRestrictWiFiDataBlacklist() throws RemoteException {
        return resetUidPolicy("not blacklisted", POLICY_REJECT_WIFI);
    }

    private int removeRestrictCellularDataBlacklist() throws RemoteException {
        return resetUidPolicy("not blacklisted", POLICY_REJECT_CELLULAR);
    }

    private int removeRestrictVpnDataBlacklist() throws RemoteException {
        return resetUidPolicy("not blacklisted", POLICY_REJECT_VPN);
    }

    private int setAppIdleWhitelist(boolean isWhitelisted) {
        final int uid = getUidFromNextArg();
        if (uid < 0) {