package com.koushikdutta.boilerplate; import android.animation.ValueAnimator; import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.os.Build; import android.support.v4.view.WindowCompat; import android.view.Window; /** * Created by koush on 4/8/15. */ public final class WindowChromeUtils { @TargetApi(Build.VERSION_CODES.LOLLIPOP) private static ValueAnimator statusBarFadeToColorLollipop(Context context, ValueAnimator currentAnimation, int color) { if (currentAnimation != null) { currentAnimation.end(); if ((int)currentAnimation.getAnimatedValue() == color) return currentAnimation; currentAnimation.cancel(); } if (!(context instanceof Activity)) return null; final Window window = ((Activity)context).getWindow(); currentAnimation = ValueAnimator.ofArgb(window.getStatusBarColor(), color); currentAnimation.setDuration(context.getResources().getInteger(android.R.integer.config_longAnimTime)); currentAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { int currentColor = (int) animation.getAnimatedValue(); window.setStatusBarColor(currentColor); } }); currentAnimation.start(); return currentAnimation; } public static ValueAnimator statusBarFadeToColor(Context context, ValueAnimator existingStatusBarAnimation, int color) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return null; return statusBarFadeToColorLollipop(context, existingStatusBarAnimation, color); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) private static ValueAnimator navigationBarFadeToColorLollipop(Context context, ValueAnimator currentAnimation, int color) { if (currentAnimation != null) { currentAnimation.end(); if ((int)currentAnimation.getAnimatedValue() == color) return currentAnimation; currentAnimation.cancel(); } final Window window = ((Activity)context).getWindow(); currentAnimation = ValueAnimator.ofArgb(window.getNavigationBarColor(), color); currentAnimation.setDuration(context.getResources().getInteger(android.R.integer.config_longAnimTime)); currentAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { int currentColor = (int) animation.getAnimatedValue(); window.setNavigationBarColor(currentColor); } }); currentAnimation.start(); return currentAnimation; } public static ValueAnimator navigationBarFadeToColor(Context context, ValueAnimator existingStatusBarAnimation, int color) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return null; return navigationBarFadeToColorLollipop(context, existingStatusBarAnimation, color); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) private static int getStatusBarColorLollipop(Window window) { return window.getStatusBarColor(); } public static int getStatusBarColor(Window window) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return 0; return getStatusBarColorLollipop(window); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) private static void setStatusBarColorLollipop(Window window, int color) { window.setStatusBarColor(color); } public static void setStatusBarColor(Window window, int color) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; setStatusBarColorLollipop(window, color); } }