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

Commit a10268d7 authored by Michal Brzezinski's avatar Michal Brzezinski
Browse files

Adding hover state to system icons in status bar and shade header

Adding StatusHoverListener which is added as onHoverListener to the status view that should be hoverable in keyguard status bar, regular status bar and shade header.
Listener adds drawable overlay on top of the view on cursor hover. The color of the drawable is:
 - keyguard: managed manually from KeyboardStatusBarView (based on theme)
 - regular status bar: dependent on dark areas
 - shade header: always light

Also adding StateFlow to SysuiDarkIconDispatcher so new consumers don't have to use regular listeners.

Test: StatusHoverListenerTest
Test: screenshot test coming soon
Fixes: 283800652
Fixes: 249859409
Change-Id: Id9c63f5d125a662d98abe5c39f6e450a516e9823
parent f966e40a
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import com.android.systemui.plugins.annotations.DependsOn;
import com.android.systemui.plugins.annotations.ProvidesInterface;

import java.util.ArrayList;
import java.util.Collection;

/**
 * Dispatches events to {@link DarkReceiver}s about changes in darkness, tint area and dark
@@ -78,7 +79,7 @@ public interface DarkIconDispatcher {
     * @return the tint to apply to view depending on the desired tint color and
     *         the screen tintArea in which to apply that tint
     */
    static int getTint(ArrayList<Rect> tintAreas, View view, int color) {
    static int getTint(Collection<Rect> tintAreas, View view, int color) {
        if (isInAreas(tintAreas, view)) {
            return color;
        } else {
@@ -90,7 +91,7 @@ public interface DarkIconDispatcher {
     * @return true if more than half of the view area are in any of the given
     *         areas, false otherwise
     */
    static boolean isInAreas(ArrayList<Rect> areas, View view) {
    static boolean isInAreas(Collection<Rect> areas, View view) {
        if (areas.isEmpty()) {
            return true;
        }
+2 −0
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@
    <color name="qs_detail_button_white">#B3FFFFFF</color><!-- 70% white -->
    <color name="status_bar_clock_color">#FFFFFFFF</color>
    <color name="qs_tile_disabled_color">#9E9E9E</color> <!-- 38% black -->
    <color name="status_bar_icons_hover_color_light">#38FFFFFF</color> <!-- 22% white -->
    <color name="status_bar_icons_hover_color_dark">#38000000</color> <!-- 22% black -->

    <!-- The color of the background in the separated list of the Global Actions menu -->
    <color name="global_actions_separated_background">#F5F5F5</color>
+2 −0
Original line number Diff line number Diff line
@@ -475,6 +475,8 @@
    <!-- Margin start of the system icons super container -->
    <dimen name="system_icons_super_container_margin_start">16dp</dimen>

    <dimen name="status_icons_hover_state_background_radius">16dp</dimen>

    <!-- Width for the notification panel and related windows -->
    <dimen name="match_parent">-1px</dimen>

+5 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.StatusBarStateControllerImpl;
import com.android.systemui.statusbar.phone.ActivityStarterImpl;
import com.android.systemui.statusbar.phone.DarkIconDispatcherImpl;
import com.android.systemui.statusbar.phone.SysuiDarkIconDispatcher;
import com.android.systemui.volume.VolumeDialogControllerImpl;

import dagger.Binds;
@@ -49,6 +50,10 @@ public abstract class PluginModule {
    @Binds
    abstract DarkIconDispatcher provideDarkIconDispatcher(DarkIconDispatcherImpl controllerImpl);

    @Binds
    abstract SysuiDarkIconDispatcher provideSysuiDarkIconDispatcher(
            DarkIconDispatcherImpl controllerImpl);

    /** */
    @Binds
    abstract FalsingManager provideFalsingManager(FalsingManagerProxy falsingManagerImpl);
+6 −0
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider
import com.android.systemui.statusbar.phone.StatusBarIconController
import com.android.systemui.statusbar.phone.StatusBarLocation
import com.android.systemui.statusbar.phone.StatusIconContainer
import com.android.systemui.statusbar.phone.StatusOverlayHoverListenerFactory
import com.android.systemui.statusbar.policy.Clock
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.statusbar.policy.NextAlarmController
@@ -99,6 +100,7 @@ constructor(
    private val qsBatteryModeController: QsBatteryModeController,
    private val nextAlarmController: NextAlarmController,
    private val activityStarter: ActivityStarter,
    private val statusOverlayHoverListenerFactory: StatusOverlayHoverListenerFactory,
) : ViewController<View>(header), Dumpable {

    companion object {
@@ -326,6 +328,9 @@ constructor(
        demoModeController.addCallback(demoModeReceiver)
        statusBarIconController.addIconGroup(iconManager)
        nextAlarmController.addCallback(nextAlarmCallback)
        systemIcons.setOnHoverListener(
            statusOverlayHoverListenerFactory.createListener(systemIcons)
        )
    }

    override fun onViewDetached() {
@@ -336,6 +341,7 @@ constructor(
        demoModeController.removeCallback(demoModeReceiver)
        statusBarIconController.removeIconGroup(iconManager)
        nextAlarmController.removeCallback(nextAlarmCallback)
        systemIcons.setOnHoverListener(null)
    }

    fun disable(state1: Int, state2: Int, animate: Boolean) {
Loading