content: /**
    * Copyright 2017 JessYan
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
    * You may obtain a copy of the License at
    *
    *      http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing, software
    * distributed under the License is distributed on an "AS IS" BASIS,
    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    * See the License for the specific language governing permissions and
    * limitations under the License.
    */
  package <%= appPackage %>.app.utils;
  
  import <%= appPackage %>.mvp.IView;
  import <%= appPackage %>.utils.RxLifecycleUtils;
  import com.trello.rxlifecycle2.LifecycleTransformer;
  
  import io.reactivex.Observable;
  import io.reactivex.ObservableTransformer;
  import io.reactivex.android.schedulers.AndroidSchedulers;
  import io.reactivex.annotations.NonNull;
  import io.reactivex.disposables.Disposable;
  import io.reactivex.functions.Action;
  import io.reactivex.functions.Consumer;
  import io.reactivex.schedulers.Schedulers;
  
  /**
   * ================================================
   * 放置便于使用 RxJava 的一些工具类
   * <p>
   * Created by JessYan on 11/10/2016 16:39
   * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
   * <a href="https://github.com/JessYanCoding">Follow me</a>
   * ================================================
   */
  public class RxUtils {
  
      private RxUtils() {
      }
  
      public static <T> ObservableTransformer<T, T> applySchedulers(final IView view) {
          return new ObservableTransformer<T, T>() {
              @Override
              public Observable<T> apply(Observable<T> observable) {
                  return observable.subscribeOn(Schedulers.io())
                          .doOnSubscribe(new Consumer<Disposable>() {
                              @Override
                              public void accept(@NonNull Disposable disposable) throws Exception {
                                  view.showLoading();//显示进度条
                              }
                          })
                          .subscribeOn(AndroidSchedulers.mainThread())
                          .observeOn(AndroidSchedulers.mainThread())
                          .doFinally(new Action() {
                              @Override
                              public void run() {
                                  view.hideLoading();//隐藏进度条
                              }
                          }).compose(RxLifecycleUtils.bindToLifecycle(view));
              }
          };
      }
  
      /**
       * 此接口已废弃
       *
       * @param view
       * @param <T>
       * @return
       * @see RxLifecycleUtils 使用此类代替
       */
      @Deprecated
      public static <T> LifecycleTransformer<T> bindToLifecycle(IView view) {
          return RxLifecycleUtils.bindToLifecycle(view);
      }
  
  }
  