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

Commit 507a5c99 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Fixed an issue where the statusbar was made opaque even though it...

Merge "Fixed an issue where the statusbar was made opaque even though it wasnt" into sc-dev am: 6c21f29b

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15557285

Change-Id: Ife03fccc04eab6a99041cef49503458ba123157a
parents e9e9ca18 6c21f29b
Loading
Loading
Loading
Loading
+30 −2
Original line number Diff line number Diff line
@@ -149,7 +149,10 @@ class PowerButtonReveal(
 */
class LightRevealScrim(context: Context?, attrs: AttributeSet?) : View(context, attrs) {

    lateinit var revealAmountListener: Consumer<Float>
    /**
     * Listener that is called if the scrim's opaqueness changes
     */
    lateinit var isScrimOpaqueChangedListener: Consumer<Boolean>

    /**
     * How much of the underlying views are revealed, in percent. 0 means they will be completely
@@ -161,7 +164,7 @@ class LightRevealScrim(context: Context?, attrs: AttributeSet?) : View(context,
                field = value

                revealEffect.setRevealAmountOnScrim(value, this)
                revealAmountListener.accept(value)
                updateScrimOpaque()
                invalidate()
            }
        }
@@ -200,6 +203,31 @@ class LightRevealScrim(context: Context?, attrs: AttributeSet?) : View(context,
            }
        }

    /**
     * Is the scrim currently fully opaque
     */
    var isScrimOpaque = false
        private set(value) {
            if (field != value) {
                field = value
                isScrimOpaqueChangedListener.accept(field)
            }
        }

    private fun updateScrimOpaque() {
        isScrimOpaque = revealAmount == 0.0f && alpha == 1.0f && visibility == VISIBLE
    }

    override fun setAlpha(alpha: Float) {
        super.setAlpha(alpha)
        updateScrimOpaque()
    }

    override fun setVisibility(visibility: Int) {
        super.setVisibility(visibility)
        updateScrimOpaque()
    }

    /**
     * Paint used to draw a transparent-to-white radial gradient. This will be scaled and translated
     * via local matrix in [onDraw] so we never need to construct a new shader.
+3 −3
Original line number Diff line number Diff line
@@ -182,10 +182,10 @@ public interface NotificationShadeWindowController extends RemoteInputController
    default void setFaceAuthDisplayBrightness(float brightness) {}

    /**
     * How much {@link LightRevealScrim} obscures the UI.
     * @param amount 0 when opaque, 1 when not transparent
     * If {@link LightRevealScrim} obscures the UI.
     * @param opaque if the scrim is opaque
     */
    default void setLightRevealScrimAmount(float amount) {}
    default void setLightRevealScrimOpaque(boolean opaque) {}

    /**
     * Custom listener to pipe data back to plugins about whether or not the status bar would be
+3 −4
Original line number Diff line number Diff line
@@ -605,12 +605,11 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
    }

    @Override
    public void setLightRevealScrimAmount(float amount) {
        boolean lightRevealScrimOpaque = amount == 0;
        if (mCurrentState.mLightRevealScrimOpaque == lightRevealScrimOpaque) {
    public void setLightRevealScrimOpaque(boolean opaque) {
        if (mCurrentState.mLightRevealScrimOpaque == opaque) {
            return;
        }
        mCurrentState.mLightRevealScrimOpaque = lightRevealScrimOpaque;
        mCurrentState.mLightRevealScrimOpaque = opaque;
        apply(mCurrentState);
    }

+13 −2
Original line number Diff line number Diff line
@@ -1262,8 +1262,19 @@ public class StatusBar extends SystemUI implements DemoMode,
        mScrimController.attachViews(scrimBehind, notificationsScrim, scrimInFront, scrimForBubble);

        mLightRevealScrim = mNotificationShadeWindowView.findViewById(R.id.light_reveal_scrim);
        mLightRevealScrim.setRevealAmountListener(
                mNotificationShadeWindowController::setLightRevealScrimAmount);
        mLightRevealScrim.setScrimOpaqueChangedListener((opaque) -> {
            Runnable updateOpaqueness = () -> {
                mNotificationShadeWindowController.setLightRevealScrimOpaque(
                        mLightRevealScrim.isScrimOpaque());
            };
            if (opaque) {
                // Delay making the view opaque for a frame, because it needs some time to render
                // otherwise this can lead to a flicker where the scrim doesn't cover the screen
                mLightRevealScrim.post(updateOpaqueness);
            } else {
                updateOpaqueness.run();
            }
        });
        mUnlockedScreenOffAnimationController.initialize(this, mLightRevealScrim);
        updateLightRevealScrimVisibility();

+66 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License
 */

package com.android.systemui.statusbar

import android.testing.AndroidTestingRunner
import android.view.View
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import java.util.function.Consumer

@RunWith(AndroidTestingRunner::class)
@SmallTest
class LightRevealScrimTest : SysuiTestCase() {

  private lateinit var scrim: LightRevealScrim
  private var isOpaque = false

  @Before
  fun setUp() {
    scrim = LightRevealScrim(context, null)
    scrim.isScrimOpaqueChangedListener = Consumer { opaque ->
      isOpaque = opaque
    }
    scrim.revealAmount = 0f
    assertTrue("Scrim is not opaque in initial setup", scrim.isScrimOpaque)
  }

  @Test
  fun testAlphaSetsOpaque() {
    scrim.alpha = 0.5f
    assertFalse("Scrim is opaque even though alpha is set", scrim.isScrimOpaque)
  }

  @Test
  fun testVisibilitySetsOpaque() {
    scrim.visibility = View.INVISIBLE
    assertFalse("Scrim is opaque even though it's invisible", scrim.isScrimOpaque)
    scrim.visibility = View.GONE
    assertFalse("Scrim is opaque even though it's gone", scrim.isScrimOpaque)
  }

  @Test
  fun testRevealSetsOpaque() {
    scrim.revealAmount = 0.5f
    assertFalse("Scrim is opaque even though it's revealed", scrim.isScrimOpaque)
  }
}
 No newline at end of file
Loading