package com.naman14.timber.utils;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.widget.DrawerLayout;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import com.afollestad.appthemeengine.Config;
import com.afollestad.appthemeengine.util.Util;
/**
* Created by naman on 02/01/16.
*/
public class ATEUtils {
public static void setStatusBarColor(Activity activity, String key, int color) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
final Window window = activity.getWindow();
if (Config.coloredStatusBar(activity, key))
window.setStatusBarColor(getStatusBarColor(color));
else window.setStatusBarColor(Color.BLACK);
if (Config.coloredNavigationBar(activity, key))
window.setNavigationBarColor(color);
else window.setNavigationBarColor(Color.BLACK);
applyTaskDescription(activity, key, color);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
final View decorView = activity.getWindow().getDecorView();
final int lightStatusMode = Config.lightStatusBarMode(activity, key);
boolean lightStatusEnabled = false;
switch (lightStatusMode) {
case Config.LIGHT_STATUS_BAR_OFF:
default:
break;
case Config.LIGHT_STATUS_BAR_ON:
lightStatusEnabled = true;
break;
case Config.LIGHT_STATUS_BAR_AUTO:
lightStatusEnabled = Util.isColorLight(color);
break;
}
final int systemUiVisibility = decorView.getSystemUiVisibility();
if (lightStatusEnabled) {
decorView.setSystemUiVisibility(systemUiVisibility | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
} else {
decorView.setSystemUiVisibility(systemUiVisibility & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
final int color2 = Config.coloredStatusBar(activity, key) ?
Color.TRANSPARENT : Color.BLACK;
activity.getWindow().setStatusBarColor(color2);
}
if (Config.coloredStatusBar(activity, key))
((DrawerLayout) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0)).setStatusBarBackgroundColor(getStatusBarColor(color));
} catch (Exception e) {
e.printStackTrace();
}
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private static void applyTaskDescription(@NonNull Activity activity, @Nullable String key, int color) {
// Sets color of entry in the system recents page
try {
ActivityManager.TaskDescription td = new ActivityManager.TaskDescription(
(String) activity.getTitle(),
((BitmapDrawable) activity.getApplicationInfo().loadIcon(activity.getPackageManager())).getBitmap(),
color);
activity.setTaskDescription(td);
} catch (Exception ignored) {
}
}
public static int getStatusBarColor(int primaryColor) {
float[] arrayOfFloat = new float[3];
Color.colorToHSV(primaryColor, arrayOfFloat);
arrayOfFloat[2] *= 0.9F;
return Color.HSVToColor(arrayOfFloat);
}
public static void setFabBackgroundTint(FloatingActionButton fab, int color) {
ColorStateList fabColorStateList = new ColorStateList(
new int[][]{
new int[]{}
},
new int[]{
color,
}
);
fab.setBackgroundTintList(fabColorStateList);
}
}