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

Commit 991415e7 authored by Lucas Dupin's avatar Lucas Dupin
Browse files

Expose blurs to SurfaceControl

SurfaceControl now has #setBackgroundBlurRadius, which receives a radius in pixels
pointing out how much the content behind the current window should be blurred.

Bug: 141640413
Test: visual; on power menu and shade
Test: adb shell dumpsys activity service com.android.systemui
Change-Id: I367f8a7199d5b37ad476d3c2bc02c8900f8c1f9e
parent 77a699ba
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -128,6 +128,8 @@ public final class SurfaceControl implements Parcelable {
            int l, int t, int r, int b);
    private static native void nativeSetCornerRadius(long transactionObj, long nativeObject,
            float cornerRadius);
    private static native void nativeSetBackgroundBlurRadius(long transactionObj, long nativeObject,
            int blurRadius);
    private static native void nativeSetLayerStack(long transactionObj, long nativeObject,
            int layerStack);

@@ -2504,6 +2506,20 @@ public final class SurfaceControl implements Parcelable {
            return this;
        }

        /**
         * Sets the background blur radius of the {@link SurfaceControl}.
         *
         * @param sc SurfaceControl.
         * @param radius Blur radius in pixels.
         * @return itself.
         * @hide
         */
        public Transaction setBackgroundBlurRadius(SurfaceControl sc, int radius) {
            checkPreconditions(sc);
            nativeSetBackgroundBlurRadius(mNativeObject, sc.mNativeObject, radius);
            return this;
        }

        /**
         * @hide
         */
+10 −0
Original line number Diff line number Diff line
@@ -560,6 +560,14 @@ static void nativeSetCornerRadius(JNIEnv* env, jclass clazz, jlong transactionOb
    transaction->setCornerRadius(ctrl, cornerRadius);
}

static void nativeSetBackgroundBlurRadius(JNIEnv* env, jclass clazz, jlong transactionObj,
         jlong nativeObject, jint blurRadius) {
    auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);

    SurfaceControl* const ctrl = reinterpret_cast<SurfaceControl *>(nativeObject);
    transaction->setBackgroundBlurRadius(ctrl, blurRadius);
}

