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

Commit 4bb69be2 authored by Roshan Pius's avatar Roshan Pius
Browse files

WifiNetworkSuggestion: Don't store packageName/uid

The service will stamp the uid, package name of individual suggestions
when it creates its internal representation for each suggestion (i.e
ExtendedWifiNetworkSuggestion). This is to avoid using an @hide API
inside WifiNetworkSuggestion to stamp the uid/package name of the app
using a retrieved context.

Bug: 144102365
Test: atest android.net.wifi
Change-Id: I86651c76053b613d9eb9dc95ab51b07b11f23f16
parent d0f5475b
Loading
Loading
Loading
Loading
+8 −41
Original line number Diff line number Diff line
@@ -23,12 +23,10 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.app.ActivityThread;
import android.net.MacAddress;
import android.net.wifi.hotspot2.PasspointConfiguration;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.Process;
import android.telephony.TelephonyManager;
import android.text.TextUtils;

@@ -46,7 +44,6 @@ import java.util.Objects;
 * {@link WifiManager#addNetworkSuggestions(List)}.
 */
public final class WifiNetworkSuggestion implements Parcelable {

    /**
     * Builder used to create {@link WifiNetworkSuggestion} objects.
     */
@@ -563,9 +560,7 @@ public final class WifiNetworkSuggestion implements Parcelable {
                    mPasspointConfiguration,
                    mIsAppInteractionRequired,
                    mIsUserInteractionRequired,
                    mIsUserAllowed,
                    Process.myUid(),
                    ActivityThread.currentApplication().getApplicationContext().getOpPackageName());
                    mIsUserAllowed);
        }
    }

@@ -592,19 +587,6 @@ public final class WifiNetworkSuggestion implements Parcelable {
     * @hide
     */
    public final boolean isUserInteractionRequired;

    /**
     * The UID of the process initializing this network suggestion.
     * @hide
     */
    public final int suggestorUid;

    /**
     * The package name of the process initializing this network suggestion.
     * @hide
     */
    public final String suggestorPackageName;

    /**
     * Whether app share credential with the user, allow user use provided credential to
     * connect network manually.
@@ -619,8 +601,6 @@ public final class WifiNetworkSuggestion implements Parcelable {
        this.isAppInteractionRequired = false;
        this.isUserInteractionRequired = false;
        this.isUserAllowedToManuallyConnect = true;
        this.suggestorUid = -1;
        this.suggestorPackageName = null;
    }

    /** @hide */
@@ -628,18 +608,14 @@ public final class WifiNetworkSuggestion implements Parcelable {
                                 @Nullable PasspointConfiguration passpointConfiguration,
                                 boolean isAppInteractionRequired,
                                 boolean isUserInteractionRequired,
                                 boolean isUserAllowedToManuallyConnect,
                                 int suggestorUid, @NonNull String suggestorPackageName) {
                                 boolean isUserAllowedToManuallyConnect) {
        checkNotNull(networkConfiguration);
        checkNotNull(suggestorPackageName);
        this.wifiConfiguration = networkConfiguration;
        this.passpointConfiguration = passpointConfiguration;

        this.isAppInteractionRequired = isAppInteractionRequired;
        this.isUserInteractionRequired = isUserInteractionRequired;
        this.isUserAllowedToManuallyConnect = isUserAllowedToManuallyConnect;
        this.suggestorUid = suggestorUid;
        this.suggestorPackageName = suggestorPackageName;
    }

    public static final @NonNull Creator<WifiNetworkSuggestion> CREATOR =
@@ -651,9 +627,7 @@ public final class WifiNetworkSuggestion implements Parcelable {
                            in.readParcelable(null), // PasspointConfiguration
                            in.readBoolean(), // isAppInteractionRequired
                            in.readBoolean(), // isUserInteractionRequired
                            in.readBoolean(), // isSharedCredentialWithUser
                            in.readInt(), // suggestorUid
                            in.readString() // suggestorPackageName
                            in.readBoolean()  // isSharedCredentialWithUser
                    );
                }

