android状态栏

2020-09-03 16:30:58 阅读:3 编辑
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);
        }

    }

}