Almost showing a chapter reader
This commit is contained in:
@@ -8,7 +8,6 @@ import eu.kanade.mangafeed.App;
|
||||
import nucleus.factory.PresenterFactory;
|
||||
import nucleus.presenter.Presenter;
|
||||
import nucleus.view.NucleusAppCompatActivity;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class BaseActivity<P extends Presenter> extends NucleusAppCompatActivity<P> {
|
||||
|
||||
@@ -17,11 +16,7 @@ public class BaseActivity<P extends Presenter> extends NucleusAppCompatActivity<
|
||||
final PresenterFactory<P> superFactory = super.getPresenterFactory();
|
||||
setPresenterFactory(() -> {
|
||||
P presenter = superFactory.createPresenter();
|
||||
try {
|
||||
App.getComponentReflection(getActivity()).inject(presenter);
|
||||
} catch(Exception e) {
|
||||
Timber.w("No injection for " + presenter.getClass().toString());
|
||||
}
|
||||
App.getComponentReflection(getActivity()).inject(presenter);
|
||||
return presenter;
|
||||
});
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
@@ -13,13 +13,13 @@ import com.mikepenz.materialdrawer.model.PrimaryDrawerItem;
|
||||
import butterknife.Bind;
|
||||
import butterknife.ButterKnife;
|
||||
import eu.kanade.mangafeed.R;
|
||||
import eu.kanade.mangafeed.presenter.BasePresenter;
|
||||
import eu.kanade.mangafeed.presenter.MainPresenter;
|
||||
import eu.kanade.mangafeed.ui.fragment.LibraryFragment;
|
||||
import eu.kanade.mangafeed.ui.fragment.SourceFragment;
|
||||
import nucleus.factory.RequiresPresenter;
|
||||
|
||||
@RequiresPresenter(BasePresenter.class)
|
||||
public class MainActivity extends BaseActivity<BasePresenter> {
|
||||
@RequiresPresenter(MainPresenter.class)
|
||||
public class MainActivity extends BaseActivity<MainPresenter> {
|
||||
|
||||
@Bind(R.id.toolbar)
|
||||
Toolbar toolbar;
|
||||
|
||||
@@ -26,7 +26,7 @@ public class MangaDetailActivity extends BaseActivity<MangaDetailPresenter> {
|
||||
|
||||
@Bind(R.id.toolbar) Toolbar toolbar;
|
||||
@Bind(R.id.tabs) TabLayout tabs;
|
||||
@Bind(R.id.viewpager) ViewPager view_pager;
|
||||
@Bind(R.id.view_pager) ViewPager view_pager;
|
||||
|
||||
private MangaDetailAdapter adapter;
|
||||
private long manga_id;
|
||||
@@ -80,8 +80,7 @@ public class MangaDetailActivity extends BaseActivity<MangaDetailPresenter> {
|
||||
private void setupViewPager() {
|
||||
adapter = new MangaDetailAdapter(
|
||||
getSupportFragmentManager(),
|
||||
getActivity(),
|
||||
manga_id);
|
||||
getActivity());
|
||||
|
||||
view_pager.setAdapter(adapter);
|
||||
tabs.setupWithViewPager(view_pager);
|
||||
@@ -107,19 +106,17 @@ public class MangaDetailActivity extends BaseActivity<MangaDetailPresenter> {
|
||||
final int PAGE_COUNT = 2;
|
||||
private String tab_titles[];
|
||||
private Context context;
|
||||
private long manga_id;
|
||||
|
||||
final static int INFO_FRAGMENT = 0;
|
||||
final static int CHAPTERS_FRAGMENT = 1;
|
||||
|
||||
public MangaDetailAdapter(FragmentManager fm, Context context, long manga_id) {
|
||||
public MangaDetailAdapter(FragmentManager fm, Context context) {
|
||||
super(fm);
|
||||
this.context = context;
|
||||
tab_titles = new String[]{
|
||||
context.getString(R.string.manga_detail_tab),
|
||||
context.getString(R.string.manga_chapters_tab)
|
||||
};
|
||||
this.manga_id = manga_id;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
package eu.kanade.mangafeed.ui.activity;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.view.ViewPager;
|
||||
|
||||
import butterknife.Bind;
|
||||
import butterknife.ButterKnife;
|
||||
import eu.kanade.mangafeed.R;
|
||||
import eu.kanade.mangafeed.presenter.ViewerPresenter;
|
||||
import eu.kanade.mangafeed.ui.adapter.ViewerPageAdapter;
|
||||
import nucleus.factory.RequiresPresenter;
|
||||
|
||||
@RequiresPresenter(ViewerPresenter.class)
|
||||
public class ViewerActivity extends BaseActivity<ViewerPresenter> {
|
||||
|
||||
@Bind(R.id.view_pager) ViewPager viewPager;
|
||||
|
||||
private ViewerPageAdapter adapter;
|
||||
|
||||
public static Intent newInstance(Context context) {
|
||||
return new Intent(context, ViewerActivity.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedState) {
|
||||
super.onCreate(savedState);
|
||||
setContentView(R.layout.activity_viewer);
|
||||
ButterKnife.bind(this);
|
||||
|
||||
createAdapter();
|
||||
}
|
||||
|
||||
private void createAdapter() {
|
||||
adapter = new ViewerPageAdapter(getSupportFragmentManager());
|
||||
viewPager.setAdapter(adapter);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -20,12 +20,29 @@ public class ChapterListHolder extends ItemViewHolder<Chapter> {
|
||||
@ViewId(R.id.chapter_download_image)
|
||||
ImageView download_icon;
|
||||
|
||||
View view;
|
||||
|
||||
public ChapterListHolder(View view) {
|
||||
super(view);
|
||||
this.view = view;
|
||||
}
|
||||
|
||||
public void onSetValues(Chapter chapter, PositionInfo positionInfo) {
|
||||
title.setText(chapter.name);
|
||||
download_icon.setImageResource(R.drawable.ic_file_download_black_48dp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSetListeners() {
|
||||
view.setOnClickListener(view -> {
|
||||
ChapterListener listener = getListener(ChapterListener.class);
|
||||
if (listener != null) {
|
||||
listener.onRowClicked(getItem());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public interface ChapterListener {
|
||||
void onRowClicked(Chapter chapter);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
package eu.kanade.mangafeed.ui.adapter;
|
||||
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentStatePagerAdapter;
|
||||
import android.util.SparseArray;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
public abstract class SmartFragmentStatePagerAdapter extends FragmentStatePagerAdapter {
|
||||
// Sparse array to keep track of registered fragments in memory
|
||||
private SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();
|
||||
|
||||
public SmartFragmentStatePagerAdapter(FragmentManager fragmentManager) {
|
||||
super(fragmentManager);
|
||||
}
|
||||
|
||||
// Register the fragment when the item is instantiated
|
||||
@Override
|
||||
public Object instantiateItem(ViewGroup container, int position) {
|
||||
Fragment fragment = (Fragment) super.instantiateItem(container, position);
|
||||
registeredFragments.put(position, fragment);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
// Unregister when the item is inactive
|
||||
@Override
|
||||
public void destroyItem(ViewGroup container, int position, Object object) {
|
||||
registeredFragments.remove(position);
|
||||
super.destroyItem(container, position, object);
|
||||
}
|
||||
|
||||
// Returns the fragment for the position (if instantiated)
|
||||
public Fragment getRegisteredFragment(int position) {
|
||||
return registeredFragments.get(position);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package eu.kanade.mangafeed.ui.adapter;
|
||||
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import eu.kanade.mangafeed.ui.fragment.ViewerPageFragment;
|
||||
|
||||
public class ViewerPageAdapter extends SmartFragmentStatePagerAdapter {
|
||||
|
||||
private List<String> imageUrls;
|
||||
|
||||
public ViewerPageAdapter(FragmentManager fragmentManager) {
|
||||
super(fragmentManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
if (imageUrls != null)
|
||||
return imageUrls.size();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fragment getItem(int position) {
|
||||
return ViewerPageFragment.newInstance(imageUrls.get(position), position);
|
||||
}
|
||||
|
||||
public List<String> getImageUrls() {
|
||||
return imageUrls;
|
||||
}
|
||||
|
||||
public void setImageUrls(List<String> imageUrls) {
|
||||
this.imageUrls = imageUrls;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package eu.kanade.mangafeed.ui.fragment;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
@@ -20,6 +21,7 @@ import eu.kanade.mangafeed.R;
|
||||
import eu.kanade.mangafeed.data.models.Chapter;
|
||||
import eu.kanade.mangafeed.presenter.MangaChaptersPresenter;
|
||||
import eu.kanade.mangafeed.ui.activity.MangaDetailActivity;
|
||||
import eu.kanade.mangafeed.ui.activity.ViewerActivity;
|
||||
import eu.kanade.mangafeed.ui.adapter.ChapterListHolder;
|
||||
import nucleus.factory.RequiresPresenter;
|
||||
import uk.co.ribot.easyadapter.EasyRecyclerAdapter;
|
||||
@@ -73,7 +75,13 @@ public class MangaChaptersFragment extends BaseFragment<MangaChaptersPresenter>
|
||||
}
|
||||
|
||||
private void createAdapter() {
|
||||
adapter = new EasyRecyclerAdapter<>(getActivity(), ChapterListHolder.class);
|
||||
ChapterListHolder.ChapterListener listener = chapter -> {
|
||||
getPresenter().onChapterClicked(chapter);
|
||||
Intent intent = ViewerActivity.newInstance(getActivity());
|
||||
startActivity(intent);
|
||||
};
|
||||
|
||||
adapter = new EasyRecyclerAdapter<>(getActivity(), ChapterListHolder.class, listener);
|
||||
chapters.setAdapter(adapter);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
package eu.kanade.mangafeed.ui.fragment;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
|
||||
|
||||
import eu.kanade.mangafeed.R;
|
||||
import eu.kanade.mangafeed.util.PageFileTarget;
|
||||
|
||||
public class ViewerPageFragment extends Fragment {
|
||||
public static final String URL_ARGUMENT_KEY = "UrlArgumentKey";
|
||||
|
||||
private SubsamplingScaleImageView mPageImageView;
|
||||
|
||||
private String mUrl;
|
||||
|
||||
public static ViewerPageFragment newInstance(String url, int position) {
|
||||
ViewerPageFragment newInstance = new ViewerPageFragment();
|
||||
Bundle arguments = new Bundle();
|
||||
arguments.putString(URL_ARGUMENT_KEY, url);
|
||||
newInstance.setArguments(arguments);
|
||||
return newInstance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
Bundle arguments = getArguments();
|
||||
if (arguments != null) {
|
||||
if (arguments.containsKey(URL_ARGUMENT_KEY)) {
|
||||
mUrl = arguments.getString(URL_ARGUMENT_KEY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
mPageImageView = (SubsamplingScaleImageView)inflater.inflate(R.layout.fragment_page, container, false);
|
||||
mPageImageView.setVisibility(View.INVISIBLE);
|
||||
mPageImageView.setDoubleTapZoomStyle(SubsamplingScaleImageView.ZOOM_FOCUS_FIXED);
|
||||
mPageImageView.setPanLimit(SubsamplingScaleImageView.PAN_LIMIT_INSIDE);
|
||||
mPageImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_INSIDE);
|
||||
mPageImageView.setOnImageEventListener(new SubsamplingScaleImageView.OnImageEventListener() {
|
||||
@Override
|
||||
public void onReady() {
|
||||
mPageImageView.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onImageLoaded() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPreviewLoadError(Exception e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onImageLoadError(Exception e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTileLoadError(Exception e) {
|
||||
}
|
||||
});
|
||||
|
||||
return mPageImageView;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
||||
Glide.with(getActivity())
|
||||
.load(mUrl)
|
||||
.downloadOnly(new PageFileTarget(mPageImageView));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user