Loading packages/SystemUI/colorextraction/src/com/google/android/colorextraction/ColorExtractor.java +18 −9 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading @@ -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); } } } Loading @@ -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; Loading packages/SystemUI/src/com/android/systemui/Dependency.java +4 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java +5 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 Loading packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java +13 −5 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -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); } } packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +3 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading
packages/SystemUI/colorextraction/src/com/google/android/colorextraction/ColorExtractor.java +18 −9 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading @@ -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); } } } Loading @@ -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; Loading
packages/SystemUI/src/com/android/systemui/Dependency.java +4 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading
packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java +5 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java +13 −5 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -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); } }
packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +3 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading