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

Commit c6691520 authored by Zoey Chen's avatar Zoey Chen Committed by Android (Google) Code Review
Browse files

Merge changes from topics "launch_wifi_details-sc-qpr1-dev",...

Merge changes from topics "launch_wifi_details-sc-qpr1-dev", "refactor_icon_injector-sc-qpr1-dev" into sc-qpr1-dev

* changes:
  Refactor InternetIconInjector to SettingsLib
  [Provider Model] Cherry-pick from ag/15243691, ag/15287619, ag/15287620 and ag/15270751
parents 50bdf2b5 c3e15d3f
Loading
Loading
Loading
Loading
+55 −0
Original line number Diff line number Diff line
@@ -20,10 +20,13 @@ import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.NETWORK_
import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.getMaxNetworkSelectionDisableReason;

import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiConfiguration.NetworkSelectionStatus;
import android.net.wifi.WifiInfo;
import android.os.Bundle;
import android.os.SystemClock;

import androidx.annotation.VisibleForTesting;
@@ -36,6 +39,23 @@ public class WifiUtils {

    private static final int INVALID_RSSI = -127;

    /**
     * The intent action shows network details settings to allow configuration of Wi-Fi.
     * <p>
     * In some cases, a matching Activity may not exist, so ensure you
     * safeguard against this.
     * <p>
     * Input: The calling package should put the chosen
     * com.android.wifitrackerlib.WifiEntry#getKey() to a string extra in the request bundle into
     * the {@link #KEY_CHOSEN_WIFIENTRY_KEY}.
     * <p>
     * Output: Nothing.
     */
    public static final String ACTION_WIFI_DETAILS_SETTINGS =
            "android.settings.WIFI_DETAILS_SETTINGS";
    public static final String KEY_CHOSEN_WIFIENTRY_KEY = "key_chosen_wifientry_key";
    public static final String EXTRA_SHOW_FRAGMENT_ARGUMENTS = ":settings:show_fragment_args";

    static final int[] WIFI_PIE = {
            com.android.internal.R.drawable.ic_wifi_signal_0,
            com.android.internal.R.drawable.ic_wifi_signal_1,
@@ -275,7 +295,42 @@ public class WifiUtils {
        return noInternet ? NO_INTERNET_WIFI_PIE[level] : WIFI_PIE[level];
    }

    /**
     * Wrapper the {@link #getInternetIconResource} for testing compatibility.
     */
    public static class InternetIconInjector {

        protected final Context mContext;

        public InternetIconInjector(Context context) {
            mContext = context;
        }

        /**
         * Returns the Internet icon for a given RSSI level.
         *
         * @param noInternet True if a connected Wi-Fi network cannot access the Internet
         * @param level The number of bars to show (0-4)
         */
        public Drawable getIcon(boolean noInternet, int level) {
            return mContext.getDrawable(WifiUtils.getInternetIconResource(level, noInternet));
        }
    }

    public static boolean isMeteredOverridden(WifiConfiguration config) {
        return config.meteredOverride != WifiConfiguration.METERED_OVERRIDE_NONE;
    }

    /**
     * Returns the Intent for Wi-Fi network details settings.
     *
     * @param key The Wi-Fi entry key
     */
    public static Intent getWifiDetailsSettingsIntent(String key) {
        final Intent intent = new Intent(ACTION_WIFI_DETAILS_SETTINGS);
        final Bundle bundle = new Bundle();
        bundle.putString(KEY_CHOSEN_WIFIENTRY_KEY, key);
        intent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, bundle);
        return intent;
    }
}
+32 −2
Original line number Diff line number Diff line
@@ -20,9 +20,12 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.Intent;
import android.net.NetworkKey;
import android.net.RssiCurve;
import android.net.ScoredNetwork;
@@ -36,6 +39,8 @@ import android.os.SystemClock;
import android.text.format.DateUtils;
import android.util.ArraySet;

import androidx.test.core.app.ApplicationProvider;

import com.android.settingslib.R;

import org.junit.Before;
@@ -44,7 +49,6 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;

import java.util.ArrayList;
import java.util.Set;
@@ -69,7 +73,7 @@ public class WifiUtilsTest {
    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mContext = RuntimeEnvironment.application;
        mContext = spy(ApplicationProvider.getApplicationContext());
    }

    @Test
