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

Commit ddfbe07e authored by Jeremy Joslin's avatar Jeremy Joslin Committed by android-build-merger
Browse files

Merge "Pass more data through the recommendation request."

am: 00514f1d

Change-Id: I97e11e876bcb7ccdb55a333b31f9970ae5edd001
parents 887ee2c3 00514f1d
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -25755,9 +25755,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;
  }
@@ -25765,8 +25768,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);
    }