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

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

Merge "Filter out unsupported security type for DPP configuration."

parents 88d7797e cfa78006
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -290,7 +290,8 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
                .setButton2OnClickListener(view -> signIntoNetwork())
                .setButton3Text(R.string.share)
                .setButton3Icon(R.drawable.ic_qrcode_24dp)
                .setButton3OnClickListener(view -> shareNetwork());
                .setButton3OnClickListener(view -> shareNetwork())
                .setButton3Visible(WifiDppUtils.isSuportConfigurator(mContext, mAccessPoint));

        mSignalStrengthPref = screen.findPreference(KEY_SIGNAL_STRENGTH_PREF);
        mTxLinkSpeedPref = screen.findPreference(KEY_TX_LINK_SPEED);
@@ -558,11 +559,16 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
    /**
     * Show QR code to share the network represented by this preference.
     */
    public void launchQRCodeGenerator() {
        Intent intent = WifiDppUtils.getConfiguratorQrCodeGeneratorIntent(mContext, mWifiManager,
    public void launchWifiDppConfiguratorActivity() {
        final Intent intent = WifiDppUtils.getConfiguratorIntentOrNull(mContext, mWifiManager,
                mAccessPoint);

        if (intent == null) {
            Log.e(TAG, "Launch Wi-Fi DPP configurator with a wrong Wi-Fi network!");
        } else {
            mContext.startActivity(intent);
        }
    }

    /**
     * Share the wifi network with QR code.
@@ -584,7 +590,7 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
                        WifiNetworkDetailsFragment.REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS);
            }
        } else {
            launchQRCodeGenerator();
            launchWifiDppConfiguratorActivity();
        }
    }

+1 −1
Original line number Diff line number Diff line
@@ -152,7 +152,7 @@ public class WifiNetworkDetailsFragment extends DashboardFragment {

        if (requestCode == REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS
                && resultCode == Activity.RESULT_OK) {
            mWifiDetailPreferenceController.launchQRCodeGenerator();
            mWifiDetailPreferenceController.launchWifiDppConfiguratorActivity();
        }
    }
}
+23 −8
Original line number Diff line number Diff line
@@ -84,9 +84,18 @@ public class WifiDppQrCodeGeneratorFragment extends WifiDppQrCodeBaseFragment {

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        MenuItem item = menu.add(0, Menu.FIRST, 0, R.string.next_label);
        item.setIcon(R.drawable.ic_scan_24dp);
        item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        final WifiNetworkConfig wifiNetworkConfig = getWifiNetworkConfigFromHostActivity();
        MenuItem menuItem;
        if (wifiNetworkConfig.isSupportConfiguratorQrCodeScanner(getActivity())) {
            menuItem = menu.add(0, Menu.FIRST, 0, R.string.next_label);
            menuItem.setIcon(R.drawable.ic_scan_24dp);
            menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        } else {
            menuItem = menu.findItem(Menu.FIRST);
            if (menuItem != null) {
                menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
            }
        }

        super.onCreateOptionsMenu(menu, inflater);
    }
@@ -116,11 +125,7 @@ public class WifiDppQrCodeGeneratorFragment extends WifiDppQrCodeBaseFragment {
        mQrCodeView = view.findViewById(R.id.qrcode_view);

        mHeaderIcon.setImageResource(R.drawable.ic_qrcode_24dp);
        WifiNetworkConfig wifiNetworkConfig = ((WifiNetworkConfig.Retriever) getActivity())
                .getWifiNetworkConfig();
        if (!WifiNetworkConfig.isValidConfig(wifiNetworkConfig)) {
            throw new IllegalStateException("Invalid Wi-Fi network for configuring");
        }
        final WifiNetworkConfig wifiNetworkConfig = getWifiNetworkConfigFromHostActivity();
        mTitle.setText(R.string.wifi_dpp_share_wifi);
        mSummary.setText(getString(R.string.wifi_dpp_scan_qr_code_with_another_device,
                wifiNetworkConfig.getSsid()));
@@ -139,4 +144,14 @@ public class WifiDppQrCodeGeneratorFragment extends WifiDppQrCodeBaseFragment {
            Log.e(TAG, "Error generatting QR code bitmap " + e);
        }
    }

    WifiNetworkConfig getWifiNetworkConfigFromHostActivity() {
        final WifiNetworkConfig wifiNetworkConfig = ((WifiNetworkConfig.Retriever) getActivity())
                .getWifiNetworkConfig();
        if (!WifiNetworkConfig.isValidConfig(wifiNetworkConfig)) {
            throw new IllegalStateException("Invalid Wi-Fi network for configuring");
        }

        return wifiNetworkConfig;
    }
}
+55 −6
Original line number Diff line number Diff line
@@ -134,26 +134,36 @@ public class WifiDppUtils {
    private static String getSecurityString(AccessPoint accessPoint) {
        switch(accessPoint.getSecurity()) {
            case AccessPoint.SECURITY_WEP:
                return "WEP";
                return WifiQrCode.SECURITY_WEP;
            case AccessPoint.SECURITY_PSK:
                return "WPA";
                return WifiQrCode.SECURITY_WPA;
            case AccessPoint.SECURITY_SAE:
                return WifiQrCode.SECURITY_SAE;
            default:
                return "nopass";
                return WifiQrCode.SECURITY_NO_PASSWORD;
        }
    }

    /**
     * Returns an intent to launch QR code generator.
     * Returns an intent to launch QR code generator or scanner according to the Wi-Fi network
     * security. It may return null if the security is not supported by QR code generator nor
     * scanner.
     *
     * @param context     The context to use for the content resolver
     * @param wifiManager An instance of {@link WifiManager}
     * @param accessPoint An instance of {@link AccessPoint}
     * @return Intent for launching QR code generator
     */
    public static Intent getConfiguratorQrCodeGeneratorIntent(Context context,
    public static Intent getConfiguratorIntentOrNull(Context context,
            WifiManager wifiManager, AccessPoint accessPoint) {
        final Intent intent = new Intent(context, WifiDppConfiguratorActivity.class);
        if (isSupportConfiguratorQrCodeGenerator(accessPoint)) {
            intent.setAction(WifiDppConfiguratorActivity.ACTION_CONFIGURATOR_QR_CODE_GENERATOR);
        } else if (isSupportConfiguratorQrCodeScanner(context, accessPoint)) {
            intent.setAction(WifiDppConfiguratorActivity.ACTION_CONFIGURATOR_QR_CODE_SCANNER);
        } else {
            return null;
        }

        final WifiConfiguration wifiConfig = accessPoint.getConfig();
        final String ssid = removeFirstAndLastDoubleQuotes(wifiConfig.SSID);
@@ -183,4 +193,43 @@ public class WifiDppUtils {

        return intent;
    }

    /**
     * Android Q supports Wi-Fi configurator by:
     *
     * 1. QR code generator of ZXing's Wi-Fi network config format.
     * and
     * 2. QR code scanner of Wi-Fi DPP QR code format.
     */
    public static boolean isSuportConfigurator(Context context, AccessPoint accessPoint) {
        return isSupportConfiguratorQrCodeScanner(context, accessPoint) ||
                isSupportConfiguratorQrCodeGenerator(accessPoint);
    }

    private static boolean isSupportConfiguratorQrCodeScanner(Context context,
            AccessPoint accessPoint) {
        if (!isWifiDppEnabled(context)) {
            return false;
        }

        // DPP 1.0 only supports SAE and PSK.
        final int security = accessPoint.getSecurity();
        if (security == AccessPoint.SECURITY_SAE || security == AccessPoint.SECURITY_PSK) {
            return true;
        }

        return false;
    }

    private static boolean isSupportConfiguratorQrCodeGenerator(AccessPoint accessPoint) {
        // QR code generator produces QR code with ZXing's Wi-Fi network config format,
        // it supports PSK and WEP and non security
        final int security = accessPoint.getSecurity();
        if (security == AccessPoint.SECURITY_PSK || security == AccessPoint.SECURITY_WEP ||
                security == AccessPoint.SECURITY_NONE) {
            return true;
        }

        return false;
    }
}
+14 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.settings.wifi.dpp;

import static com.android.settings.wifi.dpp.WifiQrCode.SECURITY_NO_PASSWORD;
import static com.android.settings.wifi.dpp.WifiQrCode.SECURITY_SAE;
import static com.android.settings.wifi.dpp.WifiQrCode.SECURITY_WEP;
import static com.android.settings.wifi.dpp.WifiQrCode.SECURITY_WPA;

@@ -208,6 +209,19 @@ public class WifiNetworkConfig {
        wifiManager.connect(wifiConfiguration, listener);
    }

    public boolean isSupportConfiguratorQrCodeScanner(Context context) {
        if (!WifiDppUtils.isWifiDppEnabled(context)) {
            return false;
        }

        // DPP 1.0 only supports SAE and PSK.
        if (SECURITY_SAE.equals(mSecurity) || SECURITY_WPA.equals(mSecurity)) {
            return true;
        }

        return false;
    }

    /**
     * This is a simplified method from {@code WifiConfigController.getConfig()}
     */
Loading