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

Commit 4ad5dcdd authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Color extraction under Power and Volume menus"

parents 9a4b4405 c1cc759a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -147,7 +147,7 @@ public class GradientDrawable extends Drawable {

    @Override
    public int getOpacity() {
        return mAlpha == 255 ? PixelFormat.OPAQUE : PixelFormat.TRANSLUCENT;
        return PixelFormat.TRANSLUCENT;
    }

    public void setScreenSize(int width, int height) {
+2 −0
Original line number Diff line number Diff line
@@ -307,6 +307,8 @@

    <style name="Theme.SystemUI.Dialog.Alert" parent="@*android:style/Theme.DeviceDefault.Light.Dialog.Alert" />

    <style name="Theme.SystemUI.Dialog.GlobalActions" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar.Fullscreen" />

    <style name="QSBorderlessButton">
        <item name="android:padding">12dp</item>
        <item name="android:background">@drawable/qs_btn_borderless_rect</item>
+76 −7
Original line number Diff line number Diff line
@@ -14,6 +14,8 @@

package com.android.systemui.globalactions;

import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;

import com.android.internal.R;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -21,13 +23,17 @@ import com.android.internal.util.EmergencyAffordanceManager;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.telephony.TelephonyProperties;
import com.android.internal.widget.LockPatternUtils;
import com.android.systemui.Dependency;
import com.android.systemui.HardwareUiLayout;
import com.android.systemui.plugins.GlobalActions.GlobalActionsManager;
import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.volume.VolumeDialogImpl;
import com.android.systemui.volume.VolumeDialogMotion.LogAccelerateInterpolator;
import com.android.systemui.volume.VolumeDialogMotion.LogDecelerateInterpolator;

import android.app.ActivityManager;
import android.app.Dialog;
import android.app.WallpaperManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
@@ -37,6 +43,8 @@ import android.content.pm.UserInfo;
import android.database.ContentObserver;
import android.database.DataSetObserver;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.graphics.Point;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.media.AudioManager;
@@ -59,9 +67,12 @@ import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewPropertyAnimator;
import android.view.Window;
import android.view.WindowManager;
import android.view.WindowManagerGlobal;
import android.view.accessibility.AccessibilityEvent;
@@ -73,6 +84,10 @@ import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.google.android.colorextraction.ColorExtractor;
import com.google.android.colorextraction.ColorExtractor.GradientColors;
import com.google.android.colorextraction.drawable.GradientDrawable;

import java.util.ArrayList;
import java.util.List;

@@ -208,8 +223,6 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener, DialogIn
            mDialog.getWindow().setAttributes(attrs);
            mDialog.show();
            mWindowManagerFuncs.onGlobalActionsShown();
            mDialog.getWindow().getDecorView().setSystemUiVisibility(
                    View.STATUS_BAR_DISABLE_EXPAND);
        }
    }

@@ -332,7 +345,7 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener, DialogIn
        };
        ActionsDialog dialog = new ActionsDialog(mContext, this, mAdapter, onItemLongClickListener);
        dialog.setCanceledOnTouchOutside(false); // Handled by the custom class.
        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
        dialog.setKeyguardShowing(mKeyguardShowing);

        dialog.setOnDismissListener(this);

@@ -637,7 +650,6 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener, DialogIn
        refreshSilentMode();
        mAirplaneModeOn.updateState(mAirplaneState);
        mAdapter.notifyDataSetChanged();
        mDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
        if (mShowSilentToggle) {
            IntentFilter filter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION);
            mContext.registerReceiver(mRingerModeReceiver, filter);
