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

Commit 314d41f5 authored by Lucas Dupin's avatar Lucas Dupin
Browse files

ColorExtractor available through Dependency

Having only one instance of ColorExtractor instead of
multiple. Also registering listeners since 1 won't be
enough anymore.

Test: set wallpaper, check scrim color
Change-Id: Ic7f08f98e0671f5b9b5d25d7f0263ad3a1443fa7
parent fc9b396c
Loading
Loading
Loading
Loading
+18 −9
Original line number Diff line number Diff line
@@ -20,17 +20,21 @@ import android.app.WallpaperColors;
import android.app.WallpaperManager;
import android.content.Context;
import android.graphics.Color;
import android.support.v4.graphics.ColorUtils;
import android.util.Log;

import com.google.android.colorextraction.types.ExtractionType;
import com.google.android.colorextraction.types.Tonal;

import java.util.ArrayList;

/**
 * Class to process wallpaper colors and generate a tonal palette based on them.
 */
public class ColorExtractor implements WallpaperManager.OnColorsChangedListener {
    private static final String TAG = "ColorExtractor";
    private static final int FALLBACK_COLOR = Color.BLACK;
    private static final float DARK_TEXT_LUMINOSITY = 0.7f;

    private int mMainFallbackColor = FALLBACK_COLOR;
    private int mSecondaryFallbackColor = FALLBACK_COLOR;
@@ -38,13 +42,14 @@ public class ColorExtractor implements WallpaperManager.OnColorsChangedListener
    private final GradientColors mLockColors;
    private final Context mContext;
    private final ExtractionType mExtractionType;
    private OnColorsChangedListener mListener;
    private final ArrayList<OnColorsChangedListener> mOnColorsChangedListeners;

