Browse Source

Merge pull request #143 from NoodleMage/fab_improvement

Moved edit to cover select and update manga info view
inorichi 9 years ago
parent
commit
1cd77a97a7
54 changed files with 436 additions and 392 deletions
  1. 6 1
      app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueGridHolder.java
  2. 9 3
      app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadFragment.java
  3. 7 7
      app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadPresenter.java
  4. 0 1
      app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.java
  5. 8 2
      app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryFragment.java
  6. 84 4
      app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryFragment.java
  7. 2 0
      app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHolder.java
  8. 20 7
      app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.java
  9. 12 5
      app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersFragment.java
  10. 11 14
      app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersHolder.java
  11. 15 59
      app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoFragment.java
  12. 1 18
      app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoPresenter.java
  13. 0 1
      app/src/main/java/eu/kanade/tachiyomi/ui/recent/RecentChaptersFragment.java
  14. 3 0
      app/src/main/java/eu/kanade/tachiyomi/widget/AutofitRecyclerView.java
  15. BIN
      app/src/main/res/drawable-hdpi/ic_action_favorite.png
  16. BIN
      app/src/main/res/drawable-hdpi/ic_action_favorite_blue.png
  17. BIN
      app/src/main/res/drawable-hdpi/ic_action_favorite_border.png
  18. BIN
      app/src/main/res/drawable-hdpi/ic_bookmark_border_white_24dp.png
  19. BIN
      app/src/main/res/drawable-hdpi/ic_bookmark_white_24dp.png
  20. BIN
      app/src/main/res/drawable-hdpi/ic_favorite_border_white_24dp.png
  21. BIN
      app/src/main/res/drawable-hdpi/ic_favorite_white_24dp.png
  22. BIN
      app/src/main/res/drawable-mdpi/ic_action_favorite.png
  23. BIN
      app/src/main/res/drawable-mdpi/ic_action_favorite_blue.png
  24. BIN
      app/src/main/res/drawable-mdpi/ic_action_favorite_border.png
  25. BIN
      app/src/main/res/drawable-mdpi/ic_bookmark_border_white_24dp.png
  26. BIN
      app/src/main/res/drawable-mdpi/ic_bookmark_white_24dp.png
  27. BIN
      app/src/main/res/drawable-mdpi/ic_favorite_border_white_24dp.png
  28. BIN
      app/src/main/res/drawable-mdpi/ic_favorite_white_24dp.png
  29. BIN
      app/src/main/res/drawable-xhdpi/ic_action_favorite.png
  30. BIN
      app/src/main/res/drawable-xhdpi/ic_action_favorite_blue.png
  31. BIN
      app/src/main/res/drawable-xhdpi/ic_action_favorite_border.png
  32. BIN
      app/src/main/res/drawable-xhdpi/ic_bookmark_border_white_24dp.png
  33. BIN
      app/src/main/res/drawable-xhdpi/ic_bookmark_white_24dp.png
  34. BIN
      app/src/main/res/drawable-xhdpi/ic_favorite_border_white_24dp.png
  35. BIN
      app/src/main/res/drawable-xhdpi/ic_favorite_white_24dp.png
  36. BIN
      app/src/main/res/drawable-xxhdpi/ic_action_favorite.png
  37. BIN
      app/src/main/res/drawable-xxhdpi/ic_action_favorite_blue.png
  38. BIN
      app/src/main/res/drawable-xxhdpi/ic_action_favorite_border.png
  39. BIN
      app/src/main/res/drawable-xxhdpi/ic_bookmark_border_white_24dp.png
  40. BIN
      app/src/main/res/drawable-xxhdpi/ic_bookmark_white_24dp.png
  41. BIN
      app/src/main/res/drawable-xxhdpi/ic_favorite_border_white_24dp.png
  42. BIN
      app/src/main/res/drawable-xxhdpi/ic_favorite_white_24dp.png
  43. BIN
      app/src/main/res/drawable-xxxhdpi/ic_action_favorite.png
  44. BIN
      app/src/main/res/drawable-xxxhdpi/ic_action_favorite_blue.png
  45. BIN
      app/src/main/res/drawable-xxxhdpi/ic_action_favorite_border.png
  46. BIN
      app/src/main/res/drawable-xxxhdpi/ic_bookmark_border_white_24dp.png
  47. BIN
      app/src/main/res/drawable-xxxhdpi/ic_bookmark_white_24dp.png
  48. BIN
      app/src/main/res/drawable-xxxhdpi/ic_favorite_border_white_24dp.png
  49. BIN
      app/src/main/res/drawable-xxxhdpi/ic_favorite_white_24dp.png
  50. 17 17
      app/src/main/res/layout/card_myanimelist_personal.xml
  51. 203 231
      app/src/main/res/layout/fragment_manga_info.xml
  52. 19 16
      app/src/main/res/layout/item_catalogue_grid.xml
  53. 5 0
      app/src/main/res/menu/library_selection.xml
  54. 14 6
      app/src/main/res/values/strings.xml