@@ -148,6 +152,32 @@ public class WifiUtilsTest {
        assertThat(WifiUtils.isMeteredOverridden(mWifiConfig)).isTrue();
    }

    @Test
    public void getWifiDetailsSettingsIntent_returnsCorrectValues() {
        final String key = "test_key";

        final Intent intent = WifiUtils.getWifiDetailsSettingsIntent(key);

        assertThat(intent.getAction()).isEqualTo(WifiUtils.ACTION_WIFI_DETAILS_SETTINGS);
        final Bundle bundle = intent.getBundleExtra(WifiUtils.EXTRA_SHOW_FRAGMENT_ARGUMENTS);
        assertThat(bundle.getString(WifiUtils.KEY_CHOSEN_WIFIENTRY_KEY)).isEqualTo(key);
    }

    @Test
    public void testInternetIconInjector_getIcon_returnsCorrectValues() {
        WifiUtils.InternetIconInjector iconInjector = new WifiUtils.InternetIconInjector(mContext);

        for (int level = 0; level <= 4; level++) {
            iconInjector.getIcon(false /* noInternet */, level);
            verify(mContext).getDrawable(
                    WifiUtils.getInternetIconResource(level, false /* noInternet */));

            iconInjector.getIcon(true /* noInternet */, level);
            verify(mContext).getDrawable(
                    WifiUtils.getInternetIconResource(level, true /* noInternet */));
        }
    }

    private static ArrayList<ScanResult> buildScanResultCache() {
        ArrayList<ScanResult> scanResults = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
+9 −9
Original line number Diff line number Diff line
@@ -58,6 +58,15 @@
        android:layout_height="1dp"
        android:background="?android:attr/listDivider"/>

    <ProgressBar
        android:id="@+id/wifi_searching_progress"
        android:indeterminate="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="1dp"
        android:maxHeight="1dp"
        style="@*android:style/Widget.Material.ProgressBar.Horizontal"/>

    <androidx.core.widget.NestedScrollView
        android:id="@+id/scroll_view"
        android:layout_width="match_parent"
@@ -149,15 +158,6 @@

                </LinearLayout>

                <ProgressBar
                    android:id="@+id/wifi_searching_progress"
                    android:indeterminate="true"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:minHeight="1dp"
                    android:maxHeight="1dp"
                    style="@*android:style/Widget.Material.ProgressBar.Horizontal"/>

                <LinearLayout
                    android:id="@+id/turn_on_wifi_layout"
                    android:layout_width="match_parent"
+6 −3
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ import com.android.systemui.qs.logging.QSLogger;
import com.android.systemui.qs.tileimpl.QSTileImpl;
import com.android.systemui.qs.tiles.dialog.InternetDialogFactory;
import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.statusbar.policy.NetworkController.AccessPointController;
import com.android.systemui.statusbar.policy.NetworkController.IconState;
import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators;
import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
@@ -69,6 +70,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
    private static final Intent WIFI_SETTINGS = new Intent(Settings.ACTION_WIFI_SETTINGS);

    protected final NetworkController mController;
    private final AccessPointController mAccessPointController;
    private final DataUsageController mDataController;
    // The last updated tile state, 0: mobile, 1: wifi, 2: ethernet.
    private int mLastTileState = -1;
@@ -88,6 +90,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
            ActivityStarter activityStarter,
            QSLogger qsLogger,
            NetworkController networkController,
            AccessPointController accessPointController,
            InternetDialogFactory internetDialogFactory
    ) {
        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
@@ -95,6 +98,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
        mInternetDialogFactory = internetDialogFactory;
        mHandler = mainHandler;
        mController = networkController;
        mAccessPointController = accessPointController;
        mDataController = mController.getMobileDataController();
        mController.observe(getLifecycle(), mSignalCallback);
    }
