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

Commit 73bfb1d4 authored by Roshan Pius's avatar Roshan Pius Committed by Android (Google) Code Review
Browse files

Merge changes from topic "revert-13329427-revert-13274595-XTPTORCRLV-WLDUPFEJWD"

* changes:
  NetworkControllerWifiTest: Fix unit tests
  Revert "Revert "NetworkCapabilities: Embed location senstive Tra..."
parents 96f9d15f d9852d61
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -6911,6 +6911,7 @@ package android.net {
  }
  public final class NetworkCapabilities implements android.os.Parcelable {
    ctor public NetworkCapabilities(@Nullable android.net.NetworkCapabilities, boolean);
    method @NonNull public int[] getAdministratorUids();
    method @Nullable public String getSsid();
    method @NonNull public int[] getTransportTypes();
@@ -7133,6 +7134,11 @@ package android.net {
    field public static final int TAG_SYSTEM_IMPERSONATION_RANGE_START = -256; // 0xffffff00
  }
  public interface TransportInfo {
    method public default boolean hasLocationSensitiveFields();
    method @NonNull public default android.net.TransportInfo makeCopy(boolean);
  }
  public abstract class Uri implements java.lang.Comparable<android.net.Uri> android.os.Parcelable {
    method @NonNull public String toSafeString();
  }
+5 −2
Original line number Diff line number Diff line
@@ -408,7 +408,8 @@ public abstract class NetworkAgent {
            throw new IllegalArgumentException();
        }

        mInitialConfiguration = new InitialConfiguration(context, new NetworkCapabilities(nc),
        mInitialConfiguration = new InitialConfiguration(context,
                new NetworkCapabilities(nc, /* parcelLocationSensitiveFields */ true),
                new LinkProperties(lp), score, config, ni);
    }

@@ -818,7 +819,9 @@ public abstract class NetworkAgent {
        Objects.requireNonNull(networkCapabilities);
        mBandwidthUpdatePending.set(false);
        mLastBwRefreshTime = System.currentTimeMillis();
        final NetworkCapabilities nc = new NetworkCapabilities(networkCapabilities);
        final NetworkCapabilities nc =
                new NetworkCapabilities(networkCapabilities,
                        /* parcelLocationSensitiveFields */ true);
        queueOrSendMessage(reg -> reg.sendNetworkCapabilities(nc));
    }

+34 −1
Original line number Diff line number Diff line
@@ -76,12 +76,33 @@ public final class NetworkCapabilities implements Parcelable {
     */
    private String mRequestorPackageName;

    /**
     * Indicates whether parceling should preserve fields that are set based on permissions of
     * the process receiving the {@link NetworkCapabilities}.
     */
    private final boolean mParcelLocationSensitiveFields;

    public NetworkCapabilities() {
        mParcelLocationSensitiveFields = false;
        clearAll();
        mNetworkCapabilities = DEFAULT_CAPABILITIES;
    }

    public NetworkCapabilities(NetworkCapabilities nc) {
        this(nc, false /* parcelLocationSensitiveFields */);
    }

    /**
     * Make a copy of NetworkCapabilities.
     *
     * @param nc Original NetworkCapabilities
     * @param parcelLocationSensitiveFields Whether to parcel location sensitive data or not.
     * @hide
     */
    @SystemApi
    public NetworkCapabilities(
            @Nullable NetworkCapabilities nc, boolean parcelLocationSensitiveFields) {
        mParcelLocationSensitiveFields = parcelLocationSensitiveFields;
        if (nc != null) {
            set(nc);
        }
@@ -93,6 +114,12 @@ public final class NetworkCapabilities implements Parcelable {
     * @hide
     */
    public void clearAll() {
        // Ensures that the internal copies maintained by the connectivity stack does not set
        // this bit.
        if (mParcelLocationSensitiveFields) {
            throw new UnsupportedOperationException(
                    "Cannot clear NetworkCapabilities when parcelLocationSensitiveFields is set");
        }
        mNetworkCapabilities = mTransportTypes = mUnwantedNetworkCapabilities = 0;
        mLinkUpBandwidthKbps = mLinkDownBandwidthKbps = LINK_BANDWIDTH_UNSPECIFIED;
        mNetworkSpecifier = null;
@@ -109,6 +136,8 @@ public final class NetworkCapabilities implements Parcelable {

    /**
     * Set all contents of this object to the contents of a NetworkCapabilities.
     *
     * @param nc Original NetworkCapabilities
     * @hide
     */
    public void set(@NonNull NetworkCapabilities nc) {
@@ -117,7 +146,11 @@ public final class NetworkCapabilities implements Parcelable {
        mLinkUpBandwidthKbps = nc.mLinkUpBandwidthKbps;
        mLinkDownBandwidthKbps = nc.mLinkDownBandwidthKbps;
        mNetworkSpecifier = nc.mNetworkSpecifier;
        mTransportInfo = nc.mTransportInfo;
        if (nc.getTransportInfo() != null) {
            setTransportInfo(nc.getTransportInfo().makeCopy(mParcelLocationSensitiveFields));
        } else {
            setTransportInfo(null);
        }
        mSignalStrength = nc.mSignalStrength;
        setUids(nc.mUids); // Will make the defensive copy
        setAdministratorUids(nc.getAdministratorUids());
+38 −0
Original line number Diff line number Diff line
@@ -16,10 +16,48 @@

package android.net;

import android.annotation.NonNull;
import android.annotation.SystemApi;

/**
 * A container for transport-specific capabilities which is returned by
 * {@link NetworkCapabilities#getTransportInfo()}. Specific networks
 * may provide concrete implementations of this interface.
 * @see android.net.wifi.aware.WifiAwareNetworkInfo
 * @see android.net.wifi.WifiInfo
 */
public interface TransportInfo {

    /**
     * Create a copy of a {@link TransportInfo} that will preserve location sensitive fields that
     * were set based on the permissions of the process that originally received it.
     *
     * <p>By default {@link TransportInfo} does not preserve such fields during parceling, as
     * they should not be shared outside of the process that receives them without appropriate
     * checks.
     *
     * @param parcelLocationSensitiveFields Whether the location sensitive fields should be kept
     *                                      when parceling
     * @return Copy of this instance.
     * @hide
     */
    @SystemApi
    @NonNull
    default TransportInfo makeCopy(boolean parcelLocationSensitiveFields) {
        return this;
    }

    /**
     * Returns whether this TransportInfo type has location sensitive fields or not (helps
     * to determine whether to perform a location permission check or not before sending to
     * apps).
     *
     * @return {@code true} if this instance contains location sensitive info, {@code false}
     * otherwise.
     * @hide
     */
    @SystemApi
    default boolean hasLocationSensitiveFields() {
        return false;
    }
}
+7 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.testing.TestableLooper.RunWithLooper;

import com.android.systemui.statusbar.policy.NetworkController.IconState;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
@@ -34,6 +35,12 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
    private static final int MAX_RSSI = -55;
    private WifiInfo mWifiInfo = mock(WifiInfo.class);

    @Before
    public void setUp() throws Exception {
        super.setUp();
        when(mWifiInfo.makeCopy(anyBoolean())).thenReturn(mWifiInfo);
    }

    @Test
    public void testWifiIcon() {
        String testSsid = "Test SSID";
Loading