package ru.ltst.u2020mvp.ui.gallery; import android.annotation.TargetApi; import android.app.Activity; import android.graphics.Color; import android.os.Build; import android.os.Bundle; import android.view.Window; import java.util.List; import javax.inject.Inject; 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.mvp.BaseView; import ru.ltst.u2020mvp.base.navigation.activity.ActivityScreen; import ru.ltst.u2020mvp.base.navigation.activity.ActivityScreenSwitcher; import ru.ltst.u2020mvp.base.navigation.activity.NoParamsActivityScreen; import ru.ltst.u2020mvp.data.GalleryDatabase; import ru.ltst.u2020mvp.data.api.model.request.Section; import ru.ltst.u2020mvp.data.api.model.response.Image; import ru.ltst.u2020mvp.data.rx.EndlessObserver; import ru.ltst.u2020mvp.ui.gallery.view.GalleryView; import ru.ltst.u2020mvp.ui.image.ImgurImageActivity; import rx.Subscription; import timber.log.Timber; public class GalleryActivity extends BaseActivity implements HasComponent<GalleryComponent> { @Inject Presenter presenter; private GalleryComponent galleryComponent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTitle(R.string.gallery_activity_title); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // Remove the status bar color. The DrawerLayout is responsible for drawing it from now on. setStatusBarColor(getWindow()); } } @Override protected void onCreateComponent(U2020Component u2020Component) { galleryComponent = DaggerGalleryComponent.builder(). u2020Component(u2020Component). galleryModule(new GalleryModule()).build(); galleryComponent.inject(this); } @Override protected void onDestroy() { galleryComponent = null; super.onDestroy(); } @Override protected int viewId() { return R.id.gallery_view; } @Override protected int layoutId() { return R.layout.gallery_view; } @Override protected BasePresenter<? extends BaseView> presenter() { return presenter; } @Override public GalleryComponent getComponent() { return galleryComponent; } @TargetApi(Build.VERSION_CODES.LOLLIPOP) private static void setStatusBarColor(Window window) { window.setStatusBarColor(Color.TRANSPARENT); } @GalleryScope public static class Presenter extends BasePresenter<GalleryView> { private final GalleryDatabase galleryDatabase; private final ActivityScreenSwitcher screenSwitcher; private Section section = Section.HOT; private Subscription request; private Subscription clicks; @Inject public Presenter(GalleryDatabase galleryDatabase, ActivityScreenSwitcher screenSwitcher) { this.galleryDatabase = galleryDatabase; this.screenSwitcher = screenSwitcher; } @Override protected void onLoad() { super.onLoad(); getView().showLoading(); request = galleryDatabase.loadGallery(section, new EndlessObserver<List<Image>>() { @Override public void onNext(List<Image> images) { if (images.size() == 0) { getView().showEmpty(); } else { getView().getAdapter().replaceWith(images); getView().showContent(); } } @Override public void onError(Throwable throwable) { Timber.e(throwable, "Load gallery error"); getView().showError(throwable); } }); clicks = getView().observeImageClicks().subscribe( image -> { Timber.d("Image clicked with id = %s", image.first.id); ActivityScreen screen = new ImgurImageActivity.Screen(image.first.id); screen.attachTransitionView(image.second); screenSwitcher.open(screen); } ); } @Override protected void onDestroy() { super.onDestroy(); request.unsubscribe(); clicks.unsubscribe(); } public void refresh() { // TODO: implement refreshing final GalleryView view = getView(); if (view != null) { view.setRefreshed(); } } } public static class Screen extends NoParamsActivityScreen { @Override protected Class<? extends Activity> activityClass() { return GalleryActivity.class; } } }