Use same activity for manga details on catalague and library. Move some methos to view.

This commit is contained in:
inorichi 2015-10-17 17:09:33 +02:00
parent c768b4de3b
commit 161a4b17a6
7 changed files with 32 additions and 141 deletions

View file

@ -41,15 +41,6 @@
android:name="android.support.PARENT_ACTIVITY" android:name="android.support.PARENT_ACTIVITY"
android:value="eu.kanade.mangafeed.ui.activity.MainActivity" /> android:value="eu.kanade.mangafeed.ui.activity.MainActivity" />
</activity> </activity>
<activity
android:name=".ui.activity.MangaCatalogueActivity"
android:label="@string/title_activity_manga_catalogue"
android:parentActivityName=".ui.activity.CatalogueActivity"
android:theme="@style/AppTheme" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="eu.kanade.mangafeed.ui.activity.CatalogueActivity" />
</activity>
</application> </application>
</manifest> </manifest>

View file

@ -8,7 +8,6 @@ import dagger.Component;
import eu.kanade.mangafeed.data.DataModule; import eu.kanade.mangafeed.data.DataModule;
import eu.kanade.mangafeed.presenter.CataloguePresenter; import eu.kanade.mangafeed.presenter.CataloguePresenter;
import eu.kanade.mangafeed.presenter.LibraryPresenter; import eu.kanade.mangafeed.presenter.LibraryPresenter;
import eu.kanade.mangafeed.presenter.MangaCataloguePresenter;
import eu.kanade.mangafeed.presenter.MangaChaptersPresenter; import eu.kanade.mangafeed.presenter.MangaChaptersPresenter;
import eu.kanade.mangafeed.presenter.MangaDetailPresenter; import eu.kanade.mangafeed.presenter.MangaDetailPresenter;
import eu.kanade.mangafeed.presenter.MangaInfoPresenter; import eu.kanade.mangafeed.presenter.MangaInfoPresenter;
@ -27,7 +26,6 @@ public interface AppComponent {
void inject(MangaDetailPresenter mangaDetailPresenter); void inject(MangaDetailPresenter mangaDetailPresenter);
void inject(SourcePresenter sourcePresenter); void inject(SourcePresenter sourcePresenter);
void inject(CataloguePresenter cataloguePresenter); void inject(CataloguePresenter cataloguePresenter);
void inject(MangaCataloguePresenter mangaCataloguePresenter);
void inject(MangaInfoPresenter mangaInfoPresenter); void inject(MangaInfoPresenter mangaInfoPresenter);
void inject(MangaChaptersPresenter mangaChaptersPresenter); void inject(MangaChaptersPresenter mangaChaptersPresenter);

View file

@ -1,11 +1,7 @@
package eu.kanade.mangafeed.presenter; package eu.kanade.mangafeed.presenter;
import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -13,13 +9,11 @@ import java.util.concurrent.TimeUnit;
import javax.inject.Inject; import javax.inject.Inject;
import de.greenrobot.event.EventBus;
import eu.kanade.mangafeed.data.helpers.DatabaseHelper; import eu.kanade.mangafeed.data.helpers.DatabaseHelper;
import eu.kanade.mangafeed.data.helpers.SourceManager; import eu.kanade.mangafeed.data.helpers.SourceManager;
import eu.kanade.mangafeed.data.models.Manga; import eu.kanade.mangafeed.data.models.Manga;
import eu.kanade.mangafeed.sources.Source; import eu.kanade.mangafeed.sources.Source;
import eu.kanade.mangafeed.ui.activity.CatalogueActivity; import eu.kanade.mangafeed.ui.activity.CatalogueActivity;
import eu.kanade.mangafeed.ui.activity.MangaCatalogueActivity;
import nucleus.presenter.RxPresenter; import nucleus.presenter.RxPresenter;
import rx.Observable; import rx.Observable;
import rx.Subscription; import rx.Subscription;
@ -135,16 +129,7 @@ public class CataloguePresenter extends RxPresenter<CatalogueActivity> {
.onBackpressureBuffer() .onBackpressureBuffer()
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.compose(deliverReplay()) .compose(deliverReplay())
.subscribe(this.split((view, manga) -> { .subscribe(this.split(CatalogueActivity::updateImage));
// Get manga index in the adapter
int index = getMangaIndex(manga);
// Get the image view associated with the manga.
// If it's null (not visible in the screen) there's no need to update the image.
ImageView imageView = view.getImageView(index);
if (imageView != null) {
updateImage(imageView, manga.thumbnail_url);
}
}));
add(mMangaDetailFetchSubscription); add(mMangaDetailFetchSubscription);
} }
@ -188,13 +173,6 @@ public class CataloguePresenter extends RxPresenter<CatalogueActivity> {
return localManga; return localManga;
} }
public void onMangaClick(int position) {
Intent intent = new Intent(getView().getActivity(), MangaCatalogueActivity.class);
Manga selectedManga = getView().getAdapter().getItem(position);
EventBus.getDefault().postSticky(selectedManga);
getView().getActivity().startActivity(intent);
}
public void onQueryTextChange(String query) { public void onQueryTextChange(String query) {
if (mSearchViewPublishSubject != null) if (mSearchViewPublishSubject != null)
mSearchViewPublishSubject.onNext(Observable.just(query)); mSearchViewPublishSubject.onNext(Observable.just(query));
@ -235,20 +213,4 @@ public class CataloguePresenter extends RxPresenter<CatalogueActivity> {
mCurrentPage = page; mCurrentPage = page;
} }
private int getMangaIndex(Manga manga) {
for (int i = 0; i < getView().getAdapter().getCount(); i++) {
if (manga.id == getView().getAdapter().getItem(i).id) {
return i;
}
}
return -1;
}
private void updateImage(ImageView imageView, String thumbnail) {
Glide.with(getView().getActivity())
.load(thumbnail)
.centerCrop()
.into(imageView);
}
} }

