Notify when an image can't be decoded in the pager reader. Changes to theme. Reload library adapter when the mangas per row setting is changed (to recalculate covers height).

This commit is contained in:
inorichi 2016-01-09 18:23:38 +01:00
parent 8be44c209c
commit 201650ced7
12 changed files with 74 additions and 27 deletions

View file

@ -63,7 +63,10 @@ public class LibraryCategoryFragment extends BaseFragment
getLibraryPresenter().preferences.landscapeColumns(); getLibraryPresenter().preferences.landscapeColumns();
numColumnsSubscription = columnsPref.asObservable() numColumnsSubscription = columnsPref.asObservable()
.subscribe(recycler::setSpanCount); .doOnNext(recycler::setSpanCount)
.skip(1)
// Set again the adapter to recalculate the covers height
.subscribe(count -> recycler.setAdapter(adapter));
if (savedState != null) { if (savedState != null) {
adapter.onRestoreInstanceState(savedState); adapter.onRestoreInstanceState(savedState);

View file

@ -3,6 +3,7 @@ package eu.kanade.mangafeed.ui.reader.viewer.pager;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat; import android.support.v4.content.ContextCompat;
import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
@ -53,7 +54,7 @@ public class PagerReaderFragment extends BaseFragment {
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.item_pager_reader, container, false); View view = inflater.inflate(R.layout.item_pager_reader, container, false);
ButterKnife.bind(this, view); ButterKnife.bind(this, view);
ReaderActivity activity = (ReaderActivity) getActivity(); ReaderActivity activity = getReaderActivity();
BaseReader parentFragment = (BaseReader) getParentFragment(); BaseReader parentFragment = (BaseReader) getParentFragment();
if (activity.getReaderTheme() == ReaderActivity.BLACK_THEME) { if (activity.getReaderTheme() == ReaderActivity.BLACK_THEME) {
@ -67,12 +68,17 @@ public class PagerReaderFragment extends BaseFragment {
imageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_INSIDE); imageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_INSIDE);
imageView.setRegionDecoderClass(parentFragment.getRegionDecoderClass()); imageView.setRegionDecoderClass(parentFragment.getRegionDecoderClass());
imageView.setOnTouchListener((v, motionEvent) -> parentFragment.onImageTouch(motionEvent)); imageView.setOnTouchListener((v, motionEvent) -> parentFragment.onImageTouch(motionEvent));
imageView.setOnImageEventListener(new SubsamplingScaleImageView.DefaultOnImageEventListener() {
@Override
public void onImageLoadError(Exception e) {
showImageLoadError();
}
});
retryButton.setOnTouchListener((v, event) -> { retryButton.setOnTouchListener((v, event) -> {
if (event.getAction() == MotionEvent.ACTION_UP) { if (event.getAction() == MotionEvent.ACTION_UP) {
if (page != null) if (page != null)
activity.getPresenter().retryPage(page); activity.getPresenter().retryPage(page);
return true;
} }
return true; return true;
}); });
@ -121,6 +127,21 @@ public class PagerReaderFragment extends BaseFragment {
retryButton.setVisibility(View.GONE); retryButton.setVisibility(View.GONE);
} }
private void showImageLoadError() {
ViewGroup view = (ViewGroup) getView();
if (view == null)
return;
TextView errorText = new TextView(getContext());
errorText.setGravity(Gravity.CENTER);
errorText.setText(R.string.decode_image_error);
errorText.setTextColor(getReaderActivity().getReaderTheme() == ReaderActivity.BLACK_THEME ?
ContextCompat.getColor(getContext(), R.color.light_grey) :
ContextCompat.getColor(getContext(), R.color.primary_text));
view.addView(errorText);
}
private void processStatus(int status) { private void processStatus(int status) {
switch (status) { switch (status) {
case Page.QUEUE: case Page.QUEUE:
@ -191,4 +212,8 @@ public class PagerReaderFragment extends BaseFragment {
} }
} }
private ReaderActivity getReaderActivity() {
return (ReaderActivity) getActivity();
}
} }

View file

@ -2,6 +2,7 @@ package eu.kanade.mangafeed.widget;
import android.content.Context; import android.content.Context;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.widget.TextView; import android.widget.TextView;
@ -49,4 +50,11 @@ public class PTSansTextView extends TextView {
values.recycle(); values.recycle();
} }
@Override
public void draw(Canvas canvas) {
// Draw two times for a more visible shadow around the text
super.draw(canvas);
super.draw(canvas);
}
} }

View file

