diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueGridHolder.java b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueGridHolder.java index b45fe51e6d..5690061a07 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueGridHolder.java +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueGridHolder.java @@ -4,6 +4,8 @@ import android.view.View; import android.widget.ImageView; import android.widget.TextView; +import com.mikepenz.iconics.view.IconicsImageView; + import butterknife.Bind; import butterknife.ButterKnife; import eu.kanade.tachiyomi.R; @@ -13,7 +15,7 @@ public class CatalogueGridHolder extends CatalogueHolder { @Bind(R.id.title) TextView title; @Bind(R.id.thumbnail) ImageView thumbnail; - @Bind(R.id.favorite_sticker) ImageView favoriteSticker; + @Bind(R.id.favorite_sticker) IconicsImageView favoriteSticker; public CatalogueGridHolder(View view, CatalogueAdapter adapter, OnListItemClickListener listener) { super(view, adapter, listener); @@ -23,7 +25,10 @@ public class CatalogueGridHolder extends CatalogueHolder { @Override public void onSetValues(Manga manga, CataloguePresenter presenter) { title.setText(manga.title); + // Set visibility of in library icon. favoriteSticker.setVisibility(manga.favorite ? View.VISIBLE : View.GONE); + // Set alpha of thumbnail. + thumbnail.setAlpha(manga.favorite ? 0.3f : 1.0f); setImage(manga, presenter); } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadFragment.java b/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadFragment.java index 68ac1d6ba6..eb6bb4a103 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadFragment.java +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadFragment.java @@ -4,7 +4,15 @@ import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; -import android.view.*; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; + +import java.util.List; + import butterknife.Bind; import butterknife.ButterKnife; import eu.kanade.tachiyomi.R; @@ -14,8 +22,6 @@ import eu.kanade.tachiyomi.ui.base.fragment.BaseRxFragment; import nucleus.factory.RequiresPresenter; import rx.Subscription; -import java.util.List; - @RequiresPresenter(DownloadPresenter.class) public class DownloadFragment extends BaseRxFragment { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadPresenter.java b/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadPresenter.java index df10854a61..b6c19a9502 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadPresenter.java +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadPresenter.java @@ -1,6 +1,12 @@ package eu.kanade.tachiyomi.ui.download; import android.os.Bundle; + +import java.util.HashMap; +import java.util.concurrent.TimeUnit; + +import javax.inject.Inject; + import eu.kanade.tachiyomi.data.download.DownloadManager; import eu.kanade.tachiyomi.data.download.model.Download; import eu.kanade.tachiyomi.data.download.model.DownloadQueue; @@ -12,21 +18,15 @@ import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; import timber.log.Timber; -import javax.inject.Inject; -import java.util.HashMap; -import java.util.concurrent.TimeUnit; - public class DownloadPresenter extends BasePresenter { + public final static int GET_DOWNLOAD_QUEUE = 1; @Inject DownloadManager downloadManager; - private DownloadQueue downloadQueue; private Subscription statusSubscription; private Subscription pageProgressSubscription; private HashMap progressSubscriptions; - public final static int GET_DOWNLOAD_QUEUE = 1; - @Override protected void onCreate(Bundle savedState) { super.onCreate(savedState); diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.java b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.java index aa18afba14..79d77a2ef0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.java +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.java @@ -64,7 +64,6 @@ public class LibraryCategoryAdapter extends FlexibleAdapter implements ActionMode.Callback { - @Bind(R.id.view_pager) ViewPager viewPager; - private TabLayout tabs; - private AppBarLayout appBar; + + private static final int REQUEST_IMAGE_OPEN = 101; protected LibraryAdapter adapter; - private ActionMode actionMode; + @Bind(R.id.view_pager) ViewPager viewPager; @State int activeCategory; + @State String query = ""; + private TabLayout tabs; + + private AppBarLayout appBar; + + private ActionMode actionMode; + + private Manga selectedCoverManga; + public static LibraryFragment newInstance() { return new LibraryFragment(); } @@ -187,6 +201,11 @@ public class LibraryFragment extends BaseRxFragment actionMode.setTitle(getString(R.string.label_selected, count)); } + public void setVisibilityOfCoverEdit(int count) { + // If count = 1 display edit button + actionMode.getMenu().findItem(R.id.action_edit_cover).setVisible((count == 1)); + } + @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { mode.getMenuInflater().inflate(R.menu.library_selection, menu); @@ -202,6 +221,11 @@ public class LibraryFragment extends BaseRxFragment @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) { + case R.id.action_edit_cover: + changeSelectedCover(getPresenter().selectedMangas); + rebuildAdapter(); + destroyActionModeIfNeeded(); + return true; case R.id.action_move_to_category: moveMangasToCategories(getPresenter().selectedMangas); return true; @@ -213,6 +237,15 @@ public class LibraryFragment extends BaseRxFragment return false; } + /** + * TODO workaround. Covers won't refresh any other way. + */ + public void rebuildAdapter() { + adapter = new LibraryAdapter(getChildFragmentManager()); + viewPager.setAdapter(adapter); + tabs.setupWithViewPager(viewPager); + } + @Override public void onDestroyActionMode(ActionMode mode) { adapter.setSelectionMode(FlexibleAdapter.MODE_SINGLE); @@ -226,6 +259,53 @@ public class LibraryFragment extends BaseRxFragment } } + private void changeSelectedCover(List mangas) { + if (mangas.size() == 1) { + selectedCoverManga = mangas.get(0); + if (selectedCoverManga.favorite) { + + Intent intent = new Intent(); + intent.setType("image/*"); + intent.setAction(Intent.ACTION_GET_CONTENT); + startActivityForResult(Intent.createChooser(intent, + getString(R.string.file_select_cover)), REQUEST_IMAGE_OPEN); + } else { + ToastUtil.showShort(getContext(), R.string.notification_first_add_to_library); + } + + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode == Activity.RESULT_OK) { + switch (requestCode) { + case (REQUEST_IMAGE_OPEN): + if (selectedCoverManga != null) { + // Get the file's content URI from the incoming Intent + Uri selectedImageUri = data.getData(); + + // Convert to absolute path to prevent FileNotFoundException + String result = IOHandler.getFilePath(selectedImageUri, + getContext().getContentResolver(), getContext()); + + // Get file from filepath + File picture = new File(result != null ? result : ""); + + try { + // Update cover to selected file, show error if something went wrong + if (!getPresenter().editCoverWithLocalFile(picture, selectedCoverManga)) + ToastUtil.showShort(getContext(), R.string.notification_manga_update_failed); + + } catch (IOException e) { + e.printStackTrace(); + } + } + break; + } + } + } + private void moveMangasToCategories(List mangas) { new MaterialDialog.Builder(getActivity()) .title(R.string.action_move_category) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHolder.java b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHolder.java index d115758ee4..ddc104a012 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHolder.java +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHolder.java @@ -50,4 +50,6 @@ public class LibraryHolder extends FlexibleViewHolder { } } + + } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.java b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.java index 98fc64d6fb..3d51127e52 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.java +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.java @@ -5,6 +5,8 @@ import android.util.Pair; import org.greenrobot.eventbus.EventBus; +import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -26,18 +28,15 @@ import rx.subjects.BehaviorSubject; public class LibraryPresenter extends BasePresenter { + private static final int GET_LIBRARY = 1; + protected List categories; + protected List selectedMangas; + protected BehaviorSubject searchSubject; @Inject DatabaseHelper db; @Inject PreferencesHelper preferences; @Inject CoverCache coverCache; @Inject SourceManager sourceManager; - protected List categories; - protected List selectedMangas; - - protected BehaviorSubject searchSubject; - - private static final int GET_LIBRARY = 1; - @Override protected void onCreate(Bundle savedState) { super.onCreate(savedState); @@ -141,4 +140,18 @@ public class LibraryPresenter extends BasePresenter { db.setMangaCategories(mc, mangas); } + + /** + * Update cover with local file + */ + public boolean editCoverWithLocalFile(File file, Manga manga) throws IOException { + if (!manga.initialized) + return false; + + if (manga.favorite) { + coverCache.copyToLocalCache(manga.thumbnail_url, file); + return true; + } + return false; + } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersFragment.java b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersFragment.java index 82dff1b829..336c23777d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersFragment.java +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersFragment.java @@ -8,12 +8,22 @@ import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.view.ActionMode; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; -import android.view.*; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.ImageView; + +import com.afollestad.materialdialogs.MaterialDialog; + +import java.util.ArrayList; +import java.util.List; + import butterknife.Bind; import butterknife.ButterKnife; -import com.afollestad.materialdialogs.MaterialDialog; import eu.kanade.tachiyomi.R; import eu.kanade.tachiyomi.data.database.models.Chapter; import eu.kanade.tachiyomi.data.database.models.Manga; @@ -31,9 +41,6 @@ import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; -import java.util.ArrayList; -import java.util.List; - @RequiresPresenter(ChaptersPresenter.class) public class ChaptersFragment extends BaseRxFragment implements ActionMode.Callback, FlexibleViewHolder.OnListItemClickListener { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersHolder.java b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersHolder.java index 60669fc51f..883cc79cf7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersHolder.java +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersHolder.java @@ -7,6 +7,12 @@ import android.view.View; import android.widget.PopupMenu; import android.widget.RelativeLayout; import android.widget.TextView; + +import java.text.DateFormat; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.util.Date; + import butterknife.Bind; import butterknife.ButterKnife; import eu.kanade.tachiyomi.R; @@ -16,30 +22,21 @@ import eu.kanade.tachiyomi.data.download.model.Download; import eu.kanade.tachiyomi.ui.base.adapter.FlexibleViewHolder; import rx.Observable; -import java.text.DateFormat; -import java.text.DecimalFormat; -import java.text.DecimalFormatSymbols; -import java.util.Date; - public class ChaptersHolder extends FlexibleViewHolder { + private final ChaptersAdapter adapter; + private final int readColor; + private final int unreadColor; + private final DecimalFormat decimalFormat; + private final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT); @Bind(R.id.chapter_title) TextView title; @Bind(R.id.download_text) TextView downloadText; @Bind(R.id.chapter_menu) RelativeLayout chapterMenu; @Bind(R.id.chapter_pages) TextView pages; @Bind(R.id.chapter_date) TextView date; - private Context context; - - private final ChaptersAdapter adapter; private Chapter item; - private final int readColor; - private final int unreadColor; - - private final DecimalFormat decimalFormat; - private final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT); - public ChaptersHolder(View view, ChaptersAdapter adapter, OnListItemClickListener listener) { super(view, adapter, listener); this.adapter = adapter; diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoFragment.java b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoFragment.java index b4df1d8d74..29b7f6b23e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoFragment.java +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoFragment.java @@ -1,8 +1,5 @@ package eu.kanade.tachiyomi.ui.manga.info; -import android.app.Activity; -import android.content.Intent; -import android.net.Uri; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.v4.content.ContextCompat; @@ -10,32 +7,22 @@ import android.support.v4.widget.SwipeRefreshLayout; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.load.model.LazyHeaders; -import com.mikepenz.google_material_typeface_library.GoogleMaterial; -import com.mikepenz.iconics.IconicsDrawable; - -import java.io.File; -import java.io.IOException; import butterknife.Bind; import butterknife.ButterKnife; import eu.kanade.tachiyomi.R; import eu.kanade.tachiyomi.data.cache.CoverCache; import eu.kanade.tachiyomi.data.database.models.Manga; -import eu.kanade.tachiyomi.data.io.IOHandler; import eu.kanade.tachiyomi.data.source.base.Source; import eu.kanade.tachiyomi.ui.base.fragment.BaseRxFragment; -import eu.kanade.tachiyomi.util.ToastUtil; import nucleus.factory.RequiresPresenter; @RequiresPresenter(MangaInfoPresenter.class) public class MangaInfoFragment extends BaseRxFragment { - - private static final int REQUEST_IMAGE_OPEN = 101; @Bind(R.id.swipe_refresh) SwipeRefreshLayout swipeRefresh; @Bind(R.id.manga_artist) TextView artist; @Bind(R.id.manga_author) TextView author; @@ -45,8 +32,8 @@ public class MangaInfoFragment extends BaseRxFragment { @Bind(R.id.manga_source) TextView source; @Bind(R.id.manga_summary) TextView description; @Bind(R.id.manga_cover) ImageView cover; - @Bind(R.id.action_favorite) Button favoriteBtn; - @Bind(R.id.fab_edit) FloatingActionButton fabEdit; + @Bind(R.id.backdrop) ImageView backdrop; + @Bind(R.id.fab_favorite) FloatingActionButton fabFavorite; public static MangaInfoFragment newInstance() { return new MangaInfoFragment(); @@ -65,10 +52,7 @@ public class MangaInfoFragment extends BaseRxFragment { View view = inflater.inflate(R.layout.fragment_manga_info, container, false); ButterKnife.bind(this, view); - // Set listener. - fabEdit.setOnClickListener(v -> selectImage()); - - favoriteBtn.setOnClickListener(v -> getPresenter().toggleFavorite()); + fabFavorite.setOnClickListener(v -> getPresenter().toggleFavorite()); swipeRefresh.setOnRefreshListener(this::fetchMangaFromSource); @@ -101,7 +85,7 @@ public class MangaInfoFragment extends BaseRxFragment { status.setText(manga.getStatus(getActivity())); description.setText(manga.description); - setFavoriteText(manga.favorite); + setFavoriteDrawable(manga.favorite); CoverCache coverCache = getPresenter().coverCache; LazyHeaders headers = getPresenter().source.getGlideHeaders(); @@ -112,14 +96,23 @@ public class MangaInfoFragment extends BaseRxFragment { coverCache.loadFromNetwork(cover, manga.thumbnail_url, headers); } } + if (manga.thumbnail_url != null && backdrop.getDrawable() == null) { + if (manga.favorite) { + coverCache.saveOrLoadFromCache(backdrop, manga.thumbnail_url, headers); + } else { + coverCache.loadFromNetwork(backdrop, manga.thumbnail_url, headers); + } + } } public void setChapterCount(int count) { chapterCount.setText(String.valueOf(count)); } - private void setFavoriteText(boolean isFavorite) { - favoriteBtn.setText(!isFavorite ? R.string.add_to_library : R.string.remove_from_library); + private void setFavoriteDrawable(boolean isFavorite) { + fabFavorite.setImageDrawable(ContextCompat.getDrawable(getContext(), isFavorite ? + R.drawable.ic_bookmark_white_24dp : + R.drawable.ic_bookmark_border_white_24dp)); } private void fetchMangaFromSource() { @@ -127,43 +120,6 @@ public class MangaInfoFragment extends BaseRxFragment { getPresenter().fetchMangaFromSource(); } - private void selectImage() { - if (getPresenter().getManga().favorite) { - - Intent intent = new Intent(); - intent.setType("image/*"); - intent.setAction(Intent.ACTION_GET_CONTENT); - startActivityForResult(Intent.createChooser(intent, - getString(R.string.file_select_cover)), REQUEST_IMAGE_OPEN); - } else { - ToastUtil.showShort(getContext(), R.string.notification_first_add_to_library); - } - - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_IMAGE_OPEN) { - // Get the file's content URI from the incoming Intent - Uri selectedImageUri = data.getData(); - - // Convert to absolute path to prevent FileNotFoundException - String result = IOHandler.getFilePath(selectedImageUri, - getContext().getContentResolver(), getContext()); - - // Get file from filepath - File picture = new File(result != null ? result : ""); - - try { - // Update cover to selected file, show error if something went wrong - if (!getPresenter().editCoverWithLocalFile(picture, cover)) - ToastUtil.showShort(getContext(), R.string.notification_manga_update_failed); - - } catch (IOException e) { - e.printStackTrace(); - } - } - } public void onFetchMangaDone() { setRefreshing(false); diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoPresenter.java b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoPresenter.java index 82495c1820..b51cd6d410 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoPresenter.java +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoPresenter.java @@ -1,14 +1,10 @@ package eu.kanade.tachiyomi.ui.manga.info; import android.os.Bundle; -import android.widget.ImageView; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; -import java.io.File; -import java.io.IOException; - import javax.inject.Inject; import eu.kanade.tachiyomi.data.cache.CoverCache; @@ -135,20 +131,7 @@ public class MangaInfoPresenter extends BasePresenter { refreshManga(); } - /** - * Update cover with local file - */ - public boolean editCoverWithLocalFile(File file, ImageView imageView) throws IOException { - if (!manga.initialized) - return false; - if (manga.favorite) { - coverCache.copyToLocalCache(manga.thumbnail_url, file); - coverCache.saveOrLoadFromCache(imageView, manga.thumbnail_url, source.getGlideHeaders()); - return true; - } - return false; - } private void onMangaFavoriteChange(boolean isFavorite) { if (isFavorite) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recent/RecentChaptersFragment.java b/app/src/main/java/eu/kanade/tachiyomi/ui/recent/RecentChaptersFragment.java index be3e8b5d24..ff332773bb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/recent/RecentChaptersFragment.java +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recent/RecentChaptersFragment.java @@ -65,7 +65,6 @@ public class RecentChaptersFragment extends BaseRxFragment + android:clickable="true" + android:paddingLeft="?android:listPreferredItemPaddingLeft" + android:paddingRight="?android:listPreferredItemPaddingRight"> @@ -42,23 +42,23 @@ android:layout_width="match_parent" android:layout_height="?android:listPreferredItemHeightSmall" android:layout_below="@id/divider1" - android:paddingLeft="?android:listPreferredItemPaddingLeft" - android:paddingRight="?android:listPreferredItemPaddingRight" android:background="?attr/selectableItemBackground" - android:clickable="true"> + android:clickable="true" + android:paddingLeft="?android:listPreferredItemPaddingLeft" + android:paddingRight="?android:listPreferredItemPaddingRight"> + android:text="Status"/> @@ -75,10 +75,10 @@ android:layout_width="match_parent" android:layout_height="?android:listPreferredItemHeightSmall" android:layout_below="@id/divider2" - android:paddingLeft="?android:listPreferredItemPaddingLeft" - android:paddingRight="?android:listPreferredItemPaddingRight" android:background="?attr/selectableItemBackground" - android:clickable="true"> + android:clickable="true" + android:paddingLeft="?android:listPreferredItemPaddingLeft" + android:paddingRight="?android:listPreferredItemPaddingRight"> @@ -108,10 +108,10 @@ android:layout_width="match_parent" android:layout_height="?android:listPreferredItemHeightSmall" android:layout_below="@id/divider3" - android:paddingLeft="?android:listPreferredItemPaddingLeft" - android:paddingRight="?android:listPreferredItemPaddingRight" android:background="?attr/selectableItemBackground" - android:clickable="true"> + android:clickable="true" + android:paddingLeft="?android:listPreferredItemPaddingLeft" + android:paddingRight="?android:listPreferredItemPaddingRight"> diff --git a/app/src/main/res/layout/fragment_manga_info.xml b/app/src/main/res/layout/fragment_manga_info.xml index 3c490ab599..23c7c4095d 100644 --- a/app/src/main/res/layout/fragment_manga_info.xml +++ b/app/src/main/res/layout/fragment_manga_info.xml @@ -1,280 +1,252 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context="eu.kanade.tachiyomi.ui.catalogue.CatalogueFragment"> - - + android:layout_height="match_parent"> - + android:layout_height="match_parent" + android:orientation="vertical"> - + android:layout_height="0dp" + android:layout_weight="0.4"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -