// Path: app/src/main/java/nich/work/aequorea/common/rx/RxBus.java
// public class RxBus {
//     private final Subject<Object> mBus;
// 
//     private RxBus() {
//         mBus = PublishSubject.create().toSerialized();
//     }
// 
//     public static RxBus getInstance() {
//         return RxBusHolder.RX_BUS_INSTANCE;
//     }
// 
//     public void post(int type) {
//         post(type, null);
//     }
// 
//     public void post(int type, @Nullable Object data) {
//         mBus.onNext(new RxEvent<>(type, data));
//     }
// 
//     public Observable<Object> toObservable() {
//         return mBus;
//     }
// 
//     public <T> Observable<T> toObservable(Class<T> type) {
//         return mBus.ofType(type);
//     }
// 
//     public <T> Observable<T> toObservable(final int type, final Class<T> clazz) {
//         return mBus.ofType(RxEvent.class).filter(new Predicate<RxEvent>() {
//             @Override
//             public boolean test(@NonNull RxEvent event) throws Exception {
//                 return event.getType() == type;
//             }
//         }).cast(clazz).observeOn(AndroidSchedulers.mainThread());
//     }
// 
//     private static class RxBusHolder {
//         private static final RxBus RX_BUS_INSTANCE = new RxBus();
//     }
// }
// 
// Path: app/src/main/java/nich/work/aequorea/common/rx/RxEvent.java
// public class RxEvent<T> {
//     public static final int EVENT_TYPE_CHANGE_THEME = 1;
// 
//     private int mCode;
//     private T mData;
// 
//     public RxEvent(int type, T data) {
//         mCode = type;
//         mData = data;
//     }
// 
//     public int getType() {
//         return mCode;
//     }
// 
//     public void setType(int mCode) {
//         this.mCode = mCode;
//     }
// 
//     public T getData() {
//         return mData;
//     }
// 
//     public void setData(T data) {
//         mData = data;
//     }
// }
// 
// Path: app/src/main/java/nich/work/aequorea/common/ui/view/BaseView.java
// public interface BaseView {
//     void onThemeSwitch();
//     void onThemeSwitchPending();
// }


import android.content.Context;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.functions.Consumer;
import nich.work.aequorea.common.rx.RxBus;
import nich.work.aequorea.common.rx.RxEvent;
import nich.work.aequorea.common.ui.view.BaseView;
package nich.work.aequorea.common.presenter;



public abstract class BasePresenter<T extends BaseView> {
    protected T mBaseView;
    protected CompositeDisposable mComposite;
    
    public void attach(T view) {
        mBaseView = view;
        mComposite = new CompositeDisposable();
        addSubscription(RxEvent.EVENT_TYPE_CHANGE_THEME, new Consumer<RxEvent>() {
            @Override
            public void accept(RxEvent rxEvent) throws Exception {
                mBaseView.onThemeSwitch();
            }
        });
        
        onAttach();
    }
    
    protected void onAttach() {
        // do nothing
    }
    
    protected void addSubscription(int type, Consumer<RxEvent> consumer) {
// Path: app/src/main/java/nich/work/aequorea/common/rx/RxBus.java
// public class RxBus {
//     private final Subject<Object> mBus;
// 
//     private RxBus() {
//         mBus = PublishSubject.create().toSerialized();
//     }
// 
//     public static RxBus getInstance() {
//         return RxBusHolder.RX_BUS_INSTANCE;
//     }
// 
//     public void post(int type) {
//         post(type, null);
//     }
// 
//     public void post(int type, @Nullable Object data) {
//         mBus.onNext(new RxEvent<>(type, data));
//     }
// 
//     public Observable<Object> toObservable() {
//         return mBus;
//     }
// 
//     public <T> Observable<T> toObservable(Class<T> type) {
//         return mBus.ofType(type);
//     }
// 
//     public <T> Observable<T> toObservable(final int type, final Class<T> clazz) {
//         return mBus.ofType(RxEvent.class).filter(new Predicate<RxEvent>() {
//             @Override
//             public boolean test(@NonNull RxEvent event) throws Exception {
//                 return event.getType() == type;
//             }
//         }).cast(clazz).observeOn(AndroidSchedulers.mainThread());
//     }
// 
//     private static class RxBusHolder {
//         private static final RxBus RX_BUS_INSTANCE = new RxBus();
//     }
// }
// 
// Path: app/src/main/java/nich/work/aequorea/common/rx/RxEvent.java
// public class RxEvent<T> {
//     public static final int EVENT_TYPE_CHANGE_THEME = 1;
// 
//     private int mCode;
//     private T mData;
// 
//     public RxEvent(int type, T data) {
//         mCode = type;
//         mData = data;
//     }
// 
//     public int getType() {
//         return mCode;
//     }
// 
//     public void setType(int mCode) {
//         this.mCode = mCode;
//     }
// 
//     public T getData() {
//         return mData;
//     }
// 
//     public void setData(T data) {
//         mData = data;
//     }
// }
// 
// Path: app/src/main/java/nich/work/aequorea/common/ui/view/BaseView.java
// public interface BaseView {
//     void onThemeSwitch();
//     void onThemeSwitchPending();
// }


// Path: app/src/main/java/nich/work/aequorea/common/presenter/BasePresenter.java
import android.content.Context;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.functions.Consumer;
import nich.work.aequorea.common.rx.RxBus;
import nich.work.aequorea.common.rx.RxEvent;
import nich.work.aequorea.common.ui.view.BaseView;

package nich.work.aequorea.common.presenter;



public abstract class BasePresenter<T extends BaseView> {
    protected T mBaseView;
    protected CompositeDisposable mComposite;
    
    public void attach(T view) {
        mBaseView = view;
        mComposite = new CompositeDisposable();
        addSubscription(RxEvent.EVENT_TYPE_CHANGE_THEME, new Consumer<RxEvent>() {
            @Override
            public void accept(RxEvent rxEvent) throws Exception {
                mBaseView.onThemeSwitch();
            }
        });
        
        onAttach();
    }
    
    protected void onAttach() {
        // do nothing
    }
    
    protected void addSubscription(int type, Consumer<RxEvent> consumer) {
        mComposite.add(RxBus.getInstance()