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

Commit c3537810 authored by Tomasz Wasilczyk's avatar Tomasz Wasilczyk Committed by Gerrit Code Review
Browse files

Merge "Keep Vehicle internal network always up"

parents 191e2d3c ab315c59
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -6240,6 +6240,7 @@ package android.net {
    field public static final int NET_CAPABILITY_OEM_PAID = 22; // 0x16
    field public static final int NET_CAPABILITY_OEM_PRIVATE = 26; // 0x1a
    field public static final int NET_CAPABILITY_PARTIAL_CONNECTIVITY = 24; // 0x18
    field public static final int NET_CAPABILITY_VEHICLE_INTERNAL = 27; // 0x1b
  }
  public static final class NetworkCapabilities.Builder {
+22 −10
Original line number Diff line number Diff line
@@ -171,6 +171,7 @@ public final class NetworkCapabilities implements Parcelable {
            NET_CAPABILITY_PARTIAL_CONNECTIVITY,
            NET_CAPABILITY_TEMPORARILY_NOT_METERED,
            NET_CAPABILITY_OEM_PRIVATE,
            NET_CAPABILITY_VEHICLE_INTERNAL,
    })
    public @interface NetCapability { }

@@ -357,8 +358,17 @@ public final class NetworkCapabilities implements Parcelable {
    @SystemApi
    public static final int NET_CAPABILITY_OEM_PRIVATE = 26;

    /**
     * Indicates this is an internal vehicle network, meant to communicate with other
     * automotive systems.
     *
     * @hide
     */
    @SystemApi
    public static final int NET_CAPABILITY_VEHICLE_INTERNAL = 27;

    private static final int MIN_NET_CAPABILITY = NET_CAPABILITY_MMS;
    private static final int MAX_NET_CAPABILITY = NET_CAPABILITY_OEM_PRIVATE;
    private static final int MAX_NET_CAPABILITY = NET_CAPABILITY_VEHICLE_INTERNAL;

    /**
     * Network capabilities that are expected to be mutable, i.e., can change while a particular
@@ -401,15 +411,16 @@ public final class NetworkCapabilities implements Parcelable {
     */
    @VisibleForTesting
    /* package */ static final long RESTRICTED_CAPABILITIES =
            (1 << NET_CAPABILITY_CBS) |
            (1 << NET_CAPABILITY_DUN) |
            (1 << NET_CAPABILITY_EIMS) |
            (1 << NET_CAPABILITY_FOTA) |
            (1 << NET_CAPABILITY_IA) |
            (1 << NET_CAPABILITY_IMS) |
            (1 << NET_CAPABILITY_RCS) |
            (1 << NET_CAPABILITY_XCAP) |
            (1 << NET_CAPABILITY_MCX);
            (1 << NET_CAPABILITY_CBS)
            | (1 << NET_CAPABILITY_DUN)
            | (1 << NET_CAPABILITY_EIMS)
            | (1 << NET_CAPABILITY_FOTA)
            | (1 << NET_CAPABILITY_IA)
            | (1 << NET_CAPABILITY_IMS)
            | (1 << NET_CAPABILITY_MCX)
            | (1 << NET_CAPABILITY_RCS)
            | (1 << NET_CAPABILITY_VEHICLE_INTERNAL)
            | (1 << NET_CAPABILITY_XCAP);

    /**
     * Capabilities that force network to be restricted.
@@ -1939,6 +1950,7 @@ public final class NetworkCapabilities implements Parcelable {
            case NET_CAPABILITY_PARTIAL_CONNECTIVITY: return "PARTIAL_CONNECTIVITY";
            case NET_CAPABILITY_TEMPORARILY_NOT_METERED:    return "TEMPORARILY_NOT_METERED";
            case NET_CAPABILITY_OEM_PRIVATE:          return "OEM_PRIVATE";
            case NET_CAPABILITY_VEHICLE_INTERNAL:     return "NET_CAPABILITY_VEHICLE_INTERNAL";
            default:                                  return Integer.toString(capability);
        }
    }
+4 −0
Original line number Diff line number Diff line
@@ -455,6 +455,10 @@
        -->
    </string-array>

    <!-- Whether the internal vehicle network should remain active even when no
         apps requested it. -->
    <bool name="config_vehicleInternalNetworkAlwaysRequested">false</bool>

    <!-- Configuration of network interfaces that support WakeOnLAN -->
    <string-array translatable="false" name="config_wakeonlan_supported_interfaces">
        <!--
+1 −0
Original line number Diff line number Diff line
@@ -684,6 +684,7 @@
  <java-symbol type="string" name="config_ethernet_iface_regex" />
  <java-symbol type="string" name="not_checked" />
  <java-symbol type="array" name="config_ethernet_interfaces" />
  <java-symbol type="bool" name="config_vehicleInternalNetworkAlwaysRequested" />
  <java-symbol type="array" name="config_wakeonlan_supported_interfaces" />
  <java-symbol type="string" name="config_forceVoiceInteractionServicePackage" />
  <java-symbol type="string" name="config_mms_user_agent" />
+29 −1
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ import static android.system.OsConstants.IPPROTO_UDP;
import static java.util.Map.Entry;

import android.Manifest;
import android.annotation.BoolRes;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.AppOpsManager;
@@ -974,6 +975,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
        mDefaultWifiRequest = createDefaultInternetRequestForTransport(
                NetworkCapabilities.TRANSPORT_WIFI, NetworkRequest.Type.BACKGROUND_REQUEST);

        mDefaultVehicleRequest = createAlwaysOnRequestForCapability(
                NetworkCapabilities.NET_CAPABILITY_VEHICLE_INTERNAL,
                NetworkRequest.Type.BACKGROUND_REQUEST);

        mHandlerThread = mDeps.makeHandlerThread();
        mHandlerThread.start();
        mHandler = new InternalHandler(mHandlerThread.getLooper());
@@ -1173,6 +1178,15 @@ public class ConnectivityService extends IConnectivityManager.Stub
        return new NetworkRequest(netCap, TYPE_NONE, nextNetworkRequestId(), type);
    }

    private NetworkRequest createAlwaysOnRequestForCapability(int capability,
            NetworkRequest.Type type) {
        final NetworkCapabilities netCap = new NetworkCapabilities();
        netCap.clearAll();
        netCap.addCapability(capability);
        netCap.setRequestorUidAndPackageName(Process.myUid(), mContext.getPackageName());
        return new NetworkRequest(netCap, TYPE_NONE, nextNetworkRequestId(), type);
    }

    // Used only for testing.
    // TODO: Delete this and either:
    // 1. Give FakeSettingsProvider the ability to send settings change notifications (requires
@@ -1190,10 +1204,19 @@ public class ConnectivityService extends IConnectivityManager.Stub
        mHandler.sendEmptyMessage(EVENT_PRIVATE_DNS_SETTINGS_CHANGED);
    }

    private void handleAlwaysOnNetworkRequest(NetworkRequest networkRequest, @BoolRes int id) {
        final boolean enable = mContext.getResources().getBoolean(id);
        handleAlwaysOnNetworkRequest(networkRequest, enable);
    }

    private void handleAlwaysOnNetworkRequest(
            NetworkRequest networkRequest, String settingName, boolean defaultValue) {
        final boolean enable = toBool(Settings.Global.getInt(
                mContext.getContentResolver(), settingName, encodeBool(defaultValue)));
        handleAlwaysOnNetworkRequest(networkRequest, enable);
    }

    private void handleAlwaysOnNetworkRequest(NetworkRequest networkRequest, boolean enable) {
        final boolean isEnabled = (mNetworkRequests.get(networkRequest) != null);
        if (enable == isEnabled) {
            return;  // Nothing to do.
@@ -1213,6 +1236,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
                mDefaultMobileDataRequest, Settings.Global.MOBILE_DATA_ALWAYS_ON, true);
        handleAlwaysOnNetworkRequest(mDefaultWifiRequest, Settings.Global.WIFI_ALWAYS_REQUESTED,
                false);
        handleAlwaysOnNetworkRequest(mDefaultVehicleRequest,
                com.android.internal.R.bool.config_vehicleInternalNetworkAlwaysRequested);
    }

    private void registerSettingsCallbacks() {
@@ -5966,6 +5991,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
    // priority networks like ethernet are active.
    private final NetworkRequest mDefaultWifiRequest;

    // Request used to optionally keep vehicle internal network always active
    private final NetworkRequest mDefaultVehicleRequest;

    private NetworkAgentInfo getDefaultNetwork() {
        return mDefaultNetworkNai;
    }