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

Commit a5e0148c authored by cosmohsieh's avatar cosmohsieh
Browse files

[NetworkRequest] Implement Single Specified SSID ALTERNATE FLOW V2

Implement new flow for Single SSID mode of NetworkRequestDialog.
There is a new design for single SSID mode of NetworkRequestDialog.

Bug: b/132904234
Test: make RunSettingsRoboTests -j32 ROBOTEST_FILTER=com.android.settings.wifi
Change-Id: Ice19842243ea6f24a3ea74cf6e90a473080b8983
parent 395393bf
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -11138,6 +11138,10 @@
    <string name="network_connection_connect_successful">Connection successful</string>
    <!-- Neutral button for Network connection request Dialog [CHAR LIMIT=30] -->
    <string name="network_connection_request_dialog_showall">Show all</string>
    <!-- Message for Network connection searching progress Dialog. Searching for wifi ap. [CHAR LIMIT=40] -->
    <string name="network_connection_searching_message">Searching for device\u2026</string>
    <!-- Message for Network connection connecting progress Dialog. Try to connect to wifi ap.[CHAR LIMIT=40] -->
    <string name="network_connection_connecting_message">Connecting to device\u2026</string>
    <!-- Summary for bluetooth devices count in Bluetooth devices slice. [CHAR LIMIT=NONE] -->
    <plurals name="show_bluetooth_devices">
+225 −6
Original line number Diff line number Diff line
@@ -16,23 +16,242 @@

package com.android.settings.wifi;

import android.app.ProgressDialog;
import android.content.Intent;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiManager.NetworkRequestMatchCallback;
import android.net.wifi.WifiManager.NetworkRequestUserSelectionCallback;
import android.os.Bundle;

import android.os.Handler;
import android.os.Message;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentActivity;
import com.android.settings.R;
import com.android.settings.wifi.NetworkRequestErrorDialogFragment.ERROR_DIALOG_TYPE;
import java.util.List;

/**
 * When other applications request to have a wifi connection, framework will bring up this activity
 * to let user select which wifi ap wanna to connect. This activity is just a door for framework
 * call, and main functional process is at {@code NetworkRequestDialogFragment}.
 * to let user select which wifi ap wanna to connect. This activity contains
 * {@code NetworkRequestDialogFragment}, {@code NetworkRequestSingleSsidDialogFragment} to show UI
 * and handles framework callback.
 */
public class NetworkRequestDialogActivity extends FragmentActivity {
public class NetworkRequestDialogActivity extends FragmentActivity implements
        NetworkRequestMatchCallback {
    private static String TAG = "NetworkRequestDialogActivity";

    /** Message sent to stop scanning wifi and pop up timeout dialog. */
    private static final int MESSAGE_STOP_SCAN_WIFI_LIST = 0;

    /** Delayed time to stop scanning wifi. */
    private static final int DELAY_TIME_STOP_SCAN_MS = 30 * 1000;

    final static String EXTRA_IS_SPECIFIED_SSID =
        "com.android.settings.wifi.extra.REQUEST_IS_FOR_SINGLE_NETWORK";

    private NetworkRequestDialogBaseFragment mDialogFragment;
    private NetworkRequestUserSelectionCallback mUserSelectionCallback;
    private boolean mIsSpecifiedSsid;
    private boolean mShowingErrorDialog;
    private WifiConfiguration mMatchedConfig;
    private ProgressDialog mProgressDialog;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final NetworkRequestDialogFragment fragment = NetworkRequestDialogFragment.newInstance();
        fragment.show(getSupportFragmentManager(), "NetworkRequestDialogFragment");
        final Intent intent = getIntent();
        if (intent != null) {
            mIsSpecifiedSsid = intent.getBooleanExtra(EXTRA_IS_SPECIFIED_SSID, false);
        }

        if (mIsSpecifiedSsid) {
            showProgressDialog(getString(R.string.network_connection_searching_message));
        } else {
            mDialogFragment = NetworkRequestDialogFragment.newInstance();
            mDialogFragment.show(getSupportFragmentManager(), TAG);
        }
    }

    private void showProgressDialog(String message) {
        dismissDialogs();

        mProgressDialog = new ProgressDialog(this);
        mProgressDialog.setIndeterminate(true);
        mProgressDialog.setCancelable(false);
        mProgressDialog.setMessage(message);
        mProgressDialog.show();
    }

