From a52e33b628c5d7d9ddd17c0b786382465d285917 Mon Sep 17 00:00:00 2001 From: inorichi Date: Sun, 18 Oct 2015 01:22:05 +0200 Subject: [PATCH] Use EventBus --- .../presenter/MangaChaptersPresenter.java | 27 ++++++++++----- .../presenter/MangaDetailPresenter.java | 23 +++++++++---- .../presenter/MangaInfoPresenter.java | 33 +++++++++++++------ .../ui/activity/MangaDetailActivity.java | 27 +++++---------- .../ui/fragment/MangaChaptersFragment.java | 28 ++-------------- .../ui/fragment/MangaInfoFragment.java | 16 ++------- 6 files changed, 70 insertions(+), 84 deletions(-) diff --git a/app/src/main/java/eu/kanade/mangafeed/presenter/MangaChaptersPresenter.java b/app/src/main/java/eu/kanade/mangafeed/presenter/MangaChaptersPresenter.java index 292a0fa2de..35d8658657 100644 --- a/app/src/main/java/eu/kanade/mangafeed/presenter/MangaChaptersPresenter.java +++ b/app/src/main/java/eu/kanade/mangafeed/presenter/MangaChaptersPresenter.java @@ -16,6 +16,7 @@ public class MangaChaptersPresenter extends BasePresenter @Inject DatabaseHelper db; @Inject SourceManager sourceManager; + private Manga manga; private Subscription chaptersSubscription; private Subscription onlineChaptersSubscription; private boolean doingRequest = false; @@ -23,26 +24,34 @@ public class MangaChaptersPresenter extends BasePresenter @Override protected void onTakeView(MangaChaptersFragment view) { super.onTakeView(view); - - getChapters(view.getMangaId()); + registerForStickyEvents(); } - public void refreshChapters(Manga manga) { + @Override + protected void onDropView() { + unregisterForEvents(); + super.onDropView(); + } + + public void onEventMainThread(Manga manga) { + this.manga = manga; + getChapters(); + } + + public void refreshChapters() { if (manga != null && !doingRequest) getChaptersFromSource(manga); } - private void getChapters(long manga_id) { + public void getChapters() { if (chaptersSubscription != null) - remove(chaptersSubscription); + return; - chaptersSubscription = db.getChapters(manga_id) + add(chaptersSubscription = db.getChapters(manga.id) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .compose(deliverLatestCache()) - .subscribe(this.split(MangaChaptersFragment::onNextChapters)); - - add(chaptersSubscription); + .subscribe(this.split(MangaChaptersFragment::onNextChapters))); } public void getChaptersFromSource(Manga manga) { diff --git a/app/src/main/java/eu/kanade/mangafeed/presenter/MangaDetailPresenter.java b/app/src/main/java/eu/kanade/mangafeed/presenter/MangaDetailPresenter.java index 5e03cf3f22..b2dd690ef0 100644 --- a/app/src/main/java/eu/kanade/mangafeed/presenter/MangaDetailPresenter.java +++ b/app/src/main/java/eu/kanade/mangafeed/presenter/MangaDetailPresenter.java @@ -2,7 +2,9 @@ package eu.kanade.mangafeed.presenter; import javax.inject.Inject; +import de.greenrobot.event.EventBus; import eu.kanade.mangafeed.data.helpers.DatabaseHelper; +import eu.kanade.mangafeed.data.models.Manga; import eu.kanade.mangafeed.ui.activity.MangaDetailActivity; import rx.Observable; import rx.Subscription; @@ -13,25 +15,32 @@ public class MangaDetailPresenter extends BasePresenter { @Inject DatabaseHelper db; + private Manga manga; private Subscription mangaSubscription; @Override protected void onTakeView(MangaDetailActivity view) { super.onTakeView(view); + if (manga != null) + view.setManga(manga); - if (mangaSubscription == null) - initializeManga(view); + getManga(view); } - private void initializeManga(MangaDetailActivity view) { - mangaSubscription = db.getManga(view.getMangaId()) + private void getManga(MangaDetailActivity view) { + if (mangaSubscription != null) + return; + + add(mangaSubscription = db.getManga(view.getMangaId()) .subscribeOn(Schedulers.io()) .take(1) .flatMap(Observable::from) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(view::onMangaNext); - - add(mangaSubscription); + .subscribe(manga -> { + this.manga = manga; + view.setManga(manga); + EventBus.getDefault().postSticky(manga); + })); } } diff --git a/app/src/main/java/eu/kanade/mangafeed/presenter/MangaInfoPresenter.java b/app/src/main/java/eu/kanade/mangafeed/presenter/MangaInfoPresenter.java index 7913925da9..b6e07e3d32 100644 --- a/app/src/main/java/eu/kanade/mangafeed/presenter/MangaInfoPresenter.java +++ b/app/src/main/java/eu/kanade/mangafeed/presenter/MangaInfoPresenter.java @@ -3,34 +3,47 @@ package eu.kanade.mangafeed.presenter; import javax.inject.Inject; import eu.kanade.mangafeed.data.helpers.DatabaseHelper; +import eu.kanade.mangafeed.data.models.Manga; import eu.kanade.mangafeed.ui.fragment.MangaInfoFragment; import rx.Observable; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; public class MangaInfoPresenter extends BasePresenter { @Inject DatabaseHelper db; + private Manga manga; private Subscription mangaInfoSubscription; @Override protected void onTakeView(MangaInfoFragment view) { super.onTakeView(view); - - getMangaInfo(view); + registerForStickyEvents(); } - private void getMangaInfo(MangaInfoFragment view) { - if (mangaInfoSubscription != null) - remove(mangaInfoSubscription); + @Override + protected void onDropView() { + unregisterForEvents(); + super.onDropView(); + } - mangaInfoSubscription = db.getManga(view.getMangaId()) - .observeOn(AndroidSchedulers.mainThread()) + public void onEventMainThread(Manga manga) { + this.manga = manga; + getMangaInfo(); + } + + private void getMangaInfo() { + if (mangaInfoSubscription != null) + return; + + add(mangaInfoSubscription = db.getManga(manga.id) + .subscribeOn(Schedulers.io()) .take(1) .flatMap(Observable::from) - .subscribe(view::setMangaInfo); - - add(mangaInfoSubscription); + .observeOn(AndroidSchedulers.mainThread()) + .compose(deliverLatestCache()) + .subscribe(split(MangaInfoFragment::setMangaInfo))); } } diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/activity/MangaDetailActivity.java b/app/src/main/java/eu/kanade/mangafeed/ui/activity/MangaDetailActivity.java index 458c766012..53dd5f1690 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/activity/MangaDetailActivity.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/activity/MangaDetailActivity.java @@ -23,27 +23,20 @@ import nucleus.factory.RequiresPresenter; @RequiresPresenter(MangaDetailPresenter.class) public class MangaDetailActivity extends BaseActivity { - @Bind(R.id.toolbar) - Toolbar toolbar; - - @Bind(R.id.tabs) - TabLayout tabs; - - @Bind(R.id.viewpager) - ViewPager view_pager; + @Bind(R.id.toolbar) Toolbar toolbar; + @Bind(R.id.tabs) TabLayout tabs; + @Bind(R.id.viewpager) ViewPager view_pager; private MangaDetailAdapter adapter; private long manga_id; - private boolean is_online = false; + private boolean is_online; public final static String MANGA_ID = "manga_id"; - public final static String MANGA_TITLE = "manga_title"; public final static String MANGA_ONLINE = "manga_online"; public static Intent newIntent(Context context, Manga manga) { Intent intent = new Intent(context, MangaDetailActivity.class); intent.putExtra(MANGA_ID, manga.id); - intent.putExtra(MANGA_TITLE, manga.title); return intent; } @@ -58,9 +51,6 @@ public class MangaDetailActivity extends BaseActivity { Intent intent = getIntent(); - String manga_title = intent.getStringExtra(MANGA_TITLE); - setToolbarTitle(manga_title); - manga_id = intent.getLongExtra(MANGA_ID, -1); is_online = intent.getBooleanExtra(MANGA_ONLINE, false); @@ -90,9 +80,8 @@ public class MangaDetailActivity extends BaseActivity { return manga_id; } - public void onMangaNext(Manga manga) { - ((MangaChaptersFragment) adapter.getItem(MangaDetailAdapter.CHAPTERS_FRAGMENT)) - .onMangaNext(manga); + public void setManga(Manga manga) { + setToolbarTitle(manga.title); } class MangaDetailAdapter extends FragmentPagerAdapter { @@ -124,9 +113,9 @@ public class MangaDetailActivity extends BaseActivity { public Fragment getItem(int position) { switch (position) { case INFO_FRAGMENT: - return MangaInfoFragment.newInstance(manga_id); + return MangaInfoFragment.newInstance(); case CHAPTERS_FRAGMENT: - return MangaChaptersFragment.newInstance(manga_id); + return MangaChaptersFragment.newInstance(); default: return null; diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/fragment/MangaChaptersFragment.java b/app/src/main/java/eu/kanade/mangafeed/ui/fragment/MangaChaptersFragment.java index 233174f7d9..a48cdeb112 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/fragment/MangaChaptersFragment.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/fragment/MangaChaptersFragment.java @@ -17,12 +17,9 @@ import butterknife.Bind; import butterknife.ButterKnife; import eu.kanade.mangafeed.R; import eu.kanade.mangafeed.data.models.Chapter; -import eu.kanade.mangafeed.data.models.Manga; import eu.kanade.mangafeed.presenter.MangaChaptersPresenter; -import eu.kanade.mangafeed.ui.activity.MangaDetailActivity; import eu.kanade.mangafeed.ui.adapter.ChapterListHolder; import nucleus.factory.RequiresPresenter; -import timber.log.Timber; import uk.co.ribot.easyadapter.EasyRecyclerAdapter; @RequiresPresenter(MangaChaptersPresenter.class) @@ -30,24 +27,16 @@ public class MangaChaptersFragment extends BaseFragment @Bind(R.id.chapter_list) RecyclerView chapters; - private long manga_id; - private Manga manga; private EasyRecyclerAdapter adapter; - public static Fragment newInstance(long manga_id) { - MangaChaptersFragment fragment = new MangaChaptersFragment(); - Bundle args = new Bundle(); - args.putLong(MangaDetailActivity.MANGA_ID, manga_id); - fragment.setArguments(args); - return fragment; + public static Fragment newInstance() { + return new MangaChaptersFragment(); } @Override public void onCreate(Bundle savedState) { super.onCreate(savedState); setHasOptionsMenu(true); - - manga_id = getArguments().getLong(MangaDetailActivity.MANGA_ID); } @Override @@ -73,7 +62,7 @@ public class MangaChaptersFragment extends BaseFragment public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_refresh: - getPresenter().refreshChapters(manga); + getPresenter().refreshChapters(); break; } return super.onOptionsItemSelected(item); @@ -84,19 +73,8 @@ public class MangaChaptersFragment extends BaseFragment chapters.setAdapter(adapter); } - public long getMangaId() { - return manga_id; - } - - public Manga getManga() { - return manga; - } - public void onNextChapters(List chapters) { adapter.setItems(chapters); } - public void onMangaNext(Manga manga) { - this.manga = manga; - } } diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/fragment/MangaInfoFragment.java b/app/src/main/java/eu/kanade/mangafeed/ui/fragment/MangaInfoFragment.java index c8eef2b178..30c8aa62aa 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/fragment/MangaInfoFragment.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/fragment/MangaInfoFragment.java @@ -15,7 +15,6 @@ import butterknife.ButterKnife; import eu.kanade.mangafeed.R; import eu.kanade.mangafeed.data.models.Manga; import eu.kanade.mangafeed.presenter.MangaInfoPresenter; -import eu.kanade.mangafeed.ui.activity.MangaDetailActivity; import nucleus.factory.RequiresPresenter; @RequiresPresenter(MangaInfoPresenter.class) @@ -29,20 +28,13 @@ public class MangaInfoFragment extends BaseFragment { @Bind(R.id.manga_summary) TextView mDescription; @Bind(R.id.manga_cover) ImageView mCover; - private long manga_id; - - public static MangaInfoFragment newInstance(long manga_id) { - MangaInfoFragment fragment = new MangaInfoFragment(); - Bundle args = new Bundle(); - args.putLong(MangaDetailActivity.MANGA_ID, manga_id); - fragment.setArguments(args); - return fragment; + public static MangaInfoFragment newInstance() { + return new MangaInfoFragment(); } @Override public void onCreate(Bundle savedState) { super.onCreate(savedState); - manga_id = getArguments().getLong(MangaDetailActivity.MANGA_ID); } @Override @@ -55,10 +47,6 @@ public class MangaInfoFragment extends BaseFragment { return view; } - public long getMangaId() { - return manga_id; - } - public void setMangaInfo(Manga manga) { mArtist.setText(manga.artist); mAuthor.setText(manga.author);