From a5570e10aad186714c446d49c1b95538d20f7388 Mon Sep 17 00:00:00 2001 From: Weng Su Date: Thu, 15 Jul 2021 12:10:26 +0800 Subject: [PATCH] [Provider Model] Launch Wi-Fi detailed when tap the connected Wi-Fi - Uses the WifiUtils.getWifiDetailsSettingsIntent() to launch Network details settings Bug: 191475923 Test: manual test with the topic CLs. atest -c com.android.systemui.qs.tiles.dialog Change-Id: I38622dc3c91e39e35c71274ca3a06272a5da17fe --- .../qs/tiles/dialog/InternetDialog.java | 16 ++-- .../dialog/InternetDialogController.java | 34 ++++++-- .../dialog/InternetDialogControllerTest.java | 77 ++++++++++++++----- 3 files changed, 94 insertions(+), 33 deletions(-) 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 50fb66c10f832..86fb658050a74 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 @@ -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. */ @@ -298,9 +298,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) -> { @@ -354,6 +352,10 @@ public class InternetDialog extends SystemUIDialog implements mConnectedWifListLayout.setBackground(mBackgroundOn); } + void onClickConnectedWifi() { + mInternetDialogController.launchWifiNetworkDetailsSetting(); + } + void onClickSeeMoreButton() { mInternetDialogController.launchNetworkSetting(); } 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 24c2fb1eb3f9b..e352827672802 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 @@ -48,6 +48,10 @@ import android.util.Log; import android.view.Gravity; import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; + import com.android.internal.logging.UiEventLogger; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; @@ -56,6 +60,7 @@ import com.android.settingslib.Utils; import com.android.settingslib.graph.SignalDrawable; import com.android.settingslib.mobile.MobileMappings; import com.android.settingslib.net.SignalStrengthUtil; +import com.android.settingslib.wifi.WifiUtils; import com.android.systemui.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.qualifiers.Main; @@ -78,10 +83,6 @@ import java.util.stream.Stream; import javax.inject.Inject; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.VisibleForTesting; - public class InternetDialogController implements WifiEntry.DisconnectCallback, NetworkController.AccessPointController.AccessPointCallback { @@ -104,7 +105,6 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, private WifiManager mWifiManager; private Context mContext; - private ActivityStarter mActivityStarter; private SubscriptionManager mSubscriptionManager; private TelephonyManager mTelephonyManager; private ConnectivityManager mConnectivityManager; @@ -118,13 +118,16 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, private IntentFilter mWifiStateFilter; private InternetDialogCallback mCallback; private List mWifiEntry; - private WifiEntry mConnectedEntry; private UiEventLogger mUiEventLogger; private BroadcastDispatcher mBroadcastDispatcher; private KeyguardUpdateMonitor mKeyguardUpdateMonitor; private GlobalSettings mGlobalSettings; private int mDefaultDataSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; + @VisibleForTesting + protected ActivityStarter mActivityStarter; + @VisibleForTesting + protected WifiEntry mConnectedEntry; @VisibleForTesting protected SubscriptionManager.OnSubscriptionsChangedListener mOnSubscriptionsChangedListener; @VisibleForTesting @@ -226,6 +229,17 @@ 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(); + if (TextUtils.isEmpty(key)) { + if (DEBUG) { + Log.d(TAG, "connected entry's key is empty"); + } + return null; + } + return WifiUtils.getWifiDetailsSettingsIntent(key); + } + CharSequence getDialogTitleText() { if (isAirplaneModeEnabled()) { return mContext.getText(R.string.airplane_mode); @@ -533,6 +547,14 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, mActivityStarter.postStartActivityDismissingKeyguard(getSettingsIntent(), 0); } + void launchWifiNetworkDetailsSetting() { + Intent intent = getWifiDetailsSettingsIntent(); + if (intent != null) { + mCallback.dismissDialog(); + mActivityStarter.postStartActivityDismissingKeyguard(intent, 0); + } + } + void connectCarrierNetwork() { final MergedCarrierEntry mergedCarrierEntry = mAccessPointController.getMergedCarrierEntry(); 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 83e4d00b3a8f5..facb19fae95a4 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 @@ -3,11 +3,16 @@ package com.android.systemui.qs.tiles.dialog; 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.anyInt; 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; import android.content.Context; +import android.content.Intent; import android.net.ConnectivityManager; import android.net.wifi.ScanResult; import android.net.wifi.WifiInfo; @@ -20,6 +25,9 @@ import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.text.TextUtils; +import androidx.annotation.Nullable; +import androidx.test.filters.SmallTest; + import com.android.internal.logging.UiEventLogger; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.SysuiTestCase; @@ -33,9 +41,6 @@ import com.android.systemui.util.settings.GlobalSettings; import com.android.systemui.util.time.FakeSystemClock; import com.android.wifitrackerlib.WifiEntry; -import androidx.annotation.Nullable; -import androidx.test.filters.SmallTest; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -68,13 +73,15 @@ public class InternetDialogControllerTest extends SysuiTestCase { @Mock private Handler mHandler; @Mock + private ActivityStarter mActivityStarter; + @Mock private GlobalSettings mGlobalSettings; @Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor; @Mock private NetworkController.AccessPointController mAccessPointController; @Mock - private WifiEntry mWifiEntryConnected = mock(WifiEntry.class); + private WifiEntry mConnectedEntry; @Mock private WifiInfo mWifiInfo; @Mock @@ -94,6 +101,8 @@ public class InternetDialogControllerTest extends SysuiTestCase { mSubscriptionManager.addOnSubscriptionsChangedListener(mExecutor, mInternetDialogController.mOnSubscriptionsChangedListener); mInternetDialogController.onStart(mCallback); + mInternetDialogController.mActivityStarter = mActivityStarter; + mInternetDialogController.mConnectedEntry = mConnectedEntry; } @Test @@ -188,7 +197,7 @@ public class InternetDialogControllerTest extends SysuiTestCase { @Test public void getConnectedWifiTitle_withNoConnectedEntry_returnNull() { - mInternetDialogController.setConnectedWifiEntry(null); + mInternetDialogController.mConnectedEntry = null; assertTrue(TextUtils.equals(mInternetDialogController.getConnectedWifiTitle(), "")); @@ -196,8 +205,7 @@ public class InternetDialogControllerTest extends SysuiTestCase { @Test public void getConnectedWifiTitle_withConnectedEntry_returnTitle() { - mInternetDialogController.setConnectedWifiEntry(mWifiEntryConnected); - when(mWifiEntryConnected.getTitle()).thenReturn(CONNECTED_TITLE); + when(mConnectedEntry.getTitle()).thenReturn(CONNECTED_TITLE); assertTrue(TextUtils.equals(mInternetDialogController.getConnectedWifiTitle(), CONNECTED_TITLE)); @@ -205,7 +213,7 @@ public class InternetDialogControllerTest extends SysuiTestCase { @Test public void getConnectedWifiSummary_withNoConnectedEntry_returnNull() { - mInternetDialogController.setConnectedWifiEntry(null); + mInternetDialogController.mConnectedEntry = null; assertTrue(TextUtils.equals(mInternetDialogController.getConnectedWifiSummary(), "")); @@ -213,13 +221,52 @@ public class InternetDialogControllerTest extends SysuiTestCase { @Test public void getConnectedWifiSummary_withConnectedEntry_returnSummary() { - mInternetDialogController.setConnectedWifiEntry(mWifiEntryConnected); - when(mWifiEntryConnected.getSummary(false)).thenReturn(CONNECTED_SUMMARY); + when(mConnectedEntry.getSummary(false)).thenReturn(CONNECTED_SUMMARY); assertTrue(TextUtils.equals(mInternetDialogController.getConnectedWifiSummary(), CONNECTED_SUMMARY)); } + @Test + public void getWifiDetailsSettingsIntent_withNoConnectedEntry_returnNull() { + mInternetDialogController.mConnectedEntry = null; + + assertThat(mInternetDialogController.getWifiDetailsSettingsIntent()).isNull(); + } + + @Test + public void getWifiDetailsSettingsIntent_withNoConnectedEntryKey_returnNull() { + when(mConnectedEntry.getKey()).thenReturn(null); + + assertThat(mInternetDialogController.getWifiDetailsSettingsIntent()).isNull(); + } + + @Test + public void getWifiDetailsSettingsIntent_withConnectedEntryKey_returnIntent() { + when(mConnectedEntry.getKey()).thenReturn("test_key"); + + assertThat(mInternetDialogController.getWifiDetailsSettingsIntent()).isNotNull(); + } + + @Test + public void launchWifiNetworkDetailsSetting_withNoConnectedEntry_doNothing() { + mInternetDialogController.mConnectedEntry = null; + + mInternetDialogController.launchWifiNetworkDetailsSetting(); + + verify(mActivityStarter, never()) + .postStartActivityDismissingKeyguard(any(Intent.class), anyInt()); + } + + @Test + public void launchWifiNetworkDetailsSetting_withConnectedEntryKey_startActivity() { + when(mConnectedEntry.getKey()).thenReturn("test_key"); + + mInternetDialogController.launchWifiNetworkDetailsSetting(); + + verify(mActivityStarter).postStartActivityDismissingKeyguard(any(Intent.class), anyInt()); + } + private String getResourcesString(String name) { return mContext.getResources().getString(getResourcesId(name)); } @@ -231,7 +278,6 @@ public class InternetDialogControllerTest extends SysuiTestCase { private class MockInternetDialogController extends InternetDialogController { - private WifiEntry mConnectedEntry; private GlobalSettings mGlobalSettings; private boolean mIsAirplaneModeOn; @@ -256,14 +302,5 @@ public class InternetDialogControllerTest extends SysuiTestCase { public void setAirplaneModeEnabled(boolean enabled) { mIsAirplaneModeOn = enabled; } - - @Override - WifiEntry getConnectedWifiEntry() { - return mConnectedEntry; - } - - public void setConnectedWifiEntry(WifiEntry connectedEntry) { - mConnectedEntry = connectedEntry; - } } }