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

Commit c951e967 authored by Chris Göllner's avatar Chris Göllner Committed by Chris Göllner
Browse files

Fix WiFi icon in shade header being too large on connected displays

When connecting a display to a device, and pulling down the shade on
the connected display, the WiFi icon was much larger than the other
icons.

Since the shade moves between displays, there is a configuration change
when this move happens.
ModernStatusBarWifiView was not reacting to this configuration change to
update its dimensions.

Test: Connect a display and pull down shade
Test: ModernStatusBarWifiViewTest
Bug: 412409667
Flag: com.android.systemui.shared.status_bar_connected_displays
Change-Id: I03938e391933939d558c05eb1c8ea13ab1f8beb3
parent e1fdb25e
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -735,6 +735,16 @@ flag {
    }
}

flag {
    name: "fix_shade_header_wrong_icon_size"
    namespace: "lse_desktop_experience"
    description: "Fix system icon size in shade header on connected displays"
    bug: "412409667"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
    name: "clipboard_use_description_mimetype"
    namespace: "systemui"
+35 −25
Original line number Diff line number Diff line
@@ -18,11 +18,13 @@ package com.android.systemui.statusbar.pipeline.wifi.ui.view

import android.annotation.SuppressLint
import android.content.Context
import android.content.res.Configuration
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.ImageView
import com.android.keyguard.AlphaOptimizedLinearLayout
import com.android.systemui.Flags
import com.android.systemui.res.R
import com.android.systemui.statusbar.StatusBarIconView
import com.android.systemui.statusbar.core.NewStatusBarIcons
@@ -60,6 +62,20 @@ class ModernStatusBarWifiView(context: Context, attrs: AttributeSet?) :
            return (LayoutInflater.from(context).inflate(R.layout.new_status_bar_wifi_group, null)
                    as ModernStatusBarWifiView)
                .apply {
                    updateDimensions()

                    initView(slot) { WifiViewBinder.bind(this, wifiViewModel) }
                }
        }
    }

    public override fun onConfigurationChanged(newConfig: Configuration?) {
        if (Flags.fixShadeHeaderWrongIconSize()) {
            updateDimensions()
        }
    }

    private fun updateDimensions() {
        // Flag-specific configuration
        if (NewStatusBarIcons.isEnabled) {
            // The newer asset does not embed whitespace around it, and is therefore
@@ -69,9 +85,7 @@ class ModernStatusBarWifiView(context: Context, attrs: AttributeSet?) :
            val lp = iconView.layoutParams
            lp.width = ViewGroup.LayoutParams.WRAP_CONTENT
            lp.height =
                            resources.getDimensionPixelSize(
                                R.dimen.status_bar_wifi_signal_height_updated
                            )
                resources.getDimensionPixelSize(R.dimen.status_bar_wifi_signal_height_updated)

            // New status bar icons have a single 3sp spacing defined
            (requireViewById<AlphaOptimizedLinearLayout>(R.id.wifi_group).layoutParams
@@ -85,9 +99,5 @@ class ModernStatusBarWifiView(context: Context, attrs: AttributeSet?) :
                    marginEnd = margin
                }
        }

                    initView(slot) { WifiViewBinder.bind(this, wifiViewModel) }
                }
        }
    }
}
+55 −5
Original line number Diff line number Diff line
@@ -17,6 +17,9 @@
package com.android.systemui.statusbar.pipeline.wifi.ui.view

import android.content.res.ColorStateList
import android.content.res.Configuration
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
import android.testing.TestableLooper.RunWithLooper
@@ -25,12 +28,14 @@ import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.test.filters.SmallTest
import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
import com.android.systemui.log.table.logcatTableLogBuffer
import com.android.systemui.res.R
import com.android.systemui.statusbar.StatusBarIconView.STATE_DOT
import com.android.systemui.statusbar.StatusBarIconView.STATE_HIDDEN
import com.android.systemui.statusbar.StatusBarIconView.STATE_ICON
import com.android.systemui.statusbar.core.NewStatusBarIcons
import com.android.systemui.statusbar.phone.StatusBarLocation
import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository
import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor
@@ -80,6 +85,8 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)
        // To ensure testable resources are being used.
        context.orCreateTestableResources
        testableLooper = TestableLooper.get(this)

        airplaneModeRepository = FakeAirplaneModeRepository()
@@ -109,11 +116,7 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
                scope,
                wifiConstants,
            )
        viewModel =
            viewModelForLocation(
                viewModelCommon,
                StatusBarLocation.HOME,
            )
        viewModel = viewModelForLocation(viewModelCommon, StatusBarLocation.HOME)
    }

    // Note: The following tests are more like integration tests, since they stand up a full
@@ -254,6 +257,53 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
        ViewUtils.detachView(view)
    }

    @Test
    @EnableFlags(NewStatusBarIcons.FLAG_NAME)
    @DisableFlags(Flags.FLAG_FIX_SHADE_HEADER_WRONG_ICON_SIZE)
    fun configChanged_dimensionsWithNewValues_flagDisabled_dimensionsNotUpdated() {
        val view = ModernStatusBarWifiView.constructAndBind(context, SLOT_NAME, viewModel)
        val iconView = view.getIconView()
        val group = view.getIconGroupView()
        val initialHeight =
            context.resources.getDimensionPixelSize(R.dimen.status_bar_wifi_signal_height_updated)
        val initialMargin =
            context.resources.getDimensionPixelSize(
                R.dimen.status_bar_wifi_signal_horizontal_margin
            )

        overrideResource(R.dimen.status_bar_wifi_signal_height_updated, initialHeight + 10)
        overrideResource(R.dimen.status_bar_wifi_signal_horizontal_margin, initialMargin + 10)
        view.onConfigurationChanged(Configuration())

        assertThat(iconView.layoutParams.height).isEqualTo(initialHeight)
        val newMarginLp = group.layoutParams as ViewGroup.MarginLayoutParams
        assertThat(newMarginLp.marginStart).isEqualTo(initialMargin)
        assertThat(newMarginLp.marginEnd).isEqualTo(initialMargin)
    }

    @Test
    @EnableFlags(NewStatusBarIcons.FLAG_NAME, Flags.FLAG_FIX_SHADE_HEADER_WRONG_ICON_SIZE)
    fun configChanged_dimensionsWithNewValues_flagEnabled_dimensionsUpdated() {
        val view = ModernStatusBarWifiView.constructAndBind(context, SLOT_NAME, viewModel)
        val iconView = view.getIconView()
        val group = view.getIconGroupView()
        val initialHeight =
            context.resources.getDimensionPixelSize(R.dimen.status_bar_wifi_signal_height_updated)
        val initialMargin =
            context.resources.getDimensionPixelSize(
                R.dimen.status_bar_wifi_signal_horizontal_margin
            )

        overrideResource(R.dimen.status_bar_wifi_signal_height_updated, initialHeight + 10)
        overrideResource(R.dimen.status_bar_wifi_signal_horizontal_margin, initialMargin + 10)
        view.onConfigurationChanged(Configuration())

        assertThat(iconView.layoutParams.height).isEqualTo(initialHeight + 10)
        val newMarginLp = group.layoutParams as ViewGroup.MarginLayoutParams
        assertThat(newMarginLp.marginStart).isEqualTo(initialMargin + 10)
        assertThat(newMarginLp.marginEnd).isEqualTo(initialMargin + 10)
    }

    private fun View.getIconGroupView(): View {
        return this.requireViewById(R.id.wifi_group)
    }