com/eros/framework/adapter/DefaultNavigationAdapter.java
package com.eros.framework.adapter;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.eros.framework.BMWXEnvironment;
import com.eros.framework.R;
import com.eros.framework.activity.AbstractWeexActivity;
import com.eros.framework.adapter.router.RouterTracker;
import com.eros.framework.manager.ManagerFactory;
import com.eros.framework.manager.impl.ImageManager;
import com.eros.framework.manager.impl.ParseManager;
import com.eros.framework.manager.impl.status.Helper;
import com.eros.framework.manager.impl.status.StatusBarManager;
import com.eros.framework.model.BaseResultBean;
import com.eros.framework.model.NatigatorModel;
import com.eros.framework.model.NavigatorBarModel;
import com.eros.framework.model.NavigatorModel;
import com.eros.framework.model.PlatformConfigBean;
import com.eros.framework.model.RouterModel;
import com.eros.framework.utils.BMHookGlide;
import com.eros.framework.utils.ImageUtil;
import com.eros.widget.utils.BaseCommonUtil;
import com.eros.widget.utils.ColorUtils;
import com.eros.widget.view.BaseToolBar;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.transition.Transition;
import com.taobao.weex.bridge.JSCallback;
import com.taobao.weex.utils.WXUtils;
/**
* Created by Carry on 2017/9/13.
*/
public class DefaultNavigationAdapter {
public static void setLeftItem(String params, final JSCallback jscallback) {
BaseToolBar navigationBar;
if (TextUtils.isEmpty(params)) {
navigationBar = getToolBar();
if (navigationBar == null) return;
navigationBar.getLeftTextView().setVisibility(View.GONE);
navigationBar.getLeftIcon().setVisibility(View.GONE);
return;
}
ParseManager parseManager = ManagerFactory.getManagerService(ParseManager.class);
NavigatorBarModel navigatorBarModel = parseManager.parseObject(params, NavigatorBarModel
.class);
navigationBar = getToolBar();
if (navigationBar == null) return;
setTextView(navigationBar.getLeftTextView(), navigatorBarModel);
if (!TextUtils.isEmpty(navigatorBarModel.getImage())) {
ImageView leftIcon = navigationBar
.getLeftIcon();
ViewGroup.LayoutParams para = leftIcon.getLayoutParams();
para.height = 150;
para.width = 150;
leftIcon.setLayoutParams(para);
setImage(BMWXEnvironment.mApplicationContext, navigatorBarModel.getImage(),
leftIcon);
}else{
ImageView leftIcon = navigationBar
.getLeftIcon();
leftIcon.setVisibility(View.GONE);
return;
}
if (jscallback != null) {
navigationBar.setOnWebClosedListenner(new BaseToolBar.OnWebViewClosed() {
@Override
public void onClick(View v) {
jscallback.invokeAndKeepAlive(new BaseResultBean());
}
});
navigationBar.setOnLeftListenner(new BaseToolBar.OnLeftIconClick() {
@Override
public void onClick(View v) {
jscallback.invokeAndKeepAlive(null);
}
});
}
}
private static void setImage(final Context context, String url, final ImageView image) {
BMHookGlide.load(context, url).apply(new RequestOptions().diskCacheStrategy
(DiskCacheStrategy.ALL)).into
(new SimpleTarget<Drawable>() {
@Override
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<?
super Drawable> transition) {
if (resource instanceof BitmapDrawable) {
Bitmap bitmap = ((BitmapDrawable) resource).getBitmap();
Bitmap scaleBitmap = ImageUtil.zooImage(context, bitmap,
BaseCommonUtil.getImageScale(context));
if (scaleBitmap != null) {
image.setImageBitmap(scaleBitmap);
image.setVisibility(View.VISIBLE);
}
}
}
});
}
private static void setTextView(TextView textView, NavigatorBarModel navigatorBarModel) {
if (textView == null) return;
if (!TextUtils.isEmpty(navigatorBarModel.getFontSize())) {
textView.setTextSize(WXUtils.getInt(navigatorBarModel.getFontSize()) / 2);
}
String fontWeight = navigatorBarModel.getFontWeight();
if (!TextUtils.isEmpty(fontWeight) && !"normal".equals(fontWeight)) {
textView.getPaint().setFakeBoldText(true);
} else {
textView.getPaint().setFakeBoldText(false);
}
String text = navigatorBarModel.getText();
textView.setText(text);
String textColor = navigatorBarModel.getTextColor();
if (!TextUtils.isEmpty(textColor)) {
textView.setTextColor(ColorUtils.getColor(textColor));
} else {
//传递颜色无效 检查基础配置中的颜色
String navItemColor = BMWXEnvironment.mPlatformConfig.getPage().getNavItemColor();
if (TextUtils.isEmpty(navItemColor)) {
//没有设置基础颜色
textView.setTextColor(ColorUtils.getColor("#ffffff"));
} else {
textView.setTextColor(ColorUtils.getColor(navItemColor));
}
}
textView.setVisibility(View.VISIBLE);
}
public static void setRightItem(String params, final JSCallback jscallback) {
BaseToolBar navigationBar;
if (TextUtils.isEmpty(params)) {
navigationBar = getToolBar();
if (navigationBar == null) return;
navigationBar.getRightText().setVisibility(View.GONE);
navigationBar.getRightIcon().setVisibility(View.GONE);
return;
}
ParseManager parseManager = ManagerFactory.getManagerService(ParseManager.class);
NavigatorBarModel navigatorBarModel = parseManager.parseObject(params, NavigatorBarModel
.class);
navigationBar = getToolBar();
if (navigationBar == null) return;
setTextView(navigationBar.getRightText(), navigatorBarModel);
if (!TextUtils.isEmpty(navigatorBarModel.getImage())) {
ImageView rightIcon = navigationBar
.getRightIcon();
setImage(BMWXEnvironment.mApplicationContext, navigatorBarModel.getImage(),rightIcon);
ViewGroup.LayoutParams para = rightIcon.getLayoutParams();
para.height = 150;
para.width = 150;
rightIcon.setLayoutParams(para);
}else{
ImageView rightIcon = navigationBar
.getRightIcon();
rightIcon.setVisibility(View.GONE);
return;
}
if (jscallback != null) {
navigationBar.setOnRightListenner(new BaseToolBar.OnRightIconClick() {
@Override
public void onClick(View v) {
jscallback.invokeAndKeepAlive(new BaseResultBean());
}
});
}
}
public static void setNavigationInfo(String params, final JSCallback jscallback) {
BaseToolBar navigationBar;
if (TextUtils.isEmpty(params)) {
navigationBar = getToolBar();
if (navigationBar == null) return;
navigationBar.setVisibility(View.GONE);
return;
}
ParseManager parseManager = ManagerFactory.getManagerService(ParseManager.class);
// NavigatorBarModel navigatorBarModel = parseManager.parseObject(params, NavigatorBarModel
// .class);
NatigatorModel navigatorModel = parseManager.parseObject(params, NatigatorModel
.class);
navigationBar = getToolBar();
if (navigationBar == null) return;
/*navigationBar.setVisibility(navigatorModel.isNavShow() ? View.VISIBLE : View.GONE);
if (navigationBar.getVisibility() == View.GONE) return;*/
if(navigationBar.getVisibility() == View.VISIBLE){
if(navigatorModel.getTitle() != null){
setStatusBarColor(navigatorModel.getTitle());
navigationBar.setBackgroundColor(ColorUtils.getColor(navigatorModel.getTitle()));
// navigationBar.getTitleTextView().setText(navigatorModel.getTitle());
}
String barStyle = navigatorModel.getStatusBarStyle();
if(barStyle != null){
PlatformConfigBean.Page page = BMWXEnvironment.mPlatformConfig.getPage();
page.setNavItemColor(barStyle);
// navigationBar.setNavigationItemColor();
navigationBar.getTitleTextView().setTextColor(ColorUtils.getColor(barStyle));
if(navigatorModel.isNavShow()){
if("#000000".equals(barStyle)){
// navigationBar.setSta
navigationBar.setLeftIcon(R.drawable.icon_backnav_black);
setActivityMode(0);
}else{
navigationBar.setLeftIcon(R.drawable.icon_backnav);
setActivityMode(1);
}
}else{
if("#000000".equals(barStyle)){
// navigationBar.setSta
setActivityMode(0);
}else{
setActivityMode(1);
}
}
}
}else{
// Log.i("logger","change status bar ");
if(navigatorModel.getTitle() != null){
setStatusBarColor(navigatorModel.getTitle());
String barStyle = navigatorModel.getStatusBarStyle();
if("#000000".equals(barStyle)){
// navigationBar.setSta
setActivityMode(0);
}else{
setActivityMode(1);
}
}
}
// navigationBar.setVisibility(View.VISIBLE);
/* setStatusBarColor(activity, ColorUtils.getColor("#ff0000"), 0, activity
.getRootView());*/
/* if (navigatorModel.getStatusBarStyle() == null || "".equals(navigatorModel
.getStatusBarStyle()) || "Default".equals(navigatorModel.getStatusBarStyle())) {
navigationBar.getTitleTextView().setTextColor(ColorUtils.getColor("#000000"));
} else {
navigationBar.getTitleTextView().setTextColor(ColorUtils.getColor("#ffffff"));
}*/
if (jscallback != null)
navigationBar.setOnTitleListenner(new BaseToolBar.OnTitleClick() {
@Override
public void onClick(View v) {
jscallback.invokeAndKeepAlive(new BaseResultBean());
}
});
}
public static void setCenterItem(String params, final JSCallback jscallback) {
BaseToolBar navigationBar;
if (TextUtils.isEmpty(params)) {
navigationBar = getToolBar();
if (navigationBar == null) return;
navigationBar.getTitleTextView().setVisibility(View.GONE);
return;
}
ParseManager parseManager = ManagerFactory.getManagerService(ParseManager.class);
NavigatorBarModel navigatorBarModel = parseManager.parseObject(params, NavigatorBarModel
.class);
navigationBar = getToolBar();
if (navigationBar == null) return;
setTextView(navigationBar.getTitleTextView(), navigatorBarModel);
if (jscallback != null)
navigationBar.setOnTitleListenner(new BaseToolBar.OnTitleClick() {
@Override
public void onClick(View v) {
jscallback.invokeAndKeepAlive(new BaseResultBean());
}
});
}
public static void setTabbarNavigation(Activity activity, NavigatorModel navigatorModel) {
if (activity instanceof AbstractWeexActivity) {
RouterModel routerModel = ((AbstractWeexActivity) activity).getRouterParam();
ParseManager parseManager = ManagerFactory.getManagerService(ParseManager.class);
NatigatorModel model = parseManager.parseObject(navigatorModel.navigatorModel,
NatigatorModel
.class);
routerModel.navShow = model.isNavShow();
routerModel.navTitle = model.getTitle();
routerModel.canBack = false;
((AbstractWeexActivity) activity).setRouterParam(routerModel);
((AbstractWeexActivity) activity).setNavigationBar();
StatusBarManager.setHeaderBg(routerModel, (AbstractWeexActivity) activity);
}
}
private static BaseToolBar getToolBar() {
Activity activity = RouterTracker.peekActivity();
if (activity != null) {
if (activity instanceof AbstractWeexActivity) {
AbstractWeexActivity abs = (AbstractWeexActivity) activity;
return abs.getNavigationBar();
}
}
return null;
}
private static void setStatusBarColor(String color) {
Activity activity = RouterTracker.peekActivity();
if (activity != null) {
if (activity instanceof AbstractWeexActivity) {
AbstractWeexActivity abs = (AbstractWeexActivity) activity;
StatusBarManager.setHeaderBg2(color, abs);
}
}
}
private static void setActivityMode(Integer mode) {
Activity activity = RouterTracker.peekActivity();
if (activity != null) {
if (activity instanceof AbstractWeexActivity) {
AbstractWeexActivity abs = (AbstractWeexActivity) activity;
//1为白色的
if(mode == 1){
Helper.statusBarDarkMode(abs,Helper.ANDROID_M);
}else{
Helper.statusBarLightMode(abs);
}
}
}
}
}
com/eros/framework/manager/impl/status/StatusBarManager.java
package com.eros.framework.manager.impl.status;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import com.eros.framework.BMWXEnvironment;
import com.eros.framework.activity.AbstractWeexActivity;
import com.eros.framework.model.RouterModel;
import com.eros.widget.utils.BaseCommonUtil;
import qiu.niorgai.StatusBarCompat;
/**
* Created by Carry on 2017/9/14.
*/
public class StatusBarManager {
public static boolean isSupportTranslucent(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window win = activity.getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
winParams.flags |= bits;
win.setAttributes(winParams);
return true;
} else {
return false;
}
}
public static void setStatusBarFontStyle(Activity activity, RouterModel style) {
if (style == null) return;
if (style.statusBarStyle == null || "Default".equals(style.statusBarStyle)) {
Helper.statusBarLightMode(activity);
}
}
public static void setHeaderBg(RouterModel router, AbstractWeexActivity activity) {
if (router == null) return;
String defaultColor = BMWXEnvironment.mPlatformConfig.getPage().getNavBarColor();
if (TextUtils.isEmpty(defaultColor)) {
defaultColor = "#3385ff";
}
if (router == null) return;
if (router.navShow) {
//show nav
if (isSupportTranslucent(activity)) {
//support
setStatusBarColor(activity, BaseCommonUtil.getHexColor(defaultColor), 0, activity
.getRootView());
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
View root = activity.getRootView();
setOffset(activity, root, true);
}
} else {
//unSupport
}
} else {
//hide nav
/* if (isSupportTranslucent(activity)) {
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams)
activity.getRootView().getLayoutParams();
if (layoutParams == null) {
layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams
.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}
layoutParams.topMargin = 0;
Log.i("logger", "hide nav");
translucentStatusBar(activity);
} else {
//不可透明 向上平移状态栏高度
View root = activity.getRootView();
setOffset(activity, root, false);
}*/
if (isSupportTranslucent(activity)) {
//support
setStatusBarColor(activity, BaseCommonUtil.getHexColor(defaultColor), 0, activity
.getRootView());
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
View root = activity.getRootView();
setOffset(activity, root, true);
}
} else {
//unSupport
}
}
}
public static void setHeaderBg2(String color, AbstractWeexActivity activity) {
if (isSupportTranslucent(activity)) {
//support
setStatusBarColor(activity, BaseCommonUtil.getHexColor(color), 0, activity
.getRootView());
/* if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
View root = activity.getRootView();
setOffset(activity, root, true);
}*/
} else {
//unSupport
}
}
private static void translucentStatusBar(AbstractWeexActivity activity) {
StatusBarCompat.translucentStatusBar(activity);
}
public static void setOffset(Context context, View v, boolean puls) {
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) v
.getLayoutParams();
if (layoutParams == null) return;
int statusBarHeight = getStatusBarHeight(context);
if (puls) {
layoutParams.setMargins(0, statusBarHeight, 0, 0);
} else {
layoutParams.setMargins(0, -statusBarHeight, 0, 0);
}
}
private static int getStatusBarHeight(Context context) {
// 获得状态栏高度
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen",
"android");
return context.getResources().getDimensionPixelSize(resourceId);
}
public static void setStatusBarColor(Activity activity, int color, int statusBarAlpha, View
rootView) {
StatusBarCompat.setStatusBarColor(activity, color);
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// activity.getWindow().addFlags(WindowManager.LayoutParams
// .FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
// activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// activity.getWindow().setStatusBarColor(calculateStatusColor(color, statusBarAlpha));
// } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
// int count = decorView.getChildCount();
// if (count > 0 && decorView.getChildAt(count - 1) instanceof StatusBarView) {
// decorView.getChildAt(count - 1).setBackgroundColor(calculateStatusColor(color,
// statusBarAlpha));
// } else {
// StatusBarView statusView = createStatusBarView(activity, color, statusBarAlpha);
// decorView.addView(statusView);
// }
// }
// setRootView(rootView);
}
private static int calculateStatusColor(int color, int alpha) {
float a = 1 - alpha / 255f;
int red = color >> 16 & 0xff;
int green = color >> 8 & 0xff;
int blue = color & 0xff;
red = (int) (red * a + 0.5);
green = (int) (green * a + 0.5);
blue = (int) (blue * a + 0.5);
return 0xff << 24 | red << 16 | green << 8 | blue;
}
public static class StatusBarView extends View {
public StatusBarView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public StatusBarView(Context context) {
super(context);
}
}
private static StatusBarView createStatusBarView(Activity activity, int color, int alpha) {
// 绘制一个和状态栏一样高的矩形
StatusBarView statusBarView = new StatusBarView(activity);
LinearLayout.LayoutParams params =
new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
getStatusBarHeight(activity));
statusBarView.setLayoutParams(params);
statusBarView.setBackgroundColor(calculateStatusColor(color, alpha));
return statusBarView;
}
private static void setRootView(View rootView) {
if (rootView instanceof ViewGroup) {
ViewGroup viewGroup = ((ViewGroup) rootView);
viewGroup.setFitsSystemWindows(true);
viewGroup.setClipToPadding(true);
}
}
}