/**
 * LoadingLayout.java
 * ImageChooser
 * 
 * Created by likebamboo on 2014-4-22
 * Copyright (c) 1998-2014 http://likebamboo.github.io/ All rights reserved.
 */

package com.likebamboo.imagechooser.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.likebamboo.imagechooser.R;

/**
 * 整块区域的Loading
 * 
 * @author likebamboo
 */
public class LoadingLayout extends LinearLayout {
    /**
     * 正在加载ProgressBar
     */
    private ProgressBar mLoadingProgressBar = null;

    /**
     * 重试布局
     */
    private LinearLayout mRetryLayout = null;

    /**
     * 错误提示TextView
     */
    private TextView mErrorTv = null;

    /**
     * 重试接口
     */
    private IRetryListener mRetryListener = null;

    /**
     * 是否可以重试
     */
    private boolean canRetry = true;

    public interface IRetryListener {
        void onRetry();
    }

    public LoadingLayout(Context context) {
        super(context);
    }

    public LoadingLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        initView();
    }

    /**
     * 初始化布局
     */
    private void initView() {
        mLoadingProgressBar = (ProgressBar)findViewById(R.id.loading_pb);
        mRetryLayout = (LinearLayout)findViewById(R.id.loading_fail_layout);
        mRetryLayout.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (!canRetry) {
                    return false;
                }
                // onTouch down的时候才触发重试异步线程,否则会多次触发的。
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    if (mRetryListener != null) {
                        mRetryListener.onRetry();
                    }
                }
                return true;
            }
        });
        mErrorTv = (TextView)findViewById(R.id.loading_fail_tv);
    }

    /**
     * 显示/隐藏正在加载中。。。
     */
    public void showLoading(boolean show) {
        if (show) {
            setVisibility(View.VISIBLE);
            mLoadingProgressBar.setVisibility(View.VISIBLE);
            mRetryLayout.setVisibility(View.GONE);
        } else {
            setVisibility(View.GONE);
        }
    }

    /**
     * 显示加载失败信息
     */
    public void showFailed(CharSequence msg) {
        setVisibility(View.VISIBLE);
        mLoadingProgressBar.setVisibility(View.GONE);
        mRetryLayout.setVisibility(View.VISIBLE);
        mErrorTv.setText(msg);
        mErrorTv.setTextColor(getResources().getColor(android.R.color.black));
        if (!canRetry) {
            canRetry = true;
        }
    }

    /**
     * 显示"空"信息
     * 
     * @param msg
     */
    public void showEmpty(CharSequence msg) {
        setVisibility(View.VISIBLE);
        mLoadingProgressBar.setVisibility(View.GONE);
        mRetryLayout.setVisibility(View.VISIBLE);
        mErrorTv.setText(msg);
        mErrorTv.setTextColor(getResources().getColor(android.R.color.background_dark));
        mErrorTv.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
        canRetry = false;
    }

    /**
     * 设置重试监听器。
     * 
     * @param listener
     */
    public void setRetryListener(IRetryListener listener) {
        this.mRetryListener = listener;
    }

}