// Path: app/src/main/java/io/github/kobakei/anago/activity/BaseActivity.java
// public class BaseActivity extends RxAppCompatActivity {
// 
//     private ActivityViewModel viewModel;
// 
//     protected ActivityComponent getInjector() {
//         AnagoApplication application = (AnagoApplication) getApplication();
//         return application.getInjector().activityComponent(new ActivityModule(this));
//     }
// 
//     /**
//      * ビューモデルをこのアクティビティにバインドする
//      * アクティビティのライフサイクルイベント発生時に、ビューモデルの対応するメソッドが呼ばれるようになります
//      * @param viewModel
//      */
//     protected void bindViewModel(ActivityViewModel viewModel) {
//         this.viewModel = viewModel;
//     }
// 
//     @Override
//     protected void onStart() {
//         super.onStart();
//         checkViewModel();
//         viewModel.onStart();
//     }
// 
//     @Override
//     protected void onResume() {
//         super.onResume();
//         checkViewModel();
//         viewModel.onResume();
//     }
// 
//     @Override
//     protected void onPause() {
//         super.onPause();
//         checkViewModel();
//         viewModel.onPause();
//     }
// 
//     @Override
//     protected void onStop() {
//         super.onStop();
//         checkViewModel();
//         viewModel.onStop();
//     }
// 
//     private void checkViewModel() {
//         if (viewModel == null) {
//             throw new IllegalStateException("Before resuming activity, bindViewModel must be called.");
//         }
//     }
// }
// 
// Path: app/src/main/java/io/github/kobakei/anago/entity/User.java
// public class User {
//     public long id;
//     public String login;
//     public String avatar_url;
//     public String email;
//     public String bio;
//     public int followers;
//     public int following;
// }
// 
// Path: app/src/main/java/io/github/kobakei/anago/usecase/GetUserUseCase.java
// public class GetUserUseCase {
// 
//     private final UserRepository userRepository;
// 
//     @Inject
//     public GetUserUseCase(UserRepository userRepository) {
//         this.userRepository = userRepository;
//     }
// 
//     public Single<User> run(String name) {
//         return userRepository.get(name);
//     }
// }
// 
// Path: app/src/main/java/io/github/kobakei/anago/viewmodel/base/ActivityViewModel.java
// public abstract class ActivityViewModel {
// 
//     private final BaseActivity activity;
// 
//     public ActivityViewModel(BaseActivity activity) {
//         this.activity = activity;
//     }
// 
//     @NonNull
//     public BaseActivity getActivity() {
//         if (activity != null) {
//             return activity;
//         }
//         throw new IllegalStateException("No view attached");
//     }
// 
//     @NonNull
//     public Context getContext() {
//         if (activity != null) {
//             return activity;
//         }
//         throw new IllegalStateException("No view attached");
//     }
// 
//     @NonNull
//     public final <T> LifecycleTransformer<T> bindToLifecycle() {
//         if (activity != null) {
//             return activity.bindToLifecycle();
//         }
//         throw new IllegalStateException("No view attached");
//     }
// 
//     public abstract void onStart();
// 
//     public abstract void onResume();
// 
//     public abstract void onPause();
// 
//     public abstract void onStop();
// }


