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

This commit is contained in:
TreeHugger Robot
2021-09-07 16:10:50 +00:00
committed by Android (Google) Code Review
6 changed files with 94 additions and 65 deletions

View File

@@ -70,7 +70,7 @@
android:id="@+id/wifi_summary" android:id="@+id/wifi_summary"
android:textDirection="locale" android:textDirection="locale"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="20dp" android:layout_height="wrap_content"
android:gravity="start|center_vertical" android:gravity="start|center_vertical"
android:ellipsize="end" android:ellipsize="end"
android:textColor="?android:attr/textColorSecondary" android:textColor="?android:attr/textColorSecondary"
@@ -85,7 +85,7 @@
android:clickable="false" android:clickable="false"
android:layout_gravity="end|center_vertical"> android:layout_gravity="end|center_vertical">
<ImageView <ImageView
android:id="@+id/wifi_locked_icon" android:id="@+id/wifi_end_icon"
android:layout_gravity="end|center_vertical" android:layout_gravity="end|center_vertical"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"/>

View File

@@ -16,15 +16,11 @@
package com.android.systemui.qs.tiles.dialog; 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.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.text.Html; import android.text.Html;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@@ -36,6 +32,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settingslib.Utils; import com.android.settingslib.Utils;
import com.android.settingslib.wifi.WifiUtils; import com.android.settingslib.wifi.WifiUtils;
import com.android.systemui.R; import com.android.systemui.R;
@@ -114,10 +111,11 @@ public class InternetAdapter extends RecyclerView.Adapter<InternetAdapter.Intern
final ImageView mWifiIcon; final ImageView mWifiIcon;
final TextView mWifiTitleText; final TextView mWifiTitleText;
final TextView mWifiSummaryText; final TextView mWifiSummaryText;
final ImageView mWifiLockedIcon; final ImageView mWifiEndIcon;
final Context mContext; final Context mContext;
final InternetDialogController mInternetDialogController; final InternetDialogController mInternetDialogController;
@VisibleForTesting
protected WifiUtils.InternetIconInjector mWifiIconInjector; protected WifiUtils.InternetIconInjector mWifiIconInjector;
InternetViewHolder(View view, InternetDialogController internetDialogController) { InternetViewHolder(View view, InternetDialogController internetDialogController) {
@@ -130,28 +128,25 @@ public class InternetAdapter extends RecyclerView.Adapter<InternetAdapter.Intern
mWifiIcon = view.requireViewById(R.id.wifi_icon); mWifiIcon = view.requireViewById(R.id.wifi_icon);
mWifiTitleText = view.requireViewById(R.id.wifi_title); mWifiTitleText = view.requireViewById(R.id.wifi_title);
mWifiSummaryText = view.requireViewById(R.id.wifi_summary); 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(); mWifiIconInjector = mInternetDialogController.getWifiIconInjector();
} }
void onBind(WifiEntry wifiEntry) { void onBind(@NonNull WifiEntry wifiEntry) {
int security = wifiEntry.getSecurity(); mWifiIcon.setImageDrawable(getWifiDrawable(wifiEntry));
try {
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(), setWifiNetworkLayout(wifiEntry.getTitle(),
Html.fromHtml(wifiEntry.getSummary(false), Html.FROM_HTML_MODE_LEGACY)); 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 -> { mWifiListLayout.setOnClickListener(v -> {
if (wifiEntry.shouldEditBeforeConnect()) { if (wifiEntry.shouldEditBeforeConnect()) {
final Intent intent = new Intent(ACTION_WIFI_DIALOG); 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) { void setWifiNetworkLayout(CharSequence title, CharSequence summary) {
mWifiNetworkLayout.setVisibility(View.VISIBLE);
mWifiTitleText.setText(title); mWifiTitleText.setText(title);
if (TextUtils.isEmpty(summary)) { if (TextUtils.isEmpty(summary)) {
mWifiSummaryText.setVisibility(View.GONE); mWifiSummaryText.setVisibility(View.GONE);
return; return;
} else {
mWifiSummaryText.setVisibility(View.VISIBLE);
} }
mWifiSummaryText.setVisibility(View.VISIBLE);
mWifiSummaryText.setText(summary); mWifiSummaryText.setText(summary);
} }
Drawable getWifiDrawable(@NonNull WifiEntry wifiEntry) throws Throwable { Drawable getWifiDrawable(@NonNull WifiEntry wifiEntry) {
if (wifiEntry.getLevel() == WifiEntry.WIFI_LEVEL_UNREACHABLE) { if (wifiEntry.getLevel() == WifiEntry.WIFI_LEVEL_UNREACHABLE) {
return null; return null;
} }
@@ -198,5 +185,20 @@ public class InternetAdapter extends RecyclerView.Adapter<InternetAdapter.Intern
shared.set(drawable); shared.set(drawable);
return shared.get(); 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);
}
} }
} }

View File

@@ -423,7 +423,10 @@ public class InternetDialog extends SystemUIDialog implements
} }
void onClickConnectedWifi() { void onClickConnectedWifi() {
mInternetDialogController.launchWifiNetworkDetailsSetting(); if (mConnectedWifiEntry == null) {
return;
}
mInternetDialogController.launchWifiNetworkDetailsSetting(mConnectedWifiEntry.getKey());
} }
void onClickSeeMoreButton() { void onClickSeeMoreButton() {

View File

@@ -248,8 +248,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
return new Intent(ACTION_NETWORK_PROVIDER_SETTINGS).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); return new Intent(ACTION_NETWORK_PROVIDER_SETTINGS).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
} }
protected Intent getWifiDetailsSettingsIntent() { protected Intent getWifiDetailsSettingsIntent(String key) {
String key = mConnectedEntry == null ? null : mConnectedEntry.getKey();
if (TextUtils.isEmpty(key)) { if (TextUtils.isEmpty(key)) {
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "connected entry's key is empty"); Log.d(TAG, "connected entry's key is empty");
@@ -558,8 +557,8 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
mActivityStarter.postStartActivityDismissingKeyguard(getSettingsIntent(), 0); mActivityStarter.postStartActivityDismissingKeyguard(getSettingsIntent(), 0);
} }
void launchWifiNetworkDetailsSetting() { void launchWifiNetworkDetailsSetting(String key) {
Intent intent = getWifiDetailsSettingsIntent(); Intent intent = getWifiDetailsSettingsIntent(key);
if (intent != null) { if (intent != null) {
mCallback.dismissDialog(); mCallback.dismissDialog();
mActivityStarter.postStartActivityDismissingKeyguard(intent, 0); mActivityStarter.postStartActivityDismissingKeyguard(intent, 0);

View File

@@ -10,21 +10,26 @@ import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.graphics.drawable.Drawable;
import android.testing.AndroidTestingRunner; import android.testing.AndroidTestingRunner;
import android.testing.TestableResources;
import android.view.View; import android.view.View;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
import com.android.settingslib.wifi.WifiUtils; import com.android.settingslib.wifi.WifiUtils;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase;
import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiEntry;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; 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.Arrays;
import java.util.List; 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_TITLE = "Wi-Fi Title";
private static final String WIFI_SUMMARY = "Wi-Fi Summary"; 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 @Mock
private WifiEntry mInternetWifiEntry; private WifiEntry mInternetWifiEntry;
@@ -46,13 +56,18 @@ public class InternetAdapterTest extends SysuiTestCase {
private InternetDialogController mInternetDialogController; private InternetDialogController mInternetDialogController;
@Mock @Mock
private WifiUtils.InternetIconInjector mWifiIconInjector; private WifiUtils.InternetIconInjector mWifiIconInjector;
@Mock
private Drawable mGearIcon;
@Mock
private Drawable mLockIcon;
private TestableResources mTestableResources;
private InternetAdapter mInternetAdapter; private InternetAdapter mInternetAdapter;
private InternetAdapter.InternetViewHolder mViewHolder; private InternetAdapter.InternetViewHolder mViewHolder;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); mTestableResources = mContext.getOrCreateTestableResources();
when(mInternetWifiEntry.getTitle()).thenReturn(WIFI_TITLE); when(mInternetWifiEntry.getTitle()).thenReturn(WIFI_TITLE);
when(mInternetWifiEntry.getSummary(false)).thenReturn(WIFI_SUMMARY); when(mInternetWifiEntry.getSummary(false)).thenReturn(WIFI_SUMMARY);
when(mInternetWifiEntry.isDefaultNetwork()).thenReturn(true); when(mInternetWifiEntry.isDefaultNetwork()).thenReturn(true);
@@ -83,7 +98,7 @@ public class InternetAdapterTest extends SysuiTestCase {
assertThat(mViewHolder.mWifiTitleText.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mViewHolder.mWifiTitleText.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(mViewHolder.mWifiSummaryText.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mViewHolder.mWifiSummaryText.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(mViewHolder.mWifiIcon.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 @Test
@@ -94,7 +109,7 @@ public class InternetAdapterTest extends SysuiTestCase {
assertThat(mViewHolder.mWifiTitleText.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mViewHolder.mWifiTitleText.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(mViewHolder.mWifiSummaryText.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mViewHolder.mWifiSummaryText.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(mViewHolder.mWifiIcon.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 @Test
@@ -124,4 +139,29 @@ public class InternetAdapterTest extends SysuiTestCase {
verify(mWifiIconInjector).getIcon(eq(true) /* noInternet */, anyInt()); 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);
}
} }

View File

@@ -249,24 +249,13 @@ public class InternetDialogControllerTest extends SysuiTestCase {
} }
@Test @Test
public void getWifiDetailsSettingsIntent_withNoConnectedEntry_returnNull() { public void getWifiDetailsSettingsIntent_withNoKey_returnNull() {
mInternetDialogController.onAccessPointsChanged(null /* accessPoints */); assertThat(mInternetDialogController.getWifiDetailsSettingsIntent(null)).isNull();
assertThat(mInternetDialogController.getWifiDetailsSettingsIntent()).isNull();
} }
@Test @Test
public void getWifiDetailsSettingsIntent_withNoConnectedEntryKey_returnNull() { public void getWifiDetailsSettingsIntent_withKey_returnIntent() {
when(mConnectedEntry.getKey()).thenReturn(null); assertThat(mInternetDialogController.getWifiDetailsSettingsIntent("test_key")).isNotNull();
assertThat(mInternetDialogController.getWifiDetailsSettingsIntent()).isNull();
}
@Test
public void getWifiDetailsSettingsIntent_withConnectedEntryKey_returnIntent() {
when(mConnectedEntry.getKey()).thenReturn("test_key");
assertThat(mInternetDialogController.getWifiDetailsSettingsIntent()).isNotNull();
} }
@Test @Test
@@ -281,20 +270,16 @@ public class InternetDialogControllerTest extends SysuiTestCase {
} }
@Test @Test
public void launchWifiNetworkDetailsSetting_withNoConnectedEntry_doNothing() { public void launchWifiNetworkDetailsSetting_withNoWifiEntryKey_doNothing() {
mInternetDialogController.onAccessPointsChanged(null /* accessPoints */); mInternetDialogController.launchWifiNetworkDetailsSetting(null /* key */);
mInternetDialogController.launchWifiNetworkDetailsSetting();
verify(mActivityStarter, never()) verify(mActivityStarter, never())
.postStartActivityDismissingKeyguard(any(Intent.class), anyInt()); .postStartActivityDismissingKeyguard(any(Intent.class), anyInt());
} }
@Test @Test
public void launchWifiNetworkDetailsSetting_withConnectedEntryKey_startActivity() { public void launchWifiNetworkDetailsSetting_withWifiEntryKey_startActivity() {
when(mConnectedEntry.getKey()).thenReturn("test_key"); mInternetDialogController.launchWifiNetworkDetailsSetting("wifi_entry_key");
mInternetDialogController.launchWifiNetworkDetailsSetting();
verify(mActivityStarter).postStartActivityDismissingKeyguard(any(Intent.class), anyInt()); verify(mActivityStarter).postStartActivityDismissingKeyguard(any(Intent.class), anyInt());
} }