@@ -1194,7 +1206,8 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener, DialogIn
        }
    }

    private static final class ActionsDialog extends Dialog implements DialogInterface {
    private static final class ActionsDialog extends Dialog implements DialogInterface,
            ColorExtractor.OnColorsChangedListener {

        private final Context mContext;
        private final MyAdapter mAdapter;
@@ -1202,16 +1215,35 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener, DialogIn
        private final HardwareUiLayout mHardwareLayout;
        private final OnClickListener mClickListener;
        private final OnItemLongClickListener mLongClickListener;
        private final GradientDrawable mGradientDrawable;
        private final ColorExtractor mColorExtractor;
        private boolean mKeyguardShowing;

        public ActionsDialog(Context context, OnClickListener clickListener, MyAdapter adapter,
                OnItemLongClickListener longClickListener) {
            super(context, android.R.style.Theme_DeviceDefault_Light_NoActionBar_Fullscreen);
            super(context, com.android.systemui.R.style.Theme_SystemUI_Dialog_GlobalActions);
            mContext = getContext();
            mAdapter = adapter;
            mClickListener = clickListener;
            mLongClickListener = longClickListener;
            mGradientDrawable = new GradientDrawable(mContext);
            mColorExtractor = Dependency.get(ColorExtractor.class);

            // Window initialization
            Window window = getWindow();
            window.requestFeature(Window.FEATURE_NO_TITLE);
            window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND
                    | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR);
            window.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                    | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
                    | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                    | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                    | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
                    | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
            window.setBackgroundDrawable(mGradientDrawable);
            window.setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY);

            setContentView(com.android.systemui.R.layout.global_actions_wrapped);
            getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            mListView = findViewById(android.R.id.list);
            mHardwareLayout = HardwareUiLayout.get(mListView);
            mHardwareLayout.setOutsideTouchListener(view -> dismiss());
@@ -1234,16 +1266,26 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener, DialogIn
            super.setCanceledOnTouchOutside(true);
            super.onStart();
            updateList();

            Point displaySize = new Point();
            mContext.getDisplay().getRealSize(displaySize);
            mColorExtractor.addOnColorsChangedListener(this);
            mGradientDrawable.setScreenSize(displaySize.x, displaySize.y);
            GradientColors colors = mColorExtractor.getColors(mKeyguardShowing ?
                    WallpaperManager.FLAG_LOCK : WallpaperManager.FLAG_SYSTEM);
            mGradientDrawable.setColors(colors, false);
        }

        @Override
        protected void onStop() {
            super.onStop();
            mColorExtractor.removeOnColorsChangedListener(this);
        }

        @Override
        public void show() {
            super.show();
            mGradientDrawable.setAlpha(0);
            mHardwareLayout.setTranslationX(getAnimTranslation());
            mHardwareLayout.setAlpha(0);
            mHardwareLayout.animate()
@@ -1251,6 +1293,11 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener, DialogIn
                    .translationX(0)
                    .setDuration(300)
                    .setInterpolator(new LogDecelerateInterpolator())
                    .setUpdateListener(animation -> {
                        int alpha = (int) ((Float) animation.getAnimatedValue()
                                * ScrimController.GRADIENT_SCRIM_ALPHA * 255);
                        mGradientDrawable.setAlpha(alpha);
                    })
                    .start();
        }

@@ -1264,6 +1311,11 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener, DialogIn
                    .setDuration(300)
                    .withEndAction(() -> super.dismiss())
                    .setInterpolator(new LogAccelerateInterpolator())
                    .setUpdateListener(animation -> {
                        int alpha = (int) ((1f - (Float) animation.getAnimatedValue())
                                * ScrimController.GRADIENT_SCRIM_ALPHA * 255);
                        mGradientDrawable.setAlpha(alpha);
                    })
                    .start();
        }

@@ -1285,5 +1337,22 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener, DialogIn
            }
            return super.dispatchPopulateAccessibilityEvent(event);
        }

        @Override
        public void onColorsChanged(GradientColors colors, int which) {
            if (mKeyguardShowing) {
                if ((WallpaperManager.FLAG_LOCK & which) != 0) {
                    mGradientDrawable.setColors(colors);
                }
            } else {
                if ((WallpaperManager.FLAG_SYSTEM & which) != 0) {
                    mGradientDrawable.setColors(colors);
                }
            }
        }

        public void setKeyguardShowing(boolean keyguardShowing) {
            mKeyguardShowing = keyguardShowing;
        }
    }
}
+3 −2
Original line number Diff line number Diff line
@@ -57,10 +57,11 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
            = new PathInterpolator(0f, 0, 0.7f, 1f);
    public static final Interpolator KEYGUARD_FADE_OUT_INTERPOLATOR_LOCKED
            = new PathInterpolator(0.3f, 0f, 0.8f, 1f);
    public static final float GRADIENT_SCRIM_ALPHA = 0.75f;
    protected static final float SCRIM_BEHIND_ALPHA_KEYGUARD = 0.45f;
    protected static final float SCRIM_BEHIND_ALPHA_UNLOCKING = 0.2f;
    private static final float SCRIM_IN_FRONT_ALPHA = 0.75f;
    private static final float SCRIM_IN_FRONT_ALPHA_LOCKED = 0.85f;
    private static final float SCRIM_IN_FRONT_ALPHA = GRADIENT_SCRIM_ALPHA;
    private static final float SCRIM_IN_FRONT_ALPHA_LOCKED = GRADIENT_SCRIM_ALPHA;
    private static final int TAG_KEY_ANIM = R.id.scrim;
    private static final int TAG_KEY_ANIM_TARGET = R.id.scrim_target;
    private static final int TAG_START_ALPHA = R.id.scrim_alpha_start;
