package ru.ltst.u2020mvp.ui.image; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.view.View; import javax.inject.Inject; import butterknife.Bind; import butterknife.ButterKnife; import ru.ltst.u2020mvp.R; import ru.ltst.u2020mvp.U2020Component; import ru.ltst.u2020mvp.base.HasComponent; import ru.ltst.u2020mvp.base.mvp.BaseActivity; import ru.ltst.u2020mvp.base.mvp.BasePresenter; import ru.ltst.u2020mvp.base.navigation.activity.ActivityScreen; import ru.ltst.u2020mvp.data.api.model.response.Image; import rx.Observable; import rx.Subscription; import timber.log.Timber; public class ImgurImageActivity extends BaseActivity implements HasComponent<ImgurImageComponent> { @Inject Presenter presenter; @Bind(R.id.imgur_image_view) ImgurImageView view; private String imageId; private ImgurImageComponent imgurImageComponent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ButterKnife.bind(this); ActivityScreen.setTransitionView(this.view); } @Override protected void onCreateComponent(U2020Component u2020Component) { imgurImageComponent = DaggerImgurImageComponent.builder(). u2020Component(u2020Component). imgurImageModule(new ImgurImageModule(imageId)).build(); imgurImageComponent.inject(this); } @Override protected void onExtractParams(@NonNull Bundle params) { super.onExtractParams(params); imageId = getIntent().getStringExtra(Screen.BF_IMAGE_ID); } @Override protected void onDestroy() { imgurImageComponent = null; super.onDestroy(); } @Override protected int viewId() { return R.id.imgur_image_view; } @Override protected int layoutId() { return R.layout.imgur_image_view; } @Override protected BasePresenter<? extends View> presenter() { return presenter; } @Override public ImgurImageComponent getComponent() { return imgurImageComponent; } @ImgurImageScope public static class Presenter extends BasePresenter<ImgurImageView> { private final Observable<Image> imageObservable; private Subscription subscription; @Inject public Presenter(Observable<Image> imageObservable) { this.imageObservable = imageObservable; } @Override protected void onLoad() { super.onLoad(); Timber.d("Loading image"); getView().showLoading(); subscription = imageObservable. subscribe( image -> { Timber.d("Image loaded with id %s", image.toString()); getView().bindTo(image); getView().showContent(); }, throwable -> { Timber.e(throwable, "Image loading error"); } ); } @Override protected void onDestroy() { super.onDestroy(); subscription.unsubscribe(); } } public static class Screen extends ActivityScreen { private static final String BF_IMAGE_ID = "ImgurImageActivity.imageId"; private final String imageId; public Screen(String imageId) { this.imageId = imageId; } @Override protected void configureIntent(@NonNull Intent intent) { intent.putExtra(BF_IMAGE_ID, imageId); } @Override protected Class<? extends Activity> activityClass() { return ImgurImageActivity.class; } } }