static void nativeSetLayerStack(JNIEnv* env, jclass clazz, jlong transactionObj,
        jlong nativeObject, jint layerStack) {
    auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
@@ -1369,6 +1377,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = {
            (void*)nativeSetWindowCrop },
    {"nativeSetCornerRadius", "(JJF)V",
            (void*)nativeSetCornerRadius },
    {"nativeSetBackgroundBlurRadius", "(JJI)V",
            (void*)nativeSetBackgroundBlurRadius },
    {"nativeSetLayerStack", "(JJI)V",
            (void*)nativeSetLayerStack },
    {"nativeSetShadowRadius", "(JJF)V",
+4 −0
Original line number Diff line number Diff line
@@ -1079,6 +1079,10 @@
    <dimen name="logout_button_margin_bottom">12dp</dimen>
    <dimen name="logout_button_corner_radius">2dp</dimen>

    <!--  Blur radius on status bar window and power menu  -->
    <dimen name="min_window_blur_radius">1px</dimen>
    <dimen name="max_window_blur_radius">100px</dimen>

    <!-- How much into a DisplayCutout's bounds we can go, on each side -->
    <dimen name="display_cutout_margin_consumption">0px</dimen>
    <!-- How much each bubble is elevated. -->
+15 −0
Original line number Diff line number Diff line
@@ -19,17 +19,22 @@ package com.android.systemui.dagger;
import android.annotation.Nullable;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.Resources;

import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.BootCompleteCache;
import com.android.systemui.BootCompleteCacheImpl;
import com.android.systemui.DumpController;
import com.android.systemui.assist.AssistModule;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.model.SysUiState;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.recents.Recents;
import com.android.systemui.stackdivider.Divider;
import com.android.systemui.statusbar.BlurUtils;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.StatusBarWindowBlurController;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder;
import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl;
import com.android.systemui.statusbar.notification.people.PeopleHubModule;
@@ -82,6 +87,16 @@ public abstract class SystemUIModule {
                keyguardUpdateMonitor, dumpController);
    }

    @Singleton
    @Provides
    @Nullable
    static StatusBarWindowBlurController providesBlurController(BlurUtils blurUtils,
            @Main Resources resources, SysuiStatusBarStateController statusBarStateController,
            DumpController dumpController) {
        return blurUtils.supportsBlursOnWindows() ? new StatusBarWindowBlurController(resources,
                statusBarStateController, blurUtils, dumpController) : null;
    }

    /** */
    @Binds
    public abstract NotificationRowBinder bindNotificationRowBinder(
+33 −13
Original line number Diff line number Diff line
@@ -98,6 +98,7 @@ import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.GlobalActions.GlobalActionsManager;
import com.android.systemui.plugins.GlobalActionsPanelPlugin;
import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
import com.android.systemui.statusbar.BlurUtils;
import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -157,6 +158,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
    private final IActivityManager mIActivityManager;
    private final TelecomManager mTelecomManager;
    private final MetricsLogger mMetricsLogger;
    private final BlurUtils mBlurUtils;

    private ArrayList<Action> mItems;
    private ActionsDialog mDialog;
@@ -177,6 +179,9 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
    private final ScreenshotHelper mScreenshotHelper;
    private final ScreenRecordHelper mScreenRecordHelper;
    private final ActivityStarter mActivityStarter;
    private final SysuiColorExtractor mSysuiColorExtractor;
    private final IStatusBarService mStatusBarService;
    private final NotificationShadeWindowController mNotificationShadeWindowController;
    private GlobalActionsPanelPlugin mPanelPlugin;

    /**
@@ -192,7 +197,10 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
            ConfigurationController configurationController, ActivityStarter activityStarter,
            KeyguardStateController keyguardStateController, UserManager userManager,
            TrustManager trustManager, IActivityManager iActivityManager,
            TelecomManager telecomManager, MetricsLogger metricsLogger) {
            TelecomManager telecomManager, MetricsLogger metricsLogger,
            BlurUtils blurUtils, SysuiColorExtractor colorExtractor,
            IStatusBarService statusBarService,
            NotificationShadeWindowController notificationShadeWindowController) {
        mContext = new ContextThemeWrapper(context, com.android.systemui.R.style.qs_theme);
        mWindowManagerFuncs = windowManagerFuncs;
        mAudioManager = audioManager;
@@ -208,6 +216,10 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
        mIActivityManager = iActivityManager;
        mTelecomManager = telecomManager;
        mMetricsLogger = metricsLogger;
        mBlurUtils = blurUtils;
        mSysuiColorExtractor = colorExtractor;
        mStatusBarService = statusBarService;
        mNotificationShadeWindowController = notificationShadeWindowController;

        // receive broadcasts
        IntentFilter filter = new IntentFilter();
@@ -443,8 +455,9 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
                                mKeyguardManager.isDeviceLocked())
                        : null;

        ActionsDialog dialog = new ActionsDialog(
                mContext, mAdapter, panelViewController, isControlsEnabled(mContext));
        ActionsDialog dialog = new ActionsDialog(mContext, mAdapter, panelViewController,
                mBlurUtils, mSysuiColorExtractor, mStatusBarService,
                mNotificationShadeWindowController, isControlsEnabled(mContext));
        dialog.setCanceledOnTouchOutside(false); // Handled by the custom class.
        dialog.setKeyguardShowing(mKeyguardShowing);

@@ -1529,18 +1542,21 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
        private ResetOrientationData mResetOrientationData;
        private boolean mHadTopUi;
        private final NotificationShadeWindowController mNotificationShadeWindowController;
        private boolean mControlsEnabled;
        private final BlurUtils mBlurUtils;
        private final boolean mControlsEnabled;

        ActionsDialog(Context context, MyAdapter adapter,
                GlobalActionsPanelPlugin.PanelViewController plugin,
                GlobalActionsPanelPlugin.PanelViewController plugin, BlurUtils blurUtils,
                SysuiColorExtractor sysuiColorExtractor, IStatusBarService statusBarService,
                NotificationShadeWindowController notificationShadeWindowController,
                boolean controlsEnabled) {
            super(context, com.android.systemui.R.style.Theme_SystemUI_Dialog_GlobalActions);
            mContext = context;
            mAdapter = adapter;
            mColorExtractor = Dependency.get(SysuiColorExtractor.class);
            mStatusBarService = Dependency.get(IStatusBarService.class);
            mNotificationShadeWindowController =
                    Dependency.get(NotificationShadeWindowController.class);
            mBlurUtils = blurUtils;
            mColorExtractor = sysuiColorExtractor;
            mStatusBarService = statusBarService;
            mNotificationShadeWindowController = notificationShadeWindowController;
            mControlsEnabled = controlsEnabled;

            // Window initialization
@@ -1735,9 +1751,11 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
                    .setDuration(300)
                    .setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
                    .setUpdateListener(animation -> {
                        int alpha = (int) ((Float) animation.getAnimatedValue()
                                * mScrimAlpha * 255);
                        float animatedValue = animation.getAnimatedFraction();
                        int alpha = (int) (animatedValue * mScrimAlpha * 255);
                        mBackgroundDrawable.setAlpha(alpha);
                        mBlurUtils.applyBlur(mGlobalActionsLayout.getViewRootImpl(),
                                mBlurUtils.radiusForRatio(animatedValue));
                    })
                    .start();
        }
@@ -1759,9 +1777,11 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
                    .withEndAction(this::completeDismiss)
                    .setInterpolator(new LogAccelerateInterpolator())
                    .setUpdateListener(animation -> {
                        int alpha = (int) ((1f - (Float) animation.getAnimatedValue())
                                * mScrimAlpha * 255);
                        float animatedValue = 1f - animation.getAnimatedFraction();
                        int alpha = (int) (animatedValue * mScrimAlpha * 255);
                        mBackgroundDrawable.setAlpha(alpha);
                        mBlurUtils.applyBlur(mGlobalActionsLayout.getViewRootImpl(),
                                mBlurUtils.radiusForRatio(animatedValue));
                    })
                    .start();
            dismissPanel();
Loading