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

Commit 82da6ad3 authored by James Mattis's avatar James Mattis
Browse files

Implementation of setOemNetworkPreference

Main implementation of ConnectivityService.setOemNetworkPreference. This
covers the main requirements of this method including listener
functionality.

Bug: 176495594
Bug: 177101287
Bug: 176494815
Test: atest FrameworksNetTests
atest NetworkStackTests
atest FrameworksNetIntegrationTests
atest NetworkStackIntegrationTests
atest CtsNetTestCasesLatestSdk

Change-Id: I8d318ab07785e52dd84d6261fdea8f318dce9bc5
parent ca115f20
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
/**
 *
 * Copyright (C) 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.net;

/** @hide */
oneway interface IOnSetOemNetworkPreferenceListener {
    void onComplete();
}
+5 −5
Original line number Diff line number Diff line
@@ -31,9 +31,9 @@ import java.util.Objects;
/** @hide */
public final class OemNetworkPreferences implements Parcelable {
    /**
     * Use default behavior requesting networks. Equivalent to not setting any preference at all.
     * Default in case this value is not set. Using it will result in an error.
     */
    public static final int OEM_NETWORK_PREFERENCE_DEFAULT = 0;
    public static final int OEM_NETWORK_PREFERENCE_UNINITIALIZED = 0;

    /**
     * If an unmetered network is available, use it.
@@ -160,7 +160,7 @@ public final class OemNetworkPreferences implements Parcelable {

    /** @hide */
    @IntDef(prefix = "OEM_NETWORK_PREFERENCE_", value = {
            OEM_NETWORK_PREFERENCE_DEFAULT,
            OEM_NETWORK_PREFERENCE_UNINITIALIZED,
            OEM_NETWORK_PREFERENCE_OEM_PAID,
            OEM_NETWORK_PREFERENCE_OEM_PAID_NO_FALLBACK,
            OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY,
@@ -178,8 +178,8 @@ public final class OemNetworkPreferences implements Parcelable {
    @NonNull
    public static String oemNetworkPreferenceToString(@OemNetworkPreference int value) {
        switch (value) {
            case OEM_NETWORK_PREFERENCE_DEFAULT:
                return "OEM_NETWORK_PREFERENCE_DEFAULT";
            case OEM_NETWORK_PREFERENCE_UNINITIALIZED:
                return "OEM_NETWORK_PREFERENCE_UNINITIALIZED";
            case OEM_NETWORK_PREFERENCE_OEM_PAID:
                return "OEM_NETWORK_PREFERENCE_OEM_PAID";
            case OEM_NETWORK_PREFERENCE_OEM_PAID_NO_FALLBACK:
+51 −9
Original line number Diff line number Diff line
@@ -4886,15 +4886,6 @@ public class ConnectivityManager {
        }
    }

    private void setOemNetworkPreference(@NonNull final OemNetworkPreferences preference) {
        try {
            mService.setOemNetworkPreference(preference);
        } catch (RemoteException e) {
            Log.e(TAG, "setOemNetworkPreference() failed for preference: " + preference.toString());
            throw e.rethrowFromSystemServer();
        }
    }

    @NonNull
    private final List<QosCallbackConnection> mQosCallbackConnections = new ArrayList<>();

@@ -5096,4 +5087,55 @@ public class ConnectivityManager {
        sendRequestForNetwork(nc, networkCallback, 0, BACKGROUND_REQUEST,
                TYPE_NONE, handler == null ? getDefaultHandler() : new CallbackHandler(handler));
    }

    /**
     * Listener for {@link #setOemNetworkPreference(OemNetworkPreferences, Executor,
     * OnSetOemNetworkPreferenceListener)}.
     */
    private interface OnSetOemNetworkPreferenceListener {
        /**
         * Called when setOemNetworkPreference() successfully completes.
         */
        void onComplete();
    }

    /**
     * Used by automotive devices to set the network preferences used to direct traffic at an
     * application level as per the given OemNetworkPreferences. An example use-case would be an
     * automotive OEM wanting to provide connectivity for applications critical to the usage of a
     * vehicle via a particular network.
     *
     * Calling this will overwrite the existing preference.
     *
     * @param preference {@link OemNetworkPreferences} The application network preference to be set.
     * @param executor the executor on which listener will be invoked.
     * @param listener {@link OnSetOemNetworkPreferenceListener} optional listener used to
     *                  communicate completion of setOemNetworkPreference(). This will only be
     *                  called once upon successful completion of setOemNetworkPreference().
     * @throws IllegalArgumentException if {@code preference} contains invalid preference values.
     * @throws SecurityException if missing the appropriate permissions.
     * @throws UnsupportedOperationException if called on a non-automotive device.
     */
    private void setOemNetworkPreference(@NonNull final OemNetworkPreferences preference,
            @Nullable @CallbackExecutor final Executor executor,
            @Nullable final OnSetOemNetworkPreferenceListener listener) {
        Objects.requireNonNull(preference, "OemNetworkPreferences must be non-null");
        if (null != listener) {
            Objects.requireNonNull(executor, "Executor must be non-null");
        }
        final IOnSetOemNetworkPreferenceListener listenerInternal = listener == null ? null :
                new IOnSetOemNetworkPreferenceListener.Stub() {
                    @Override
                    public void onComplete() {
                        executor.execute(listener::onComplete);
                    }
        };

        try {
            mService.setOemNetworkPreference(preference, listenerInternal);
        } catch (RemoteException e) {
            Log.e(TAG, "setOemNetworkPreference() failed for preference: " + preference.toString());
            throw e.rethrowFromSystemServer();
        }
    }
}
+3 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.app.PendingIntent;
import android.net.ConnectionInfo;
import android.net.ConnectivityDiagnosticsManager;
import android.net.IConnectivityDiagnosticsCallback;
import android.net.IOnSetOemNetworkPreferenceListener;
import android.net.IQosCallback;
import android.net.ISocketKeepaliveCallback;
import android.net.LinkProperties;
@@ -245,5 +246,6 @@ interface IConnectivityManager
    void registerQosSocketCallback(in QosSocketInfo socketInfo, in IQosCallback callback);
    void unregisterQosCallback(in IQosCallback callback);

    void setOemNetworkPreference(in OemNetworkPreferences preference);
    void setOemNetworkPreference(in OemNetworkPreferences preference,
            in IOnSetOemNetworkPreferenceListener listener);
}
+347 −41

File changed.

Preview size limit exceeded, changes collapsed.

Loading