BaseLoadActivity.java 9.2 KB
package com.cnlive.goldenline.ui.base;

import android.os.Bundle;
import android.support.annotation.DrawableRes;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.cnlive.goldenline.R;
import com.cnlive.goldenline.ui.widget.CNAccelerometerSensor;
import com.cnlive.goldenline.ui.widget.pull2refresh.PullToRefreshLayout;
import com.cnlive.goldenline.util.LogUtils;
import com.umeng.analytics.MobclickAgent;
import com.umeng.message.PushAgent;

import butterknife.BindView;
import butterknife.ButterKnife;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;


/**
 * Created by zuoxian on 15/9/7.
 */
public abstract class BaseLoadActivity<T> extends AppCompatActivity implements Callback<T>, View.OnClickListener,
        PullToRefreshLayout.OnPullListener {

    @Nullable
    @BindView(R.id.toolbar)
    protected Toolbar toobar;

    @Nullable
    @BindView(R.id.img_logo)
    protected ImageView img_logo;

    @Nullable
    @BindView(R.id.toolbar_title)
    public TextView tv_title;

    @Nullable
    @BindView(R.id.btn_go_back)
    public ImageButton imgBtn_back;

    @Nullable
    @BindView(R.id.movie_icon)
    public ImageView movie_icon;

    @Nullable
    @BindView(R.id.menu_edit)
    public TextView tv_edit;

    @Nullable
    @BindView(R.id.movie_icon_layout)
    public MenuItem search_item;

    @Nullable
    @BindView(R.id.empty)
    protected View mEmptyView;

    @Nullable
    @BindView(R.id.empty_load)
    LinearLayout mEmptyProgressbar;

    @Nullable
    @BindView(R.id.empty_button)
    Button mEmptyButton;

    @Nullable
    @BindView(R.id.pull_to_refresh)
    protected PullToRefreshLayout mPullToRefreshLayout;

    public boolean mIsOnPause;

    protected T mPageData;
    protected boolean isLoading;
    protected boolean mIsPullToRefresh = false;
    protected boolean enableLoadMore = false;
//    //弹幕相关
//    @Nullable
//    @BindView(R.id.danmuview)
//    public DanmakuView danmuview;
//    //播放器上的控制器
//    @Nullable
//    @BindView(R.id.playerControllerView)
//    public PlayerControllerView playerControllerView;
//
//    protected DanmuUtil danmuUtil;

    protected CNAccelerometerSensor cnAccelerometerSensor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        PushAgent.getInstance(this).onAppStart();
        cnAccelerometerSensor = new CNAccelerometerSensor(this);
    }

    @Override
    public void setContentView(int layoutResID) {
        super.setContentView(layoutResID);
        ButterKnife.bind(this);
        initView();
//        danmuUtil = new DanmuUtil(this, danmuview, playerControllerView);
    }


    /**
     * 控件布局初始化
     */
    protected void initView() {
        if (toobar == null) {
            toobar = (Toolbar) findViewById(R.id.toolbar);
        }
        if (toobar != null) {
            setSupportActionBar(toobar);
        }
        if (tv_title == null) {
            tv_title = (TextView) findViewById(R.id.toolbar_title);
        }
        if (imgBtn_back == null) {
            imgBtn_back = (ImageButton) findViewById(R.id.btn_go_back);
        }
        if (imgBtn_back != null) imgBtn_back.setOnClickListener(this);
    }

    public void setMovieIcon(@DrawableRes int drawableId) {
        if (movie_icon == null) {
            movie_icon = (ImageView) findViewById(R.id.movie_icon);
        }
        movie_icon.setBackgroundResource(drawableId);
    }

    public void setTitle(String title) {
        if (tv_title != null) {
            tv_title.setText(title);
        }
    }

    protected void hideTitle(boolean isVisiable) {
        if (tv_title != null) {
            tv_title.setVisibility(isVisiable ? View.VISIBLE : View.GONE);
        }
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.btn_go_back) {
            finish();
        } else if (v.getId() == R.id.empty_button) {
            mIsPullToRefresh = false;
            showLoad();
            onLoadData();
        }
    }

    public void onResume() {
        super.onResume();
        mIsOnPause = false;
        MobclickAgent.onResume(this);

        if (cnAccelerometerSensor != null) cnAccelerometerSensor.register();

//        if (mPullToRefreshLayout != null) {
//            if (!enableLoadMore) {
//                LayoutInflater inflater = (LayoutInflater) this.getSystemService(
//                        Context.LAYOUT_INFLATER_SERVICE);
//                mPullToRefreshLayout.setCustomLoadmoreView(inflater.inflate(R.layout.empty_view, null));
//            }
//            mPullToRefreshLayout.setOnPullListener(new PullToRefreshLayout.OnPullListener() {
//                @Override
//                public void onRefresh(PullToRefreshLayout pullToRefreshLayout) {
//                    mIsPullToRefresh = true;
//                    onLoadData();
//                }
//
//                @Override
//                public void onLoadMore(PullToRefreshLayout pullToRefreshLayout) {
//                    mPullToRefreshLayout.loadmoreFinish(PullToRefreshLayout.SUCCEED);
//                    onLoadData();
//                }
//            });
//        }

    }

    public void onPause() {
        super.onPause();
        mIsOnPause = true;
        MobclickAgent.onResume(this);
        if (cnAccelerometerSensor != null) cnAccelerometerSensor.unregister();
    }

    @Override
    protected void onStart() {
        super.onStart();
        onLoadData();
    }

    /**
     * 请求接口数据  下拉刷新 请求第一页数据
     */
    protected abstract void onLoadData();

    /**
     * 加载更多  分页请求下一页
     */
    protected abstract void onLoadNextPageData();

    /**
     * @param pageData
     */
    protected abstract void onInitLoadData(T pageData);

    @Override
    public void onRefresh(PullToRefreshLayout pullToRefreshLayout) {
        mIsPullToRefresh = true;
        pullToRefreshLayout.refreshFinish(PullToRefreshLayout.SUCCEED);
        onLoadData();
    }

    @Override
    public void onLoadMore(PullToRefreshLayout pullToRefreshLayout) {
        pullToRefreshLayout.refreshFinish(PullToRefreshLayout.SUCCEED);
        onLoadNextPageData();
    }

    @Override
    public void success(T t, Response response) {
        onRefreshCallback(true);
    }

    @Override
    public void failure(RetrofitError error) {
        onRefreshCallback(false);
        showConnectionRetry();
    }

    protected void setPageData(T page_data) {
        this.mPageData = page_data;
        onInitLoadData(page_data);
    }

    protected void showLoad() {
        if (this == null) return;
        if (mPageData != null) return;
        if (mEmptyView != null) mEmptyView.setVisibility(View.VISIBLE);
        if (mEmptyProgressbar != null) mEmptyProgressbar.setVisibility(View.VISIBLE);
        if (mEmptyButton != null) mEmptyButton.setVisibility(View.GONE);
    }

    protected void showConnectionRetry() {
        if (this == null) return;
        if (mPageData != null) return;
        if (mEmptyView != null) mEmptyView.setVisibility(View.VISIBLE);
        if (mEmptyProgressbar != null) mEmptyProgressbar.setVisibility(View.GONE);

        if (mEmptyButton != null) {
            mEmptyButton.setText(getString(R.string.load_retry));
            mEmptyButton.setVisibility(View.VISIBLE);
            mEmptyButton.setOnClickListener(this);
        }
    }


    protected void hideEmptyView() {
        if (mEmptyView != null) mEmptyView.setVisibility(View.GONE);
    }

