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

Commit 96415fb6 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Pass more data through the recommendation request."

parents abb47f36 26a45e5b
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -26340,9 +26340,12 @@ package android.net {
  public final class RecommendationRequest implements android.os.Parcelable {
    ctor protected RecommendationRequest(android.os.Parcel);
    method public int describeContents();
    method public android.net.wifi.WifiConfiguration getCurrentSelectedConfig();
    method public android.net.NetworkCapabilities getRequiredCapabilities();
    method public android.net.wifi.WifiConfiguration[] getConnectableConfigs();
    method public android.net.wifi.WifiConfiguration getConnectedConfig();
    method public android.net.wifi.WifiConfiguration getDefaultWifiConfig();
    method public android.net.wifi.ScanResult[] getScanResults();
    method public void setConnectableConfigs(android.net.wifi.WifiConfiguration[]);
    method public void setConnectedConfig(android.net.wifi.WifiConfiguration);
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.net.RecommendationRequest> CREATOR;
  }
@@ -26350,8 +26353,9 @@ package android.net {
  public static final class RecommendationRequest.Builder {
    ctor public RecommendationRequest.Builder();
    method public android.net.RecommendationRequest build();
    method public android.net.RecommendationRequest.Builder setCurrentRecommendedWifiConfig(android.net.wifi.WifiConfiguration);
    method public android.net.RecommendationRequest.Builder setNetworkCapabilities(android.net.NetworkCapabilities);
    method public android.net.RecommendationRequest.Builder setConnectableConfigs(android.net.wifi.WifiConfiguration[]);
    method public android.net.RecommendationRequest.Builder setConnectedWifiConfig(android.net.wifi.WifiConfiguration);
    method public android.net.RecommendationRequest.Builder setDefaultWifiConfig(android.net.wifi.WifiConfiguration);
    method public android.net.RecommendationRequest.Builder setScanResults(android.net.wifi.ScanResult[]);
  }
+113 −29
Original line number Diff line number Diff line
@@ -34,8 +34,9 @@ import com.android.internal.annotations.VisibleForTesting;
@SystemApi
public final class RecommendationRequest implements Parcelable {
    private final ScanResult[] mScanResults;
    private final WifiConfiguration mCurrentSelectedConfig;
    private final NetworkCapabilities mRequiredCapabilities;
    private final WifiConfiguration mDefaultConfig;
    private WifiConfiguration mConnectedConfig;
    private WifiConfiguration[] mConnectableConfigs;

    /**
     * Builder class for constructing {@link RecommendationRequest} instances.
@@ -44,26 +45,62 @@ public final class RecommendationRequest implements Parcelable {
    @SystemApi
    public static final class Builder {
        private ScanResult[] mScanResults;
        private WifiConfiguration mCurrentConfig;
        private NetworkCapabilities mNetworkCapabilities;
        private WifiConfiguration mDefaultConfig;
        private WifiConfiguration mConnectedConfig;
        private WifiConfiguration[] mConnectableConfigs;

        /**
         * @param scanResults the array of {@link ScanResult}s the recommendation must be
         *                    constrained to i.e. if a non-null wifi config recommendation is
         *                    returned then it must be able to connect to one of the networks in
         *                    the results list.
         *
         *                    If the array is {@code null} or empty then there is no constraint.
         *
         * @return this
         */
        public Builder setScanResults(ScanResult[] scanResults) {
            mScanResults = scanResults;
            return this;
        }

        public Builder setCurrentRecommendedWifiConfig(WifiConfiguration config) {
            this.mCurrentConfig = config;
        /**
         * @param config the {@link WifiConfiguration} to return if no recommendation is available.
         * @return this
         */
        public Builder setDefaultWifiConfig(WifiConfiguration config) {
            this.mDefaultConfig = config;
            return this;
        }

        public Builder setNetworkCapabilities(NetworkCapabilities capabilities) {
            mNetworkCapabilities = capabilities;
        /**
         * @param config the {@link WifiConfiguration} of the connected network at the time the
         *               this request was made.
         * @return this
         */
        public Builder setConnectedWifiConfig(WifiConfiguration config) {
            this.mConnectedConfig = config;
            return this;
        }

        /**
         * @param connectableConfigs the set of saved {@link WifiConfiguration}s that can be
         *                           connected to based on the current set of {@link ScanResult}s.
         * @return this
         */
        public Builder setConnectableConfigs(WifiConfiguration[] connectableConfigs) {
            mConnectableConfigs = connectableConfigs;
            return this;
        }

        /**
         * @return a new {@link RecommendationRequest} instance
         */
        public RecommendationRequest build() {
            return new RecommendationRequest(mScanResults, mCurrentConfig, mNetworkCapabilities);
            return new RecommendationRequest(mScanResults,
                    mDefaultConfig,
                    mConnectedConfig,
                    mConnectableConfigs);
        }
    }

@@ -79,45 +116,80 @@ public final class RecommendationRequest implements Parcelable {
    }

    /**
     * @return The best recommendation at the time this {@code RecommendationRequest} instance
     *         was created. This may be null which indicates that no recommendation is available.
     * @return the {@link WifiConfiguration} to return if no recommendation is available.
     */
    public WifiConfiguration getCurrentSelectedConfig() {
        return mCurrentSelectedConfig;
    public WifiConfiguration getDefaultWifiConfig() {
        return mDefaultConfig;
    }

    /**
     *
     * @return The set of {@link NetworkCapabilities} the recommendation must be constrained to.
     *         This may be {@code null} which indicates that there are no constraints on the
     *         capabilities of the recommended network.
     * @return the {@link WifiConfiguration} of the connected network at the time the this request
     *         was made.
     */
    public WifiConfiguration getConnectedConfig() {
        return mConnectedConfig;
    }

    /**
     * @return the set of saved {@link WifiConfiguration}s that can be connected to based on the
     *         current set of {@link ScanResult}s.
     */
    public NetworkCapabilities getRequiredCapabilities() {
        return mRequiredCapabilities;
    public WifiConfiguration[] getConnectableConfigs() {
        return mConnectableConfigs;
    }

    /**
     * @param connectedConfig the {@link WifiConfiguration} of the connected network at the time
     *                        the this request was made.
     */
    public void setConnectedConfig(WifiConfiguration connectedConfig) {
        mConnectedConfig = connectedConfig;
    }

    /**
     * @param connectableConfigs the set of saved {@link WifiConfiguration}s that can be connected
     *                           to based on the current set of {@link ScanResult}s.
     */
    public void setConnectableConfigs(WifiConfiguration[] connectableConfigs) {
        mConnectableConfigs = connectableConfigs;
    }

    @VisibleForTesting
    RecommendationRequest(ScanResult[] scanResults,
            WifiConfiguration currentSelectedConfig,
            NetworkCapabilities requiredCapabilities) {
            WifiConfiguration defaultWifiConfig,
            WifiConfiguration connectedWifiConfig,
            WifiConfiguration[] connectableConfigs) {
        mScanResults = scanResults;
        mCurrentSelectedConfig = currentSelectedConfig;
        mRequiredCapabilities = requiredCapabilities;
        mDefaultConfig = defaultWifiConfig;
        mConnectedConfig = connectedWifiConfig;
        mConnectableConfigs = connectableConfigs;
    }

    protected RecommendationRequest(Parcel in) {
        final int resultCount = in.readInt();
        if (resultCount > 0) {
            mScanResults = new ScanResult[resultCount];
            final ClassLoader classLoader = ScanResult.class.getClassLoader();
            for (int i = 0; i < resultCount; i++) {
                mScanResults[i] = in.readParcelable(ScanResult.class.getClassLoader());
                mScanResults[i] = in.readParcelable(classLoader);
            }
        } else {
            mScanResults = null;
        }

        mCurrentSelectedConfig = in.readParcelable(WifiConfiguration.class.getClassLoader());
        mRequiredCapabilities = in.readParcelable(NetworkCapabilities.class.getClassLoader());
        mDefaultConfig = in.readParcelable(WifiConfiguration.class.getClassLoader());
        mConnectedConfig = in.readParcelable(WifiConfiguration.class.getClassLoader());

        final int configCount = in.readInt();
        if (configCount > 0) {
            mConnectableConfigs = new WifiConfiguration[configCount];
            final ClassLoader classLoader = WifiConfiguration.class.getClassLoader();
            for (int i = 0; i < configCount; i++) {
                mConnectableConfigs[i] = in.readParcelable(classLoader);
            }
        } else {
            mConnectableConfigs = null;
        }
    }

    @Override
@@ -135,8 +207,20 @@ public final class RecommendationRequest implements Parcelable {
        } else {
            dest.writeInt(0);
        }
        dest.writeParcelable(mCurrentSelectedConfig, flags);
        dest.writeParcelable(mRequiredCapabilities, flags);

        dest.writeParcelable(mDefaultConfig, flags);
        dest.writeParcelable(mConnectedConfig, flags);

        if (mConnectableConfigs != null) {
            dest.writeInt(mConnectableConfigs.length);
            for (int i = 0; i < mConnectableConfigs.length; i++) {
                dest.writeParcelable(mConnectableConfigs[i], flags);
            }
        } else {
            dest.writeInt(0);
        }


    }

    public static final Creator<RecommendationRequest> CREATOR =
+30 −16
Original line number Diff line number Diff line
@@ -7,8 +7,9 @@ import android.test.AndroidTestCase;

public class RecommendationRequestTest extends AndroidTestCase {
    private ScanResult[] mScanResults;
    private WifiConfiguration mConfiguration;
    private NetworkCapabilities mCapabilities;
    private WifiConfiguration mDefaultConfig;
    private WifiConfiguration mConnectedConfig;
    private WifiConfiguration[] mConnectableConfigs;

    @Override
    public void setUp() throws Exception {
@@ -29,45 +30,58 @@ public class RecommendationRequestTest extends AndroidTestCase {
                8 /*centerFreq0*/,
                9 /*centerFreq1*/,
                false /*is80211McRTTResponder*/);
        mConfiguration = new WifiConfiguration();
        mConfiguration.SSID = "RecommendationRequestTest";
        mCapabilities = new NetworkCapabilities()
                .removeCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED);
        mDefaultConfig = new WifiConfiguration();
        mDefaultConfig.SSID = "default_config";
        mConnectedConfig = new WifiConfiguration();
        mConnectedConfig.SSID = "connected_config";
        mConnectableConfigs = new WifiConfiguration[] {mDefaultConfig, mConnectedConfig};
    }

    public void testParceling() throws Exception {
        RecommendationRequest request = new RecommendationRequest.Builder()
                .setCurrentRecommendedWifiConfig(mConfiguration)
                .setDefaultWifiConfig(mDefaultConfig)
                .setScanResults(mScanResults)
                .setNetworkCapabilities(mCapabilities)
                .setConnectedWifiConfig(mConnectedConfig)
                .setConnectableConfigs(mConnectableConfigs)
                .build();

        RecommendationRequest parceled = passThroughParcel(request);
        assertEquals(request.getCurrentSelectedConfig().SSID,
                parceled.getCurrentSelectedConfig().SSID);
        assertEquals(request.getRequiredCapabilities(), parceled.getRequiredCapabilities());
        assertEquals(request.getDefaultWifiConfig().SSID,
                parceled.getDefaultWifiConfig().SSID);
        assertEquals(request.getConnectedConfig().SSID,
                parceled.getConnectedConfig().SSID);
        ScanResult[] parceledScanResults = parceled.getScanResults();
        assertNotNull(parceledScanResults);
        assertEquals(mScanResults.length, parceledScanResults.length);
        for (int i = 0; i < mScanResults.length; i++) {
            assertEquals(mScanResults[i].SSID, parceledScanResults[i].SSID);
        }
        WifiConfiguration[] parceledConfigs = parceled.getConnectableConfigs();
        for (int i = 0; i < parceledConfigs.length; i++) {
            assertEquals(mConnectableConfigs[i].SSID, parceledConfigs[i].SSID);
        }
    }

    public void testParceling_nullScanResults() throws Exception {
        RecommendationRequest request = new RecommendationRequest.Builder()
                .setCurrentRecommendedWifiConfig(mConfiguration)
                .setNetworkCapabilities(mCapabilities)
                .setDefaultWifiConfig(mDefaultConfig)
                .build();

        RecommendationRequest parceled = passThroughParcel(request);
        assertEquals(request.getCurrentSelectedConfig().SSID,
                parceled.getCurrentSelectedConfig().SSID);
        assertEquals(request.getRequiredCapabilities(), parceled.getRequiredCapabilities());
        ScanResult[] parceledScanResults = parceled.getScanResults();
        assertNull(parceledScanResults);
    }

    public void testParceling_nullWifiConfigArray() throws Exception {
        RecommendationRequest request = new RecommendationRequest.Builder()
                .setDefaultWifiConfig(mDefaultConfig)
                .build();

        RecommendationRequest parceled = passThroughParcel(request);
        WifiConfiguration[] parceledConfigs = parceled.getConnectableConfigs();
        assertNull(parceledConfigs);
    }

    private RecommendationRequest passThroughParcel(RecommendationRequest request) {
        Parcel p = Parcel.obtain();
        RecommendationRequest output = null;
+4 −4
Original line number Diff line number Diff line
@@ -582,9 +582,9 @@ public class NetworkScoreService extends INetworkScoreService.Stub {
                Log.d(TAG, "Returning the default network recommendation.");
            }

            if (request != null && request.getCurrentSelectedConfig() != null) {
            if (request != null && request.getDefaultWifiConfig() != null) {
                return RecommendationResult.createConnectRecommendation(
                        request.getCurrentSelectedConfig());
                        request.getDefaultWifiConfig());
            }
            return RecommendationResult.createDoNotConnectRecommendation();
        } finally {
@@ -887,9 +887,9 @@ public class NetworkScoreService extends INetworkScoreService.Stub {
        }

        final RecommendationResult result;
        if (request != null && request.getCurrentSelectedConfig() != null) {
        if (request != null && request.getDefaultWifiConfig() != null) {
            result = RecommendationResult.createConnectRecommendation(
                    request.getCurrentSelectedConfig());
                    request.getDefaultWifiConfig());
        } else {
            result = RecommendationResult.createDoNotConnectRecommendation();
        }
+4 −4
Original line number Diff line number Diff line
@@ -144,7 +144,7 @@ public class NetworkScoreServiceTest {
        configuration.SSID = "NetworkScoreServiceTest_SSID";
        configuration.BSSID = "NetworkScoreServiceTest_BSSID";
        mRecommendationRequest = new RecommendationRequest.Builder()
            .setCurrentRecommendedWifiConfig(configuration).build();
            .setDefaultWifiConfig(configuration).build();
        mOnResultListener = new OnResultListener();
        mRemoteCallback = new RemoteCallback(mOnResultListener);
        Settings.Global.putLong(mContentResolver,
@@ -240,7 +240,7 @@ public class NetworkScoreServiceTest {
        final RecommendationResult result =
                mNetworkScoreService.requestRecommendation(mRecommendationRequest);
        assertNotNull(result);
        assertEquals(mRecommendationRequest.getCurrentSelectedConfig(),
        assertEquals(mRecommendationRequest.getDefaultWifiConfig(),
                result.getWifiConfiguration());
    }

@@ -255,7 +255,7 @@ public class NetworkScoreServiceTest {
        final RecommendationResult result =
                mNetworkScoreService.requestRecommendation(mRecommendationRequest);
        assertNotNull(result);
        assertEquals(mRecommendationRequest.getCurrentSelectedConfig(),
        assertEquals(mRecommendationRequest.getDefaultWifiConfig(),
                result.getWifiConfiguration());
    }

@@ -327,7 +327,7 @@ public class NetworkScoreServiceTest {
        RecommendationResult result =
                mOnResultListener.receivedBundle.getParcelable(EXTRA_RECOMMENDATION_RESULT);
        assertTrue(result.hasRecommendation());
        assertEquals(mRecommendationRequest.getCurrentSelectedConfig().SSID,
        assertEquals(mRecommendationRequest.getDefaultWifiConfig().SSID,
                result.getWifiConfiguration().SSID);
    }