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

Commit 67bd9226 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[Provider Model] Show gear icon for Printer/GoPro Wi-Fi network" into sc-qpr1-dev

parents 56f29b16 a0cb9839
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -70,7 +70,7 @@
                android:id="@+id/wifi_summary"
                android:textDirection="locale"
                android:layout_width="wrap_content"
                android:layout_height="20dp"
                android:layout_height="wrap_content"
                android:gravity="start|center_vertical"
                android:ellipsize="end"
                android:textColor="?android:attr/textColorSecondary"
@@ -85,7 +85,7 @@
            android:clickable="false"
            android:layout_gravity="end|center_vertical">
            <ImageView
                android:id="@+id/wifi_locked_icon"
                android:id="@+id/wifi_end_icon"
                android:layout_gravity="end|center_vertical"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
+33 −31
Original line number Diff line number Diff line
@@ -16,15 +16,11 @@

package com.android.systemui.qs.tiles.dialog;

import static com.android.wifitrackerlib.WifiEntry.SECURITY_NONE;
import static com.android.wifitrackerlib.WifiEntry.SECURITY_OWE;

import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.text.Html;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -36,6 +32,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;

import com.android.internal.annotations.VisibleForTesting;
import com.android.settingslib.Utils;
import com.android.settingslib.wifi.WifiUtils;
import com.android.systemui.R;
@@ -114,10 +111,11 @@ public class InternetAdapter extends RecyclerView.Adapter<InternetAdapter.Intern
        final ImageView mWifiIcon;
        final TextView mWifiTitleText;
        final TextView mWifiSummaryText;
        final ImageView mWifiLockedIcon;
        final ImageView mWifiEndIcon;
        final Context mContext;
        final InternetDialogController mInternetDialogController;

        @VisibleForTesting
        protected WifiUtils.InternetIconInjector mWifiIconInjector;

        InternetViewHolder(View view, InternetDialogController internetDialogController) {
@@ -130,28 +128,25 @@ public class InternetAdapter extends RecyclerView.Adapter<InternetAdapter.Intern
            mWifiIcon = view.requireViewById(R.id.wifi_icon);
            mWifiTitleText = view.requireViewById(R.id.wifi_title);
            mWifiSummaryText = view.requireViewById(R.id.wifi_summary);
            mWifiLockedIcon = view.requireViewById(R.id.wifi_locked_icon);
            mWifiEndIcon = view.requireViewById(R.id.wifi_end_icon);
            mWifiIconInjector = mInternetDialogController.getWifiIconInjector();
        }

        void onBind(WifiEntry wifiEntry) {
            int security = wifiEntry.getSecurity();
            try {
        void onBind(@NonNull WifiEntry wifiEntry) {
            mWifiIcon.setImageDrawable(getWifiDrawable(wifiEntry));
                if (isOpenNetwork(security)) {
                    mWifiLockedIcon.setVisibility(View.GONE);
                } else {
                    mWifiLockedIcon.setVisibility(View.VISIBLE);
                    mWifiLockedIcon.setImageDrawable(
                            mContext.getDrawable(R.drawable.ic_friction_lock_closed));
                }
            } catch (Throwable throwable) {
                throwable.printStackTrace();
            }

            setWifiNetworkLayout(wifiEntry.getTitle(),
                    Html.fromHtml(wifiEntry.getSummary(false), Html.FROM_HTML_MODE_LEGACY));

            final int connectedState = wifiEntry.getConnectedState();
            final int security = wifiEntry.getSecurity();
            updateEndIcon(connectedState, security);

            if (connectedState != WifiEntry.CONNECTED_STATE_DISCONNECTED) {
                mWifiListLayout.setOnClickListener(
                        v -> mInternetDialogController.launchWifiNetworkDetailsSetting(
                                wifiEntry.getKey()));
                return;
            }
            mWifiListLayout.setOnClickListener(v -> {
                if (wifiEntry.shouldEditBeforeConnect()) {
                    final Intent intent = new Intent(ACTION_WIFI_DIALOG);
@@ -165,25 +160,17 @@ public class InternetAdapter extends RecyclerView.Adapter<InternetAdapter.Intern
            });
        }

        /** Return true if this is an open network AccessPoint. */
        boolean isOpenNetwork(int security) {
            return security == SECURITY_NONE
                    || security == SECURITY_OWE;
        }

        void setWifiNetworkLayout(CharSequence title, CharSequence summary) {
            mWifiNetworkLayout.setVisibility(View.VISIBLE);
            mWifiTitleText.setText(title);
            if (TextUtils.isEmpty(summary)) {
                mWifiSummaryText.setVisibility(View.GONE);
                return;
            } else {
                mWifiSummaryText.setVisibility(View.VISIBLE);
            }
            mWifiSummaryText.setVisibility(View.VISIBLE);
            mWifiSummaryText.setText(summary);
        }

        Drawable getWifiDrawable(@NonNull WifiEntry wifiEntry) throws Throwable {
        Drawable getWifiDrawable(@NonNull WifiEntry wifiEntry) {
            if (wifiEntry.getLevel() == WifiEntry.WIFI_LEVEL_UNREACHABLE) {
                return null;
            }
@@ -198,5 +185,20 @@ public class InternetAdapter extends RecyclerView.Adapter<InternetAdapter.Intern
            shared.set(drawable);
            return shared.get();
        }

        void updateEndIcon(int connectedState, int security) {
            Drawable drawable = null;
            if (connectedState != WifiEntry.CONNECTED_STATE_DISCONNECTED) {
                drawable = mContext.getDrawable(R.drawable.ic_settings_24dp);
            } else if (security != WifiEntry.SECURITY_NONE && security != WifiEntry.SECURITY_OWE) {
                drawable = mContext.getDrawable(R.drawable.ic_friction_lock_closed);
            }
            if (drawable == null) {
                mWifiEndIcon.setVisibility(View.GONE);
                return;
            }
            mWifiEndIcon.setVisibility(View.VISIBLE);
            mWifiEndIcon.setImageDrawable(drawable);
        }
    }
}
+4 −1
Original line number Diff line number Diff line
@@ -423,7 +423,10 @@ public class InternetDialog extends SystemUIDialog implements
    }

    void onClickConnectedWifi() {
        mInternetDialogController.launchWifiNetworkDetailsSetting();
        if (mConnectedWifiEntry == null) {
            return;
        }
        mInternetDialogController.launchWifiNetworkDetailsSetting(mConnectedWifiEntry.getKey());
    }

    void onClickSeeMoreButton() {
+3 −4
Original line number Diff line number Diff line
@@ -248,8 +248,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
        return new Intent(ACTION_NETWORK_PROVIDER_SETTINGS).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    }

    protected Intent getWifiDetailsSettingsIntent() {
        String key = mConnectedEntry == null ? null : mConnectedEntry.getKey();
    protected Intent getWifiDetailsSettingsIntent(String key) {
        if (TextUtils.isEmpty(key)) {
            if (DEBUG) {
                Log.d(TAG, "connected entry's key is empty");
@@ -558,8 +557,8 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
        mActivityStarter.postStartActivityDismissingKeyguard(getSettingsIntent(), 0);
    }

    void launchWifiNetworkDetailsSetting() {
        Intent intent = getWifiDetailsSettingsIntent();
    void launchWifiNetworkDetailsSetting(String key) {
        Intent intent = getWifiDetailsSettingsIntent(key);
        if (intent != null) {
            mCallback.dismissDialog();
            mActivityStarter.postStartActivityDismissingKeyguard(intent, 0);
+44 −4
Original line number Diff line number Diff line
@@ -10,21 +10,26 @@ import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.graphics.drawable.Drawable;
import android.testing.AndroidTestingRunner;
import android.testing.TestableResources;
import android.view.View;
import android.widget.LinearLayout;

import androidx.test.filters.SmallTest;

import com.android.settingslib.wifi.WifiUtils;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.wifitrackerlib.WifiEntry;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;

import java.util.Arrays;
import java.util.List;
@@ -35,6 +40,11 @@ public class InternetAdapterTest extends SysuiTestCase {

    private static final String WIFI_TITLE = "Wi-Fi Title";
    private static final String WIFI_SUMMARY = "Wi-Fi Summary";
    private static final int GEAR_ICON_RES_ID = R.drawable.ic_settings_24dp;
    private static final int LOCK_ICON_RES_ID = R.drawable.ic_friction_lock_closed;

    @Rule
    public MockitoRule mRule = MockitoJUnit.rule();

    @Mock
    private WifiEntry mInternetWifiEntry;
@@ -46,13 +56,18 @@ public class InternetAdapterTest extends SysuiTestCase {
    private InternetDialogController mInternetDialogController;
    @Mock
    private WifiUtils.InternetIconInjector mWifiIconInjector;
    @Mock
    private Drawable mGearIcon;
    @Mock
    private Drawable mLockIcon;

    private TestableResources mTestableResources;
    private InternetAdapter mInternetAdapter;
    private InternetAdapter.InternetViewHolder mViewHolder;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mTestableResources = mContext.getOrCreateTestableResources();
        when(mInternetWifiEntry.getTitle()).thenReturn(WIFI_TITLE);
        when(mInternetWifiEntry.getSummary(false)).thenReturn(WIFI_SUMMARY);
        when(mInternetWifiEntry.isDefaultNetwork()).thenReturn(true);
@@ -83,7 +98,7 @@ public class InternetAdapterTest extends SysuiTestCase {
        assertThat(mViewHolder.mWifiTitleText.getVisibility()).isEqualTo(View.VISIBLE);
        assertThat(mViewHolder.mWifiSummaryText.getVisibility()).isEqualTo(View.VISIBLE);
        assertThat(mViewHolder.mWifiIcon.getVisibility()).isEqualTo(View.VISIBLE);
        assertThat(mViewHolder.mWifiLockedIcon.getVisibility()).isEqualTo(View.GONE);
        assertThat(mViewHolder.mWifiEndIcon.getVisibility()).isEqualTo(View.GONE);
    }

    @Test
@@ -94,7 +109,7 @@ public class InternetAdapterTest extends SysuiTestCase {
        assertThat(mViewHolder.mWifiTitleText.getVisibility()).isEqualTo(View.VISIBLE);
        assertThat(mViewHolder.mWifiSummaryText.getVisibility()).isEqualTo(View.VISIBLE);
        assertThat(mViewHolder.mWifiIcon.getVisibility()).isEqualTo(View.VISIBLE);
        assertThat(mViewHolder.mWifiLockedIcon.getVisibility()).isEqualTo(View.VISIBLE);
        assertThat(mViewHolder.mWifiEndIcon.getVisibility()).isEqualTo(View.VISIBLE);
    }

    @Test
@@ -124,4 +139,29 @@ public class InternetAdapterTest extends SysuiTestCase {

        verify(mWifiIconInjector).getIcon(eq(true) /* noInternet */, anyInt());
    }

    @Test
    public void viewHolderUpdateEndIcon_wifiConnected_updateGearIcon() {
        mTestableResources.addOverride(GEAR_ICON_RES_ID, mGearIcon);

        mViewHolder.updateEndIcon(WifiEntry.CONNECTED_STATE_CONNECTED, WifiEntry.SECURITY_PSK);

        assertThat(mViewHolder.mWifiEndIcon.getDrawable()).isEqualTo(mGearIcon);
    }

    @Test
    public void viewHolderUpdateEndIcon_wifiDisconnectedAndSecurityPsk_updateLockIcon() {
        mTestableResources.addOverride(LOCK_ICON_RES_ID, mLockIcon);

        mViewHolder.updateEndIcon(WifiEntry.CONNECTED_STATE_DISCONNECTED, WifiEntry.SECURITY_PSK);

        assertThat(mViewHolder.mWifiEndIcon.getDrawable()).isEqualTo(mLockIcon);
    }

    @Test
    public void viewHolderUpdateEndIcon_wifiDisconnectedAndSecurityNone_hideIcon() {
        mViewHolder.updateEndIcon(WifiEntry.CONNECTED_STATE_DISCONNECTED, WifiEntry.SECURITY_NONE);

        assertThat(mViewHolder.mWifiEndIcon.getVisibility()).isEqualTo(View.GONE);
    }
}
Loading