package me.weyye.todaynews.base;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.LayoutRes;
import android.support.v4.view.LayoutInflaterCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.Toast;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.orhanobut.logger.Logger;
import java.lang.reflect.Field;
import me.weyye.todaynews.R;
import me.weyye.todaynews.model.Notice;
import me.weyye.todaynews.theme.colorUi.SkinFactory;
import me.weyye.todaynews.theme.colorUi.util.ColorUiUtil;
import me.weyye.todaynews.theme.colorUi.util.SharedPreferencesMgr;
import me.weyye.todaynews.ui.view.SwipeBackLayout;
import me.weyye.todaynews.utils.ConstanceValue;
import me.weyye.todaynews.utils.RxBus;
import rx.Observable;
import rx.Subscriber;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.schedulers.Schedulers;
import rx.subscriptions.CompositeSubscription;
/**
* Created by Administrator on 2016/3/16.
*/
public abstract class BaseActivity extends AppCompatActivity {
protected Context mContext;
private CompositeSubscription mCompositeSubscription;
protected Subscription mSubscription;
private SwipeBackLayout mSwipeBackLayout;
// private ImageView mIvShadow;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
if (SharedPreferencesMgr.getInt(ConstanceValue.SP_THEME, ConstanceValue.THEME_LIGHT) == ConstanceValue.THEME_LIGHT) {
setTheme(R.style.Theme_Light);
} else {
setTheme(R.style.Theme_Night);
}
mSubscription = toObservable().observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<Notice>() {
@Override
public void call(Notice message) {
if (message.type == ConstanceValue.MSG_TYPE_CHANGE_THEME)
ColorUiUtil.changeTheme(getWindow().getDecorView(), getTheme());
}
});
setLayoutInflaterFactory();
initView(savedInstanceState);
}
@Override
public void setContentView(@LayoutRes int layoutResID) {
super.setContentView(getContainer());
View view = LayoutInflater.from(this).inflate(layoutResID, null);
mSwipeBackLayout.addView(view);
}
private View getContainer() {
RelativeLayout container = new RelativeLayout(this);
mSwipeBackLayout = new SwipeBackLayout(this);
mSwipeBackLayout.setDragEdge(SwipeBackLayout.DragEdge.LEFT);
// mIvShadow = new ImageView(this);
// mIvShadow.setBackgroundColor(getResources().getColor(R.color.black));
// ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
// container.addView(mIvShadow, params);
container.addView(mSwipeBackLayout);
return container;
}
public void setEnableSwipe(boolean enableSwipe) {
mSwipeBackLayout.setEnablePullToBack(enableSwipe);
}
// public void setDragEdge(SwipeBackLayout.DragEdge dragEdge) {
// mSwipeBackLayout.setDragEdge(dragEdge);
// }
public SwipeBackLayout getSwipeBackLayout() {
return mSwipeBackLayout;
}
public void setLayoutInflaterFactory() {
LayoutInflater layoutInflater = getLayoutInflater();
try {
Field mFactorySet = LayoutInflater.class.getDeclaredField("mFactorySet");
mFactorySet.setAccessible(true);
mFactorySet.set(layoutInflater, false);
LayoutInflaterCompat.setFactory(layoutInflater, new SkinFactory(this));
} catch (Exception e) {
e.printStackTrace();
}
}
public RecyclerView initCommonRecyclerView(BaseQuickAdapter adapter, RecyclerView.ItemDecoration decoration) {
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
return initCommonRecyclerView(recyclerView, adapter, decoration);
}
public RecyclerView initCommonRecyclerView(RecyclerView recyclerView, BaseQuickAdapter adapter, RecyclerView.ItemDecoration decoration) {
recyclerView.setLayoutManager(new LinearLayoutManager(this));
if (decoration != null) {
recyclerView.addItemDecoration(decoration);
}
recyclerView.setAdapter(adapter);
return recyclerView;
}
public RecyclerView initHorizontalRecyclerView(BaseQuickAdapter adapter, RecyclerView.ItemDecoration decoration) {
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
if (decoration != null) {
recyclerView.addItemDecoration(decoration);
}
recyclerView.setAdapter(adapter);
return recyclerView;
}
public RecyclerView initGridRecyclerView(int resId, BaseQuickAdapter adapter, RecyclerView.ItemDecoration decoration, int spanCount) {
RecyclerView recyclerView = (RecyclerView) findViewById(resId == 0 ? R.id.recyclerView : resId);
recyclerView.setLayoutManager(new GridLayoutManager(this, spanCount));
if (decoration != null) {
recyclerView.addItemDecoration(decoration);
}
recyclerView.setAdapter(adapter);
return recyclerView;
}
public RecyclerView initGridRecyclerView(BaseQuickAdapter adapter, RecyclerView.ItemDecoration decoration, int spanCount) {
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new GridLayoutManager(this, spanCount));
if (decoration != null) {
recyclerView.addItemDecoration(decoration);
}
recyclerView.setAdapter(adapter);
return initGridRecyclerView(0, adapter, decoration, spanCount);
}
@Override
protected void onDestroy() {
super.onDestroy();
onUnsubscribe();
if (mSubscription != null) mSubscription.unsubscribe();
}
/**
* 初始化界面
*/
protected void initView(Bundle savedInstanceState) {
loadViewLayout();
bindViews();
processLogic(savedInstanceState);
setListener();
}
protected void showLog(String log) {
Logger.i(log);
}
/**
* 获取控件
*
* @param id 控件的id
* @param <E>
* @return
*/
protected <E extends View> E get(int id) {
return (E) findViewById(id);
}
/**
* 加载布局
*/
protected abstract void loadViewLayout();
/**
* find控件
*/
protected abstract void bindViews();
/**
* 处理数据
*/
protected abstract void processLogic(Bundle savedInstanceState);
/**
* 设置监听
*/
protected abstract void setListener();
/**
* 界面跳转
*
* @param tarActivity
*/
protected void intent2Activity(Class<? extends Activity> tarActivity) {
Intent intent = new Intent(mContext, tarActivity);
startActivity(intent);
}
/**
* 显示Toast
*
* @param msg
*/
protected void showToast(String msg) {
// ToastUtils.showToast(msg);
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
/**
* 注册事件通知
*/
public Observable<Notice> toObservable() {
return RxBus.getDefault().toObservable(Notice.class);
}
/**
* 发送消息
*/
public void post(Notice msg) {
RxBus.getDefault().post(msg);
}
//RXjava取消注册,以避免内存泄露
public void onUnsubscribe() {
if (mCompositeSubscription != null && mCompositeSubscription.hasSubscriptions()) {
mCompositeSubscription.unsubscribe();
}
}
public void addSubscription(Observable observable, Subscriber subscriber) {
if (mCompositeSubscription == null) {
mCompositeSubscription = new CompositeSubscription();
}
mCompositeSubscription.add(observable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(subscriber));
}
}