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

Commit 40adeaf2 authored by Stephen Chen's avatar Stephen Chen Committed by android-build-merger
Browse files

Improve responsiveness of toggling wifi and refactor user restriction logic.

am: 19b74d92

Change-Id: I0d776b5e4325782b9c6ad05beae51ca7e902fd22
parents 1599dde8 19b74d92
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -57,8 +57,7 @@ public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListene
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {
                handleWifiStateChanged(intent.getIntExtra(
                        WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN));
                handleWifiStateChanged(mWifiManager.getWifiState());
            } else if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)) {
                if (!mConnected.get()) {
                    handleStateChanged(WifiInfo.getDetailedStateOf((SupplicantState)
+47 −51
Original line number Diff line number Diff line
@@ -196,7 +196,6 @@ public class WifiSettings extends RestrictedSettingsFragment

        mConnectedAccessPointPreferenceCategory =
                (PreferenceCategory) findPreference(PREF_KEY_CONNECTED_ACCESS_POINTS);

        mAccessPointsPreferenceCategory =
                (PreferenceCategory) findPreference(PREF_KEY_ACCESS_POINTS);
        mAdditionalSettingsPreferenceCategory =
@@ -204,10 +203,6 @@ public class WifiSettings extends RestrictedSettingsFragment
        mConfigureWifiSettingsPreference = findPreference(PREF_KEY_CONFIGURE_WIFI_SETTINGS);
        mSavedNetworksPreference = findPreference(PREF_KEY_SAVED_NETWORKS);

        if (isUiRestricted()) {
            getPreferenceScreen().removePreference(mAdditionalSettingsPreferenceCategory);
        }

        Context prefContext = getPrefContext();
        mAddPreference = new Preference(prefContext);
        mAddPreference.setIcon(R.drawable.ic_menu_add_inset);
@@ -216,6 +211,11 @@ public class WifiSettings extends RestrictedSettingsFragment

        mUserBadgeCache = new AccessPointPreference.UserBadgeCache(getPackageManager());

        if (isUiRestricted()) {
            getPreferenceScreen().removePreference(mAdditionalSettingsPreferenceCategory);
            addMessagePreference(R.string.wifi_empty_list_user_restricted);
        }

        mBgThread = new HandlerThread(TAG, Process.THREAD_PRIORITY_BACKGROUND);
        mBgThread.start();
    }
@@ -314,7 +314,7 @@ public class WifiSettings extends RestrictedSettingsFragment

        if (intent.hasExtra(EXTRA_START_CONNECT_SSID)) {
            mOpenSsid = intent.getStringExtra(EXTRA_START_CONNECT_SSID);
            onAccessPointsChanged();
            updateAccessPointsDelayed();
        }
    }

@@ -614,53 +614,75 @@ public class WifiSettings extends RestrictedSettingsFragment
    }

    /**
     * Shows the latest access points available with supplemental information like
     * the strength of network and the security for it.
     * Called to indicate the list of AccessPoints has been updated and
     * getAccessPoints should be called to get the latest information.
     */
    @Override
    public void onAccessPointsChanged() {
        updateAccessPointsDelayed();
    }

    /**
     * Updates access points from {@link WifiManager#getScanResults()}. Adds a delay to have
     * progress bar displayed before starting to modify APs.
     */
    private void updateAccessPointsDelayed() {
        // Safeguard from some delayed event handling
        if (getActivity() == null) return;
        final int wifiState = mWifiManager.getWifiState();
        if (isUiRestricted()) {
            removeConnectedAccessPointPreference();
            mAccessPointsPreferenceCategory.removeAll();
            if (!isUiRestrictedByOnlyAdmin()) {
                if (wifiState == WifiManager.WIFI_AP_STATE_DISABLED) {
                    setOffMessage();
                } else {
                    addMessagePreference(R.string.wifi_empty_list_user_restricted);
        if (getActivity() != null && !isUiRestricted() && mWifiManager.isWifiEnabled()) {
            setProgressBarVisible(true);
            getView().postDelayed(mUpdateAccessPointsRunnable, 300 /* delay milliseconds */);
        }
    }

    /** Called when the state of Wifi has changed. */
    @Override
    public void onWifiStateChanged(int state) {
        if (isUiRestricted()) {
            return;
        }

        final int wifiState = mWifiManager.getWifiState();
        switch (wifiState) {
            case WifiManager.WIFI_STATE_ENABLED:
                setProgressBarVisible(true);
                // Have the progress bar displayed before starting to modify APs
                getView().postDelayed(mUpdateAccessPointsRunnable, 300 /* delay milliseconds */);
                updateAccessPointsDelayed();
                break;

            case WifiManager.WIFI_STATE_ENABLING:
                removeConnectedAccessPointPreference();
                mAccessPointsPreferenceCategory.removeAll();
                addMessagePreference(R.string.wifi_starting);
                setProgressBarVisible(true);
                break;

            case WifiManager.WIFI_STATE_DISABLING:
                removeConnectedAccessPointPreference();
                mAccessPointsPreferenceCategory.removeAll();
                addMessagePreference(R.string.wifi_stopping);
                break;

            case WifiManager.WIFI_STATE_DISABLED:
                setOffMessage();
                setConfigureWifiSettingsVisibility();
                setProgressBarVisible(false);
                break;
        }
    }

    /**
     * Called when the connection state of wifi has changed and isConnected
     * should be called to get the updated state.
     */
    @Override
    public void onConnectedChanged() {
        updateAccessPointsDelayed();
        changeNextButtonState(mWifiTracker.isConnected());
    }


    private void updateAccessPointPreferences() {
        // in case state has changed
        if (!mWifiManager.isWifiEnabled()) {
            return;
        }
        // AccessPoints are sorted by the WifiTracker
        final List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints();

@@ -796,10 +818,6 @@ public class WifiSettings extends RestrictedSettingsFragment
    }

    private void setConfigureWifiSettingsVisibility() {
        if (isUiRestricted()) {
            mAdditionalSettingsPreferenceCategory.removeAll();
            return;
        }
        mAdditionalSettingsPreferenceCategory.addPreference(mConfigureWifiSettingsPreference);
        boolean wifiWakeupEnabled = Settings.Global.getInt(
                getContentResolver(), Settings.Global.WIFI_WAKEUP_ENABLED, 0) == 1;
@@ -824,7 +842,7 @@ public class WifiSettings extends RestrictedSettingsFragment
        // read the system settings directly. Because when the device is in Airplane mode, even if
        // Wi-Fi scanning mode is on, WifiManager.isScanAlwaysAvailable() still returns "off".
        final ContentResolver resolver = getActivity().getContentResolver();
        final boolean wifiScanningMode = !isUiRestricted() && Settings.Global.getInt(
        final boolean wifiScanningMode = Settings.Global.getInt(
                resolver, Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE, 0) == 1;

        if (!wifiScanningMode) {
@@ -858,30 +876,8 @@ public class WifiSettings extends RestrictedSettingsFragment

    protected void setProgressBarVisible(boolean visible) {
        if (mProgressHeader != null) {
            mProgressHeader.setVisibility(
                    visible && !isUiRestricted() ? View.VISIBLE : View.INVISIBLE);
        }
            mProgressHeader.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
        }

    @Override
    public void onWifiStateChanged(int state) {
        switch (state) {
            case WifiManager.WIFI_STATE_ENABLING:
                addMessagePreference(R.string.wifi_starting);
                setProgressBarVisible(true);
                break;

            case WifiManager.WIFI_STATE_DISABLED:
                setOffMessage();
                setProgressBarVisible(false);
                break;
        }
    }

    @Override
    public void onConnectedChanged() {
        onAccessPointsChanged();
        changeNextButtonState(mWifiTracker.isConnected());
    }

    /**