@ -46,16 +46,11 @@
android:src="@drawable/ic_action_favorite_blue" android:src="@drawable/ic_action_favorite_blue"
android:visibility="invisible"/> android:visibility="invisible"/>
<LinearLayout <FrameLayout
android:id="@+id/footerLinearLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="36dp" android:layout_height="wrap_content"
android:layout_alignBottom="@+id/thumbnail" android:layout_alignBottom="@+id/thumbnail"
android:layout_alignLeft="@+id/unreadText" android:background="@color/manga_cover_title_background">
android:layout_alignStart="@+id/unreadText"
android:background="@color/white"
android:gravity="center"
android:orientation="vertical">
<eu.kanade.mangafeed.widget.PTSansTextView <eu.kanade.mangafeed.widget.PTSansTextView
android:id="@+id/title" android:id="@+id/title"
@ -66,13 +61,16 @@
android:lineSpacingExtra="-4dp" android:lineSpacingExtra="-4dp"
android:ellipsize="end" android:ellipsize="end"
android:maxLines="2" android:maxLines="2"
android:paddingLeft="8dp" android:padding="8dp"
android:paddingRight="8dp" android:textColor="@color/white"
android:textColor="@color/primary_text"
android:textSize="14sp" android:textSize="14sp"
android:shadowDx="0"
android:shadowDy="0"
android:shadowColor="@color/primary_text"
android:shadowRadius="4"
tools:text="Sample name"/> tools:text="Sample name"/>
</LinearLayout> </FrameLayout>
</RelativeLayout> </RelativeLayout>

View file

@ -7,7 +7,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:theme="@style/AppTheme.Overlay.Dark" android:theme="@style/AppTheme.Overlay.Dark"
android:background="@color/colorPrimary" android:background="@color/colorPrimary"
android:elevation="4dp" android:visibility="gone"
app:elevation="4dp"
app:tabGravity="center" app:tabGravity="center"
app:tabMode="scrollable" app:tabMode="scrollable"
app:tabMinWidth="75dp" app:tabMinWidth="75dp"

View file

@ -4,7 +4,10 @@
android:orientation="horizontal" android:orientation="horizontal"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:paddingTop="15dp"> android:paddingTop="@dimen/dialog_margin_top_content"
android:paddingLeft="@dimen/dialog_content_padding"
android:paddingRight="@dimen/dialog_content_padding"
android:paddingBottom="@dimen/dialog_content_padding">
<LinearLayout <LinearLayout
android:layout_width="0dp" android:layout_width="0dp"

View file

@ -8,5 +8,5 @@
android:theme="@style/AppTheme.Overlay.Dark" android:theme="@style/AppTheme.Overlay.Dark"
app:tabGravity="fill" app:tabGravity="fill"
android:background="@color/colorPrimary" android:background="@color/colorPrimary"
android:elevation="4dp" app:elevation="4dp"
app:tabIndicatorColor="@color/white"/> app:tabIndicatorColor="@color/white"/>

View file

@ -5,6 +5,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary" android:background="@color/colorPrimary"
android:elevation="4dp" app:elevation="4dp"
android:theme="@style/AppTheme.ActionBar" android:theme="@style/AppTheme.ActionBar"
app:layout_scrollFlags="scroll|enterAlways|snap"/> app:layout_scrollFlags="scroll|enterAlways|snap"/>

View file

@ -23,6 +23,7 @@
<color name="list_choice_pressed_bg_light">@color/colorPrimaryLight</color> <color name="list_choice_pressed_bg_light">@color/colorPrimaryLight</color>
<color name="manga_unread_bg">@color/colorAccent</color> <color name="manga_unread_bg">@color/colorAccent</color>
<color name="manga_cover_title_background">#55333333</color>
<color name="super_light_grey">@color/md_grey_50</color> <color name="super_light_grey">@color/md_grey_50</color>
<color name="line_grey">@color/md_light_dividers</color> <color name="line_grey">@color/md_light_dividers</color>
@ -30,4 +31,5 @@
<color name="page_number_background">#AAE9E9E9</color> <color name="page_number_background">#AAE9E9E9</color>
<color name="page_number_background_black">#99252525</color> <color name="page_number_background_black">#99252525</color>
<color name="reader_menu_background">@color/colorPrimarySuperDark</color> <color name="reader_menu_background">@color/colorPrimarySuperDark</color>
</resources> </resources>

View file

@ -8,6 +8,9 @@
<dimen name="margin_right">16dp</dimen> <dimen name="margin_right">16dp</dimen>
<dimen name="fab_margin">16dp</dimen> <dimen name="fab_margin">16dp</dimen>
<dimen name="dialog_content_padding">24dp</dimen>
<dimen name="dialog_margin_top_content">20dp</dimen>
<dimen name="text_headline">24sp</dimen> <dimen name="text_headline">24sp</dimen>
<dimen name="text_large_title">22sp</dimen> <dimen name="text_large_title">22sp</dimen>
<dimen name="text_title">20sp</dimen> <dimen name="text_title">20sp</dimen>

