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

Commit 7892c9b4 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Use larger frame of settings button for clicks" into tm-dev am: 014c3b07 am: 0ba3b7f3

parents 85c6eac3 0ba3b7f3
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -73,6 +73,9 @@
                android:layout_height="@dimen/qs_footer_icon_size"
                android:layout_gravity="center"
                android:background="@android:color/transparent"
                android:focusable="false"
                android:clickable="false"
                android:importantForAccessibility="yes"
                android:contentDescription="@string/accessibility_quick_settings_settings"
                android:scaleType="centerInside"
                android:src="@drawable/ic_settings"
+3 −5
Original line number Diff line number Diff line
@@ -38,7 +38,6 @@ import com.android.systemui.qs.dagger.QSFlagsModule.PM_LITE_ENABLED
import com.android.systemui.qs.dagger.QSScope
import com.android.systemui.settings.UserTracker
import com.android.systemui.statusbar.phone.MultiUserSwitchController
import com.android.systemui.statusbar.phone.SettingsButton
import com.android.systemui.statusbar.policy.DeviceProvisionedController
import com.android.systemui.statusbar.policy.UserInfoController
import com.android.systemui.statusbar.policy.UserInfoController.OnUserInfoChangedListener
@@ -89,8 +88,7 @@ internal class FooterActionsController @Inject constructor(
            updateVisibility()
        }

    private val settingsButton: SettingsButton = view.findViewById(R.id.settings_button)
    private val settingsButtonContainer: View? = view.findViewById(R.id.settings_button_container)
    private val settingsButtonContainer: View = view.findViewById(R.id.settings_button_container)
    private val securityFootersContainer: ViewGroup? =
        view.findViewById(R.id.security_footers_container)
    private val powerMenuLite: View = view.findViewById(R.id.pm_lite)