    private void showSingleSsidRequestDialog(String ssid, boolean isTryAgain) {
        dismissDialogs();

        mDialogFragment = new NetworkRequestSingleSsidDialogFragment();
        final Bundle bundle = new Bundle();
        bundle.putString(NetworkRequestSingleSsidDialogFragment.EXTRA_SSID, ssid);
        bundle.putBoolean(NetworkRequestSingleSsidDialogFragment.EXTRA_TRYAGAIN, isTryAgain);
        mDialogFragment.setArguments(bundle);
        mDialogFragment.show(getSupportFragmentManager(), TAG);
    }

    private void dismissDialogs() {
        if (mDialogFragment != null) {
            mDialogFragment.dismiss();
            mDialogFragment = null;
        }
        if (mProgressDialog != null) {
            mProgressDialog.dismiss();
            mProgressDialog = null;
        }
    }

    @Override
    protected void onResume() {
        super.onResume();

        final WifiManager wifiManager = getSystemService(WifiManager.class);
        if (wifiManager != null) {
            wifiManager.registerNetworkRequestMatchCallback(this, mHandler);
        }
        // Sets time-out to stop scanning.
        mHandler.sendEmptyMessageDelayed(MESSAGE_STOP_SCAN_WIFI_LIST, DELAY_TIME_STOP_SCAN_MS);
    }

    @Override
    protected void onPause() {
        mHandler.removeMessages(MESSAGE_STOP_SCAN_WIFI_LIST);
        final WifiManager wifiManager = getSystemService(WifiManager.class);
        if (wifiManager != null) {
            wifiManager.unregisterNetworkRequestMatchCallback(this);
        }

        super.onPause();
    }

    private final Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case MESSAGE_STOP_SCAN_WIFI_LIST:
                    removeMessages(MESSAGE_STOP_SCAN_WIFI_LIST);
                    stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE.TIME_OUT);
                    break;
                default:
                    // Do nothing.
                    break;
            }
        }
    };

    protected void stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE type) {
        dismissDialogs();

        // Throws error dialog.
        final DialogFragment dialogFragment = NetworkRequestErrorDialogFragment.newInstance();
        final Bundle bundle = new Bundle();
        bundle.putSerializable(NetworkRequestErrorDialogFragment.DIALOG_TYPE, type);
        dialogFragment.setArguments(bundle);
        dialogFragment.show(getSupportFragmentManager(), TAG);
        mShowingErrorDialog = true;
    }

    @Override
    public void onUserSelectionCallbackRegistration(
        NetworkRequestUserSelectionCallback userSelectionCallback) {
        if (mIsSpecifiedSsid) {
            mUserSelectionCallback = userSelectionCallback;
            return;
        }

        mDialogFragment.onUserSelectionCallbackRegistration(userSelectionCallback);
    }

    @Override
    public void onAbort() {
        stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE.ABORT);
    }

    @Override
    public void onMatch(List<ScanResult> scanResults) {
        if (mShowingErrorDialog) {
            // Don't do anything since error dialog shows.
            return;
        }

        mHandler.removeMessages(MESSAGE_STOP_SCAN_WIFI_LIST);

        if (mIsSpecifiedSsid) {
            // Prevent from throwing same dialog, because onMatch() will be called many times.
            if (mMatchedConfig == null) {
                mMatchedConfig = WifiUtils.getWifiConfig(
                    null /* accesspoint */, scanResults.get(0), null /* password */);
                showSingleSsidRequestDialog(
                    WifiInfo.removeDoubleQuotes(mMatchedConfig.SSID), false /* isTryAgain */);
            }
            return;
        }

        mDialogFragment.onMatch(scanResults);
    }

    @Override
    public void onUserSelectionConnectSuccess(WifiConfiguration wificonfiguration) {
        if (!isFinishing()) {
            Toast.makeText(this, R.string.network_connection_connect_successful,
                Toast.LENGTH_SHORT).show();
            setResult(RESULT_OK);
            finish();
        }
    }

    @Override
    public void onUserSelectionConnectFailure(WifiConfiguration wificonfiguration) {
        if (mIsSpecifiedSsid) {
            showSingleSsidRequestDialog(
                WifiInfo.removeDoubleQuotes(mMatchedConfig.SSID), true /* isTryAgain */);
            return;
        }

        mDialogFragment.onUserSelectionConnectFailure(wificonfiguration);
    }

    // Called when user click "Connect" button. Called by
    // {@code NetworkRequestSingleSsidDialogFragment}.
    public void onClickConnectButton() {
        if (mUserSelectionCallback != null) {
            mUserSelectionCallback.select(mMatchedConfig);
            showProgressDialog(getString(R.string.network_connection_connecting_message));
        }
    }

    // Called when user click retry button. Called by {@link NetworkRequestErrorDialogFragment}.
    public void onClickRescanButton() {
        // Sets time-out to stop scanning.
        mHandler.sendEmptyMessageDelayed(MESSAGE_STOP_SCAN_WIFI_LIST, DELAY_TIME_STOP_SCAN_MS);

        mShowingErrorDialog = false;

        if (mIsSpecifiedSsid) {
            mMatchedConfig = null;
            showProgressDialog(getString(R.string.network_connection_searching_message));
        } else {
            mDialogFragment = NetworkRequestDialogFragment.newInstance();
            mDialogFragment.show(getSupportFragmentManager(), TAG);
        }
    }

    // Called when user click cancel button.
    public void onCancel() {
        dismissDialogs();

        if (mUserSelectionCallback != null) {
            mUserSelectionCallback.reject();
        }
        finish();
    }
}
+90 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2019 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;

