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
This commit is contained in:
James Mattis
2021-01-10 14:24:24 -08:00
parent 5cc3c631e5
commit 45d81845a4
5 changed files with 408 additions and 58 deletions

View File

@@ -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();
}
}
}

View File

@@ -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);
}