@@ -121,7 +119,7 @@ internal class FooterActionsController @Inject constructor(
        if (!visible || falsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {
            return@OnClickListener
        }
        if (v === settingsButton) {
        if (v === settingsButtonContainer) {
            if (!deviceProvisionedController.isCurrentUserSetup) {
                // If user isn't setup just unlock the device and dump them back at SUW.
                activityStarter.postQSRunnableDismissingKeyguard {}
@@ -166,7 +164,7 @@ internal class FooterActionsController @Inject constructor(
        } else {
            powerMenuLite.visibility = View.GONE
        }
        settingsButton.setOnClickListener(onClickListener)
        settingsButtonContainer.setOnClickListener(onClickListener)
        multiUserSetting.isListening = true

        val securityFooter = securityFooterController.view
+4 −7
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@ import com.android.settingslib.Utils
import com.android.settingslib.drawable.UserIconDrawable
import com.android.systemui.R
import com.android.systemui.statusbar.phone.MultiUserSwitch
import com.android.systemui.statusbar.phone.SettingsButton

/**
 * Quick Settings bottom buttons placed in footer (aka utility bar) - always visible in expanded QS,
@@ -38,7 +37,6 @@ import com.android.systemui.statusbar.phone.SettingsButton
 */
class FooterActionsView(context: Context?, attrs: AttributeSet?) : LinearLayout(context, attrs) {
    private lateinit var settingsContainer: View
    private lateinit var settingsButton: SettingsButton
    private lateinit var multiUserSwitch: MultiUserSwitch
    private lateinit var multiUserAvatar: ImageView

@@ -47,15 +45,14 @@ class FooterActionsView(context: Context?, attrs: AttributeSet?) : LinearLayout(

    override fun onFinishInflate() {
        super.onFinishInflate()
        settingsButton = findViewById(R.id.settings_button)
        settingsContainer = findViewById(R.id.settings_button_container)
        multiUserSwitch = findViewById(R.id.multi_user_switch)
        multiUserAvatar = multiUserSwitch.findViewById(R.id.multi_user_avatar)

        // RenderThread is doing more harm than good when touching the header (to expand quick
        // settings), so disable it for this view
        if (settingsButton.background is RippleDrawable) {
            (settingsButton.background as RippleDrawable).setForceSoftware(true)
        if (settingsContainer.background is RippleDrawable) {
            (settingsContainer.background as RippleDrawable).setForceSoftware(true)
        }
        importantForAccessibility = View.IMPORTANT_FOR_ACCESSIBILITY_YES
    }
@@ -82,7 +79,7 @@ class FooterActionsView(context: Context?, attrs: AttributeSet?) : LinearLayout(

    private fun updateClickabilities() {
        multiUserSwitch.isClickable = multiUserSwitch.visibility == VISIBLE
        settingsButton.isClickable = settingsButton.visibility == VISIBLE
        settingsContainer.isClickable = settingsContainer.visibility == VISIBLE
    }

    private fun updateVisibilities(
@@ -91,7 +88,7 @@ class FooterActionsView(context: Context?, attrs: AttributeSet?) : LinearLayout(
        settingsContainer.visibility = if (qsDisabled) GONE else VISIBLE
        multiUserSwitch.visibility = if (multiUserEnabled) VISIBLE else GONE
        val isDemo = UserManager.isDeviceInDemoMode(context)
        settingsButton.visibility = if (isDemo) INVISIBLE else VISIBLE
        settingsContainer.visibility = if (isDemo) INVISIBLE else VISIBLE
    }

    fun onUserInfoChanged(picture: Drawable?, isGuestUser: Boolean) {
+10 −2
Original line number Diff line number Diff line
@@ -24,13 +24,15 @@ import android.view.HapticFeedbackConstants;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;

import com.android.keyguard.AlphaOptimizedImageButton;
import com.android.systemui.animation.Interpolators;
import com.android.systemui.statusbar.AlphaOptimizedImageView;

public class SettingsButton extends AlphaOptimizedImageButton {
public class SettingsButton extends AlphaOptimizedImageView {

    private static final boolean TUNER_ENABLE_AVAILABLE = false;

@@ -170,6 +172,12 @@ public class SettingsButton extends AlphaOptimizedImageButton {
        mAnimator.start();
    }

    @Override
    public void onInitializeAccessibilityNodeInfoInternal(AccessibilityNodeInfo info) {
        super.onInitializeAccessibilityNodeInfoInternal(info);
        info.setClassName(Button.class.getName());
    }

    private final Runnable mLongPressCallback = new Runnable() {
        @Override
        public void run() {
+17 −2
Original line number Diff line number Diff line
package com.android.systemui.qs

import android.content.Intent
import android.os.Handler
import android.os.UserManager
import android.provider.Settings
@@ -14,6 +15,7 @@ import com.android.internal.logging.MetricsLogger
import com.android.internal.logging.UiEventLogger
import com.android.internal.logging.testing.FakeMetricsLogger
import com.android.systemui.R
import com.android.systemui.animation.ActivityLaunchAnimator
import com.android.systemui.classifier.FalsingManagerFake
import com.android.systemui.globalactions.GlobalActionsDialogLite
import com.android.systemui.plugins.ActivityStarter
@@ -136,12 +138,25 @@ class FooterActionsControllerTest : LeakCheckedTest() {
                .log(GlobalActionsDialogLite.GlobalActionsEvent.GA_OPEN_QS)
    }

    @Test
    fun testSettings() {
        val captor = ArgumentCaptor.forClass(Intent::class.java)
        whenever(deviceProvisionedController.isCurrentUserSetup).thenReturn(true)
        view.findViewById<View>(R.id.settings_button_container).performClick()

        verify(activityStarter)
            .startActivity(capture(captor), anyBoolean(), any<ActivityLaunchAnimator.Controller>())

        assertThat(captor.value.action).isEqualTo(Settings.ACTION_SETTINGS)
    }

    @Test
    fun testSettings_UserNotSetup() {
        whenever(deviceProvisionedController.isCurrentUserSetup).thenReturn(false)
        view.findViewById<View>(R.id.settings_button).performClick()
        view.findViewById<View>(R.id.settings_button_container).performClick()
        // Verify Settings wasn't launched.
        verify<ActivityStarter>(activityStarter, Mockito.never()).startActivity(any(), anyBoolean())
        verify(activityStarter, never())
            .startActivity(any(), anyBoolean(), any<ActivityLaunchAnimator.Controller>())
    }

    @Test