Merge "Define VcnTransportInfo." am: 698188edad

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1548434

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I63ea82f485ab4b27c15b9620e7d46dc43e1dd876
This commit is contained in:
Cody Kesting
2021-01-15 16:34:58 +00:00
committed by Automerger Merge Worker
2 changed files with 196 additions and 0 deletions

View File

@@ -0,0 +1,125 @@
/*
* 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.vcn;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.net.TransportInfo;
import android.net.wifi.WifiInfo;
import android.os.Parcel;
import android.os.Parcelable;
import android.telephony.SubscriptionManager;
import java.util.Objects;
/**
* VcnTransportInfo contains information about the VCN's underlying transports for SysUi.
*
* <p>Presence of this class in the NetworkCapabilities.TransportInfo implies that the network is a
* VCN.
*
* <p>VcnTransportInfo must exist on top of either an underlying Wifi or Cellular Network. If the
* underlying Network is WiFi, the subId will be {@link
* SubscriptionManager#INVALID_SUBSCRIPTION_ID}. If the underlying Network is Cellular, the WifiInfo
* will be {@code null}.
*
* @hide
*/
public class VcnTransportInfo implements TransportInfo, Parcelable {
@Nullable private final WifiInfo mWifiInfo;
private final int mSubId;
public VcnTransportInfo(@NonNull WifiInfo wifiInfo) {
this(wifiInfo, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
}
public VcnTransportInfo(int subId) {
this(null /* wifiInfo */, subId);
}
private VcnTransportInfo(@Nullable WifiInfo wifiInfo, int subId) {
if (wifiInfo == null && subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
throw new IllegalArgumentException(
"VcnTransportInfo requires either non-null WifiInfo or valid subId");
}
mWifiInfo = wifiInfo;
mSubId = subId;
}
/**
* Get the {@link WifiInfo} for this VcnTransportInfo.
*
* <p>If the underlying Network for the associated VCN is Cellular, returns null.
*
* @return the WifiInfo if there is an underlying WiFi connection, else null.
*/
@Nullable
public WifiInfo getWifiInfo() {
return mWifiInfo;
}
/**
* Get the subId for the VCN Network associated with this VcnTransportInfo.
*
* <p>If the underlying Network for the associated VCN is WiFi, returns {@link
* SubscriptionManager#INVALID_SUBSCRIPTION_ID}.
*
* @return the Subscription ID if a cellular underlying Network is present, else {@link
* android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID}.
*/
public int getSubId() {
return mSubId;
}
@Override
public int hashCode() {
return Objects.hash(mWifiInfo, mSubId);
}
@Override
public boolean equals(Object o) {
if (!(o instanceof VcnTransportInfo)) return false;
final VcnTransportInfo that = (VcnTransportInfo) o;
return Objects.equals(mWifiInfo, that.mWifiInfo) && mSubId == that.mSubId;
}
/** {@inheritDoc} */
@Override
public int describeContents() {
return 0;
}
/** {@inheritDoc} */
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {}
/** Implement the Parcelable interface */
public static final @NonNull Creator<VcnTransportInfo> CREATOR =
new Creator<VcnTransportInfo>() {
public VcnTransportInfo createFromParcel(Parcel in) {
// return null instead of a default VcnTransportInfo to avoid leaking
// information about this being a VCN Network (instead of macro cellular, etc)
return null;
}
public VcnTransportInfo[] newArray(int size) {
return new VcnTransportInfo[size];
}
};
}

View File

@@ -0,0 +1,71 @@
/*
* 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.vcn;
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNull;
import android.net.wifi.WifiInfo;
import android.os.Parcel;
import org.junit.Test;
public class VcnTransportInfoTest {
private static final int SUB_ID = 1;
private static final int NETWORK_ID = 5;
private static final WifiInfo WIFI_INFO =
new WifiInfo.Builder().setNetworkId(NETWORK_ID).build();
private static final VcnTransportInfo CELL_UNDERLYING_INFO = new VcnTransportInfo(SUB_ID);
private static final VcnTransportInfo WIFI_UNDERLYING_INFO = new VcnTransportInfo(WIFI_INFO);
@Test
public void testGetWifiInfo() {
assertEquals(WIFI_INFO, WIFI_UNDERLYING_INFO.getWifiInfo());
assertNull(CELL_UNDERLYING_INFO.getWifiInfo());
}
@Test
public void testGetSubId() {
assertEquals(SUB_ID, CELL_UNDERLYING_INFO.getSubId());
assertEquals(INVALID_SUBSCRIPTION_ID, WIFI_UNDERLYING_INFO.getSubId());
}
@Test
public void testEquals() {
assertEquals(CELL_UNDERLYING_INFO, CELL_UNDERLYING_INFO);
assertEquals(WIFI_UNDERLYING_INFO, WIFI_UNDERLYING_INFO);
assertNotEquals(CELL_UNDERLYING_INFO, WIFI_UNDERLYING_INFO);
}
@Test
public void testParcelUnparcel() {
verifyParcelingIsNull(CELL_UNDERLYING_INFO);
verifyParcelingIsNull(WIFI_UNDERLYING_INFO);
}
private void verifyParcelingIsNull(VcnTransportInfo vcnTransportInfo) {
Parcel parcel = Parcel.obtain();
vcnTransportInfo.writeToParcel(parcel, 0 /* flags */);
assertNull(VcnTransportInfo.CREATOR.createFromParcel(parcel));
}
}