@@ -675,15 +649,12 @@ public final class WifiNetworkSuggestion implements Parcelable {
        dest.writeBoolean(isAppInteractionRequired);
        dest.writeBoolean(isUserInteractionRequired);
        dest.writeBoolean(isUserAllowedToManuallyConnect);
        dest.writeInt(suggestorUid);
        dest.writeString(suggestorPackageName);
    }

    @Override
    public int hashCode() {
        return Objects.hash(wifiConfiguration.SSID, wifiConfiguration.BSSID,
                wifiConfiguration.allowedKeyManagement, wifiConfiguration.FQDN,
                suggestorUid, suggestorPackageName);
                wifiConfiguration.allowedKeyManagement, wifiConfiguration.FQDN);
    }

    /**
@@ -706,22 +677,18 @@ public final class WifiNetworkSuggestion implements Parcelable {
                && TextUtils.equals(this.wifiConfiguration.BSSID, lhs.wifiConfiguration.BSSID)
                && Objects.equals(this.wifiConfiguration.allowedKeyManagement,
                lhs.wifiConfiguration.allowedKeyManagement)
                && TextUtils.equals(this.wifiConfiguration.FQDN, lhs.wifiConfiguration.FQDN)
                && this.suggestorUid == lhs.suggestorUid
                && TextUtils.equals(this.suggestorPackageName, lhs.suggestorPackageName);
                && TextUtils.equals(this.wifiConfiguration.FQDN, lhs.wifiConfiguration.FQDN);
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder("WifiNetworkSuggestion[ ")
                .append(", SSID=").append(wifiConfiguration.SSID)
                .append("SSID=").append(wifiConfiguration.SSID)
                .append(", BSSID=").append(wifiConfiguration.BSSID)
                .append(", FQDN=").append(wifiConfiguration.FQDN)
                .append(", isAppInteractionRequired=").append(isAppInteractionRequired)
                .append(", isUserInteractionRequired=").append(isUserInteractionRequired)
                .append(", isUserAllowedToManuallyConnect=").append(isUserAllowedToManuallyConnect)
                .append(", suggestorUid=").append(suggestorUid)
                .append(", suggestorPackageName=").append(suggestorPackageName)
                .append(" ]");
        return sb.toString();
    }
+9 −58
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import android.net.MacAddress;
import android.net.wifi.hotspot2.PasspointConfiguration;
import android.net.wifi.hotspot2.PasspointTestUtils;
import android.os.Parcel;
import android.os.Process;

import androidx.test.filters.SmallTest;

@@ -35,8 +34,6 @@ import org.junit.Test;
public class WifiNetworkSuggestionTest {
    private static final int TEST_UID = 45677;
    private static final int TEST_UID_OTHER = 45673;
    private static final String TEST_PACKAGE_NAME = "com.test.packagename";
    private static final String TEST_PACKAGE_NAME_OTHER = "com.test.packagenameother";
    private static final String TEST_SSID = "\"Test123\"";
    private static final String TEST_BSSID = "12:12:12:12:12:12";
    private static final String TEST_SSID_1 = "\"Test1234\"";
@@ -55,7 +52,6 @@ public class WifiNetworkSuggestionTest {
                .setIsAppInteractionRequired(true)
                .build();

        assertEquals(Process.myUid(), suggestion.suggestorUid);
        assertEquals("\"" + TEST_SSID + "\"", suggestion.wifiConfiguration.SSID);
        assertTrue(suggestion.wifiConfiguration.allowedKeyManagement
                .get(WifiConfiguration.KeyMgmt.NONE));
@@ -448,7 +444,7 @@ public class WifiNetworkSuggestionTest {
        configuration.BSSID = TEST_BSSID;
        configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion(
                configuration, null, false, true, true, TEST_UID, TEST_PACKAGE_NAME);
                configuration, null, false, true, true);

        Parcel parcelW = Parcel.obtain();
        suggestion.writeToParcel(parcelW, 0);
@@ -515,16 +511,14 @@ public class WifiNetworkSuggestionTest {
        configuration.BSSID = TEST_BSSID;
        configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
        WifiNetworkSuggestion suggestion =
                new WifiNetworkSuggestion(configuration, null, true, false, true, TEST_UID,
                        TEST_PACKAGE_NAME);
                new WifiNetworkSuggestion(configuration, null, true, false, true);

        WifiConfiguration configuration1 = new WifiConfiguration();
        configuration1.SSID = TEST_SSID;
        configuration1.BSSID = TEST_BSSID;
        configuration1.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
        WifiNetworkSuggestion suggestion1 =
                new WifiNetworkSuggestion(configuration1, null, false, true, true, TEST_UID,
                        TEST_PACKAGE_NAME);
                new WifiNetworkSuggestion(configuration1, null, false, true, true);

        assertEquals(suggestion, suggestion1);
        assertEquals(suggestion.hashCode(), suggestion1.hashCode());
@@ -540,15 +534,13 @@ public class WifiNetworkSuggestionTest {
        configuration.SSID = TEST_SSID;
        configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        WifiNetworkSuggestion suggestion =
                new WifiNetworkSuggestion(configuration, null, false, false, true, TEST_UID,
                        TEST_PACKAGE_NAME);
                new WifiNetworkSuggestion(configuration, null, false, false, true);

        WifiConfiguration configuration1 = new WifiConfiguration();
        configuration1.SSID = TEST_SSID_1;
        configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        WifiNetworkSuggestion suggestion1 =
                new WifiNetworkSuggestion(configuration1, null, false, false, true, TEST_UID,
                        TEST_PACKAGE_NAME);
                new WifiNetworkSuggestion(configuration1, null, false, false, true);

        assertNotEquals(suggestion, suggestion1);
    }
@@ -564,15 +556,13 @@ public class WifiNetworkSuggestionTest {
        configuration.BSSID = TEST_BSSID;
        configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        WifiNetworkSuggestion suggestion =
                new WifiNetworkSuggestion(configuration, null,  false, false, true, TEST_UID,
                        TEST_PACKAGE_NAME);
                new WifiNetworkSuggestion(configuration, null,  false, false, true);

        WifiConfiguration configuration1 = new WifiConfiguration();
        configuration1.SSID = TEST_SSID;
        configuration1.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        WifiNetworkSuggestion suggestion1 =
                new WifiNetworkSuggestion(configuration1, null, false, false, true, TEST_UID,
                        TEST_PACKAGE_NAME);
                new WifiNetworkSuggestion(configuration1, null, false, false, true);

        assertNotEquals(suggestion, suggestion1);
    }
@@ -587,56 +577,17 @@ public class WifiNetworkSuggestionTest {
        configuration.SSID = TEST_SSID;
        configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        WifiNetworkSuggestion suggestion =
                new WifiNetworkSuggestion(configuration, null, false, false, true, TEST_UID,
                        TEST_PACKAGE_NAME);
                new WifiNetworkSuggestion(configuration, null, false, false, true);

        WifiConfiguration configuration1 = new WifiConfiguration();
        configuration1.SSID = TEST_SSID;
        configuration1.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
        WifiNetworkSuggestion suggestion1 =
                new WifiNetworkSuggestion(configuration1, null, false, false, true, TEST_UID,
                        TEST_PACKAGE_NAME);
                new WifiNetworkSuggestion(configuration1, null, false, false, true);

        assertNotEquals(suggestion, suggestion1);
    }

    /**
     * Check NetworkSuggestion equals returns {@code false} for 2 network suggestions with the same
     * SSID, BSSID and key mgmt, but different UID.
     */
    @Test
    public void testWifiNetworkSuggestionEqualsFailsWhenUidIsDifferent() {
        WifiConfiguration configuration = new WifiConfiguration();
        configuration.SSID = TEST_SSID;
        configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        WifiNetworkSuggestion suggestion =
                new WifiNetworkSuggestion(configuration, null, false, false, true, TEST_UID,
                        TEST_PACKAGE_NAME);

        WifiNetworkSuggestion suggestion1 =
                new WifiNetworkSuggestion(configuration, null, false, false, true, TEST_UID_OTHER,
                        TEST_PACKAGE_NAME);

        assertNotEquals(suggestion, suggestion1);
    }

    /**
     * Check NetworkSuggestion equals returns {@code false} for 2 network suggestions with the same
     * SSID, BSSID and key mgmt, but different package name.
     */
    @Test
    public void testWifiNetworkSuggestionEqualsFailsWhenPackageNameIsDifferent() {
        WifiConfiguration configuration = new WifiConfiguration();
        configuration.SSID = TEST_SSID;
        configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion(
                configuration, null, false, false, true, TEST_UID, TEST_PACKAGE_NAME);

        WifiNetworkSuggestion suggestion1 = new WifiNetworkSuggestion(
                configuration, null, false, false, true, TEST_UID, TEST_PACKAGE_NAME_OTHER);

        assertNotEquals(suggestion, suggestion1);
    }
    /**
     * Check NetworkSuggestion equals returns {@code true} for 2 Passpoint network suggestions with
     * same FQDN.