import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager.NetworkRequestUserSelectionCallback;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import java.util.List;

/**
 * This is base fragment of {@link NetworkRequestDialogFragment} and
 * {@link NetworkRequestSingleSsidDialogFragment} to handle activity callback methods.
 */
abstract public class NetworkRequestDialogBaseFragment extends InstrumentedDialogFragment {

    @VisibleForTesting
    final static String EXTRA_APP_NAME = "com.android.settings.wifi.extra.APP_NAME";

    NetworkRequestDialogActivity mActivity = null;

    protected String getTitle() {
        final Intent intent = getActivity().getIntent();
        String appName = "";
        if (intent != null) {
            appName = intent.getStringExtra(EXTRA_APP_NAME);
        }

        return getString(R.string.network_connection_request_dialog_title, appName);
    }

    @Override
    public int getMetricsCategory() {
        return SettingsEnums.WIFI_SCANNING_NEEDED_DIALOG;
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof NetworkRequestDialogActivity) {
            mActivity = (NetworkRequestDialogActivity) context;
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mActivity = null;
    }

    @Override
    public void onCancel(@NonNull DialogInterface dialog) {
        super.onCancel(dialog);

        if (mActivity != null) {
            mActivity.onCancel();
        }
    }

    protected void onUserSelectionCallbackRegistration(
            NetworkRequestUserSelectionCallback userSelectionCallback) {
    }

    protected void onMatch(List<ScanResult> scanResults) {
    }

    protected void onUserSelectionConnectFailure(WifiConfiguration wificonfiguration) {
    }
}
+2 −158
Original line number Diff line number Diff line
@@ -16,21 +16,15 @@

package com.android.settings.wifi;

import android.app.Activity;
import android.app.Dialog;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiManager.NetworkRequestMatchCallback;
import android.net.wifi.WifiManager.NetworkRequestUserSelectionCallback;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
@@ -40,22 +34,16 @@ import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
import androidx.preference.internal.PreferenceImageView;

import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.wifi.NetworkRequestErrorDialogFragment.ERROR_DIALOG_TYPE;
import com.android.settingslib.Utils;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.WifiTracker;
import com.android.settingslib.wifi.WifiTrackerFactory;

import java.util.ArrayList;
import java.util.List;

@@ -64,11 +52,8 @@ import java.util.List;
 * behaviors of the callback when requesting wifi network, except for error message. When error
 * happens, {@link NetworkRequestErrorDialogFragment} will be called to display error message.
 */