+ 6 - 1
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);
     }
 

+ 9 - 3
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<DownloadPresenter> {
 

+ 7 - 7
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<DownloadFragment> {
 
+    public final static int GET_DOWNLOAD_QUEUE = 1;
     @Inject DownloadManager downloadManager;
-
     private DownloadQueue downloadQueue;
     private Subscription statusSubscription;
     private Subscription pageProgressSubscription;
     private HashMap<Download, Subscription> progressSubscriptions;
 
-    public final static int GET_DOWNLOAD_QUEUE = 1;
-
     @Override
     protected void onCreate(Bundle savedState) {
         super.onCreate(savedState);

+ 0 - 1
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.java

@@ -64,7 +64,6 @@ public class LibraryCategoryAdapter extends FlexibleAdapter<LibraryHolder, Manga
         final LibraryPresenter presenter = ((LibraryFragment) fragment.getParentFragment()).getPresenter();
         final Manga manga = getItem(position);
         holder.onSetValues(manga, presenter);
-
         //When user scrolls this bind the correct selection status
         holder.itemView.setActivated(isSelected(position));
     }

+ 8 - 2
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryFragment.java

@@ -47,6 +47,8 @@ public class LibraryCategoryFragment extends BaseFragment
         return fragment;
     }
 
+
+
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
         // Inflate the layout for this fragment
@@ -86,7 +88,10 @@ public class LibraryCategoryFragment extends BaseFragment
                     adapter.updateDataSet();
                 });
 
+
+
         return view;
+
     }
 
     @Override
@@ -165,15 +170,16 @@ public class LibraryCategoryFragment extends BaseFragment
 
     private void toggleSelection(int position) {
         LibraryFragment f = getLibraryFragment();
-
         adapter.toggleSelection(position, false);
         f.getPresenter().setSelection(adapter.getItem(position), adapter.isSelected(position));
 
         int count = f.getPresenter().selectedMangas.size();
         if (count == 0) {
             f.destroyActionModeIfNeeded();
-        } else {
+        }
+        else {
             f.setContextTitle(count);
+            f.setVisibilityOfCoverEdit(count);
             f.invalidateActionMode();
         }
     }

+ 84 - 4
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryFragment.java

@@ -1,6 +1,8 @@
 package eu.kanade.tachiyomi.ui.library;
 
+import android.app.Activity;
 import android.content.Intent;
+import android.net.Uri;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.support.design.widget.AppBarLayout;
@@ -20,6 +22,8 @@ import com.afollestad.materialdialogs.MaterialDialog;
 
 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;
@@ -30,11 +34,13 @@ import eu.davidea.flexibleadapter.FlexibleAdapter;
 import eu.kanade.tachiyomi.R;
 import eu.kanade.tachiyomi.data.database.models.Category;
 import eu.kanade.tachiyomi.data.database.models.Manga;
+import eu.kanade.tachiyomi.data.io.IOHandler;
 import eu.kanade.tachiyomi.data.sync.LibraryUpdateService;
 import eu.kanade.tachiyomi.event.LibraryMangasEvent;
 import eu.kanade.tachiyomi.ui.base.fragment.BaseRxFragment;
 import eu.kanade.tachiyomi.ui.library.category.CategoryActivity;
 import eu.kanade.tachiyomi.ui.main.MainActivity;
+import eu.kanade.tachiyomi.util.ToastUtil;
 import icepick.State;
 import nucleus.factory.RequiresPresenter;
 
@@ -42,17 +48,25 @@ import nucleus.factory.RequiresPresenter;
 public class LibraryFragment extends BaseRxFragment<LibraryPresenter>
         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<LibraryPresenter>
         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<LibraryPresenter>
     @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<LibraryPresenter>
         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<LibraryPresenter>
         }
     }
 
+    private void changeSelectedCover(List<Manga> 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<Manga> mangas) {
         new MaterialDialog.Builder(getActivity())
                 .title(R.string.action_move_category)

+ 2 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHolder.java

@@ -50,4 +50,6 @@ public class LibraryHolder extends FlexibleViewHolder {
         }
     }
 
+
+
 }

+ 20 - 7
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<LibraryFragment> {
 
+    private static final int GET_LIBRARY = 1;
+    protected List<Category> categories;
+    protected List<Manga> selectedMangas;
+    protected BehaviorSubject<String> searchSubject;
     @Inject DatabaseHelper db;
     @Inject PreferencesHelper preferences;
     @Inject CoverCache coverCache;
     @Inject SourceManager sourceManager;
 
-    protected List<Category> categories;
-    protected List<Manga> selectedMangas;
-
-    protected BehaviorSubject<String> 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<LibraryFragment> {
 
         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;
+    }
 }

