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:
125
core/java/android/net/vcn/VcnTransportInfo.java
Normal file
125
core/java/android/net/vcn/VcnTransportInfo.java
Normal 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];
|
||||
}
|
||||
};
|
||||
}
|
||||
71
tests/vcn/java/android/net/vcn/VcnTransportInfoTest.java
Normal file
71
tests/vcn/java/android/net/vcn/VcnTransportInfoTest.java
Normal 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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user