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

Commit 32ee158e authored by Arc Wang's avatar Arc Wang Committed by Android (Google) Code Review
Browse files

Merge "Use multiple actions to launch Wi-Fi DPP configurator with different mode."

parents c28cc9db e43bb77e
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -3036,7 +3036,14 @@
        </provider>

        <activity
            android:name=".wifi.dpp.WifiDppConfiguratorActivity"/>
            android:name=".wifi.dpp.WifiDppConfiguratorActivity">
            <intent-filter>
                <action android:name="android.settings.WIFI_DPP_CONFIGURATOR_QR_CODE_SCANNER"/>
                <action android:name="android.settings.WIFI_DPP_CONFIGURATOR_QR_CODE_GENERATOR"/>
                <action android:name="android.settings.WIFI_DPP_CONFIGURATOR_CHOOSE_SAVED_WIFI_NETWORK"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

        <activity android:name=".homepage.contextualcards.ContextualCardFeedbackDialog"
                  android:theme="@android:style/Theme.DeviceDefault.Light.Dialog.Alert" />
+70 −40
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settings.wifi.dpp;

import android.app.ActionBar;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

@@ -30,32 +31,22 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.core.InstrumentedActivity;
import com.android.settings.R;

public class WifiDppConfiguratorActivity extends InstrumentedActivity {
public class WifiDppConfiguratorActivity extends InstrumentedActivity implements
        WifiNetworkConfig.Retriever {
    private static final String TAG = "WifiDppConfiguratorActivity";

    public static final String ACTION_CONFIGURATOR_QR_CODE_SCANNER =
            "android.settings.WIFI_DPP_CONFIGURATOR_QR_CODE_SCANNER";
    public static final String ACTION_CONFIGURATOR_QR_CODE_GENERATOR =
            "android.settings.WIFI_DPP_CONFIGURATOR_QR_CODE_GENERATOR";
    public static final String ACTION_CONFIGURATOR_CHOOSE_SAVED_WIFI_NETWORK =
            "android.settings.WIFI_DPP_CONFIGURATOR_CHOOSE_SAVED_WIFI_NETWORK";

    private FragmentManager mFragmentManager;
    private FragmentTransaction mFragmentTransaction;

    public static final String EXTRA_LAUNCH_MODE =
            "com.android.settings.wifi.dpp.EXTRA_LAUNCH_MODE";
    public static final String EXTRA_SSID = "com.android.settings.wifi.dpp.EXTRA_SSID";

    public enum LaunchMode {
        LAUNCH_MODE_QR_CODE_SCANNER(1),
        LAUNCH_MODE_QR_CODE_GENERATOR(2),
        LAUNCH_MODE_CHOOSE_SAVED_WIFI_NETWORK(3),
        LAUNCH_MODE_NOT_DEFINED(-1);

        private int mMode;

        LaunchMode(int mode) {
            this.mMode = mode;
        }

        public int getMode() {
            return mMode;
        }
    }
    /** The Wi-Fi network which will be configured */
    private WifiNetworkConfig mWifiNetworkConfig;

    @Override
    public int getMetricsCategory() {
@@ -71,37 +62,59 @@ public class WifiDppConfiguratorActivity extends InstrumentedActivity {
        mFragmentManager = getSupportFragmentManager();
        mFragmentTransaction = getSupportFragmentManager().beginTransaction();

        final int launchMode = getIntent().getIntExtra(EXTRA_LAUNCH_MODE,
            LaunchMode.LAUNCH_MODE_NOT_DEFINED.getMode());
        if (launchMode == LaunchMode.LAUNCH_MODE_QR_CODE_SCANNER.getMode()) {
            addQrCodeScannerFragment();
        } else if (launchMode == LaunchMode.LAUNCH_MODE_QR_CODE_GENERATOR.getMode()) {
            addQrCodeGeneratorFragment();
        } else if (launchMode == LaunchMode.LAUNCH_MODE_CHOOSE_SAVED_WIFI_NETWORK.getMode()) {
            addChooseSavedWifiNetworkFragment();
        Intent intent = getIntent();
        boolean cancelActivity = false;
        WifiNetworkConfig config;
        switch (intent.getAction()) {
            case ACTION_CONFIGURATOR_QR_CODE_SCANNER:
                config = WifiNetworkConfig.getValidConfigOrNull(intent);
                if (config == null) {
                    cancelActivity = true;
                } else {
                    mWifiNetworkConfig = config;
                    addQrCodeScannerFragment(/* addToBackStack= */ false);
                }
                break;
            case ACTION_CONFIGURATOR_QR_CODE_GENERATOR:
                config = WifiNetworkConfig.getValidConfigOrNull(intent);
                if (config == null) {
                    cancelActivity = true;
                } else {
            Log.e(TAG, "Launch with an invalid mode extra");
                    mWifiNetworkConfig = config;
                    addQrCodeGeneratorFragment();
                }
                break;
            case ACTION_CONFIGURATOR_CHOOSE_SAVED_WIFI_NETWORK:
                addChooseSavedWifiNetworkFragment(/* addToBackStack */ false);
                break;
            default:
                cancelActivity = true;
                Log.e(TAG, "Launch with an invalid action");
        }

        if (cancelActivity) {
            setResult(Activity.RESULT_CANCELED);
            finish();
        }
    }

    private void addQrCodeScannerFragment() {
        final WifiDppQrCodeScannerFragment fragment = new WifiDppQrCodeScannerFragment();
    private void addQrCodeScannerFragment(boolean addToBackStack) {
        WifiDppQrCodeScannerFragment fragment = new WifiDppQrCodeScannerFragment();
        mFragmentTransaction.add(R.id.fragment_container, fragment);
        if (addToBackStack) {
            mFragmentTransaction.addToBackStack(/* name */ null);
        }
        mFragmentTransaction.commit();
    }

    private void addQrCodeGeneratorFragment() {
        final WifiDppQrCodeGeneratorFragment fragment = new WifiDppQrCodeGeneratorFragment();
        WifiDppQrCodeGeneratorFragment fragment = new WifiDppQrCodeGeneratorFragment();
        mFragmentTransaction.add(R.id.fragment_container, fragment);
        mFragmentTransaction.addToBackStack(/* name */ null);
        mFragmentTransaction.commit();
    }

    private void addChooseSavedWifiNetworkFragment() {
        final ActionBar action = getActionBar();
    private void addChooseSavedWifiNetworkFragment(boolean addToBackStack) {
        ActionBar action = getActionBar();
        if (action != null) {
            action.hide();
        }
@@ -109,13 +122,15 @@ public class WifiDppConfiguratorActivity extends InstrumentedActivity {
        WifiDppChooseSavedWifiNetworkFragment fragment =
                new WifiDppChooseSavedWifiNetworkFragment();
        mFragmentTransaction.add(R.id.fragment_container, fragment);
        if (addToBackStack) {
            mFragmentTransaction.addToBackStack(/* name */ null);
        }
        mFragmentTransaction.commit();
    }

    @Override
    protected void onStop() {
        final Fragment fragment = mFragmentManager.findFragmentById(R.id.fragment_container);
        Fragment fragment = mFragmentManager.findFragmentById(R.id.fragment_container);
        if (fragment != null) {
            // Remove it to prevent stacking multiple fragments after screen rotated.
            mFragmentManager.beginTransaction().remove(fragment).commit();
@@ -123,4 +138,19 @@ public class WifiDppConfiguratorActivity extends InstrumentedActivity {

        super.onStop();
    }

    @Override
    public WifiNetworkConfig getWifiNetworkConfig() {
        return mWifiNetworkConfig;
    }

    @Override
    public boolean setWifiNetworkConfig(WifiNetworkConfig config) {
        if(!WifiNetworkConfig.isValidConfig(config)) {
            return false;
        } else {
            mWifiNetworkConfig = new WifiNetworkConfig(config);
            return true;
        }
    }
}
+2 −1
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.widget.TextView;
import com.android.internal.logging.nano.MetricsProto;

import com.android.settings.core.InstrumentedFragment;
import com.android.settings.wifi.qrcode.QrDecorateView;
import com.android.settings.R;

/**
@@ -46,7 +47,7 @@ public abstract class WifiDppQrCodeBaseFragment extends InstrumentedFragment {
    private TextView mDescription;

    private SurfaceView mPreviewView;       //optional, for WifiDppQrCodeScannerFragment
    private ImageView mDecorateViiew;       //optional, for WifiDppQrCodeScannerFragment
    private QrDecorateView mDecorateViiew;  //optional, for WifiDppQrCodeScannerFragment
    private TextView mErrorMessage;         //optional, for WifiDppQrCodeScannerFragment

    private ImageView mBarcodeView;         //optional, for WifiDppQrCodeGeneratorFragment
+5 −8
Original line number Diff line number Diff line
@@ -49,15 +49,12 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl

        setTitle(getString(R.string.wifi_dpp_add_device_to_network));

        String ssid = null;
        final Intent intent = getActivity().getIntent();
        if (intent != null) {
            ssid = intent.getStringExtra(WifiDppConfiguratorActivity.EXTRA_SSID);
        WifiNetworkConfig wifiNetworkConfig = ((WifiNetworkConfig.Retriever) getActivity())
                .getWifiNetworkConfig();
        if (!WifiNetworkConfig.isValidConfig(wifiNetworkConfig)) {
            throw new IllegalArgumentException("Invalid Wi-Fi network for configuring");
        }
        if (TextUtils.isEmpty(ssid)) {
            throw new IllegalArgumentException("Invalid SSID");
        }
        setDescription(getString(R.string.wifi_dpp_center_qr_code, ssid));
        setDescription(getString(R.string.wifi_dpp_center_qr_code, wifiNetworkConfig.getSsid()));

        hideRightButton();

+57 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.wifi.dpp;

import android.content.Intent;

/**
 * Here are the items shared by both WifiDppConfiguratorActivity & WifiDppEnrolleeActivity
 */
public class WifiDppUtils {
    /** The data is from {@code com.android.settingslib.wifi.AccessPoint.securityToString} */
    public static final String EXTRA_WIFI_SECURITY = "security";

    /** The data corresponding to {@code WifiConfiguration} SSID */
    public static final String EXTRA_WIFI_SSID = "ssid";

    /** The data corresponding to {@code WifiConfiguration} preSharedKey */
    public static final String EXTRA_WIFI_PRE_SHARED_KEY = "preSharedKey";

    /** The data corresponding to {@code WifiConfiguration} hiddenSSID */
    public static final String EXTRA_WIFI_HIDDEN_SSID = "hiddenSsid";

    /**
     * Acceptable QR code string may be a standard W-Fi DPP bootstrapping information or the Wi-Fi
     * Network config format described in
     * https://github.com/zxing/zxing/wiki/Barcode-Contents#wi-fi-network-config-android-ios-11
     *
     * Wi-Fi Network config format example:
     *
     *     WIFI:T:WPA;S:mynetwork;P:mypass;;
     *
     * parameter Example    Description
     * T         WPA        Authentication type; can be WEP or WPA, or 'nopass' for no password. Or,
     *                      omit for no password.
     * S         mynetwork  Network SSID. Required. Enclose in double quotes if it is an ASCII name,
     *                      but could be interpreted as hex (i.e. "ABCD")
     * P         mypass     Password, ignored if T is "nopass" (in which case it may be omitted).
     *                      Enclose in double quotes if it is an ASCII name, but could be interpreted as
     *                      hex (i.e. "ABCD")
     * H         true       Optional. True if the network SSID is hidden.
     */
    public static final String EXTRA_QR_CODE = "qrCode";
}
Loading