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

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

Merge "AccessPoint: App attribution for suggestion/specifier"

parents 52c0db9c e9b8e507
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -99,6 +99,8 @@
    <string name="connected_via_network_scorer_default">Automatically connected via network rating provider</string>
    <!-- Status message of Wi-Fi when it is connected by Passpoint configuration. [CHAR LIMIT=NONE] -->
    <string name="connected_via_passpoint">Connected via %1$s</string>
    <!-- Status message of Wi-Fi when it is connected by a app (via suggestion or network request). [CHAR LIMIT=NONE] -->
    <string name="connected_via_app">Connected via <xliff:g id="name" example="Wifi App">%1$s</xliff:g></string>
    <!-- Status message of Wi-Fi when it is connected by Passpoint configuration. [CHAR LIMIT=NONE] -->
    <string name="ssid_by_passpoint_provider"><xliff:g id="ssid" example="Cafe Wifi">%1$s</xliff:g> by <xliff:g id="passpointProvider" example="Passpoint Provider">%2$s</xliff:g></string>
    <!-- Status message of Wi-Fi when network has matching passpoint credentials. [CHAR LIMIT=NONE] -->
+33 −7
Original line number Diff line number Diff line
@@ -900,7 +900,7 @@ public class AccessPoint implements Comparable<AccessPoint> {
            if (isPasspoint()) {
                // This is the active connection on passpoint
                summary.append(getSummary(mContext, ssid, getDetailedState(),
                        false, mConfig.providerFriendlyName));
                        false, null, mConfig.providerFriendlyName));
            } else if (mConfig != null && getDetailedState() == DetailedState.CONNECTED
                    && mIsCarrierAp) {
                // This is the active connection on a carrier AP
@@ -909,7 +909,8 @@ public class AccessPoint implements Comparable<AccessPoint> {
            } else {
                // This is the active connection on non-passpoint network
                summary.append(getSummary(mContext, getDetailedState(),
                        mInfo != null && mInfo.isEphemeral()));
                        mInfo != null && mInfo.isEphemeral(),
                        mInfo != null ? mInfo.getNetworkSuggestionOrSpecifierPackageName() : null));
            }
        } else { // not active
            if (mConfig != null && mConfig.hasNoInternetAccess()) {
@@ -1322,13 +1323,34 @@ public class AccessPoint implements Comparable<AccessPoint> {
        return mRssi != UNREACHABLE_RSSI;
    }

    private static CharSequence getAppLabel(String packageName, PackageManager packageManager) {
        CharSequence appLabel = "";
        ApplicationInfo appInfo = null;
        try {
            int userId = UserHandle.getUserId(UserHandle.USER_CURRENT);
            appInfo = packageManager.getApplicationInfoAsUser(packageName, 0 /* flags */, userId);
        } catch (PackageManager.NameNotFoundException e) {
            Log.e(TAG, "Failed to get app info", e);
            return appLabel;
        }
        if (appInfo != null) {
            appLabel = appInfo.loadLabel(packageManager);
        }
        return appLabel;
    }

    public static String getSummary(Context context, String ssid, DetailedState state,
            boolean isEphemeral, String passpointProvider) {
            boolean isEphemeral, String suggestionOrSpecifierPackageName,
            String passpointProvider) {
        if (state == DetailedState.CONNECTED) {
            if (!TextUtils.isEmpty(passpointProvider)) {
                // Special case for connected + passpoint networks.
                String format = context.getString(R.string.ssid_by_passpoint_provider);
                return String.format(format, ssid, passpointProvider);
            } else if (isEphemeral && !TextUtils.isEmpty(suggestionOrSpecifierPackageName)) {
                CharSequence appLabel =
                        getAppLabel(suggestionOrSpecifierPackageName, context.getPackageManager());
                return context.getString(R.string.connected_via_app, appLabel);
            } else if (isEphemeral) {
                // Special case for connected + ephemeral networks.
                final NetworkScoreManager networkScoreManager = context.getSystemService(
@@ -1379,13 +1401,17 @@ public class AccessPoint implements Comparable<AccessPoint> {
        return String.format(formats[index], ssid);
    }

    public static String getSummary(Context context, DetailedState state, boolean isEphemeral) {
        return getSummary(context, null, state, isEphemeral, null);
    public static String getSummary(Context context, DetailedState state, boolean isEphemeral,
                                    String suggestionOrSpecifierPackageName) {
        return getSummary(context, null, state, isEphemeral, suggestionOrSpecifierPackageName,
                null);
    }

    public static String getSummary(Context context, DetailedState state, boolean isEphemeral,
                                    String suggestionOrSpecifierPackageName,
                                    String passpointProvider) {
        return getSummary(context, null, state, isEphemeral, passpointProvider);
        return getSummary(context, null, state, false, suggestionOrSpecifierPackageName,
                passpointProvider);
    }

    public static String convertToQuotedString(String string) {
+7 −3
Original line number Diff line number Diff line
@@ -72,9 +72,13 @@ public class TestAccessPointBuilder {
    public AccessPoint build() {
        Bundle bundle = new Bundle();

        WifiConfiguration wifiConfig = new WifiConfiguration();
        WifiConfiguration wifiConfig = null;
        // ephemeral networks don't have a WifiConfiguration object in AccessPoint representation.
        if (mNetworkId != WifiConfiguration.INVALID_NETWORK_ID) {
            wifiConfig = new WifiConfiguration();
            wifiConfig.networkId = mNetworkId;
            wifiConfig.BSSID = mBssid;
        }

        bundle.putString(AccessPoint.KEY_SSID, ssid);
        bundle.putParcelable(AccessPoint.KEY_CONFIG, wifiConfig);
+43 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;

import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.mock;
@@ -26,6 +27,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.NetworkKey;
@@ -482,6 +486,45 @@ public class AccessPointTest {
                R.string.connected_via_carrier), carrierName));
    }

    @Test
    public void testSummaryString_showsConnectedViaSuggestionOrSpecifierApp() throws Exception {
        final int rssi = -55;
        final String appPackageName = "com.test.app";
        final CharSequence appLabel = "Test App";
        final String connectedViaAppResourceString = "Connected via ";

        WifiInfo wifiInfo = new WifiInfo();
        wifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(TEST_SSID));
        wifiInfo.setEphemeral(true);
        wifiInfo.setNetworkSuggestionOrSpecifierPackageName(appPackageName);
        wifiInfo.setRssi(rssi);

        Context context = mock(Context.class);
        Resources resources = mock(Resources.class);
        PackageManager packageManager = mock(PackageManager.class);
        ApplicationInfo applicationInfo = mock(ApplicationInfo.class);
        when(context.getPackageManager()).thenReturn(packageManager);
        when(context.getResources()).thenReturn(resources);
        when(resources.getString(R.string.connected_via_app, appLabel))
                .thenReturn(connectedViaAppResourceString + appLabel.toString());
        when(packageManager.getApplicationInfoAsUser(eq(appPackageName), anyInt(), anyInt()))
                .thenReturn(applicationInfo);
        when(applicationInfo.loadLabel(packageManager)).thenReturn(appLabel);

        NetworkInfo networkInfo =
                new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", "");
        networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, "", "");

        AccessPoint ap = new TestAccessPointBuilder(context)
                .setSsid(TEST_SSID)
                .setNetworkInfo(networkInfo)
                .setRssi(rssi)
                .setSecurity(AccessPoint.SECURITY_NONE)
                .setWifiInfo(wifiInfo)
                .build();
        assertThat(ap.getSummary()).isEqualTo("Connected via Test App");
    }

    @Test
    public void testSetScanResultWithCarrierInfo() {
        String ssid = "ssid";