    public ColorExtractor(Context context) {
        mContext = context;
        mSystemColors = new GradientColors();
        mLockColors = new GradientColors();
        mExtractionType = new Tonal();
        mOnColorsChangedListeners = new ArrayList<>();

        WallpaperManager wallpaperManager = mContext.getSystemService(WallpaperManager.class);

@@ -69,22 +74,18 @@ public class ColorExtractor implements WallpaperManager.OnColorsChangedListener
        }
    }

    public void setListener(OnColorsChangedListener listener) {
        mListener = listener;
    }

    @Override
    public void onColorsChanged(WallpaperColors colors, int which) {
        if ((which & WallpaperManager.FLAG_LOCK) != 0) {
            extractInto(colors, mLockColors);
            if (mListener != null) {
                mListener.onColorsChanged(mLockColors, WallpaperManager.FLAG_LOCK);
            for (OnColorsChangedListener listener : mOnColorsChangedListeners) {
                listener.onColorsChanged(mLockColors, WallpaperManager.FLAG_LOCK);
            }
        }
        if ((which & WallpaperManager.FLAG_SYSTEM) != 0) {
            extractInto(colors, mSystemColors);
            if (mListener != null) {
                mListener.onColorsChanged(mSystemColors, WallpaperManager.FLAG_SYSTEM);
            for (OnColorsChangedListener listener : mOnColorsChangedListeners) {
                listener.onColorsChanged(mSystemColors, WallpaperManager.FLAG_SYSTEM);
            }
        }
    }
@@ -109,6 +110,14 @@ public class ColorExtractor implements WallpaperManager.OnColorsChangedListener
        }
    }

    public void addOnColorsChangedListener(OnColorsChangedListener listener) {
        mOnColorsChangedListeners.add(listener);
    }

    public void removeOnColorsChangedListener(OnColorsChangedListener listener) {
        mOnColorsChangedListeners.remove(listener);
    }

    public static class GradientColors {
        private int mMainColor = FALLBACK_COLOR;
        private int mSecondaryColor = FALLBACK_COLOR;
+4 −0
Original line number Diff line number Diff line
@@ -84,6 +84,8 @@ import com.android.systemui.util.leak.LeakDetector;
import com.android.systemui.util.leak.LeakReporter;
import com.android.systemui.volume.VolumeDialogControllerImpl;

import com.google.android.colorextraction.ColorExtractor;

import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.HashMap;
@@ -264,6 +266,8 @@ public class Dependency extends SystemUI {
        mProviders.put(AccessibilityManagerWrapper.class,
                () -> new AccessibilityManagerWrapper(mContext));

        mProviders.put(ColorExtractor.class, () -> new ColorExtractor(mContext));

        // Put all dependencies above here so the factory can override them if it wants.
        SystemUIFactory.getInstance().injectDependencies(mProviders, mContext);
    }
+5 −0
Original line number Diff line number Diff line
@@ -374,6 +374,8 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD
        EventBus.getDefault().send(new RecentsVisibilityChangedEvent(this, true));
        MetricsLogger.visible(this, MetricsEvent.OVERVIEW_ACTIVITY);

        // Make sure we have the right gradient and we're listening for update events
        mRecentsView.onStart();
        // Notify of the next draw
        mRecentsView.getViewTreeObserver().addOnPreDrawListener(mRecentsDrawnEventListener);

@@ -534,6 +536,9 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD
        MetricsLogger.hidden(this, MetricsEvent.OVERVIEW_ACTIVITY);
        Recents.getTaskLoader().getHighResThumbnailLoader().setVisible(false);

        // We don't need to update the gradient when we're not visible
        mRecentsView.onStop();

        if (!isChangingConfigurations()) {
            // Workaround for b/22542869, if the RecentsActivity is started again, but without going
            // through SystemUI, we need to reset the config launch flags to ensure that we do not
+13 −5
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import android.widget.TextView;

import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.Dependency;
import com.android.systemui.Interpolators;
import com.android.systemui.R;
import com.android.systemui.recents.Recents;
@@ -145,11 +146,7 @@ public class RecentsView extends FrameLayout implements ColorExtractor.OnColorsC
        mBackgroundScrim = new GradientDrawable(context);
        mBackgroundScrim.setCallback(this);
        mBackgroundScrim.setAlpha((int) (mScrimAlpha * 255));
        mColorExtractor = new ColorExtractor(context);
        mColorExtractor.setListener(this);
        // We don't want to interpolate colors because we're defining the initial state.
        // Gradient should be set/ready when you open "Recents".
        mBackgroundScrim.setColors(mColorExtractor.getColors(WallpaperManager.FLAG_SYSTEM), false);
        mColorExtractor = Dependency.get(ColorExtractor.class);

        LayoutInflater inflater = LayoutInflater.from(context);
        if (RecentsDebugFlags.Static.EnableStackActionButton) {
@@ -828,4 +825,15 @@ public class RecentsView extends FrameLayout implements ColorExtractor.OnColorsC
            mBackgroundScrim.setColors(colors);
        }
    }

    public void onStart() {
        mColorExtractor.addOnColorsChangedListener(this);
        // We don't want to interpolate colors because we're defining the initial state.
        // Gradient should be set/ready when you open "Recents".
        mBackgroundScrim.setColors(mColorExtractor.getColors(WallpaperManager.FLAG_SYSTEM), false);
    }

    public void onStop() {
        mColorExtractor.removeOnColorsChangedListener(this);
    }
}
+3 −2
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import android.view.animation.Interpolator;
import android.view.animation.PathInterpolator;

import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.statusbar.ExpandableNotificationRow;
import com.android.systemui.statusbar.NotificationData;
@@ -123,8 +124,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
        mLightBarController = lightBarController;
        mScrimBehindAlpha = context.getResources().getFloat(R.dimen.scrim_behind_alpha);

        mColorExtractor = new ColorExtractor(context);
        mColorExtractor.setListener(this);
        mColorExtractor = Dependency.get(ColorExtractor.class);
        mColorExtractor.addOnColorsChangedListener(this);
        mLockColors = mColorExtractor.getColors(WallpaperManager.FLAG_LOCK);
        mSystemColors = mColorExtractor.getColors(WallpaperManager.FLAG_SYSTEM);
        mNeedsDrawableColorUpdate = true;