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

Commit 9f2e67f7 authored by Jason Zhang's avatar Jason Zhang
Browse files

Add "Add network" button in Internet detailed view

Adds the "Add network" button in internet detailed view in quick
settings. Clicking on that will invoke WiFi configuration dialog.

Demo: https://drive.google.com/file/d/1o147dj3id3f2o7rtd1G0a85b4ZwdCGns/view?usp=sharing&resourcekey=0-w_SBtaiZyDiN7dDDJh5whg

Bug: 408503550
Flag: com.android.systemui.qs_wifi_config
Test: atest InternetDetailsContentManagerTest
Change-Id: Id14f57fe63b9b9c41cee970cfb5408b0b1b76d14
parent 51f68d9a
Loading
Loading
Loading
Loading
+79 −25
Original line number Diff line number Diff line
@@ -449,10 +449,63 @@
                    app:layout_constraintTop_toTopOf="parent" />
            </androidx.constraintlayout.widget.ConstraintLayout>


            <androidx.constraintlayout.widget.ConstraintLayout
                android:id="@+id/wifi_buttons_container"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="@dimen/dialog_bottom_padding">

                <LinearLayout
                    android:id="@+id/add_network_button"
                    style="@style/InternetDialog.Network"
                    android:layout_height="@dimen/tile_details_button_row_height"
                    android:layout_width="0dp"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintEnd_toStartOf="@id/share_wifi_button"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    android:background="@drawable/settingslib_entry_bg_off"
                    android:gravity="center"
                    android:visibility="gone">

                    <FrameLayout
                        android:layout_width="@dimen/tile_details_button_size"
                        android:layout_height="@dimen/tile_details_button_size"
                        android:clickable="false">

                        <ImageView
                            android:contentDescription="@string/add_network_button_text"
                            android:src="@drawable/ic_add"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:tint="@androidprv:color/materialColorOnSurface" />
                    </FrameLayout>

                    <FrameLayout
                        android:clickable="false"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginStart="@dimen/internet_dialog_network_layout_margin">

                        <TextView
                            android:text="@string/add_network_button_text"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:textAppearance="@style/TextAppearance.TileDetailsEntryTitle" />
                    </FrameLayout>
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/share_wifi_button"
                    style="@style/InternetDialog.Network"
                    android:layout_height="@dimen/tile_details_button_row_height"
                    android:layout_width="0dp"
                    app:layout_constrainedWidth="true"
                    app:layout_constraintStart_toEndOf="@id/add_network_button"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    android:background="@drawable/settingslib_entry_bg_off"
                    android:gravity="center">

@@ -482,6 +535,7 @@
                            android:textAppearance="@style/TextAppearance.TileDetailsEntryTitle" />
                    </FrameLayout>
                </LinearLayout>
            </androidx.constraintlayout.widget.ConstraintLayout>

        </LinearLayout>
    </androidx.core.widget.NestedScrollView>
+3 −0
Original line number Diff line number Diff line
@@ -168,6 +168,9 @@
    <!-- Button label to share wifi [CHAR_LIMIT=20] -->
    <string name="share_wifi_button_text">Share Wi\u2011Fi</string>

    <!-- Button label to add a new network [CHAR_LIMIT=20] -->
    <string name="add_network_button_text">Add network</string>

    <!-- Title of confirmation dialog for wireless debugging [CHAR LIMIT=NONE] -->
    <string name="wifi_debugging_title">Allow wireless debugging on this network?</string>