public class NetworkRequestDialogFragment extends InstrumentedDialogFragment implements
        DialogInterface.OnClickListener, NetworkRequestMatchCallback {

    /** Message sent to us to stop scanning wifi and pop up timeout dialog. */
    private static final int MESSAGE_STOP_SCAN_WIFI_LIST = 0;
public class NetworkRequestDialogFragment extends NetworkRequestDialogBaseFragment implements
        DialogInterface.OnClickListener{

    /**
     * Spec defines there should be 5 wifi ap on the list at most or just show all if {@code
@@ -77,20 +62,10 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
    private static final int MAX_NUMBER_LIST_ITEM = 5;
    private boolean mShowLimitedItem = true;

    /** Delayed time to stop scanning wifi. */
    private static final int DELAY_TIME_STOP_SCAN_MS = 30 * 1000;

    @VisibleForTesting
    final static String EXTRA_APP_NAME = "com.android.settings.wifi.extra.APP_NAME";
    final static String EXTRA_IS_SPECIFIED_SSID =
            "com.android.settings.wifi.extra.REQUEST_IS_FOR_SINGLE_NETWORK";

    private List<AccessPoint> mAccessPointList;
    private FilterWifiTracker mFilterWifiTracker;
    private AccessPointAdapter mDialogAdapter;
    private NetworkRequestUserSelectionCallback mUserSelectionCallback;
    private boolean mIsSpecifiedSsid;
    private boolean mWaitingConnectCallback;

    public static NetworkRequestDialogFragment newInstance() {
        NetworkRequestDialogFragment dialogFragment = new NetworkRequestDialogFragment();
@@ -108,11 +83,6 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
        final TextView title = customTitle.findViewById(R.id.network_request_title_text);
        title.setText(getTitle());

        final Intent intent = getActivity().getIntent();
        if (intent != null) {
            mIsSpecifiedSsid = intent.getBooleanExtra(EXTRA_IS_SPECIFIED_SSID, false);
        }

        final ProgressBar progressBar = customTitle.findViewById(
                R.id.network_request_title_progress);
        progressBar.setVisibility(View.VISIBLE);
@@ -128,9 +98,6 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
                // Do nothings, will replace the onClickListener to avoid auto closing dialog.
                .setNeutralButton(R.string.network_connection_request_dialog_showall,
                        null /* OnClickListener */);
        if (mIsSpecifiedSsid) {
            builder.setPositiveButton(R.string.wifi_connect, null /* OnClickListener */);
        }

        // Clicking list item is to connect wifi ap.
        final AlertDialog dialog = builder.create();
@@ -152,32 +119,10 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
                notifyAdapterRefresh();
                neutralBtn.setVisibility(View.GONE);
            });

            // Replace Positive onClickListener to avoid closing dialog
            if (mIsSpecifiedSsid) {
                final Button positiveBtn = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
                positiveBtn.setOnClickListener(v -> {
                    // When clicking connect button, should connect to the first and the only one
                    // list item.
                    this.onClick(dialog, 0 /* position */);
                });
                // Disable button in first, and enable it after there are some accesspoints in list.
                positiveBtn.setEnabled(false);
            }
        });
        return dialog;
    }

    private String getTitle() {
        final Intent intent = getActivity().getIntent();
        String appName = "";
        if (intent != null) {
            appName = intent.getStringExtra(EXTRA_APP_NAME);
        }

        return getString(R.string.network_connection_request_dialog_title, appName);
    }

    @NonNull
    List<AccessPoint> getAccessPointList() {
        // Initials list for adapter, in case of display crashing.
@@ -211,9 +156,6 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp

            if (wifiConfig != null) {
                mUserSelectionCallback.select(wifiConfig);

                mWaitingConnectCallback = true;
                updateConnectButton(false);
            }
        }
    }
