package com.xg.navigation.splash;

import android.app.Activity;
import android.app.Dialog;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.DrawableRes;
import android.util.Log;
import android.widget.ImageView;

import com.xg.navigation.R;

import java.lang.ref.WeakReference;

/**
 * 自定义的一个启动页，用来在加载JSBundle的时候显示静态图片
 */

public class SplashScreen {
    private static Dialog mSplashDialog = null;
    private static WeakReference<Activity> mWeakReference = null;
    /**
     * 打开启动屏
     */
    public static synchronized void show(final Activity activity, @DrawableRes final int backgroundResId) {

        if (activity == null || 0 == backgroundResId) {
            return;
        }
        mWeakReference = new WeakReference<>(activity);
        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (!activity.isFinishing()) {

                    mSplashDialog = new Dialog(activity, R.style.SplashScreen_Fullscreen);
                    mSplashDialog.setContentView(R.layout.splash_screen);

                    ImageView imageView = mSplashDialog.findViewById(R.id.imageview);
                    imageView.setImageResource(backgroundResId);

                    mSplashDialog.setCancelable(false);

                    if (!mSplashDialog.isShowing()) {
                        try {
                            mSplashDialog.show();
                        }catch (Exception ignored) {
                            Log.e("SplashScreen", "run: ", ignored);
                        }
                    }
                }
            }
        });
    }

    /**
     * 延时关闭
     */
    public static synchronized void hidDelayed(long delayMillis){
        if (mSplashDialog != null && mSplashDialog.isShowing()) {
            new SplashHandler().sendEmptyMessageDelayed(0, delayMillis);
        }
    }

    /**
     * 关闭启动屏
     */
    public static synchronized void hide(Activity activity) {
        if (activity == null) {
            if(null != mWeakReference) {
                activity = mWeakReference.get();
            }
            if(null == activity){
                return;
            }
        }
        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (mSplashDialog != null && mSplashDialog.isShowing()) {
                    mSplashDialog.dismiss();
                    mSplashDialog = null;
                }
            }
        });
    }

    static class SplashHandler extends Handler{
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            SplashScreen.hide(null);
        }
    }
}