+23 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.qs.tiles.dialog
import android.app.AlertDialog
import android.content.Context
import android.content.DialogInterface
import android.content.Intent
import android.graphics.Canvas
import android.graphics.Rect
import android.graphics.drawable.Drawable
@@ -58,10 +59,12 @@ import com.android.internal.logging.UiEventLogger
import com.android.settingslib.satellite.SatelliteDialogUtils.TYPE_IS_WIFI
import com.android.settingslib.satellite.SatelliteDialogUtils.mayStartSatelliteWarningDialog
import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils
import com.android.settingslib.wifi.WifiUtils
import com.android.systemui.Prefs
import com.android.systemui.accessibility.floatingmenu.AnnotationLinkSpan
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.qs.flags.QsWifiConfig
import com.android.systemui.res.R
import com.android.systemui.statusbar.phone.SystemUIDialog
import com.android.systemui.statusbar.policy.KeyguardStateController
@@ -122,6 +125,7 @@ constructor(
    private lateinit var mobileDataToggle: MaterialSwitch
    private lateinit var wifiToggle: MaterialSwitch
    private lateinit var shareWifiButton: LinearLayout
    private lateinit var addNetworkButton: LinearLayout
    private lateinit var airplaneModeButton: Button
    private var alertDialog: AlertDialog? = null
    private var canChangeWifiState = false
@@ -243,6 +247,19 @@ constructor(
            }
        }

        // Add network
        addNetworkButton = contentView.requireViewById(R.id.add_network_button)
        if (QsWifiConfig.isEnabled) {
            addNetworkButton.setOnClickListener {
                val intent =
                    WifiUtils.getWifiDialogIntent(null, true /* connectForCaller */).apply {
                        addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                        addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
                    }
                internetDetailsContentController.startActivityForDialog(intent)
            }
        }

        // Airplane mode
        airplaneModeButton = contentView.requireViewById(R.id.apm_button)
        airplaneModeButton.setOnClickListener {
@@ -432,6 +449,7 @@ constructor(
        wifiRecyclerView.visibility = View.GONE
        seeAllLayout.visibility = View.GONE
        shareWifiButton.visibility = View.GONE
        addNetworkButton.visibility = View.GONE
    }

    private fun setProgressBarVisible(visible: Boolean) {
@@ -744,8 +762,12 @@ constructor(
        if (!internetContent.isWifiEnabled || internetContent.isDeviceLocked) {
            wifiRecyclerView.visibility = View.GONE
            seeAllLayout.visibility = View.GONE
            addNetworkButton.visibility = View.GONE
            return
        }
        if (QsWifiConfig.isEnabled) {
            addNetworkButton.visibility = View.VISIBLE
        }
        val wifiListMaxCount = getWifiListMaxCount()
        if (adapter.itemCount > wifiListMaxCount) {
            hasMoreWifiEntries = true
@@ -840,6 +862,7 @@ constructor(
        wifiToggle.setOnCheckedChangeListener(null)
        mobileDataToggle.setOnCheckedChangeListener(null)
        shareWifiButton.setOnClickListener(null)
        addNetworkButton.setOnClickListener(null)
        airplaneModeButton.setOnClickListener(null)
        internetDetailsContentController.onStop()
    }
+48 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.qs.tiles.dialog
import android.content.Intent
import android.os.Handler
import android.os.fakeExecutorHandler
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.telephony.SubscriptionManager
import android.telephony.TelephonyManager
@@ -90,6 +91,7 @@ class InternetDetailsContentManagerTest : SysuiTestCase() {
    private var airplaneModeSummaryText: TextView? = null
    private var mockitoSession: MockitoSession? = null
    private var sharedWifiButton: LinearLayout? = null
    private var addNetworkButton: LinearLayout? = null
    private lateinit var contentView: View

    @Before
@@ -152,6 +154,7 @@ class InternetDetailsContentManagerTest : SysuiTestCase() {
        wifiScanNotify = contentView.requireViewById(R.id.wifi_scan_notify_layout)
        airplaneModeSummaryText = contentView.requireViewById(R.id.airplane_mode_summary)
        sharedWifiButton = contentView.requireViewById(R.id.share_wifi_button)
        addNetworkButton = contentView.requireViewById(R.id.add_network_button)
    }

    @After
@@ -406,6 +409,7 @@ class InternetDetailsContentManagerTest : SysuiTestCase() {
            val secondaryLayout =
                contentView.requireViewById<LinearLayout>(R.id.secondary_mobile_network_layout)
            assertThat(secondaryLayout.visibility).isEqualTo(View.GONE)
            assertThat(addNetworkButton!!.visibility).isEqualTo(View.GONE)
        }
    }

@@ -422,6 +426,7 @@ class InternetDetailsContentManagerTest : SysuiTestCase() {
            internetDetailsContentManager.lifecycleOwner!!
        ) {
            assertThat(connectedWifi!!.visibility).isEqualTo(View.GONE)
            assertThat(addNetworkButton!!.visibility).isEqualTo(View.GONE)
        }
    }

@@ -441,6 +446,7 @@ class InternetDetailsContentManagerTest : SysuiTestCase() {
            assertThat(wifiList!!.visibility).isEqualTo(View.VISIBLE)
            verify(internetAdapter).setMaxEntriesCount(3)
            assertThat(seeAll!!.visibility).isEqualTo(View.INVISIBLE)
            assertThat(addNetworkButton!!.visibility).isEqualTo(View.GONE)
        }
    }

@@ -460,6 +466,7 @@ class InternetDetailsContentManagerTest : SysuiTestCase() {
            assertThat(wifiList!!.visibility).isEqualTo(View.VISIBLE)
            verify(internetAdapter).setMaxEntriesCount(3)
            assertThat(seeAll!!.visibility).isEqualTo(View.INVISIBLE)
            assertThat(addNetworkButton!!.visibility).isEqualTo(View.GONE)
        }
    }

@@ -478,6 +485,7 @@ class InternetDetailsContentManagerTest : SysuiTestCase() {
            assertThat(wifiList!!.visibility).isEqualTo(View.VISIBLE)
            verify(internetAdapter).setMaxEntriesCount(2)
            assertThat(seeAll!!.visibility).isEqualTo(View.INVISIBLE)
            assertThat(addNetworkButton!!.visibility).isEqualTo(View.GONE)
        }
    }

