diff --git a/packages/SystemUI/res/anim/progress_indeterminate_horizontal_rect.xml b/packages/SystemUI/res/anim/progress_indeterminate_horizontal_rect.xml new file mode 100644 index 0000000000000..13133cb451e41 --- /dev/null +++ b/packages/SystemUI/res/anim/progress_indeterminate_horizontal_rect.xml @@ -0,0 +1,25 @@ + + + + + + + \ No newline at end of file diff --git a/packages/SystemUI/res/drawable/progress_indeterminate_horizontal_material_trimmed.xml b/packages/SystemUI/res/drawable/progress_indeterminate_horizontal_material_trimmed.xml new file mode 100644 index 0000000000000..95209f8eb8abf --- /dev/null +++ b/packages/SystemUI/res/drawable/progress_indeterminate_horizontal_material_trimmed.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/packages/SystemUI/res/drawable/vector_drawable_progress_indeterminate_horizontal_trimmed.xml b/packages/SystemUI/res/drawable/vector_drawable_progress_indeterminate_horizontal_trimmed.xml new file mode 100644 index 0000000000000..aec204f45aa7c --- /dev/null +++ b/packages/SystemUI/res/drawable/vector_drawable_progress_indeterminate_horizontal_trimmed.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/SystemUI/res/layout/internet_connectivity_dialog.xml b/packages/SystemUI/res/layout/internet_connectivity_dialog.xml index 7f22b71832a3d..f23085a66903f 100644 --- a/packages/SystemUI/res/layout/internet_connectivity_dialog.xml +++ b/packages/SystemUI/res/layout/internet_connectivity_dialog.xml @@ -17,6 +17,7 @@ @@ -46,7 +47,7 @@ android:gravity="center_vertical|center_horizontal" android:layout_width="wrap_content" android:layout_height="20dp" - android:layout_marginTop="8dp" + android:layout_marginTop="4dp" android:ellipsize="end" android:maxLines="1" android:fontFamily="google-sans" @@ -54,18 +55,20 @@ + android:id="@+id/divider" + android:layout_gravity="center_vertical|center_horizontal" + android:layout_width="340dp" + android:layout_height="4dp" + android:background="?androidprv:attr/colorSurfaceVariant"/> + android:layout_gravity="center_horizontal" + android:visibility="gone" + style="@style/TrimmedHorizontalProgressBar"/> + android:layout_marginEnd="@dimen/settingslib_switchbar_margin" + android:layout_marginStart="@dimen/settingslib_switchbar_margin" + android:layout_marginTop="16dp" + android:paddingStart="22dp" + android:paddingEnd="22dp"> @@ -120,10 +123,11 @@ android:gravity="start|center_vertical"> + android:layout_marginEnd="@dimen/settingslib_switchbar_margin" + android:layout_marginStart="@dimen/settingslib_switchbar_margin" + android:paddingStart="22dp" + android:paddingEnd="22dp"> + android:layout_marginEnd="@dimen/settingslib_switchbar_margin" + android:layout_marginStart="@dimen/settingslib_switchbar_margin" + android:paddingStart="22dp" + android:paddingEnd="22dp"> + android:paddingStart="22dp" + android:paddingEnd="22dp"> + android:layout_marginStart="16dp"> + android:paddingStart="22dp" + android:paddingEnd="22dp"> ?androidprv:attr/colorAccentPrimaryVariant ?androidprv:attr/colorAccentSecondaryVariant - #ff000000 - #808080 + #191C18 + #41493D diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml index ca6fd4adbc084..d25474255bfc5 100644 --- a/packages/SystemUI/res/values/styles.xml +++ b/packages/SystemUI/res/values/styles.xml @@ -942,4 +942,13 @@ @dimen/settingslib_min_switch_width + + diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetAdapter.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetAdapter.java index 44c1b7bd7332f..e346044e746de 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetAdapter.java @@ -19,7 +19,6 @@ 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.annotation.ColorInt; import android.content.Context; import android.content.Intent; import android.graphics.drawable.Drawable; @@ -35,10 +34,10 @@ import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.annotation.VisibleForTesting; import androidx.recyclerview.widget.RecyclerView; import com.android.settingslib.Utils; +import com.android.settingslib.wifi.WifiUtils; import com.android.systemui.R; import com.android.wifitrackerlib.WifiEntry; @@ -98,8 +97,7 @@ public class InternetAdapter extends RecyclerView.Adapter wifiAp.getConnectedState() - != WifiEntry.CONNECTED_STATE_CONNECTED) + .filter(wifiEntry -> !wifiEntry.isDefaultNetwork()) .limit(getItemCount()) .collect(Collectors.toList()); } @@ -109,21 +107,21 @@ public class InternetAdapter extends RecyclerView.Adapter shared = new AtomicReference<>(); - final @ColorInt int tint = Utils.getColorAttrDefaultColor(mContext, - android.R.attr.colorControlNormal); - Drawable signalDrawable = mContext.getDrawable( - Utils.getWifiIconResource(wifiEntry.getLevel())); - signalDrawable.setTint(tint); - shared.set(signalDrawable); - drawable = shared.get(); - return drawable; + Drawable getWifiDrawable(@NonNull WifiEntry wifiEntry) throws Throwable { + final Drawable drawable = mWifiIconInjector.getIcon(wifiEntry.shouldShowXLevelIcon(), + wifiEntry.getLevel()); + if (drawable == null) { + return null; + } + drawable.setTint( + Utils.getColorAttrDefaultColor(mContext, android.R.attr.textColorTertiary)); + final AtomicReference shared = new AtomicReference<>(); + shared.set(drawable); + return shared.get(); } } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java index ce1c2fd08a4d9..a63d1f80f3947 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java @@ -79,11 +79,11 @@ public class InternetDialog extends SystemUIDialog implements InternetDialogController.InternetDialogCallback, Window.Callback { private static final String TAG = "InternetDialog"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); + + static final long PROGRESS_DELAY_MS = 2000L; + private final Handler mHandler; private final LinearLayoutManager mLayoutManager; - private final Runnable mHideProgressBarRunnable = () -> { - setProgressBarVisible(false); - }; @VisibleForTesting protected InternetAdapter mAdapter; @@ -91,6 +91,8 @@ public class InternetDialog extends SystemUIDialog implements protected WifiManager mWifiManager; @VisibleForTesting protected View mDialogView; + @VisibleForTesting + protected WifiEntry mConnectedWifiEntry; private InternetDialogFactory mInternetDialogFactory; private SubscriptionManager mSubscriptionManager; @@ -101,6 +103,7 @@ public class InternetDialog extends SystemUIDialog implements private InternetDialogController mInternetDialogController; private TextView mInternetDialogTitle; private TextView mInternetDialogSubTitle; + private View mDivider; private ProgressBar mProgressBar; private LinearLayout mInternetListLayout; private LinearLayout mConnectedWifListLayout; @@ -122,12 +125,21 @@ public class InternetDialog extends SystemUIDialog implements private Switch mWiFiToggle; private Button mDoneButton; private Drawable mBackgroundOn; - private WifiEntry mConnectedWifiEntry; private int mListMaxHeight; private int mDefaultDataSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; - private boolean mIsProgressBarVisible; private boolean mCanConfigMobileData; + // Wi-Fi scanning progress bar + protected boolean mIsProgressBarVisible; + protected boolean mIsSearchingHidden; + protected final Runnable mHideProgressBarRunnable = () -> { + setProgressBarVisible(false); + }; + protected Runnable mHideSearchingRunnable = () -> { + mIsSearchingHidden = true; + mInternetDialogSubTitle.setText(getSubtitleText()); + }; + private final ViewTreeObserver.OnGlobalLayoutListener mInternetListLayoutListener = () -> { // Set max height for list if (mInternetListLayout.getHeight() > mListMaxHeight) { @@ -195,6 +207,7 @@ public class InternetDialog extends SystemUIDialog implements mInternetDialogTitle = mDialogView.requireViewById(R.id.internet_dialog_title); mInternetDialogSubTitle = mDialogView.requireViewById(R.id.internet_dialog_subtitle); + mDivider = mDialogView.requireViewById(R.id.divider); mProgressBar = mDialogView.requireViewById(R.id.wifi_searching_progress); mInternetListLayout = mDialogView.requireViewById(R.id.internet_list); mMobileNetworkLayout = mDialogView.requireViewById(R.id.mobile_network_layout); @@ -243,6 +256,7 @@ public class InternetDialog extends SystemUIDialog implements Log.d(TAG, "onStop"); } mHandler.removeCallbacks(mHideProgressBarRunnable); + mHandler.removeCallbacks(mHideSearchingRunnable); mMobileNetworkLayout.setOnClickListener(null); mMobileDataToggle.setOnCheckedChangeListener(null); mConnectedWifListLayout.setOnClickListener(null); @@ -327,14 +341,17 @@ public class InternetDialog extends SystemUIDialog implements mMobileSummaryText.setVisibility(View.GONE); } mSignalIcon.setImageDrawable(getSignalStrengthDrawable()); - int titleColor = isCellularNetwork ? mContext.getColor( - R.color.connected_network_primary_color) : Utils.getColorAttrDefaultColor( - mContext, android.R.attr.textColorPrimary); - int summaryColor = isCellularNetwork ? mContext.getColor( - R.color.connected_network_tertiary_color) : Utils.getColorAttrDefaultColor( - mContext, android.R.attr.textColorTertiary); - mMobileTitleText.setTextColor(titleColor); - mMobileSummaryText.setTextColor(summaryColor); + if (mInternetDialogController.isNightMode()) { + int titleColor = isCellularNetwork ? mContext.getColor( + R.color.connected_network_primary_color) : Utils.getColorAttrDefaultColor( + mContext, android.R.attr.textColorPrimary); + int summaryColor = isCellularNetwork ? mContext.getColor( + R.color.connected_network_secondary_color) : Utils.getColorAttrDefaultColor( + mContext, android.R.attr.textColorSecondary); + + mMobileTitleText.setTextColor(titleColor); + mMobileSummaryText.setTextColor(summaryColor); + } mMobileNetworkLayout.setBackground(isCellularNetwork ? mBackgroundOn : null); mMobileDataToggle.setVisibility(mCanConfigMobileData ? View.VISIBLE : View.INVISIBLE); @@ -342,8 +359,7 @@ public class InternetDialog extends SystemUIDialog implements } private void setConnectedWifiLayout() { - if (!mWifiManager.isWifiEnabled() - || mInternetDialogController.getConnectedWifiEntry() == null) { + if (!mWifiManager.isWifiEnabled() || mConnectedWifiEntry == null) { mConnectedWifListLayout.setBackground(null); mConnectedWifListLayout.setVisibility(View.GONE); return; @@ -351,11 +367,14 @@ public class InternetDialog extends SystemUIDialog implements mConnectedWifListLayout.setVisibility(View.VISIBLE); mConnectedWifiTitleText.setText(getConnectedWifiTitle()); mConnectedWifiSummaryText.setText(getConnectedWifiSummary()); - mConnectedWifiIcon.setImageDrawable(getConnectedWifiDrawable()); - mConnectedWifiTitleText.setTextColor( - mContext.getColor(R.color.connected_network_primary_color)); - mConnectedWifiSummaryText.setTextColor( - mContext.getColor(R.color.connected_network_tertiary_color)); + mConnectedWifiIcon.setImageDrawable( + mInternetDialogController.getConnectedWifiDrawable(mConnectedWifiEntry)); + if (mInternetDialogController.isNightMode()) { + mConnectedWifiTitleText.setTextColor( + mContext.getColor(R.color.connected_network_primary_color)); + mConnectedWifiSummaryText.setTextColor( + mContext.getColor(R.color.connected_network_secondary_color)); + } mWifiSettingsIcon.setColorFilter( mContext.getColor(R.color.connected_network_primary_color)); mConnectedWifListLayout.setBackground(mBackgroundOn); @@ -374,16 +393,8 @@ public class InternetDialog extends SystemUIDialog implements } CharSequence getSubtitleText() { - return mInternetDialogController.getSubtitleText(mIsProgressBarVisible); - } - - private Drawable getConnectedWifiDrawable() { - try { - return mInternetDialogController.getWifiConnectedDrawable(mConnectedWifiEntry); - } catch (Throwable e) { - e.printStackTrace(); - } - return null; + return mInternetDialogController.getSubtitleText( + mIsProgressBarVisible && !mIsSearchingHidden); } private Drawable getSignalStrengthDrawable() { @@ -399,14 +410,14 @@ public class InternetDialog extends SystemUIDialog implements } String getConnectedWifiTitle() { - return mInternetDialogController.getConnectedWifiTitle(); + return mInternetDialogController.getDefaultWifiTitle(); } String getConnectedWifiSummary() { - return mInternetDialogController.getConnectedWifiSummary(); + return mInternetDialogController.getDefaultWifiSummary(); } - private void showProgressBar() { + protected void showProgressBar() { if (mWifiManager == null || !mWifiManager.isWifiEnabled()) { setProgressBarVisible(false); return; @@ -414,8 +425,9 @@ public class InternetDialog extends SystemUIDialog implements setProgressBarVisible(true); List wifiScanResults = mWifiManager.getScanResults(); if (wifiScanResults != null && wifiScanResults.size() > 0) { - mContext.getMainThreadHandler().postDelayed(mHideProgressBarRunnable, - 2000 /* delay millis */); + mHandler.postDelayed(mHideProgressBarRunnable, PROGRESS_DELAY_MS); + } else if (!mIsSearchingHidden) { + mHandler.postDelayed(mHideSearchingRunnable, PROGRESS_DELAY_MS); } } @@ -425,7 +437,8 @@ public class InternetDialog extends SystemUIDialog implements mIsProgressBarVisible = true; } mIsProgressBarVisible = visible; - mProgressBar.setVisibility(mIsProgressBarVisible ? View.VISIBLE : View.INVISIBLE); + mProgressBar.setVisibility(mIsProgressBarVisible ? View.VISIBLE : View.GONE); + mDivider.setVisibility(mIsProgressBarVisible ? View.GONE : View.VISIBLE); mInternetDialogSubTitle.setText(getSubtitleText()); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java index edab33aa6aff5..890dcfd46f78b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java @@ -19,11 +19,11 @@ package com.android.systemui.qs.tiles.dialog; import static com.android.settingslib.mobile.MobileMappings.getIconKey; import static com.android.settingslib.mobile.MobileMappings.mapIconSets; -import android.annotation.ColorInt; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.res.Configuration; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; @@ -134,6 +134,8 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, protected SubscriptionManager.OnSubscriptionsChangedListener mOnSubscriptionsChangedListener; @VisibleForTesting protected InternetTelephonyCallback mInternetTelephonyCallback; + @VisibleForTesting + protected WifiUtils.InternetIconInjector mWifiIconInjector; private final KeyguardUpdateMonitorCallback mKeyguardUpdateCallback = new KeyguardUpdateMonitorCallback() { @@ -181,6 +183,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, mActivityStarter = starter; mAccessPointController = accessPointController; mConfig = MobileMappings.Config.readConfig(mContext); + mWifiIconInjector = new WifiUtils.InternetIconInjector(mContext); } void onStart(@NonNull InternetDialogCallback callback) { @@ -269,17 +272,17 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, return mContext.getText(SUBTITLE_TEXT_WIFI_IS_OFF); } + final List wifiList = mWifiManager.getScanResults(); + if (wifiList != null && wifiList.size() != 0) { + return mContext.getText(SUBTITLE_TEXT_TAP_A_NETWORK_TO_CONNECT); + } + if (isProgressBarVisible) { // When the Wi-Fi scan result callback is received // Sub-Title: Searching for networks... return mContext.getText(SUBTITLE_TEXT_SEARCHING_FOR_NETWORKS); } - final List wifiList = mWifiManager.getScanResults(); - if (wifiList != null && wifiList.size() != 0) { - return mContext.getText(SUBTITLE_TEXT_TAP_A_NETWORK_TO_CONNECT); - } - // Sub-Title: // show non_carrier_network_unavailable // - while Wi-Fi on + no Wi-Fi item @@ -315,17 +318,21 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, return mContext.getText(SUBTITLE_TEXT_NON_CARRIER_NETWORK_UNAVAILABLE); } - Drawable getWifiConnectedDrawable(WifiEntry wifiEntry) throws Throwable { - final @ColorInt int tint; - tint = Utils.getColorAttrDefaultColor(mContext, - com.android.internal.R.attr.colorAccentPrimaryVariant); - final Drawable drawable = mContext.getDrawable( - com.android.settingslib.Utils.getWifiIconResource(wifiEntry.getLevel())); - drawable.setTint(tint); - + Drawable getConnectedWifiDrawable(@NonNull WifiEntry wifiEntry) { + final Drawable drawable = + mWifiIconInjector.getIcon(false /* noInternet*/, wifiEntry.getLevel()); + if (drawable == null) { + return null; + } + drawable.setTint(mContext.getColor(R.color.connected_network_primary_color)); return drawable; } + boolean isNightMode() { + return (mContext.getResources().getConfiguration().uiMode + & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES; + } + Drawable getSignalStrengthDrawable() { Drawable drawable = mContext.getDrawable( R.drawable.ic_signal_strength_zero_bar_no_internet); @@ -343,13 +350,9 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, drawable = shared.get(); } - drawable.setTint( - Utils.getColorAttrDefaultColor(mContext, android.R.attr.colorControlNormal)); - if (activeNetworkIsCellular()) { - drawable.setTint(Utils.getColorAttrDefaultColor(mContext, - com.android.internal.R.attr.colorAccentPrimaryVariant)); - } - + drawable.setTint(activeNetworkIsCellular() ? mContext.getColor( + R.color.connected_network_primary_color) : Utils.getColorAttrDefaultColor( + mContext, android.R.attr.textColorTertiary)); } catch (Throwable e) { e.printStackTrace(); } @@ -396,7 +399,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, // Set the signal strength icon at the bottom right icons.setLayerGravity(1 /* index of SignalDrawable */, Gravity.BOTTOM | Gravity.RIGHT); icons.setLayerSize(1 /* index of SignalDrawable */, iconSize, iconSize); - icons.setTintList(Utils.getColorAttr(context, android.R.attr.colorControlNormal)); + icons.setTintList(Utils.getColorAttr(context, android.R.attr.textColorTertiary)); return icons; } @@ -530,24 +533,24 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, return summary; } - String getConnectedWifiTitle() { - if (getConnectedWifiEntry() == null) { + String getDefaultWifiTitle() { + if (getDefaultWifiEntry() == null) { if (DEBUG) { Log.d(TAG, "connected entry is null"); } return ""; } - return getConnectedWifiEntry().getTitle(); + return getDefaultWifiEntry().getTitle(); } - String getConnectedWifiSummary() { - if (getConnectedWifiEntry() == null) { + String getDefaultWifiSummary() { + if (getDefaultWifiEntry() == null) { if (DEBUG) { Log.d(TAG, "connected entry is null"); } return ""; } - return getConnectedWifiEntry().getSummary(false); + return getDefaultWifiEntry().getSummary(false); } void launchNetworkSetting() { @@ -575,8 +578,11 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, return mWifiEntry; } - WifiEntry getConnectedWifiEntry() { - return mConnectedEntry; + WifiEntry getDefaultWifiEntry() { + if (mConnectedEntry != null && mConnectedEntry.isDefaultNetwork()) { + return mConnectedEntry; + } + return null; } WifiManager getWifiManager() { @@ -775,7 +781,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, mConnectedEntry = null; } - mCallback.onAccessPointsChanged(mWifiEntry, mConnectedEntry); + mCallback.onAccessPointsChanged(mWifiEntry, getDefaultWifiEntry()); } @Override @@ -878,6 +884,10 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, } } + public WifiUtils.InternetIconInjector getWifiIconInjector() { + return mWifiIconInjector; + } + interface InternetDialogCallback { void onRefreshCarrierInfo(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetAdapterTest.java index a8f6f5361d787..9c3301ef3dc48 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetAdapterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetAdapterTest.java @@ -2,7 +2,9 @@ package com.android.systemui.qs.tiles.dialog; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.testing.AndroidTestingRunner; @@ -11,6 +13,7 @@ import android.widget.LinearLayout; import androidx.test.filters.SmallTest; +import com.android.settingslib.wifi.WifiUtils; import com.android.systemui.SysuiTestCase; import com.android.wifitrackerlib.WifiEntry; @@ -28,51 +31,55 @@ public class InternetAdapterTest extends SysuiTestCase { private static final String WIFI_TITLE = "Wi-Fi Title"; private static final String WIFI_SUMMARY = "Wi-Fi Summary"; - private InternetDialogController mInternetDialogController = mock( - InternetDialogController.class); + + @Mock + private WifiEntry mWifiEntry; + @Mock + private InternetDialogController mInternetDialogController; + @Mock + private WifiUtils.InternetIconInjector mWifiIconInjector; + private InternetAdapter mInternetAdapter; private InternetAdapter.InternetViewHolder mViewHolder; - @Mock - private WifiEntry mWifiEntry = mock(WifiEntry.class); @Before public void setUp() { MockitoAnnotations.initMocks(this); mInternetAdapter = new InternetAdapter(mInternetDialogController); - mViewHolder = (InternetAdapter.InternetViewHolder) mInternetAdapter - .onCreateViewHolder(new LinearLayout(mContext), 0); + mViewHolder = mInternetAdapter.onCreateViewHolder(new LinearLayout(mContext), 0); when(mWifiEntry.getTitle()).thenReturn(WIFI_TITLE); when(mWifiEntry.getSummary(false)).thenReturn(WIFI_SUMMARY); when(mInternetDialogController.getWifiEntryList()).thenReturn(Arrays.asList(mWifiEntry)); + mViewHolder.mWifiIconInjector = mWifiIconInjector; } @Test - public void getItemCount_withApmOnWifiOnNoConnectedWifi_returnFour() { + public void getItemCount_withApmOnWifiOnNoDefaultWifi_returnFour() { when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(true); assertThat(mInternetAdapter.getItemCount()).isEqualTo(4); } @Test - public void getItemCount_withApmOnWifiOnHasConnectedWifi_returnThree() { - when(mWifiEntry.getConnectedState()).thenReturn(WifiEntry.CONNECTED_STATE_CONNECTED); - when(mInternetDialogController.getConnectedWifiEntry()).thenReturn(mWifiEntry); + public void getItemCount_withApmOnWifiOnHasDefaultWifi_returnThree() { + when(mWifiEntry.isDefaultNetwork()).thenReturn(true); + when(mInternetDialogController.getDefaultWifiEntry()).thenReturn(mWifiEntry); when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(true); assertThat(mInternetAdapter.getItemCount()).isEqualTo(3); } @Test - public void getItemCount_withApmOffWifiOnNoConnectedWifi_returnThree() { + public void getItemCount_withApmOffWifiOnNoDefaultWifi_returnThree() { when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(false); assertThat(mInternetAdapter.getItemCount()).isEqualTo(3); } @Test - public void getItemCount_withApmOffWifiOnHasConnectedWifi_returnTwo() { - when(mWifiEntry.getConnectedState()).thenReturn(WifiEntry.CONNECTED_STATE_CONNECTED); - when(mInternetDialogController.getConnectedWifiEntry()).thenReturn(mWifiEntry); + public void getItemCount_withApmOffWifiOnHasDefaultWifi_returnTwo() { + when(mWifiEntry.isDefaultNetwork()).thenReturn(true); + when(mInternetDialogController.getDefaultWifiEntry()).thenReturn(mWifiEntry); when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(false); assertThat(mInternetAdapter.getItemCount()).isEqualTo(2); @@ -99,4 +106,22 @@ public class InternetAdapterTest extends SysuiTestCase { assertThat(mViewHolder.mWifiIcon.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mViewHolder.mWifiLockedIcon.getVisibility()).isEqualTo(View.VISIBLE); } + + @Test + public void onBindViewHolder_bindDefaultWifiNetwork_getIconWithInternet() { + when(mWifiEntry.shouldShowXLevelIcon()).thenReturn(false); + + mInternetAdapter.onBindViewHolder(mViewHolder, 0); + + verify(mWifiIconInjector).getIcon(eq(false) /* noInternet */, anyInt()); + } + + @Test + public void onBindViewHolder_bindNoDefaultWifiNetwork_getIconWithNoInternet() { + when(mWifiEntry.shouldShowXLevelIcon()).thenReturn(true); + + mInternetAdapter.onBindViewHolder(mViewHolder, 0); + + verify(mWifiIconInjector).getIcon(eq(true) /* noInternet */, anyInt()); + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java index facb19fae95a4..f876a43f75d40 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java @@ -4,7 +4,9 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -13,6 +15,7 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.Intent; +import android.graphics.drawable.Drawable; import android.net.ConnectivityManager; import android.net.wifi.ScanResult; import android.net.wifi.WifiInfo; @@ -30,6 +33,9 @@ import androidx.test.filters.SmallTest; import com.android.internal.logging.UiEventLogger; import com.android.keyguard.KeyguardUpdateMonitor; +import com.android.settingslib.Utils; +import com.android.settingslib.wifi.WifiUtils; +import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.qualifiers.Main; @@ -60,16 +66,12 @@ public class InternetDialogControllerTest extends SysuiTestCase { private static final String CONNECTED_TITLE = "Connected Wi-Fi Title"; private static final String CONNECTED_SUMMARY = "Connected Wi-Fi Summary"; - private final UiEventLogger mUiEventLogger = mock(UiEventLogger.class); - private MockInternetDialogController mInternetDialogController; - private InternetDialogController.InternetDialogCallback mCallback = - mock(InternetDialogController.InternetDialogCallback.class); - private ActivityStarter mStarter = mock(ActivityStarter.class); - private WifiManager mWifiManager = mock(WifiManager.class); - private ConnectivityManager mConnectivityManager = mock(ConnectivityManager.class); - private TelephonyManager mTelephonyManager = mock(TelephonyManager.class); - private SubscriptionManager mSubscriptionManager = mock(SubscriptionManager.class); - private FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock()); + @Mock + private WifiManager mWifiManager; + @Mock + private TelephonyManager mTelephonyManager; + @Mock + private SubscriptionManager mSubscriptionManager; @Mock private Handler mHandler; @Mock @@ -88,21 +90,31 @@ public class InternetDialogControllerTest extends SysuiTestCase { private ServiceState mServiceState; @Mock private BroadcastDispatcher mBroadcastDispatcher; + @Mock + private WifiUtils.InternetIconInjector mWifiIconInjector; + + private MockInternetDialogController mInternetDialogController; + private FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock()); @Before public void setUp() { MockitoAnnotations.initMocks(this); doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(SUB_ID); when(mWifiManager.getConnectionInfo()).thenReturn(mWifiInfo); - mInternetDialogController = new MockInternetDialogController(mContext, mUiEventLogger, - mStarter, mAccessPointController, mSubscriptionManager, mTelephonyManager, - mWifiManager, mConnectivityManager, mHandler, mExecutor, mBroadcastDispatcher, + when(mConnectedEntry.isDefaultNetwork()).thenReturn(true); + + mInternetDialogController = new MockInternetDialogController(mContext, + mock(UiEventLogger.class), mock(ActivityStarter.class), mAccessPointController, + mSubscriptionManager, mTelephonyManager, mWifiManager, + mock(ConnectivityManager.class), mHandler, mExecutor, mBroadcastDispatcher, mKeyguardUpdateMonitor, mGlobalSettings); mSubscriptionManager.addOnSubscriptionsChangedListener(mExecutor, mInternetDialogController.mOnSubscriptionsChangedListener); - mInternetDialogController.onStart(mCallback); + mInternetDialogController.onStart( + mock(InternetDialogController.InternetDialogCallback.class)); mInternetDialogController.mActivityStarter = mActivityStarter; mInternetDialogController.mConnectedEntry = mConnectedEntry; + mInternetDialogController.mWifiIconInjector = mWifiIconInjector; } @Test @@ -138,9 +150,12 @@ public class InternetDialogControllerTest extends SysuiTestCase { } @Test - public void getSubtitleText_withWifiOn_returnSearchWifi() { + public void getSubtitleText_withNoWifiEntry_returnSearchWifi() { mInternetDialogController.setAirplaneModeEnabled(false); when(mWifiManager.isWifiEnabled()).thenReturn(true); + List wifiScanResults = mock(ArrayList.class); + doReturn(0).when(wifiScanResults).size(); + when(mWifiManager.getScanResults()).thenReturn(wifiScanResults); assertTrue(TextUtils.equals(mInternetDialogController.getSubtitleText(true), getResourcesString("wifi_empty_list_wifi_on"))); @@ -196,35 +211,53 @@ public class InternetDialogControllerTest extends SysuiTestCase { } @Test - public void getConnectedWifiTitle_withNoConnectedEntry_returnNull() { + public void getDefaultWifiEntry_connectedEntryIsNull_returnNull() { mInternetDialogController.mConnectedEntry = null; - assertTrue(TextUtils.equals(mInternetDialogController.getConnectedWifiTitle(), - "")); + assertThat(mInternetDialogController.getDefaultWifiEntry()).isNull(); } @Test - public void getConnectedWifiTitle_withConnectedEntry_returnTitle() { + public void getDefaultWifiEntry_connectedEntryIsNotDefault_returnNull() { + when(mConnectedEntry.isDefaultNetwork()).thenReturn(false); + + assertThat(mInternetDialogController.getDefaultWifiEntry()).isNull(); + } + + @Test + public void getDefaultWifiEntry_connectedEntryIsDefault_returnConnectedEntry() { + // The default conditions have been set in setUp(). + // - The connected Wi-Fi entry with the default network condition. + + assertThat(mInternetDialogController.getDefaultWifiEntry()).isEqualTo(mConnectedEntry); + } + + @Test + public void getDefaultWifiTitle_withNoDefaultEntry_returnEmpty() { + mInternetDialogController.mConnectedEntry = null; + + assertThat(mInternetDialogController.getDefaultWifiTitle()).isEmpty(); + } + + @Test + public void getDefaultWifiTitle_withDefaultEntry_returnTitle() { when(mConnectedEntry.getTitle()).thenReturn(CONNECTED_TITLE); - assertTrue(TextUtils.equals(mInternetDialogController.getConnectedWifiTitle(), - CONNECTED_TITLE)); + assertThat(mInternetDialogController.getDefaultWifiTitle()).isEqualTo(CONNECTED_TITLE); } @Test - public void getConnectedWifiSummary_withNoConnectedEntry_returnNull() { + public void getDefaultWifiSummary_withNoDefaultEntry_returnEmpty() { mInternetDialogController.mConnectedEntry = null; - assertTrue(TextUtils.equals(mInternetDialogController.getConnectedWifiSummary(), - "")); + assertThat(mInternetDialogController.getDefaultWifiSummary()).isEmpty(); } @Test - public void getConnectedWifiSummary_withConnectedEntry_returnSummary() { + public void getDefaultWifiSummary_withDefaultEntry_returnSummary() { when(mConnectedEntry.getSummary(false)).thenReturn(CONNECTED_SUMMARY); - assertTrue(TextUtils.equals(mInternetDialogController.getConnectedWifiSummary(), - CONNECTED_SUMMARY)); + assertThat(mInternetDialogController.getDefaultWifiSummary()).isEqualTo(CONNECTED_SUMMARY); } @Test @@ -248,6 +281,17 @@ public class InternetDialogControllerTest extends SysuiTestCase { assertThat(mInternetDialogController.getWifiDetailsSettingsIntent()).isNotNull(); } + @Test + public void getWifiConnectedDrawable_withConnectedEntry_returnIntentIconWithColorAccent() { + final Drawable drawable = mock(Drawable.class); + when(mWifiIconInjector.getIcon(anyBoolean(), anyInt())).thenReturn(drawable); + + mInternetDialogController.getConnectedWifiDrawable(mConnectedEntry); + + verify(mWifiIconInjector).getIcon(eq(false), anyInt()); + verify(drawable).setTint(mContext.getColor(R.color.connected_network_primary_color)); + } + @Test public void launchWifiNetworkDetailsSetting_withNoConnectedEntry_doNothing() { mInternetDialogController.mConnectedEntry = null; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java index 94bd959c9585a..856e3a1281939 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java @@ -2,8 +2,12 @@ package com.android.systemui.qs.tiles.dialog; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -11,6 +15,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.net.wifi.ScanResult; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Handler; @@ -34,10 +39,14 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.MockitoAnnotations; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; @SmallTest @RunWith(AndroidTestingRunner.class) @@ -133,11 +142,13 @@ public class InternetDialogTest extends SysuiTestCase { when(mWifiEntry.getTitle()).thenReturn(WIFI_TITLE); when(mWifiEntry.getSummary(false)).thenReturn(WIFI_SUMMARY); when(mWifiEntry.getConnectedState()).thenReturn(WifiEntry.CONNECTED_STATE_CONNECTED); - when(mInternetDialogController.getConnectedWifiEntry()).thenReturn(mWifiEntry); + when(mWifiEntry.isDefaultNetwork()).thenReturn(true); + mInternetDialog.mConnectedWifiEntry = mWifiEntry; + mInternetDialog.updateDialog(); + final LinearLayout linearLayout = mInternetDialog.mDialogView.requireViewById( R.id.wifi_connected_layout); - assertThat(linearLayout.getVisibility()).isEqualTo(View.VISIBLE); } @@ -170,6 +181,62 @@ public class InternetDialogTest extends SysuiTestCase { verify(mInternetDialogController).launchNetworkSetting(); } + @Test + public void showProgressBar_wifiDisabled_hideProgressBar() { + Mockito.reset(mHandler); + when(mMockWifiManager.isWifiEnabled()).thenReturn(false); + + mInternetDialog.showProgressBar(); + + assertThat(mInternetDialog.mIsProgressBarVisible).isFalse(); + verify(mHandler, never()).postDelayed(any(Runnable.class), anyLong()); + } + + @Test + public void showProgressBar_wifiEnabledWithWifiEntry_showProgressBarThenHide() { + Mockito.reset(mHandler); + when(mMockWifiManager.isWifiEnabled()).thenReturn(true); + List wifiScanResults = mock(ArrayList.class); + when(wifiScanResults.size()).thenReturn(1); + when(mMockWifiManager.getScanResults()).thenReturn(wifiScanResults); + + mInternetDialog.showProgressBar(); + + // Show progress bar + assertThat(mInternetDialog.mIsProgressBarVisible).isTrue(); + + ArgumentCaptor runnableCaptor = ArgumentCaptor.forClass(Runnable.class); + verify(mHandler).postDelayed(runnableCaptor.capture(), + eq(InternetDialog.PROGRESS_DELAY_MS)); + runnableCaptor.getValue().run(); + + // Then hide progress bar + assertThat(mInternetDialog.mIsProgressBarVisible).isFalse(); + } + + @Test + public void showProgressBar_wifiEnabledWithoutWifiScanResults_showProgressBarThenHideSearch() { + Mockito.reset(mHandler); + when(mMockWifiManager.isWifiEnabled()).thenReturn(true); + List wifiScanResults = mock(ArrayList.class); + when(wifiScanResults.size()).thenReturn(0); + when(mMockWifiManager.getScanResults()).thenReturn(wifiScanResults); + + mInternetDialog.showProgressBar(); + + // Show progress bar + assertThat(mInternetDialog.mIsProgressBarVisible).isTrue(); + + ArgumentCaptor runnableCaptor = ArgumentCaptor.forClass(Runnable.class); + verify(mHandler).postDelayed(runnableCaptor.capture(), + eq(InternetDialog.PROGRESS_DELAY_MS)); + runnableCaptor.getValue().run(); + + // Then hide searching sub-title only + assertThat(mInternetDialog.mIsProgressBarVisible).isTrue(); + assertThat(mInternetDialog.mIsSearchingHidden).isTrue(); + } + private class MockInternetDialog extends InternetDialog { private String mMobileNetworkTitle;