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

Commit 60c1d4ec authored by Sundeep Ghuman's avatar Sundeep Ghuman
Browse files

Fix startup jank in the Wifi Picker.

Synchronously fetch the latest APs during onResume and show these before
displaying the other wifi preferences. This fixes a visibile shuffling
issue. Additional Setting preferences are now programatically added
during onStart and hidden during onStop in order to avoid the animation
delay which causes a shuffling effect.

Bug: b/36406983
Test: Visual inspection. Animation jank is difficult to programatically
test.

Change-Id: I34b2d737a8e72e1dc296c170f753975fafce7a3e
parent a0e617f9
Loading
Loading
Loading
Loading
+30 −5
Original line number Original line Diff line number Diff line
@@ -90,6 +90,7 @@ public class WifiSettings extends RestrictedSettingsFragment
        WifiDialog.WifiDialogListener {
        WifiDialog.WifiDialogListener {


    private static final String TAG = "WifiSettings";
    private static final String TAG = "WifiSettings";
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);


    /* package */ static final int MENU_ID_WPS_PBC = Menu.FIRST;
    /* package */ static final int MENU_ID_WPS_PBC = Menu.FIRST;
    private static final int MENU_ID_WPS_PIN = Menu.FIRST + 1;
    private static final int MENU_ID_WPS_PIN = Menu.FIRST + 1;
@@ -203,6 +204,9 @@ public class WifiSettings extends RestrictedSettingsFragment
        mConfigureWifiSettingsPreference = findPreference(PREF_KEY_CONFIGURE_WIFI_SETTINGS);
        mConfigureWifiSettingsPreference = findPreference(PREF_KEY_CONFIGURE_WIFI_SETTINGS);
        mSavedNetworksPreference = findPreference(PREF_KEY_SAVED_NETWORKS);
        mSavedNetworksPreference = findPreference(PREF_KEY_SAVED_NETWORKS);


        // Hide additional settings until access points are shown during onStart
        showAdditionalSettings(false);

        Context prefContext = getPrefContext();
        Context prefContext = getPrefContext();
        mAddPreference = new Preference(prefContext);
        mAddPreference = new Preference(prefContext);
        mAddPreference.setIcon(R.drawable.ic_menu_add_inset);
        mAddPreference.setIcon(R.drawable.ic_menu_add_inset);
@@ -220,6 +224,17 @@ public class WifiSettings extends RestrictedSettingsFragment
        mBgThread.start();
        mBgThread.start();
    }
    }


    // TODO(b/37429702): Figure out how to temporarily disable animations during startup and remove
    // this method.
    private void showAdditionalSettings(boolean visible) {
        mAdditionalSettingsPreferenceCategory.setVisible(visible);
        mAdditionalSettingsPreferenceCategory.removeAll();
        if (visible) {
            mAdditionalSettingsPreferenceCategory.addPreference(mConfigureWifiSettingsPreference);
            mAdditionalSettingsPreferenceCategory.addPreference(mSavedNetworksPreference);
        }
    }

    @Override
    @Override
    public void onDestroy() {
    public void onDestroy() {
        mBgThread.quit();
        mBgThread.quit();
@@ -335,6 +350,17 @@ public class WifiSettings extends RestrictedSettingsFragment
        mWifiEnabler = createWifiEnabler();
        mWifiEnabler = createWifiEnabler();


        mWifiTracker.startTracking();
        mWifiTracker.startTracking();

        if (!isUiRestricted() && mWifiManager.isWifiEnabled()) {
            setProgressBarVisible(true);
            mWifiTracker.forceUpdate();
            if (DEBUG) Log.d(TAG, "WifiSettings onStart APs: " + mWifiTracker.getAccessPoints());

            getView().removeCallbacks(mUpdateAccessPointsRunnable);
            updateAccessPointPreferences();
        }

        showAdditionalSettings(true);
    }
    }


    /**
    /**
@@ -353,8 +379,6 @@ public class WifiSettings extends RestrictedSettingsFragment
        if (mWifiEnabler != null) {
        if (mWifiEnabler != null) {
            mWifiEnabler.resume(activity);
            mWifiEnabler.resume(activity);
        }
        }

        activity.invalidateOptionsMenu();
    }
    }


    @Override
    @Override
@@ -370,6 +394,7 @@ public class WifiSettings extends RestrictedSettingsFragment
        mWifiTracker.stopTracking();
        mWifiTracker.stopTracking();
        getView().removeCallbacks(mUpdateAccessPointsRunnable);
        getView().removeCallbacks(mUpdateAccessPointsRunnable);
        getView().removeCallbacks(mHideProgressBarRunnable);
        getView().removeCallbacks(mHideProgressBarRunnable);
        showAdditionalSettings(false);
        super.onStop();
        super.onStop();
    }
    }


@@ -733,7 +758,7 @@ public class WifiSettings extends RestrictedSettingsFragment
        removeCachedPrefs(mAccessPointsPreferenceCategory);
        removeCachedPrefs(mAccessPointsPreferenceCategory);
        mAddPreference.setOrder(index);
        mAddPreference.setOrder(index);
        mAccessPointsPreferenceCategory.addPreference(mAddPreference);
        mAccessPointsPreferenceCategory.addPreference(mAddPreference);
        setConfigureWifiSettingsVisibility();
        setAdditionalSettingsSummaries();


        if (!hasAvailableAccessPoints) {
        if (!hasAvailableAccessPoints) {
            setProgressBarVisible(true);
            setProgressBarVisible(true);
@@ -812,8 +837,8 @@ public class WifiSettings extends RestrictedSettingsFragment
        // in the Wifi Network Details Fragment
        // in the Wifi Network Details Fragment
        pref.getAccessPoint().saveWifiState(pref.getExtras());
        pref.getAccessPoint().saveWifiState(pref.getExtras());
        pref.setFragment(WifiNetworkDetailsFragment.class.getName());
        pref.setFragment(WifiNetworkDetailsFragment.class.getName());

        pref.refresh();
        pref.refresh();

        mConnectedAccessPointPreferenceCategory.addPreference(pref);
        mConnectedAccessPointPreferenceCategory.addPreference(pref);
        mConnectedAccessPointPreferenceCategory.setVisible(true);
        mConnectedAccessPointPreferenceCategory.setVisible(true);
    }
    }
@@ -824,7 +849,7 @@ public class WifiSettings extends RestrictedSettingsFragment
        mConnectedAccessPointPreferenceCategory.setVisible(false);
        mConnectedAccessPointPreferenceCategory.setVisible(false);
    }
    }


    private void setConfigureWifiSettingsVisibility() {
    private void setAdditionalSettingsSummaries() {
        mAdditionalSettingsPreferenceCategory.addPreference(mConfigureWifiSettingsPreference);
        mAdditionalSettingsPreferenceCategory.addPreference(mConfigureWifiSettingsPreference);
        boolean wifiWakeupEnabled = Settings.Global.getInt(
        boolean wifiWakeupEnabled = Settings.Global.getInt(
                getContentResolver(), Settings.Global.WIFI_WAKEUP_ENABLED, 0) == 1;
                getContentResolver(), Settings.Global.WIFI_WAKEUP_ENABLED, 0) == 1;