@@ -498,6 +506,7 @@ class InternetDetailsContentManagerTest : SysuiTestCase() {
            assertThat(wifiList!!.visibility).isEqualTo(View.VISIBLE)
            verify(internetAdapter).setMaxEntriesCount(3)
            assertThat(seeAll!!.visibility).isEqualTo(View.VISIBLE)
            assertThat(addNetworkButton!!.visibility).isEqualTo(View.GONE)
        }
    }

@@ -517,10 +526,12 @@ class InternetDetailsContentManagerTest : SysuiTestCase() {
            assertThat(wifiList!!.visibility).isEqualTo(View.VISIBLE)
            verify(internetAdapter).setMaxEntriesCount(2)
            assertThat(seeAll!!.visibility).isEqualTo(View.VISIBLE)
            assertThat(addNetworkButton!!.visibility).isEqualTo(View.GONE)
        }
    }

    @Test
    @EnableFlags(Flags.FLAG_QS_WIFI_CONFIG)
    fun updateContent_deviceLockedAndNoConnectedWifi_showWifiToggle() {
        // The preconditions WiFi entries are already in setUp()
        whenever(internetDetailsContentController.isDeviceLocked).thenReturn(true)
@@ -538,10 +549,12 @@ class InternetDetailsContentManagerTest : SysuiTestCase() {
            assertThat(connectedWifi!!.visibility).isEqualTo(View.GONE)
            assertThat(wifiList!!.visibility).isEqualTo(View.GONE)
            assertThat(seeAll!!.visibility).isEqualTo(View.GONE)
            assertThat(addNetworkButton!!.visibility).isEqualTo(View.GONE)
        }
    }

    @Test
    @EnableFlags(Flags.FLAG_QS_WIFI_CONFIG)
    fun updateContent_deviceLockedAndHasConnectedWifi_showWifiToggleWithBackground() {
        // The preconditions WiFi ON and WiFi entries are already in setUp()
        whenever(internetDetailsContentController.isDeviceLocked).thenReturn(true)
@@ -558,6 +571,41 @@ class InternetDetailsContentManagerTest : SysuiTestCase() {
            assertThat(connectedWifi!!.visibility).isEqualTo(View.GONE)
            assertThat(wifiList!!.visibility).isEqualTo(View.GONE)
            assertThat(seeAll!!.visibility).isEqualTo(View.GONE)
            assertThat(addNetworkButton!!.visibility).isEqualTo(View.GONE)
        }
    }

    @Test
    @EnableFlags(Flags.FLAG_QS_WIFI_CONFIG)
    fun updateContent_showAddNetworkButton() {
        // The preconditions WiFi ON and WiFi entries are already in setUp()
        internetDetailsContentManager.wifiEntriesCount =
            InternetDetailsContentController.MAX_WIFI_ENTRY_COUNT - 1
        internetDetailsContentManager.hasMoreWifiEntries = true
        internetDetailsContentManager.updateContent(false)
        bgExecutor.runAllReady()

        internetDetailsContentManager.internetContentData.observe(
            internetDetailsContentManager.lifecycleOwner!!
        ) {
            assertThat(addNetworkButton!!.visibility).isEqualTo(View.VISIBLE)
        }
    }

    @Test
    @DisableFlags(Flags.FLAG_QS_WIFI_CONFIG)
    fun updateContent_notShowAddNetworkButtonWhenFlagDisabled() {
        // The preconditions WiFi ON and WiFi entries are already in setUp()
        internetDetailsContentManager.wifiEntriesCount =
            InternetDetailsContentController.MAX_WIFI_ENTRY_COUNT - 1
        internetDetailsContentManager.hasMoreWifiEntries = true
        internetDetailsContentManager.updateContent(false)
        bgExecutor.runAllReady()

        internetDetailsContentManager.internetContentData.observe(
            internetDetailsContentManager.lifecycleOwner!!
        ) {
            assertThat(addNetworkButton!!.visibility).isEqualTo(View.GONE)
        }
    }