//    @NonNull
//    protected View.OnClickListener mOnClickListener = new View.OnClickListener() {
//        @Override
//        public void onClick(View v) {
//            mIsPullToRefresh = false;
//            showLoad();
//            onLoadData();
//        }
//    };

    private static final String TAG = "BaseLoadActivity";

    protected void onRefreshCallback(boolean succeed) {
        if (succeed && mEmptyView != null) mEmptyView.setVisibility(View.GONE);
        LogUtils.LOGE(TAG + " onRefreshCallback succeed = " + succeed + " mEmptyView = " + (mEmptyView == null ? " mEmptyView is null " : mEmptyView.getVisibility()));
        if (mIsPullToRefresh && mPullToRefreshLayout != null) {
            if (succeed) {
                mPullToRefreshLayout.refreshFinish(PullToRefreshLayout.SUCCEED);
            } else {
                mPullToRefreshLayout.refreshFinish(PullToRefreshLayout.FAIL);
            }
        }
    }

    protected void onLoadMoreCallback(boolean succeed) {
        if (mPullToRefreshLayout != null) {
            if (succeed) {
                mPullToRefreshLayout.loadmoreFinish(PullToRefreshLayout.SUCCEED);
            } else {
                mPullToRefreshLayout.loadmoreFinish(PullToRefreshLayout.FAIL);
            }
        }
    }

    public void setRefreshState(boolean enable) {
        if (mPullToRefreshLayout != null) mPullToRefreshLayout.setPullDownEnable(enable);
    }

    public void setEnableLoadMore(boolean flag) {
        enableLoadMore = flag;
    }
}