+ 12 - 5
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<ChaptersPresenter> implements
         ActionMode.Callback, FlexibleViewHolder.OnListItemClickListener {

+ 11 - 14
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;

+ 15 - 59
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<MangaInfoPresenter> {
-
-    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<MangaInfoPresenter> {
     @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<MangaInfoPresenter> {
         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<MangaInfoPresenter> {
         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<MangaInfoPresenter> {
                 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<MangaInfoPresenter> {
         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);

+ 1 - 18
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<MangaInfoFragment> {
         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) {

+ 0 - 1
app/src/main/java/eu/kanade/tachiyomi/ui/recent/RecentChaptersFragment.java

@@ -65,7 +65,6 @@ public class RecentChaptersFragment extends BaseRxFragment<RecentChaptersPresent
 
     @Override
     public void onListItemLongClick(int position) {
-
     }
 
     protected void openChapter(MangaChapter chapter) {

+ 3 - 0
app/src/main/java/eu/kanade/tachiyomi/widget/AutofitRecyclerView.java

@@ -5,6 +5,9 @@ import android.content.res.TypedArray;
 import android.support.v7.widget.GridLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.util.AttributeSet;
+import android.widget.ImageView;
+
+import eu.kanade.tachiyomi.R;
 
 public class AutofitRecyclerView extends RecyclerView {
 

BIN
app/src/main/res/drawable-hdpi/ic_action_favorite.png


BIN
app/src/main/res/drawable-hdpi/ic_action_favorite_blue.png


BIN
app/src/main/res/drawable-hdpi/ic_action_favorite_border.png


BIN
app/src/main/res/drawable-hdpi/ic_bookmark_border_white_24dp.png


BIN
app/src/main/res/drawable-hdpi/ic_bookmark_white_24dp.png


BIN
app/src/main/res/drawable-hdpi/ic_favorite_border_white_24dp.png


BIN
app/src/main/res/drawable-hdpi/ic_favorite_white_24dp.png


BIN
app/src/main/res/drawable-mdpi/ic_action_favorite.png


BIN
app/src/main/res/drawable-mdpi/ic_action_favorite_blue.png


BIN
app/src/main/res/drawable-mdpi/ic_action_favorite_border.png


BIN
app/src/main/res/drawable-mdpi/ic_bookmark_border_white_24dp.png


BIN
app/src/main/res/drawable-mdpi/ic_bookmark_white_24dp.png


BIN
app/src/main/res/drawable-mdpi/ic_favorite_border_white_24dp.png


BIN
app/src/main/res/drawable-mdpi/ic_favorite_white_24dp.png


BIN
app/src/main/res/drawable-xhdpi/ic_action_favorite.png


BIN
app/src/main/res/drawable-xhdpi/ic_action_favorite_blue.png


BIN
app/src/main/res/drawable-xhdpi/ic_action_favorite_border.png


BIN
app/src/main/res/drawable-xhdpi/ic_bookmark_border_white_24dp.png


BIN
app/src/main/res/drawable-xhdpi/ic_bookmark_white_24dp.png


BIN
app/src/main/res/drawable-xhdpi/ic_favorite_border_white_24dp.png


BIN
app/src/main/res/drawable-xhdpi/ic_favorite_white_24dp.png


BIN
app/src/main/res/drawable-xxhdpi/ic_action_favorite.png


BIN
app/src/main/res/drawable-xxhdpi/ic_action_favorite_blue.png


BIN
app/src/main/res/drawable-xxhdpi/ic_action_favorite_border.png


BIN
app/src/main/res/drawable-xxhdpi/ic_bookmark_border_white_24dp.png


BIN
app/src/main/res/drawable-xxhdpi/ic_bookmark_white_24dp.png


BIN
app/src/main/res/drawable-xxhdpi/ic_favorite_border_white_24dp.png


BIN
app/src/main/res/drawable-xxhdpi/ic_favorite_white_24dp.png


BIN
app/src/main/res/drawable-xxxhdpi/ic_action_favorite.png


BIN
app/src/main/res/drawable-xxxhdpi/ic_action_favorite_blue.png


BIN
app/src/main/res/drawable-xxxhdpi/ic_action_favorite_border.png


BIN
app/src/main/res/drawable-xxxhdpi/ic_bookmark_border_white_24dp.png


BIN
app/src/main/res/drawable-xxxhdpi/ic_bookmark_white_24dp.png


BIN
app/src/main/res/drawable-xxxhdpi/ic_favorite_border_white_24dp.png


BIN
app/src/main/res/drawable-xxxhdpi/ic_favorite_white_24dp.png


+ 17 - 17
app/src/main/res/layout/card_myanimelist_personal.xml

@@ -9,10 +9,10 @@
         android:id="@+id/myanimelist_title_layout"
         android:layout_width="match_parent"
         android:layout_height="?android:listPreferredItemHeightSmall"
-        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">
 
         <TextView
             android:layout_width="wrap_content"
@@ -24,8 +24,8 @@
             android:id="@+id/myanimelist_title"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_centerVertical="true"
             android:layout_alignParentRight="true"
+            android:layout_centerVertical="true"
             android:text="Edit..."/>
 
     </RelativeLayout>
@@ -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">
 
         <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_centerVertical="true"
-            android:text="@string/status"/>
+            android:text="Status"/>
 
         <TextView
             android:id="@+id/myanimelist_status"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_centerVertical="true"
             android:layout_alignParentRight="true"
+            android:layout_centerVertical="true"
             tools:text="Reading"/>
 
     </RelativeLayout>
@@ -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">
 
         <TextView
             android:layout_width="wrap_content"
@@ -90,8 +90,8 @@
             android:id="@+id/myanimelist_chapters"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_centerVertical="true"
             android:layout_alignParentRight="true"
+            android:layout_centerVertical="true"
             tools:text="12/24"/>
 
     </RelativeLayout>
@@ -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">
 
         <TextView
             android:layout_width="wrap_content"
@@ -123,8 +123,8 @@
             android:id="@+id/myanimelist_score"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_centerVertical="true"
             android:layout_alignParentRight="true"
+            android:layout_centerVertical="true"
             tools:text="10"/>
 
     </RelativeLayout>

+ 203 - 231
app/src/main/res/layout/fragment_manga_info.xml

@@ -1,280 +1,252 @@
 <?xml version="1.0" encoding="utf-8"?>
 <android.support.design.widget.CoordinatorLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-                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"
-                android:orientation="vertical"
-                tools:context="eu.kanade.tachiyomi.ui.catalogue.CatalogueFragment">
-
+    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">
 
-    <!-- It seems I have to wrap everything in SwipeRefreshLayout because it always take the entire height
-         and the description can't be seen.
-         Maybe with Relative layout it's better. We shouldn't put this layout inside the description layout
-         because the description should be scrollable and gestures could conflict with this layout.
-         Leaving it like this for now.
-    -->
     <android.support.v4.widget.SwipeRefreshLayout
-        android:id="@+id/swipe_refresh"
+        android:id="@id/swipe_refresh"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:orientation="vertical">
+        android:layout_height="match_parent">
 
-        <android.support.v4.widget.NestedScrollView
-            android:id="@+id/manga_info_scroll_view"
+        <LinearLayout
+            android:id="@+id/global_view"
             android:layout_width="match_parent"
-            android:layout_height="match_parent">
+            android:layout_height="match_parent"
+            android:orientation="vertical">
 
-            <LinearLayout
+            <RelativeLayout
+                android:id="@+id/top_view"
                 android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:clickable="true"
-                android:orientation="vertical">
+                android:layout_height="0dp"
+                android:layout_weight="0.4">
 
-                <LinearLayout
+                <ImageView
+                    android:id="@+id/backdrop"
                     android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:padding="10dp">
+                    android:layout_height="match_parent"
+                    android:alpha="0.2"
+                    android:contentDescription="@string/description_backdrop"/>
 
-                    <RelativeLayout
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:background="@drawable/bkg_shadow_img"
-                        android:focusable="false"
-                        android:focusableInTouchMode="false"
-                        android:gravity="center"
-                        android:padding="4dp">
-
-                        <ImageView
-                            android:id="@+id/manga_cover"
-                            android:layout_width="138dp"
-                            android:layout_height="190dp"
-                            android:focusable="false"
-                            android:focusableInTouchMode="false"
-                            android:scaleType="fitXY"
-                            android:visibility="visible"/>
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:orientation="horizontal">
 
-                    </RelativeLayout>
+                    <ImageView
+                        android:id="@+id/manga_cover"
+                        android:layout_width="0dp"
+                        android:layout_height="match_parent"
+                        android:layout_margin="@dimen/activity_vertical_margin"
+                        android:layout_weight="0.35"
+                        android:contentDescription="@string/description_cover"/>
 
                     <RelativeLayout
-                        android:id="@+id/grid_item_description"
-                        android:layout_width="fill_parent"
-                        android:layout_height="wrap_content"
-                        android:focusable="false"
-                        android:focusableInTouchMode="false"
-                        android:paddingLeft="15.0dip">
-
-                        <TextView
-                            android:id="@+id/manga_author_label"
-                            style="@style/manga_detail_label"
-                            android:layout_width="wrap_content"
-                            android:layout_height="wrap_content"
-                            android:layout_alignParentLeft="true"
-                            android:layout_alignRight="@+id/manga_genres_label"
-                            android:layout_marginTop="5dp"
-                            android:focusable="false"
-                            android:focusableInTouchMode="false"
-                            android:text="@string/author"/>
-
-                        <TextView
-                            android:id="@+id/manga_author"
-                            style="@style/manga_detail_text"
-                            android:layout_width="fill_parent"
-                            android:layout_height="wrap_content"
-                            android:layout_alignBaseline="@id/manga_author_label"
-                            android:layout_toRightOf="@id/manga_author_label"
-                            android:ellipsize="end"
-                            android:focusable="false"
-                            android:focusableInTouchMode="false"
-                            android:maxLines="1"
-                            android:singleLine="true"/>
-
-                        <TextView
-                            android:id="@+id/manga_artist_label"
-                            style="@style/manga_detail_label"
-                            android:layout_width="wrap_content"
-                            android:layout_height="wrap_content"
-                            android:layout_alignParentLeft="true"
-                            android:layout_alignRight="@id/manga_genres_label"
-                            android:layout_below="@id/manga_author_label"
-                            android:focusable="false"
-                            android:focusableInTouchMode="false"
-                            android:text="@string/artist"/>
-
-                        <TextView
-                            android:id="@+id/manga_artist"
-                            style="@style/manga_detail_text"
-                            android:layout_width="fill_parent"
-                            android:layout_height="wrap_content"
-                            android:layout_alignBaseline="@id/manga_artist_label"
-                            android:layout_toRightOf="@id/manga_artist_label"
-                            android:ellipsize="end"
-                            android:focusable="false"
-                            android:focusableInTouchMode="false"
-                            android:maxLines="1"
-                            android:singleLine="true"/>
-
-                        <TextView
-                            android:id="@+id/manga_chapters_label"
-                            style="@style/manga_detail_label"
-                            android:layout_width="wrap_content"
-                            android:layout_height="wrap_content"
-                            android:layout_alignParentLeft="true"
-                            android:layout_below="@id/manga_artist_label"
-                            android:focusable="false"
-                            android:focusableInTouchMode="false"
-                            android:text="@string/chapters"/>
-
-                        <TextView
-                            android:id="@+id/manga_chapters"
-                            style="@style/manga_detail_text"
-                            android:layout_width="fill_parent"
-                            android:layout_height="wrap_content"
-                            android:layout_alignBaseline="@id/manga_chapters_label"
-                            android:layout_toRightOf="@id/manga_chapters_label"
-                            android:ellipsize="end"
-                            android:focusable="false"
-                            android:focusableInTouchMode="false"
-                            android:maxLines="1"
-                            android:singleLine="true"/>
-
-                        <TextView
-                            android:id="@+id/manga_status_label"
-                            style="@style/manga_detail_label"
-                            android:layout_width="wrap_content"
-                            android:layout_height="wrap_content"
-                            android:layout_alignParentLeft="true"
-                            android:layout_alignRight="@id/manga_genres_label"
-                            android:layout_below="@id/manga_chapters_label"
-                            android:focusable="false"
-                            android:focusableInTouchMode="false"
-                            android:text="@string/status"/>
-
-                        <TextView
-                            android:id="@+id/manga_status"
-                            style="@style/manga_detail_text"
-                            android:layout_width="fill_parent"
-                            android:layout_height="wrap_content"
-                            android:layout_alignBaseline="@id/manga_status_label"
-                            android:layout_toRightOf="@id/manga_status_label"
-                            android:ellipsize="end"
-                            android:focusable="false"
-                            android:focusableInTouchMode="false"
-                            android:maxLines="1"
-                            android:singleLine="true"/>
-
-                        <TextView
-                            android:id="@+id/manga_source_label"
-                            style="@style/manga_detail_label"
-                            android:layout_width="wrap_content"
-                            android:layout_height="wrap_content"
-                            android:layout_alignParentLeft="true"
-                            android:layout_below="@id/manga_status_label"
-                            android:focusable="false"
-                            android:focusableInTouchMode="false"
-                            android:text="@string/source"/>
-
-                        <TextView
-                            android:id="@+id/manga_source"
-                            style="@style/manga_detail_text"
-                            android:layout_width="fill_parent"
-                            android:layout_height="wrap_content"
-                            android:layout_alignBaseline="@id/manga_source_label"
-                            android:layout_toRightOf="@id/manga_source_label"
-                            android:ellipsize="end"
-                            android:focusable="false"
-                            android:focusableInTouchMode="false"
-                            android:maxLines="1"
-                            android:singleLine="true"/>
-
-                        <TextView
-                            android:id="@+id/manga_genres_label"
-                            style="@style/manga_detail_label"
-                            android:layout_width="wrap_content"
-                            android:layout_height="wrap_content"
-                            android:layout_alignParentLeft="true"
-                            android:layout_below="@id/manga_source_label"
-                            android:focusable="false"
-                            android:focusableInTouchMode="false"
-                            android:text="@string/genres"/>
-
-                        <TextView
-                            android:id="@+id/manga_genres"
-                            style="@style/manga_detail_text"
-                            android:layout_width="fill_parent"
-                            android:layout_height="wrap_content"
-                            android:layout_below="@id/manga_genres_label"
-                            android:focusable="false"
-                            android:focusableInTouchMode="false"
-                            android:singleLine="false"/>
-
-
+                        android:layout_width="0dp"
+                        android:layout_height="match_parent"
+                        android:layout_margin="@dimen/activity_vertical_margin"
+                        android:layout_weight="0.65">
+
+
+                        <android.support.v4.widget.NestedScrollView
+                            android:layout_width="match_parent"
+                            android:layout_height="match_parent">
+
+                            <RelativeLayout
+                                android:layout_width="match_parent"
+                                android:layout_height="match_parent">
+
+                                <LinearLayout
+                                    android:id="@+id/manga_author_view"
+                                    android:layout_width="match_parent"
+                                    android:layout_height="wrap_content"
+                                    android:orientation="horizontal">
+
+                                    <TextView
+                                        android:id="@+id/manga_author_label"
+                                        style="@style/manga_detail_label"
+                                        android:layout_width="wrap_content"
+                                        android:layout_height="wrap_content"
+                                        android:text="@string/manga_info_author_label"
+                                        />
+
+                                    <TextView
+                                        android:id="@+id/manga_author"
+                                        style="@style/manga_detail_text"
+                                        android:layout_width="wrap_content"
+                                        android:layout_height="wrap_content"
+                                        />
+                                </LinearLayout>
+
+                                <LinearLayout
+                                    android:id="@+id/manga_artist_view"
+                                    android:layout_width="match_parent"
+                                    android:layout_height="wrap_content"
+                                    android:layout_below="@+id/manga_author_view"
+                                    android:orientation="horizontal">
+
+                                    <TextView
+                                        android:id="@+id/manga_artist_label"
+                                        style="@style/manga_detail_label"
+                                        android:layout_width="wrap_content"
+                                        android:layout_height="wrap_content"
+                                        android:text="@string/manga_info_artist_label"
+                                        />
+
+                                    <TextView
+                                        android:id="@+id/manga_artist"
+                                        style="@style/manga_detail_text"
+                                        android:layout_width="wrap_content"
+                                        android:layout_height="wrap_content"
+                                        />
+                                </LinearLayout>
+
+                                <LinearLayout
+                                    android:id="@+id/manga_chapters_view"
+                                    android:layout_width="match_parent"
+                                    android:layout_height="wrap_content"
+                                    android:layout_below="@+id/manga_artist_view"
+                                    android:orientation="horizontal">
+
+                                    <TextView
+                                        android:id="@+id/manga_chapters_label"
+                                        style="@style/manga_detail_label"
+                                        android:layout_width="wrap_content"
+                                        android:layout_height="wrap_content"
+                                        android:text="@string/manga_info_chapters_label"
+                                        />
+
+                                    <TextView
+                                        android:id="@+id/manga_chapters"
+                                        style="@style/manga_detail_text"
+                                        android:layout_width="wrap_content"
+                                        android:layout_height="wrap_content"
+                                        />
+                                </LinearLayout>
+
+                                <LinearLayout
+                                    android:id="@+id/manga_status_view"
+                                    android:layout_width="match_parent"
+                                    android:layout_height="wrap_content"
+                                    android:layout_below="@+id/manga_chapters_view"
+                                    android:orientation="horizontal">
+
+                                    <TextView
+                                        android:id="@+id/manga_status_label"
+                                        style="@style/manga_detail_label"
+                                        android:layout_width="wrap_content"
+                                        android:layout_height="wrap_content"
+                                        android:text="@string/manga_info_status_label"
+                                        />
+
+                                    <TextView
+                                        android:id="@+id/manga_status"
+                                        style="@style/manga_detail_text"
+                                        android:layout_width="wrap_content"
+                                        android:layout_height="wrap_content"
+                                        />
+                                </LinearLayout>
+
+                                <LinearLayout
+                                    android:id="@+id/manga_source_view"
+                                    android:layout_width="match_parent"
+                                    android:layout_height="wrap_content"
+                                    android:layout_below="@+id/manga_status_view"
+                                    android:orientation="horizontal">
+
+                                    <TextView
+                                        android:id="@+id/manga_source_label"
+                                        style="@style/manga_detail_label"
+                                        android:layout_width="wrap_content"
+                                        android:layout_height="wrap_content"
+                                        android:text="@string/manga_info_source_label"
+                                        />
+
+                                    <TextView
+                                        android:id="@+id/manga_source"
+                                        style="@style/manga_detail_text"
+                                        android:layout_width="wrap_content"
+                                        android:layout_height="wrap_content"
+                                        />
+                                </LinearLayout>
+
+                                <LinearLayout
+                                    android:id="@+id/manga_genres_view"
+                                    android:layout_width="match_parent"
+                                    android:layout_height="wrap_content"
+                                    android:layout_below="@+id/manga_source_view"
+                                    android:orientation="vertical">
+
+                                    <TextView
+                                        android:id="@+id/manga_genres_label"
+                                        style="@style/manga_detail_label"
+                                        android:layout_width="wrap_content"
+                                        android:layout_height="wrap_content"
+                                        android:text="@string/manga_info_genres_label"
+                                        />
+
+                                    <TextView
+                                        android:id="@+id/manga_genres"
+                                        style="@style/manga_detail_text"
+                                        android:layout_width="wrap_content"
+                                        android:layout_height="wrap_content"
+                                        android:singleLine="false"
+                                        />
+                                </LinearLayout>
+                            </RelativeLayout>
+                        </android.support.v4.widget.NestedScrollView>
                     </RelativeLayout>
 
                 </LinearLayout>
 
-                <LinearLayout
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:orientation="horizontal"
-                    android:padding="10dp">
+            </RelativeLayout>
 
-                    <Button
-                        android:id="@+id/action_favorite"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:text="@string/add_to_library"/>
-                </LinearLayout>
+            <android.support.v4.widget.NestedScrollView
+                android:id="@+id/bottom_view"
+                android:layout_width="match_parent"
+                android:layout_height="0dp"
+                android:layout_margin="@dimen/activity_vertical_margin"
+                android:layout_weight="0.6">
 
                 <LinearLayout
                     android:layout_width="match_parent"
-                    android:layout_height="match_parent"
-                    android:orientation="vertical"
-                    android:padding="10dp">
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical">
 
                     <TextView
                         android:id="@+id/manga_summary_label"
                         style="@style/manga_detail_label"
                         android:layout_width="match_parent"
                         android:layout_height="wrap_content"
-                        android:focusable="false"
-                        android:focusableInTouchMode="false"
-                        android:singleLine="false"
                         android:text="@string/description"/>
 
-
                     <TextView
                         android:id="@+id/manga_summary"
                         style="@style/manga_detail_text"
                         android:layout_width="match_parent"
                         android:layout_height="wrap_content"
-                        android:focusable="false"
-                        android:focusableInTouchMode="false"
-                        android:singleLine="false"/>
-
+                        android:singleLine="false"
+                        />
                 </LinearLayout>
 
+            </android.support.v4.widget.NestedScrollView>
 
 
-
-            </LinearLayout>
-
-
-        </android.support.v4.widget.NestedScrollView>
+        </LinearLayout>
 
     </android.support.v4.widget.SwipeRefreshLayout>
 
     <android.support.design.widget.FloatingActionButton
-        android:id="@+id/fab_edit"
-        android:layout_height="@dimen/fab_size"
+        android:id="@+id/fab_favorite"
         android:layout_width="@dimen/fab_size"
-        android:layout_gravity="bottom|end"
+        android:layout_height="@dimen/fab_size"
         android:layout_margin="@dimen/fab_margin"
-        android:scaleType="fitCenter"
-        android:src="@drawable/ic_mode_edit_white_24dp"
+        android:src="@drawable/ic_bookmark_border_white_24dp"
         app:backgroundTint="@color/colorPrimary"
-        app:layout_anchor="@id/manga_info_scroll_view"
-        app:layout_anchorGravity="bottom|right|end"
-        app:layout_behavior="eu.kanade.tachiyomi.ui.base.fab.ScrollAwareFABBehavior"/>
+        app:layout_anchor="@id/top_view"
+        app:layout_anchorGravity="bottom|right|end"/>
+
 </android.support.design.widget.CoordinatorLayout>

+ 19 - 16
app/src/main/res/layout/item_catalogue_grid.xml

@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8"?>
 <FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:background="@drawable/selector_chapter_light">
 
     <RelativeLayout
@@ -13,9 +13,9 @@
         android:background="@drawable/card_background">
 
         <android.support.percent.PercentFrameLayout
+            android:id="@+id/image_container"
             android:layout_width="wrap_content"
-            android:layout_height="220dp"
-            android:id="@+id/image_container">
+            android:layout_height="220dp">
 
             <ImageView
                 android:id="@+id/thumbnail"
@@ -28,9 +28,9 @@
             <View
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                app:layout_heightPercent="50%"
                 android:layout_gravity="bottom"
-                android:background="@drawable/gradient_shape"/>
+                android:background="@drawable/gradient_shape"
+                app:layout_heightPercent="50%"/>
 
         </android.support.percent.PercentFrameLayout>
 
@@ -48,35 +48,38 @@
             android:textSize="12sp"
             android:visibility="gone"/>
 
-        <ImageView
+
+        <com.mikepenz.iconics.view.IconicsImageView
             android:id="@+id/favorite_sticker"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
+            android:layout_width="24dp"
+            android:layout_height="24dp"
             android:layout_alignEnd="@+id/image_container"
             android:layout_alignRight="@+id/image_container"
             android:layout_alignTop="@+id/image_container"
+            android:layout_marginEnd="5dp"
             android:layout_marginRight="5dp"
             android:layout_marginTop="5dp"
-            android:src="@drawable/ic_action_favorite_blue"
-            android:visibility="invisible"/>
+            android:visibility="invisible"
+            app:iiv_color="@color/primary"
+            app:iiv_icon="gmd_bookmark"/>
 
         <eu.kanade.tachiyomi.widget.PTSansTextView
             android:id="@+id/title"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
+            android:layout_alignBottom="@+id/image_container"
             android:layout_gravity="center_vertical"
-            app:typeface="ptsansNarrowBold"
-            android:lineSpacingExtra="-4dp"
             android:ellipsize="end"
+            android:lineSpacingExtra="-4dp"
             android:maxLines="2"
             android:padding="8dp"
-            android:textColor="@color/white"
-            android:textSize="14sp"
+            android:shadowColor="@color/primary_text"
             android:shadowDx="0"
             android:shadowDy="0"
-            android:shadowColor="@color/primary_text"
             android:shadowRadius="4"
-            android:layout_alignBottom="@+id/image_container"
+            android:textColor="@color/white"
+            android:textSize="14sp"
+            app:typeface="ptsansNarrowBold"
             tools:text="Sample name"/>
 
     </RelativeLayout>

+ 5 - 0
app/src/main/res/menu/library_selection.xml

@@ -3,6 +3,11 @@
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:app="http://schemas.android.com/apk/res-auto">
 
+    <item android:id="@+id/action_edit_cover"
+          android:title="@string/action_edit_cover"
+          android:icon="@drawable/ic_create"
+          app:showAsAction="ifRoom"/>
+
     <item android:id="@+id/action_move_to_category"
           android:title="@string/action_move_category"
           android:icon="@drawable/ic_label"

+ 14 - 6
app/src/main/res/values/strings.xml

@@ -28,6 +28,7 @@
     <string name="action_edit_categories">Edit categories</string>
     <string name="action_rename_category">Rename category</string>
     <string name="action_move_category">Move to categories</string>
+    <string name="action_edit_cover">Edit the cover picture</string>
     <string name="action_sort_up">Sort up</string>
     <string name="action_sort_down">Sort down</string>
     <string name="action_show_unread">Unread</string>
@@ -161,18 +162,18 @@
 
     <!-- Manga info fragment -->
     <string name="manga_detail_tab">Info</string>
-    <string name="author">Author</string>
-    <string name="chapters">Chapters</string>
-    <string name="genres">Genres</string>
-    <string name="source">Source</string>
-    <string name="artist">Artist</string>
     <string name="description">Description</string>
-    <string name="status">Status</string>
     <string name="ongoing">Ongoing</string>
     <string name="unknown">Unknown</string>
     <string name="licensed">Licensed</string>
     <string name="add_to_library">Add to library</string>
     <string name="remove_from_library">Remove from library</string>
+    <string name="manga_info_author_label">Author</string>
+    <string name="manga_info_artist_label">Artist</string>
+    <string name="manga_info_chapters_label">Chapters</string>
+    <string name="manga_info_status_label">Status</string>
+    <string name="manga_info_source_label">Source</string>
+    <string name="manga_info_genres_label">Genres</string>
 
     <!-- Manga chapters fragment -->
     <string name="manga_chapters_tab">Chapters</string>
@@ -198,6 +199,9 @@
     <string name="plan_to_read">Plan to read</string>
     <string name="score">Score</string>
     <string name="title_hint">Title…</string>
+    <string name="status">Status</string>
+    <string name="chapters">Chapters</string>
+
 
     <!-- Reader activity -->
     <string name="downloading">Downloading…</string>
@@ -233,4 +237,8 @@
     <string name="update_check_download_started">Download Started</string>
     <string name="update_check_look_for_updates">Looking for updates</string>
 
+    <!--Content Description-->
+    <string name="description_backdrop">Backdrop image of selected manga</string>
+    <string name="description_cover">Cover of selected manga</string>
+
 </resources>