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

Commit 984dc850 authored by Stuart Scott's avatar Stuart Scott
Browse files

Move reset network settings into framework.

bug: 16161518
Change-Id: Ic3b537ebd09d1b9723feff9dcc96e20fda05a94f
parent 607f1f09
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import android.telephony.SubscriptionManager;
import android.util.ArrayMap;
import android.util.Log;

import com.android.internal.net.VpnConfig;
import com.android.internal.telephony.ITelephony;
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.util.Protocol;
@@ -2446,6 +2447,38 @@ public class ConnectivityManager {
        } catch (RemoteException e) {}
    }

    /**
     * Resets all connectivity manager settings back to factory defaults.
     * @hide
     */
    public void factoryReset() {
        // Turn airplane mode off
        setAirplaneMode(false);

        // Untether
        for (String tether : getTetheredIfaces()) {
            untether(tether);
        }

        // Turn VPN off
        try {
            VpnConfig vpnConfig = mService.getVpnConfig();
            if (vpnConfig != null) {
                if (vpnConfig.legacy) {
                    mService.prepareVpn(VpnConfig.LEGACY_VPN, VpnConfig.LEGACY_VPN);
                } else {
                    // Prevent this app from initiating VPN connections in the future without
                    // user intervention.
                    mService.setVpnPackageAuthorization(false);

                    mService.prepareVpn(vpnConfig.user, VpnConfig.LEGACY_VPN);
                }
            }
        } catch (RemoteException e) {
            // Well, we tried
        }
    }

    /**
     * Binds the current process to {@code network}.  All Sockets created in the future
     * (and not explicitly bound via a bound SocketFactory from
+27 −0
Original line number Diff line number Diff line
@@ -179,6 +179,33 @@ public class NetworkPolicyManager {
        }
    }

    /**
     * Resets network policy settings back to factory defaults.
     *
     * @hide
     */
    public void factoryReset(String subscriber) {
        // Turn mobile data limit off
        NetworkPolicy[] policies = getNetworkPolicies();
        NetworkTemplate template = NetworkTemplate.buildTemplateMobileAll(subscriber);
        for (NetworkPolicy policy : policies) {
            if (policy.template.equals(template)) {
                policy.limitBytes = NetworkPolicy.LIMIT_DISABLED;
                policy.inferred = false;
                policy.clearSnooze();
            }
        }
        setNetworkPolicies(policies);

        // Turn restrict background data off
        setRestrictBackground(false);

        // Remove app's "restrict background data" flag
        for (int uid : getUidsWithPolicy(POLICY_REJECT_METERED_BACKGROUND)) {
            setUidPolicy(uid, NetworkPolicyManager.POLICY_NONE);
        }
    }

    /**
     * Compute the last cycle boundary for the given {@link NetworkPolicy}. For
     * example, if cycle day is 20th, and today is June 15th, it will return May
+46 −5
Original line number Diff line number Diff line
@@ -3316,11 +3316,11 @@ public class TelephonyManager {
     * @return the preferred network type, defined in RILConstants.java.
     * @hide
     */
    public int getPreferredNetworkType() {
    public int getPreferredNetworkType(int subId) {
        try {
            ITelephony telephony = getITelephony();
            if (telephony != null)
                return telephony.getPreferredNetworkType();
                return telephony.getPreferredNetworkType(subId);
        } catch (RemoteException ex) {
            Rlog.e(TAG, "getPreferredNetworkType RemoteException", ex);
        } catch (NullPointerException ex) {
@@ -3329,6 +3329,27 @@ public class TelephonyManager {
        return -1;
    }

    /**
     * Sets the network selection mode to automatic.
     * <p>
     * Requires Permission:
     *   {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE}
     * Or the calling app has carrier privileges. @see #hasCarrierPrivileges
     *
     * @hide
     */
    public void setNetworkSelectionModeAutomatic(int subId) {
        try {
            ITelephony telephony = getITelephony();
            if (telephony != null)
                telephony.setNetworkSelectionModeAutomatic(subId);
        } catch (RemoteException ex) {
            Rlog.e(TAG, "setNetworkSelectionModeAutomatic RemoteException", ex);
        } catch (NullPointerException ex) {
            Rlog.e(TAG, "setNetworkSelectionModeAutomatic NPE", ex);
        }
    }

    /**
     * Set the preferred network type.
     * Used for device configuration by some CDMA operators.
@@ -3337,15 +3358,16 @@ public class TelephonyManager {
     *   {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE}
     * Or the calling app has carrier privileges. @see #hasCarrierPrivileges
     *
     * @param subId the id of the subscription to set the preferred network type for.
     * @param networkType the preferred network type, defined in RILConstants.java.
     * @return true on success; false on any failure.
     * @hide
     */
    public boolean setPreferredNetworkType(int networkType) {
    public boolean setPreferredNetworkType(int subId, int networkType) {
        try {
            ITelephony telephony = getITelephony();
            if (telephony != null)
                return telephony.setPreferredNetworkType(networkType);
                return telephony.setPreferredNetworkType(subId, networkType);
        } catch (RemoteException ex) {
            Rlog.e(TAG, "setPreferredNetworkType RemoteException", ex);
        } catch (NullPointerException ex) {
@@ -3364,7 +3386,8 @@ public class TelephonyManager {
     * @return true on success; false on any failure.
     */
    public boolean setPreferredNetworkTypeToGlobal() {
        return setPreferredNetworkType(RILConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
        return setPreferredNetworkType(getDefaultSubscription(),
                RILConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
    }

    /**
@@ -4448,4 +4471,22 @@ public class TelephonyManager {

        return retval;
    }

    /**
     * Resets telephony manager settings back to factory defaults.
     *
     * @hide
     */
    public void factoryReset(int subId) {
        if (SubscriptionManager.isUsableSubIdValue(subId)) {
            // Enable data
            setDataEnabled(subId, true);
            // Set network selection mode to automatic
            setNetworkSelectionModeAutomatic(subId);
            // Set preferred mobile network type to the best available
            setPreferredNetworkType(subId, RILConstants.PREFERRED_NETWORK_MODE);
            // Turn off roaming
            SubscriptionManager.from(mContext).setDataRoaming(0, subId);
        }
    }
}
+11 −2
Original line number Diff line number Diff line
@@ -653,9 +653,10 @@ interface ITelephony {
     * Get the preferred network type.
     * Used for device configuration by some CDMA operators.
     *
     * @param subId the id of the subscription to query.
     * @return the preferred network type, defined in RILConstants.java.
     */
    int getPreferredNetworkType();
    int getPreferredNetworkType(int subId);

    /**
     * Check TETHER_DUN_REQUIRED and TETHER_DUN_APN settings, net.tethering.noprovisioning
@@ -666,14 +667,22 @@ interface ITelephony {
     */
    int getTetherApnRequired();

    /**
     * Set the network selection mode to automatic.
     *
     * @param subId the id of the subscription to update.
     */
    void setNetworkSelectionModeAutomatic(int subId);

    /**
     * Set the preferred network type.
     * Used for device configuration by some CDMA operators.
     *
     * @param subId the id of the subscription to update.
     * @param networkType the preferred network type, defined in RILConstants.java.
     * @return true on success; false on any failure.
     */
    boolean setPreferredNetworkType(int networkType);
    boolean setPreferredNetworkType(int subId, int networkType);

    /**
     * User enable/disable Mobile Data.
+21 −0
Original line number Diff line number Diff line
@@ -2621,4 +2621,25 @@ public class WifiManager {
        }
        return false;
    }

    /**
     * Resets all wifi manager settings back to factory defaults.
     *
     * @hide
     */
    public void factoryReset() {
        // Enable wifi
        setWifiEnabled(true);
        // Delete all Wifi SSIDs
        List<WifiConfiguration> networks = getConfiguredNetworks();
        if (networks != null) {
            for (WifiConfiguration config : networks) {
                removeNetwork(config.networkId);
            }
            saveConfiguration();
        }

        // Turn mobile hotspot off
        setWifiApEnabled(null, false);
    }
}