AdvertisementFragment.java 6.77 KB
package com.polysoft.nafmii.fragment;

import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.DrawableImageViewTarget;
import com.bumptech.glide.request.transition.Transition;
import com.polysoft.nafmii.bean.AdvertisementBean;
import com.polysoft.nafmii.bean.MenuBean;
import com.polysoft.nafmii.bean.OpenUrlBean;
import com.polysoft.nafmii.enums.ModulesEnum;
import com.polysoft.nafmii.utils.IntentUtils;
import com.whaty.nafmii.BuildConfig;
import com.whaty.nafmii.R;
import com.whaty.nafmii.activity.HomeActivity;
import com.whaty.nafmii.activity.IActivityEvent;
import com.whaty.nafmii.activity.OutsideWebviewActivity;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

public class AdvertisementFragment extends Fragment implements View.OnClickListener {

    private final String TAG = AdvertisementFragment.class.getName();

    private ImageView mImgView;
    private TextView mCountDown;
    private boolean finished = false;
    private View mRootView;

    private AdvertisementBean mBean;

    public static AdvertisementFragment newInstance(String data) {
        AdvertisementFragment fragment = new AdvertisementFragment();
        Bundle args = new Bundle();
        args.putString("data", data);
        fragment.setArguments(args);
        return fragment;
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        if (null == this.mRootView) {
            this.mRootView = inflater.inflate(R.layout.fragment_advertisement, container, false);
            this.initView(this.mRootView);
        } else {
            ((ViewGroup) this.mRootView.getParent()).removeView(this.mImgView);
        }
        return this.mRootView;
    }

    private void initView(View view) {
        View countLayout = view.findViewById(R.id.advertisement_pass);
        countLayout.setOnClickListener(this);
        this.mImgView = view.findViewById(R.id.advertisement_imgview);
        this.mCountDown = view.findViewById(R.id.advertisement_countdown);

        this.mImgView.setOnClickListener(this);
//        this.loadAdvertisementImageTest();
        this.loadAdvertisementImage(countLayout);
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.advertisement_pass) {
            this.dispatchActivityEvent();
        } else if (v.getId() == R.id.advertisement_imgview) {
            if (null != this.mBean && this.setFinishedFlag()) {
                this.startAdvertsementDetail(this.mBean);
            }
        }
    }

    private void loadAdvertisementImage(View countLayout) {
        String json = getArguments().getString("data");
        if (TextUtils.isEmpty(json)) {
            this.dispatchActivityEvent();
            return;
        }
        this.mBean = JSON.parseObject(json, AdvertisementBean.class);
        if (TextUtils.isEmpty(mBean.getPicUrl())) {
            return;
        }
        if (TextUtils.isEmpty(mBean.getPicUrl())) {
            this.startCountDown();
            return;
        }
        String imgUrl = BuildConfig.IMG_API + mBean.getPicUrl();
        Glide.with(getContext()).load(imgUrl).into(new DrawableImageViewTarget(this.mImgView) {
            @Override
            public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
                super.onResourceReady(resource, transition);
                countLayout.setVisibility(View.VISIBLE);
                startCountDown();
            }
        });
    }

    private void loadAdvertisementImageTest() {
        this.mImgView.setImageResource(R.mipmap.advertisement);
        this.startCountDown();
    }

    private void startAdvertsementDetail(AdvertisementBean bean) {
        if (null == bean) {
            return;
        }
        OpenUrlBean dataBean = new OpenUrlBean();
        dataBean.setLinkType(bean.getLinkType());

        try {
            if ("1".equals(bean.getLinkType())) {
                dataBean.setLinkUrl(URLEncoder.encode(bean.getInsideUrl(), "UTF-8"));
            } else {
                dataBean.setNav("1");
                dataBean.setLinkUrl(URLEncoder.encode(bean.getOutsideUrl(), "utf-8"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 需要登录
//        if ("0".equals(bean.getIsLogin())) {
        dataBean.setIsLogin(bean.getIsLogin());
        dataBean.setIsShare(bean.getIsShare());
        dataBean.setTitle(bean.getTitle());
        MenuBean menuBean = new MenuBean();
        menuBean.setModuleName(ModulesEnum.HOME.name);
        menuBean.setQuery(dataBean);

        Map<String, Object> map = new HashMap<>();
        map.put("moduleName", ModulesEnum.HOME.name);
        map.put("query", dataBean);

        Intent intent = new Intent();
        intent.putExtra("changeRoute", JSONObject.toJSONString(map));
        IntentUtils.toHomeActivity(this.getActivity(), intent);
//        }


//        else if ("1".equals(bean.getLinkType())) { // 内链
//
//        } else {
//            Intent intent = new Intent(getActivity(), OutsideWebviewActivity.class);
//            intent.putExtra("data", JSON.toJSONString(dataBean));
//            IntentUtils.startActivity(getActivity(), intent);
//        }

    }


    private void startCountDown() {
        long unit = 1000, maxSecond = 5;
        mCountDown.setText(String.format("%ds", maxSecond));
        new CountDownTimer(maxSecond * unit, unit) {
            @Override
            public void onTick(long millisUntilFinished) {
                long second = millisUntilFinished / unit;
                mCountDown.setText(String.format("%ds", (second + 1)));
            }

            @Override
            public void onFinish() {
                this.cancel();
                dispatchActivityEvent();
            }
        }.start();
    }

    private void dispatchActivityEvent() {
        if (this.setFinishedFlag()) {
            IActivityEvent activity = (IActivityEvent) getActivity();
            activity.dispatchEvent(IActivityEvent.EVENT_ADVERTISEMENT);
        }
    }

    private synchronized boolean setFinishedFlag() {
        if (!this.finished) {
            this.finished = true;
            return true;
        }
        return false;
    }
}