View file

@ -59,7 +59,7 @@
<string name="pref_category_about">About</string> <string name="pref_category_about">About</string>
<!-- General section --> <!-- General section -->
<string name="pref_library_columns">Number of columns</string> <string name="pref_library_columns">Library mangas per row</string>
<string name="portrait">Portrait</string> <string name="portrait">Portrait</string>
<string name="landscape">Landscape</string> <string name="landscape">Landscape</string>
<string name="default_columns">Default</string> <string name="default_columns">Default</string>
@ -165,6 +165,7 @@
<string name="chapter_subtitle">Chapter %1$s</string> <string name="chapter_subtitle">Chapter %1$s</string>
<string name="no_next_chapter">Next chapter not found</string> <string name="no_next_chapter">Next chapter not found</string>
<string name="no_previous_chapter">Previous chapter not found</string> <string name="no_previous_chapter">Previous chapter not found</string>
<string name="decode_image_error">The image could not be loaded.\nTry to change the image decoder</string>
<!-- Library update service notifications --> <!-- Library update service notifications -->
<string name="notification_progress">Update progress: %1$d/%2$d</string> <string name="notification_progress">Update progress: %1$d/%2$d</string>

View file

@ -7,17 +7,15 @@
<item name="alertDialogTheme">@style/AlertDialogStyle</item> <item name="alertDialogTheme">@style/AlertDialogStyle</item>
<item name="android:itemTextAppearance">@style/OptionsMenuTextColor</item> <item name="android:itemTextAppearance">@style/OptionsMenuTextColor</item>
<item name="android:textColor">@color/primary_text</item> <item name="android:textColor">@color/primary_text</item>
<item name="android:windowActionModeOverlay">true</item>
<item name="windowActionModeOverlay">true</item> <item name="windowActionModeOverlay">true</item>
</style> </style>
<style name="AppTheme.ActionBar" parent="AppTheme"> <style name="AppTheme.ActionBar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:textColorPrimary">@color/white</item>
<item name="android:itemTextAppearance">@style/OptionsMenuTextColor</item>
<item name="android:spinnerItemStyle">@style/ActionBarSpinner</item> <item name="android:spinnerItemStyle">@style/ActionBarSpinner</item>
<item name="android:actionModeBackground">@color/colorPrimarySuperDark</item> <item name="android:spinnerDropDownItemStyle">@style/ActionBarSpinnerItem</item>
<item name="actionModeBackground">@color/colorPrimarySuperDark</item> <item name="actionModeBackground">@color/colorPrimarySuperDark</item>
<item name="colorControlNormal">@color/white</item> <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
<item name="colorAccent">@color/white</item>
</style> </style>
<style name="AppTheme.Overlay.Dark" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> <style name="AppTheme.Overlay.Dark" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
@ -43,6 +41,10 @@
<item name="android:textColorHint">@color/hint_foreground_material_dark</item> <item name="android:textColorHint">@color/hint_foreground_material_dark</item>
</style> </style>
<style name="ActionBarSpinnerItem" parent="@style/Widget.AppCompat.DropDownItem.Spinner">
<item name="android:background">@color/background_material_light</item>
</style>
<style name="AppTheme.Popup" parent="@style/AppTheme.Overlay.Dark"> <style name="AppTheme.Popup" parent="@style/AppTheme.Overlay.Dark">
<item name="colorAccent">@color/white</item> <item name="colorAccent">@color/white</item>
<item name="android:background">@color/colorPrimary</item> <item name="android:background">@color/colorPrimary</item>
@ -51,7 +53,7 @@
<style name="AppTheme.GridView" parent="AppTheme"> <style name="AppTheme.GridView" parent="AppTheme">
<item name="android:layout_width">match_parent</item> <item name="android:layout_width">match_parent</item>
<item name="android:padding">10dp</item> <item name="android:padding">5dp</item>
<item name="android:layout_height">match_parent</item> <item name="android:layout_height">match_parent</item>
<item name="android:clipToPadding">false</item> <item name="android:clipToPadding">false</item>
<item name="android:gravity">top|left</item> <item name="android:gravity">top|left</item>
@ -115,4 +117,5 @@
<item name="android:layout_height">36dp</item> <item name="android:layout_height">36dp</item>
<item name="android:gravity">center</item> <item name="android:gravity">center</item>
</style> </style>
</resources> </resources>