package com.werb.gankwithzhihu.ui.base;
import android.os.Build;
import android.os.Bundle;
import android.support.design.widget.AppBarLayout;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.TypedValue;
import android.view.MenuItem;
import com.werb.gankwithzhihu.R;
import butterknife.ButterKnife;
/**
* Created by Werb on 2016/7/25.
* Werb is Wanbo.
* Contact Me : werbhelius@gmail.com
* Base of Activity
*/
public abstract class MVPBaseActivity<V, T extends BasePresenter<V>> extends AppCompatActivity {
protected T mPresenter;
protected AppBarLayout mAppBar;
protected Toolbar mToolbar;
private SwipeRefreshLayout mRefreshLayout;
private boolean mIsRequestDataRefresh = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//允许为空,不是所有都要实现MVP模式
if(createPresenter()!=null) {
mPresenter = createPresenter();
mPresenter.attachView((V) this);
}
setContentView(provideContentViewId());//布局
ButterKnife.bind(this);
mAppBar = (AppBarLayout) findViewById(R.id.app_bar_layout);
mToolbar = (Toolbar) findViewById(R.id.toolbar);
if (mToolbar != null && mAppBar != null) {
setSupportActionBar(mToolbar); //把Toolbar当做ActionBar给设置
if (canBack()) {
ActionBar actionBar = getSupportActionBar();
if (actionBar != null)
actionBar.setDisplayHomeAsUpEnabled(true);//设置ActionBar一个返回箭头,主界面没有,次级界面有
}
if (Build.VERSION.SDK_INT >= 21) {
mAppBar.setElevation(10.6f);//Z轴浮动
}
}
if (isSetRefresh()) {
setupSwipeRefresh();
}
}
private void setupSwipeRefresh() {
mRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh);
if (mRefreshLayout != null) {
mRefreshLayout.setColorSchemeResources(R.color.refresh_progress_1,
R.color.refresh_progress_2, R.color.refresh_progress_3);
mRefreshLayout.setProgressViewOffset(true, 0, (int) TypedValue
.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, getResources().getDisplayMetrics()));
mRefreshLayout.setOnRefreshListener(this::requestDataRefresh);
}
}
public void requestDataRefresh() {
mIsRequestDataRefresh = true;
}
public void setRefresh(boolean requestDataRefresh) {
if (mRefreshLayout == null) {
return;
}
if (!requestDataRefresh) {
mIsRequestDataRefresh = false;
mRefreshLayout.postDelayed(() -> {
if (mRefreshLayout != null) {
mRefreshLayout.setRefreshing(false);
}
}, 1000);
} else {
mRefreshLayout.setRefreshing(true);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if(mPresenter!=null) {
mPresenter.detachView();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// 此时android.R.id.home即为返回箭头
if (item.getItemId() == android.R.id.home) {
onBackPressed();
finish();
return true;
} else {
return super.onOptionsItemSelected(item);
}
}
/**
* 判断当前 Activity 是否允许返回
* 主界面不允许返回,次级界面允许返回
*
* @return false
*/
public boolean canBack() {
return false;
}
/**
* 判断子Activity是否需要刷新功能
*
* @return false
*/
public Boolean isSetRefresh() {
return false;
}
protected abstract T createPresenter();
abstract protected int provideContentViewId();//用于引入布局文件
}