@@ -221,10 +163,6 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
    @Override
    public void onCancel(@NonNull DialogInterface dialog) {
        super.onCancel(dialog);
        // Finishes the activity when user clicks back key or outside of the dialog.
        if (getActivity() != null) {
            getActivity().finish();
        }
        if (mUserSelectionCallback != null) {
            mUserSelectionCallback.reject();
        }
@@ -234,13 +172,6 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
    public void onPause() {
        super.onPause();

        mHandler.removeMessages(MESSAGE_STOP_SCAN_WIFI_LIST);
        final WifiManager wifiManager = getContext().getApplicationContext()
                .getSystemService(WifiManager.class);
        if (wifiManager != null) {
            wifiManager.unregisterNetworkRequestMatchCallback(this);
        }

        if (mFilterWifiTracker != null) {
            mFilterWifiTracker.onPause();
        }
@@ -268,23 +199,6 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
        }
    }

    private void updateConnectButton(boolean enabled) {
        // The button is only showed in single SSID mode.
        if (!mIsSpecifiedSsid) {
            return;
        }

        final AlertDialog alertDialog = (AlertDialog) getDialog();
        if (alertDialog == null) {
            return;
        }

        final Button positiveBtn = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
        if (positiveBtn != null) {
            positiveBtn.setEnabled(enabled);
        }
    }

    private void hideProgressIcon() {
        final AlertDialog alertDialog = (AlertDialog) getDialog();
        if (alertDialog == null) {
@@ -301,57 +215,12 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
    public void onResume() {
        super.onResume();

        final WifiManager wifiManager = getContext().getApplicationContext()
                .getSystemService(WifiManager.class);
        if (wifiManager != null) {
            wifiManager.registerNetworkRequestMatchCallback(this, mHandler);
        }
        // Sets time-out to stop scanning.
        mHandler.sendEmptyMessageDelayed(MESSAGE_STOP_SCAN_WIFI_LIST, DELAY_TIME_STOP_SCAN_MS);

        if (mFilterWifiTracker == null) {
            mFilterWifiTracker = new FilterWifiTracker(getActivity(), getSettingsLifecycle());
        }
        mFilterWifiTracker.onResume();
    }

    private final Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case MESSAGE_STOP_SCAN_WIFI_LIST:
                    removeMessages(MESSAGE_STOP_SCAN_WIFI_LIST);
                    stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE.TIME_OUT);
                    break;
                default:
                    // Do nothing.
                    break;
            }
        }
    };

    protected void stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE type) {
        // Dismisses current dialog.
        final Dialog dialog =  getDialog();
        if (dialog != null && dialog.isShowing()) {
            dismiss();
        }

        // Throws error dialog.
        final NetworkRequestErrorDialogFragment fragment = NetworkRequestErrorDialogFragment
                .newInstance();
        final Bundle bundle = new Bundle();
        bundle.putSerializable(NetworkRequestErrorDialogFragment.DIALOG_TYPE, type);
        fragment.setArguments(bundle);
        fragment.show(getActivity().getSupportFragmentManager(),
                NetworkRequestDialogFragment.class.getSimpleName());
    }

    @Override
    public int getMetricsCategory() {
        return SettingsEnums.WIFI_SCANNING_NEEDED_DIALOG;
    }

    private class AccessPointAdapter extends ArrayAdapter<AccessPoint> {

        private final int mResourceId;
@@ -407,11 +276,6 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
        }
    }

    @Override
    public void onAbort() {
        stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE.ABORT);
    }

    @Override
    public void onUserSelectionCallbackRegistration(
            NetworkRequestUserSelectionCallback userSelectionCallback) {
@@ -422,7 +286,6 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
    public void onMatch(List<ScanResult> scanResults) {
        // Shouldn't need to renew cached list, since input result is empty.
        if (scanResults != null && scanResults.size() > 0) {
            mHandler.removeMessages(MESSAGE_STOP_SCAN_WIFI_LIST);
            renewAccessPointList(scanResults);

            notifyAdapterRefresh();
@@ -455,21 +318,9 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
        }
    }

    @Override
    public void onUserSelectionConnectSuccess(WifiConfiguration wificonfiguration) {
        final Activity activity = getActivity();
        if (activity != null) {
            Toast.makeText(activity, R.string.network_connection_connect_successful,
                    Toast.LENGTH_SHORT).show();
            activity.finish();
        }
    }

    @Override
    public void onUserSelectionConnectFailure(WifiConfiguration wificonfiguration) {
        // Do nothing when selection is failed, let user could try again easily.
        mWaitingConnectCallback = false;
        updateConnectButton(true);
    }

    private final class FilterWifiTracker {
@@ -526,13 +377,6 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
            if (count > 0) {
                hideProgressIcon();
            }
            // Enable connect button if there is Accesspoint item, except for the situation that
            // user click but connected status doesn't come back yet.
            if (count < 0) {
                updateConnectButton(false);
            } else if (!mWaitingConnectCallback) {
                updateConnectButton(true);
            }

            return result;
        }
+6 −7

File changed.

Preview size limit exceeded, changes collapsed.

Loading