+39 −3
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.annotation.NonNull;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.app.KeyguardManager;
import android.app.WallpaperManager;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.ColorStateList;
@@ -33,6 +34,7 @@ import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.drawable.AnimatedVectorDrawable;
import android.graphics.drawable.ColorDrawable;
@@ -82,10 +84,14 @@ import com.android.systemui.plugins.VolumeDialogController;
import com.android.systemui.plugins.VolumeDialogController.State;
import com.android.systemui.plugins.VolumeDialogController.StreamState;
import com.android.systemui.plugins.VolumeDialog;
import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerZenModePanel;

import com.google.android.colorextraction.ColorExtractor;
import com.google.android.colorextraction.drawable.GradientDrawable;

import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
@@ -97,7 +103,8 @@ import java.util.List;
 *
 * Methods ending in "H" must be called on the (ui) handler.
 */
public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable,
        ColorExtractor.OnColorsChangedListener {
    private static final String TAG = Util.logTag(VolumeDialogImpl.class);

    public static final String SHOW_FULL_ZEN = "sysui_show_full_zen";
@@ -107,6 +114,8 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {

    private final Context mContext;
    private final H mHandler = new H();
    private final GradientDrawable mGradientDrawable;
    private final ColorExtractor mColorExtractor;
    private VolumeDialogController mController;

    private Window mWindow;
@@ -161,6 +170,9 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
                (AccessibilityManager) mContext.getSystemService(Context.ACCESSIBILITY_SERVICE);
        mActiveSliderTint = ColorStateList.valueOf(Utils.getColorAccent(mContext));
        mInactiveSliderTint = loadColorStateList(R.color.volume_slider_inactive);
        mGradientDrawable = new GradientDrawable(mContext);
        mGradientDrawable.setAlpha((int) (ScrimController.GRADIENT_SCRIM_ALPHA * 255));
        mColorExtractor = Dependency.get(ColorExtractor.class);
    }

    public void init(int windowType, Callback callback) {
@@ -182,6 +194,7 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
    @Override
    public void destroy() {
        mController.removeCallback(mControllerCallbackH);
        mColorExtractor.removeOnColorsChangedListener(this);
    }

    private void initDialog() {
@@ -192,7 +205,7 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
        mShowing = false;
        mWindow = mDialog.getWindow();
        mWindow.requestFeature(Window.FEATURE_NO_TITLE);
        mWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        mWindow.setBackgroundDrawable(mGradientDrawable);
        mWindow.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
        mWindow.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
@@ -200,6 +213,8 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
                | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
                | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
        Point displaySize = new Point();
        mContext.getDisplay().getRealSize(displaySize);
        mDialog.setCanceledOnTouchOutside(true);
        final Resources res = mContext.getResources();
        mWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
@@ -213,6 +228,14 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
            rescheduleTimeoutH();
            return true;
        });

        mColorExtractor.addOnColorsChangedListener(this);
        mGradientDrawable.setScreenSize(displaySize.x, displaySize.y);
        ColorExtractor.GradientColors colors = mColorExtractor.getColors(
                mKeyguard.isKeyguardLocked() ? WallpaperManager.FLAG_LOCK
                        : WallpaperManager.FLAG_SYSTEM);
        mGradientDrawable.setColors(colors, false);

        mDialogContentView = mDialog.findViewById(R.id.volume_dialog_content);
        mDialogRowsView = mDialogContentView.findViewById(R.id.volume_dialog_rows);
        mExpanded = false;
@@ -224,7 +247,7 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
        updateExpandButtonH();

        mMotion = new VolumeDialogMotion(mDialog, (View) mDialogView.getParent(),
                mDialogContentView, mExpandButton, animating -> {
                mDialogContentView, mExpandButton, mGradientDrawable, animating -> {
                    if (animating) return;
                    if (mPendingStateChanged) {
                        mHandler.sendEmptyMessage(H.STATE_CHANGED);
@@ -1075,6 +1098,19 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable {
        }
    };

    @Override
    public void onColorsChanged(ColorExtractor.GradientColors colors, int which) {
        if (mKeyguard.isKeyguardLocked()) {
            if ((WallpaperManager.FLAG_LOCK & which) != 0) {
                mGradientDrawable.setColors(colors);
            }
        } else {
            if ((WallpaperManager.FLAG_SYSTEM & which) != 0) {
                mGradientDrawable.setColors(colors);
            }
        }
    }

    private final class H extends Handler {
        private static final int SHOW = 1;
        private static final int DISMISS = 2;
Loading