Allow to refresh data from MAL and show total chapters. Create nomedia file for default downloads folder on new installations.

This commit is contained in:
inorichi
2016-01-01 15:34:25 +01:00
parent c830c037f7
commit 4d9cd6cb6e
8 changed files with 88 additions and 32 deletions
@@ -10,18 +10,14 @@ import java.util.List;
import eu.davidea.flexibleadapter.FlexibleAdapter;
import eu.kanade.mangafeed.R;
import eu.kanade.mangafeed.data.database.models.Chapter;
import eu.kanade.mangafeed.ui.base.adapter.FlexibleViewHolder;
import eu.kanade.mangafeed.ui.base.fragment.BaseFragment;
public class ChaptersAdapter extends FlexibleAdapter<ChaptersHolder, Chapter> {
private BaseFragment fragment;
public FlexibleViewHolder.OnListItemClickListener clickListener;
private ChaptersFragment fragment;
public ChaptersAdapter(BaseFragment fragment) {
public ChaptersAdapter(ChaptersFragment fragment) {
this.fragment = fragment;
mItems = new ArrayList<>();
clickListener = (FlexibleViewHolder.OnListItemClickListener) fragment;
setHasStableIds(true);
}
@@ -31,7 +27,7 @@ public class ChaptersAdapter extends FlexibleAdapter<ChaptersHolder, Chapter> {
@Override
public ChaptersHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(fragment.getActivity()).inflate(R.layout.item_chapter, parent, false);
return new ChaptersHolder(v, this, clickListener);
return new ChaptersHolder(v, this, fragment);
}
@Override
@@ -53,7 +49,7 @@ public class ChaptersAdapter extends FlexibleAdapter<ChaptersHolder, Chapter> {
notifyDataSetChanged();
}
public ChaptersFragment getChaptersFragment() {
return (ChaptersFragment) fragment;
public ChaptersFragment getFragment() {
return fragment;
}
}
@@ -81,7 +81,7 @@ public class ChaptersHolder extends FlexibleViewHolder {
private void showPopupMenu(View view) {
// Create a PopupMenu, giving it the clicked view for an anchor
PopupMenu popup = new PopupMenu(adapter.getChaptersFragment().getActivity(), view);
PopupMenu popup = new PopupMenu(adapter.getFragment().getActivity(), view);
// Inflate our menu resource into the PopupMenu's Menu
popup.getMenuInflater().inflate(R.menu.chapter_single, popup.getMenu());
@@ -92,13 +92,13 @@ public class ChaptersHolder extends FlexibleViewHolder {
switch (menuItem.getItemId()) {
case R.id.action_mark_as_read:
return adapter.getChaptersFragment().onMarkAsRead(chapter);
return adapter.getFragment().onMarkAsRead(chapter);
case R.id.action_mark_as_unread:
return adapter.getChaptersFragment().onMarkAsUnread(chapter);
return adapter.getFragment().onMarkAsUnread(chapter);
case R.id.action_download:
return adapter.getChaptersFragment().onDownload(chapter);
return adapter.getFragment().onDownload(chapter);
case R.id.action_delete:
return adapter.getChaptersFragment().onDelete(chapter);
return adapter.getFragment().onDelete(chapter);
}
return false;
});
@@ -2,6 +2,7 @@ package eu.kanade.mangafeed.ui.manga.myanimelist;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -28,6 +29,7 @@ public class MyAnimeListFragment extends BaseRxFragment<MyAnimeListPresenter> {
@Bind(R.id.myanimelist_chapters) TextView chapters;
@Bind(R.id.myanimelist_score) TextView score;
@Bind(R.id.myanimelist_status) TextView status;
@Bind(R.id.swipe_refresh) SwipeRefreshLayout swipeRefresh;
private MyAnimeListDialogFragment dialog;
@@ -43,18 +45,31 @@ public class MyAnimeListFragment extends BaseRxFragment<MyAnimeListPresenter> {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_myanimelist, container, false);
ButterKnife.bind(this, view);
swipeRefresh.setEnabled(false);
swipeRefresh.setOnRefreshListener(() -> getPresenter().refresh());
return view;
}
public void setMangaSync(MangaSync mangaSync) {
swipeRefresh.setEnabled(mangaSync != null);
if (mangaSync != null) {
title.setText(mangaSync.title);
chapters.setText(mangaSync.last_chapter_read + "");
chapters.setText(mangaSync.last_chapter_read + "/" +
(mangaSync.total_chapters > 0 ? mangaSync.total_chapters : "-"));
score.setText(mangaSync.score == 0 ? "-" : decimalFormat.format(mangaSync.score));
status.setText(getPresenter().myAnimeList.getStatus(mangaSync.status));
}
}
public void onRefreshDone() {
swipeRefresh.setRefreshing(false);
}
public void onRefreshError() {
swipeRefresh.setRefreshing(false);
}
public void setSearchResults(List<MangaSync> results) {
findSearchFragmentIfNeeded();
@@ -33,6 +33,7 @@ public class MyAnimeListPresenter extends BasePresenter<MyAnimeListFragment> {
private static final int GET_MANGA_SYNC = 1;
private static final int GET_SEARCH_RESULTS = 2;
private static final int REFRESH = 3;
@Override
protected void onCreate(Bundle savedState) {
@@ -62,11 +63,29 @@ public class MyAnimeListPresenter extends BasePresenter<MyAnimeListFragment> {
view.setSearchResultsError();
});
restartableFirst(REFRESH,
() -> myAnimeList.getList()
.flatMap(myList -> {
for (MangaSync myManga : myList) {
if (myManga.remote_id == mangaSync.remote_id) {
mangaSync.copyPersonalFrom(myManga);
return Observable.just(mangaSync);
}
}
return Observable.error(new Exception("Could not find manga"));
})
.flatMap(myManga -> db.insertMangaSync(myManga).createObservable())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()),
(view, result) -> view.onRefreshDone(),
(view, error) -> view.onRefreshError());
}
private void onProcessRestart() {
stop(GET_MANGA_SYNC);
stop(GET_SEARCH_RESULTS);
stop(REFRESH);
}
@Override
@@ -157,4 +176,10 @@ public class MyAnimeListPresenter extends BasePresenter<MyAnimeListFragment> {
mangaSync.last_chapter_read = chapterNumber;
updateRemote();
}
public void refresh() {
if (mangaSync != null) {
start(REFRESH);
}
}
}