import android.databinding.ObservableBoolean;
import android.databinding.ObservableField;
import android.view.View;
import org.greenrobot.eventbus.EventBus;
import javax.inject.Inject;
import io.github.kobakei.anago.activity.BaseActivity;
import io.github.kobakei.anago.entity.User;
import io.github.kobakei.anago.usecase.GetUserUseCase;
import io.github.kobakei.anago.viewmodel.base.ActivityViewModel;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import timber.log.Timber;
    @Inject
    public UserActivityViewModel(BaseActivity activity, GetUserUseCase getUserUseCase, EventBus eventBus) {
        super(activity);
        this.getUserUseCase = getUserUseCase;
        this.eventBus = eventBus;

        this.user = new ObservableField<>();
        this.isConnecting = new ObservableBoolean(true);
    }

    public void setParams(String name) {
        this.paramName = name;
    }

    @Override
    public void onStart() {

    }

    @Override
    public void onResume() {
        getUserUseCase.run(paramName)
                .compose(bindToLifecycle().forSingle())
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(user1 -> {
                    user.set(user1);
                    eventBus.post(new RefreshUserEvent(user.get()));
                    isConnecting.set(false);
                }, throwable -> {
// Path: app/src/main/java/io/github/kobakei/anago/activity/BaseActivity.java
// public class BaseActivity extends RxAppCompatActivity {
// 
//     private ActivityViewModel viewModel;
// 
//     protected ActivityComponent getInjector() {
//         AnagoApplication application = (AnagoApplication) getApplication();
//         return application.getInjector().activityComponent(new ActivityModule(this));
//     }
// 
//     /**
//      * ビューモデルをこのアクティビティにバインドする
//      * アクティビティのライフサイクルイベント発生時に、ビューモデルの対応するメソッドが呼ばれるようになります
//      * @param viewModel
//      */
//     protected void bindViewModel(ActivityViewModel viewModel) {
//         this.viewModel = viewModel;
//     }
// 
//     @Override
//     protected void onStart() {
//         super.onStart();
//         checkViewModel();
//         viewModel.onStart();
//     }
// 
//     @Override
//     protected void onResume() {
//         super.onResume();
//         checkViewModel();
//         viewModel.onResume();
//     }
// 
//     @Override
//     protected void onPause() {
//         super.onPause();
//         checkViewModel();
//         viewModel.onPause();
//     }
// 
//     @Override
//     protected void onStop() {
//         super.onStop();
//         checkViewModel();
//         viewModel.onStop();
//     }
// 
//     private void checkViewModel() {
//         if (viewModel == null) {
//             throw new IllegalStateException("Before resuming activity, bindViewModel must be called.");
//         }
//     }
// }
// 
// Path: app/src/main/java/io/github/kobakei/anago/entity/User.java
// public class User {
//     public long id;
//     public String login;
//     public String avatar_url;
//     public String email;
//     public String bio;
//     public int followers;
//     public int following;
// }
// 
// Path: app/src/main/java/io/github/kobakei/anago/usecase/GetUserUseCase.java
// public class GetUserUseCase {
// 
//     private final UserRepository userRepository;
// 
//     @Inject
//     public GetUserUseCase(UserRepository userRepository) {
//         this.userRepository = userRepository;
//     }
// 
//     public Single<User> run(String name) {
//         return userRepository.get(name);
//     }
// }
// 
// Path: app/src/main/java/io/github/kobakei/anago/viewmodel/base/ActivityViewModel.java
// public abstract class ActivityViewModel {
// 
//     private final BaseActivity activity;
// 
//     public ActivityViewModel(BaseActivity activity) {
//         this.activity = activity;
//     }
// 
//     @NonNull
//     public BaseActivity getActivity() {
//         if (activity != null) {
//             return activity;
//         }
//         throw new IllegalStateException("No view attached");
//     }
// 
//     @NonNull
//     public Context getContext() {
//         if (activity != null) {
//             return activity;
//         }
//         throw new IllegalStateException("No view attached");
//     }
// 
//     @NonNull
//     public final <T> LifecycleTransformer<T> bindToLifecycle() {
//         if (activity != null) {
//             return activity.bindToLifecycle();
//         }
//         throw new IllegalStateException("No view attached");
//     }
// 
//     public abstract void onStart();
// 
//     public abstract void onResume();
// 
//     public abstract void onPause();
// 
//     public abstract void onStop();
// }


// Path: app/src/main/java/io/github/kobakei/anago/viewmodel/UserActivityViewModel.java
import android.databinding.ObservableBoolean;
import android.databinding.ObservableField;
import android.view.View;
import org.greenrobot.eventbus.EventBus;
import javax.inject.Inject;
import io.github.kobakei.anago.activity.BaseActivity;
import io.github.kobakei.anago.entity.User;
import io.github.kobakei.anago.usecase.GetUserUseCase;
import io.github.kobakei.anago.viewmodel.base.ActivityViewModel;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import timber.log.Timber;

    @Inject
    public UserActivityViewModel(BaseActivity activity, GetUserUseCase getUserUseCase, EventBus eventBus) {
        super(activity);
        this.getUserUseCase = getUserUseCase;
        this.eventBus = eventBus;

        this.user = new ObservableField<>();
        this.isConnecting = new ObservableBoolean(true);
    }

    public void setParams(String name) {
        this.paramName = name;
    }

    @Override
    public void onStart() {

    }

    @Override
    public void onResume() {
        getUserUseCase.run(paramName)
                .compose(bindToLifecycle().forSingle())
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(user1 -> {
                    user.set(user1);
                    eventBus.post(new RefreshUserEvent(user.get()));
                    isConnecting.set(false);
                }, throwable -> {
                    Timber.e(throwable);