@@ -118,9 +122,8 @@ public class InternetTile extends QSTileImpl<SignalState> {

    @Override
    protected void handleClick(@Nullable View view) {
        mHandler.post(() -> {
            mInternetDialogFactory.create(true);
        });
        boolean canConfigMobileData = mAccessPointController.canConfigMobileData();
        mHandler.post(() -> mInternetDialogFactory.create(true, canConfigMobileData));
    }

    @Override
+21 −10
Original line number Diff line number Diff line
@@ -55,6 +55,10 @@ import android.widget.Space;
import android.widget.Switch;
import android.widget.TextView;

import androidx.annotation.VisibleForTesting;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.android.internal.logging.UiEvent;
import com.android.internal.logging.UiEventLogger;
import com.android.settingslib.Utils;
@@ -67,10 +71,6 @@ import com.android.wifitrackerlib.WifiEntry;

import java.util.List;

import androidx.annotation.VisibleForTesting;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

/**
 * Dialog for showing mobile network, connected Wi-Fi network and Wi-Fi networks.
 */
@@ -126,6 +126,7 @@ public class InternetDialog extends SystemUIDialog implements
    private int mListMaxHeight;
    private int mDefaultDataSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
    private boolean mIsProgressBarVisible;
    private boolean mCanConfigMobileData;

    private final ViewTreeObserver.OnGlobalLayoutListener mInternetListLayoutListener = () -> {
        // Set max height for list
@@ -137,7 +138,7 @@ public class InternetDialog extends SystemUIDialog implements
    };

    public InternetDialog(Context context, InternetDialogFactory internetDialogFactory,
            InternetDialogController internetDialogController,
            InternetDialogController internetDialogController, boolean canConfigMobileData,
            boolean aboveStatusBar, UiEventLogger uiEventLogger, @Main Handler handler) {
        super(context, R.style.Theme_SystemUI_Dialog_Internet);
        if (DEBUG) {
@@ -151,6 +152,7 @@ public class InternetDialog extends SystemUIDialog implements
        mDefaultDataSubId = mInternetDialogController.getDefaultDataSubscriptionId();
        mTelephonyManager = mInternetDialogController.getTelephonyManager();
        mWifiManager = mInternetDialogController.getWifiManager();
        mCanConfigMobileData = canConfigMobileData;

        mLayoutManager = new LinearLayoutManager(mContext) {
            @Override
@@ -298,9 +300,7 @@ public class InternetDialog extends SystemUIDialog implements
                                isChecked, false);
                    }
                });
        mConnectedWifListLayout.setOnClickListener(v -> {
            // TODO(b/191475923): Need to launch the detailed page of Wi-Fi entry.
        });
        mConnectedWifListLayout.setOnClickListener(v -> onClickConnectedWifi());
        mSeeAllLayout.setOnClickListener(v -> onClickSeeMoreButton());
        mWiFiToggle.setOnCheckedChangeListener(
                (buttonView, isChecked) -> {
@@ -319,8 +319,13 @@ public class InternetDialog extends SystemUIDialog implements
            mMobileDataToggle.setChecked(mInternetDialogController.isMobileDataEnabled());
            mMobileNetworkLayout.setVisibility(View.VISIBLE);
            mMobileTitleText.setText(getMobileNetworkTitle());
            if (!TextUtils.isEmpty(getMobileNetworkSummary())) {
                mMobileSummaryText.setText(
                        Html.fromHtml(getMobileNetworkSummary(), Html.FROM_HTML_MODE_LEGACY));
                mMobileSummaryText.setVisibility(View.VISIBLE);
            } else {
                mMobileSummaryText.setVisibility(View.GONE);
            }
            mSignalIcon.setImageDrawable(getSignalStrengthDrawable());
            int titleColor = isCellularNetwork ? mContext.getColor(
                    R.color.connected_network_primary_color) : Utils.getColorAttrDefaultColor(
@@ -331,6 +336,8 @@ public class InternetDialog extends SystemUIDialog implements
            mMobileTitleText.setTextColor(titleColor);
            mMobileSummaryText.setTextColor(summaryColor);
            mMobileNetworkLayout.setBackground(isCellularNetwork ? mBackgroundOn : null);

            mMobileDataToggle.setVisibility(mCanConfigMobileData ? View.VISIBLE : View.INVISIBLE);
        }
    }

@@ -354,6 +361,10 @@ public class InternetDialog extends SystemUIDialog implements
        mConnectedWifListLayout.setBackground(mBackgroundOn);
    }

    void onClickConnectedWifi() {
        mInternetDialogController.launchWifiNetworkDetailsSetting();
    }

    void onClickSeeMoreButton() {
        mInternetDialogController.launchNetworkSetting();
    }
Loading