View file

@ -1,7 +0,0 @@
package eu.kanade.mangafeed.presenter;
import eu.kanade.mangafeed.ui.activity.MangaCatalogueActivity;
public class MangaCataloguePresenter extends BasePresenter<MangaCatalogueActivity> {
}

View file

@ -1,26 +1,7 @@
package eu.kanade.mangafeed.presenter; 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.activity.MangaDetailActivity; import eu.kanade.mangafeed.ui.activity.MangaDetailActivity;
import eu.kanade.mangafeed.view.MangaDetailView;
public class MangaDetailPresenter extends BasePresenter<MangaDetailActivity> { public class MangaDetailPresenter extends BasePresenter<MangaDetailActivity> {
private MangaDetailView view;
@Inject
DatabaseHelper db;
public void onEventMainThread(Manga manga) {
view.loadManga(manga);
initializeChapters(manga);
}
public void initializeChapters(Manga manga) {
db.getChapters(manga)
.subscribe(view::setChapters);
}
} }

View file

@ -11,10 +11,13 @@ import android.widget.GridView;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import com.bumptech.glide.Glide;
import java.util.List; import java.util.List;
import butterknife.Bind; import butterknife.Bind;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnItemClick;
import eu.kanade.mangafeed.R; import eu.kanade.mangafeed.R;
import eu.kanade.mangafeed.data.models.Manga; import eu.kanade.mangafeed.data.models.Manga;
import eu.kanade.mangafeed.presenter.CataloguePresenter; import eu.kanade.mangafeed.presenter.CataloguePresenter;
@ -58,7 +61,6 @@ public class CatalogueActivity extends BaseActivity<CataloguePresenter> {
setupToolbar(toolbar); setupToolbar(toolbar);
initializeAdapter(); initializeAdapter();
initializeClickListener();
initializeScrollListener(); initializeScrollListener();
} }
@ -95,11 +97,12 @@ public class CatalogueActivity extends BaseActivity<CataloguePresenter> {
manga_list.setAdapter(adapter); manga_list.setAdapter(adapter);
} }
public void initializeClickListener() { @OnItemClick(R.id.gridView)
manga_list.setOnItemClickListener( public void onMangaClick(int position) {
(parent, view, position, id) -> Manga selectedManga = adapter.getItem(position);
getPresenter().onMangaClick(position)
); Intent intent = MangaDetailActivity.newIntent(this, selectedManga);
startActivity(intent);
} }
public void initializeScrollListener() { public void initializeScrollListener() {
@ -139,7 +142,20 @@ public class CatalogueActivity extends BaseActivity<CataloguePresenter> {
progress_grid.setVisibility(ProgressBar.GONE); progress_grid.setVisibility(ProgressBar.GONE);
} }
public ImageView getImageView(int position) { public void onMangasNext(List<Manga> newMangas) {
adapter.addItems(newMangas);
}
private int getMangaIndex(Manga manga) {
for (int i = 0; i < adapter.getCount(); i++) {
if (manga.id == adapter.getItem(i).id) {
return i;
}
}
return -1;
}
private ImageView getImageView(int position) {
View v = manga_list.getChildAt(position - View v = manga_list.getChildAt(position -
manga_list.getFirstVisiblePosition()); manga_list.getFirstVisiblePosition());
@ -149,7 +165,13 @@ public class CatalogueActivity extends BaseActivity<CataloguePresenter> {
return (ImageView) v.findViewById(R.id.catalogue_thumbnail); return (ImageView) v.findViewById(R.id.catalogue_thumbnail);
} }
public void onMangasNext(List<Manga> newMangas) { public void updateImage(Manga manga) {
adapter.addItems(newMangas); ImageView imageView = getImageView(getMangaIndex(manga));
if (imageView != null) {
Glide.with(this)
.load(manga.thumbnail_url)
.centerCrop()
.into(imageView);
}
} }
} }

View file

@ -1,56 +0,0 @@
package eu.kanade.mangafeed.ui.activity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import butterknife.Bind;
import butterknife.ButterKnife;
import eu.kanade.mangafeed.R;
import eu.kanade.mangafeed.data.models.Manga;
import eu.kanade.mangafeed.presenter.MangaCataloguePresenter;
import nucleus.factory.RequiresPresenter;
@RequiresPresenter(MangaCataloguePresenter.class)
public class MangaCatalogueActivity extends BaseActivity<MangaCataloguePresenter> {
@Bind(R.id.toolbar) Toolbar toolbar;
@Bind(R.id.manga_artist) TextView mArtist;
@Bind(R.id.manga_author) TextView mAuthor;
@Bind(R.id.manga_chapters) TextView mChapters;
@Bind(R.id.manga_genres) TextView mGenres;
@Bind(R.id.manga_status) TextView mStatus;
@Bind(R.id.manga_summary) TextView mDescription;
@Bind(R.id.manga_cover) ImageView mCover;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manga_catalogue);
ButterKnife.bind(this);
setupToolbar(toolbar);
}
public void setMangaInfo(Manga manga) {
mArtist.setText(manga.artist);
mAuthor.setText(manga.author);
mChapters.setText("0"); // TODO
mGenres.setText(manga.genre);
mStatus.setText("Ongoing"); //TODO
mDescription.setText(manga.description);
Glide.with(getActivity())
.load(manga.thumbnail_url)
.diskCacheStrategy(DiskCacheStrategy.RESULT)
.centerCrop()
.into(mCover);
}
}