Added watched indicator for movies and tv shows lists (#412)

This commit is contained in:
tomerf 2017-06-23 20:36:31 +03:00 committed by Synced Synapse
parent 70935d5e3f
commit d596417b04
4 changed files with 68 additions and 2 deletions

View File

@ -20,6 +20,7 @@ import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Resources; import android.content.res.Resources;
import android.content.res.TypedArray;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
@ -272,6 +273,7 @@ public class MovieListFragment extends AbstractCursorListFragment {
MediaContract.Movies.RUNTIME, MediaContract.Movies.RUNTIME,
MediaContract.Movies.RATING, MediaContract.Movies.RATING,
MediaContract.Movies.TAGLINE, MediaContract.Movies.TAGLINE,
MediaContract.Movies.PLAYCOUNT,
}; };
@ -292,15 +294,27 @@ public class MovieListFragment extends AbstractCursorListFragment {
final int RUNTIME = 6; final int RUNTIME = 6;
final int RATING = 7; final int RATING = 7;
final int TAGLINE = 8; final int TAGLINE = 8;
final int PLAYCOUNT = 9;
} }
private static class MoviesAdapter extends CursorAdapter { private class MoviesAdapter extends CursorAdapter {
private HostManager hostManager; private HostManager hostManager;
private int artWidth, artHeight; private int artWidth, artHeight;
private int themeAccentColor;
public MoviesAdapter(Context context) { public MoviesAdapter(Context context) {
super(context, null, false); super(context, null, false);
// Get the default accent color
Resources.Theme theme = context.getTheme();
TypedArray styledAttributes = theme.obtainStyledAttributes(new int[] {
R.attr.colorAccent
});
themeAccentColor = styledAttributes.getColor(styledAttributes.getIndex(0), getResources().getColor(R.color.accent_default));
styledAttributes.recycle();
this.hostManager = HostManager.getInstance(context); this.hostManager = HostManager.getInstance(context);
// Get the art dimensions // Get the art dimensions
@ -324,6 +338,7 @@ public class MovieListFragment extends AbstractCursorListFragment {
viewHolder.titleView = (TextView)view.findViewById(R.id.title); viewHolder.titleView = (TextView)view.findViewById(R.id.title);
viewHolder.detailsView = (TextView)view.findViewById(R.id.details); viewHolder.detailsView = (TextView)view.findViewById(R.id.details);
viewHolder.durationView = (TextView)view.findViewById(R.id.duration); viewHolder.durationView = (TextView)view.findViewById(R.id.duration);
viewHolder.checkmarkView = (ImageView)view.findViewById(R.id.checkmark);
viewHolder.artView = (ImageView)view.findViewById(R.id.art); viewHolder.artView = (ImageView)view.findViewById(R.id.art);
view.setTag(viewHolder); view.setTag(viewHolder);
@ -366,6 +381,13 @@ public class MovieListFragment extends AbstractCursorListFragment {
viewHolder.dataHolder.getTitle(), viewHolder.dataHolder.getTitle(),
viewHolder.artView, artWidth, artHeight); viewHolder.artView, artWidth, artHeight);
if (cursor.getInt(MovieListQuery.PLAYCOUNT) > 0) {
viewHolder.checkmarkView.setVisibility(View.VISIBLE);
viewHolder.checkmarkView.setColorFilter(themeAccentColor);
} else {
viewHolder.checkmarkView.setVisibility(View.INVISIBLE);
}
if (Utils.isLollipopOrLater()) { if (Utils.isLollipopOrLater()) {
viewHolder.artView.setTransitionName("a" + viewHolder.dataHolder.getId()); viewHolder.artView.setTransitionName("a" + viewHolder.dataHolder.getId());
} }
@ -379,6 +401,7 @@ public class MovieListFragment extends AbstractCursorListFragment {
TextView titleView; TextView titleView;
TextView detailsView; TextView detailsView;
TextView durationView; TextView durationView;
ImageView checkmarkView;
ImageView artView; ImageView artView;
AbstractInfoFragment.DataHolder dataHolder = new AbstractInfoFragment.DataHolder(0); AbstractInfoFragment.DataHolder dataHolder = new AbstractInfoFragment.DataHolder(0);

View File

@ -20,6 +20,7 @@ import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Resources; import android.content.res.Resources;
import android.content.res.TypedArray;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
@ -292,13 +293,24 @@ public class TVShowListFragment extends AbstractCursorListFragment {
final int GENRES = 13; final int GENRES = 13;
} }
private static class TVShowsAdapter extends CursorAdapter { private class TVShowsAdapter extends CursorAdapter {
private HostManager hostManager; private HostManager hostManager;
private int artWidth, artHeight; private int artWidth, artHeight;
private int themeAccentColor;
public TVShowsAdapter(Context context) { public TVShowsAdapter(Context context) {
super(context, null, false); super(context, null, false);
// Get the default accent color
Resources.Theme theme = context.getTheme();
TypedArray styledAttributes = theme.obtainStyledAttributes(new int[] {
R.attr.colorAccent
});
themeAccentColor = styledAttributes.getColor(styledAttributes.getIndex(0), getResources().getColor(R.color.accent_default));
styledAttributes.recycle();
this.hostManager = HostManager.getInstance(context); this.hostManager = HostManager.getInstance(context);
// Get the art dimensions // Get the art dimensions
@ -322,6 +334,7 @@ public class TVShowListFragment extends AbstractCursorListFragment {
viewHolder.titleView = (TextView)view.findViewById(R.id.title); viewHolder.titleView = (TextView)view.findViewById(R.id.title);
viewHolder.detailsView = (TextView)view.findViewById(R.id.details); viewHolder.detailsView = (TextView)view.findViewById(R.id.details);
viewHolder.premieredView = (TextView)view.findViewById(R.id.premiered); viewHolder.premieredView = (TextView)view.findViewById(R.id.premiered);
viewHolder.checkmarkView = (ImageView)view.findViewById(R.id.checkmark);
viewHolder.artView = (ImageView)view.findViewById(R.id.art); viewHolder.artView = (ImageView)view.findViewById(R.id.art);
view.setTag(viewHolder); view.setTag(viewHolder);
@ -358,6 +371,13 @@ public class TVShowListFragment extends AbstractCursorListFragment {
viewHolder.dataHolder.getTitle(), viewHolder.dataHolder.getTitle(),
viewHolder.artView, artWidth, artHeight); viewHolder.artView, artWidth, artHeight);
if (episode - watchedEpisodes == 0) {
viewHolder.checkmarkView.setVisibility(View.VISIBLE);
viewHolder.checkmarkView.setColorFilter(themeAccentColor);
} else {
viewHolder.checkmarkView.setVisibility(View.INVISIBLE);
}
if (Utils.isLollipopOrLater()) { if (Utils.isLollipopOrLater()) {
viewHolder.artView.setTransitionName("a" + viewHolder.dataHolder.getId()); viewHolder.artView.setTransitionName("a" + viewHolder.dataHolder.getId());
} }
@ -371,6 +391,7 @@ public class TVShowListFragment extends AbstractCursorListFragment {
TextView titleView; TextView titleView;
TextView detailsView; TextView detailsView;
TextView premieredView; TextView premieredView;
ImageView checkmarkView;
ImageView artView; ImageView artView;
AbstractInfoFragment.DataHolder dataHolder = new AbstractInfoFragment.DataHolder(0); AbstractInfoFragment.DataHolder dataHolder = new AbstractInfoFragment.DataHolder(0);

View File

@ -45,6 +45,7 @@
android:layout_toEndOf="@id/art" android:layout_toEndOf="@id/art"
android:layout_alignTop="@id/art" android:layout_alignTop="@id/art"
style="@style/TextAppearance.Medialist.Title"/> style="@style/TextAppearance.Medialist.Title"/>
<TextView <TextView
android:id="@+id/details" android:id="@+id/details"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -63,6 +64,16 @@
android:layout_below="@id/details" android:layout_below="@id/details"
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
style="@style/TextAppearance.Medialist.OtherInfo"/> style="@style/TextAppearance.Medialist.OtherInfo"/>
<ImageView
android:id="@+id/checkmark"
android:layout_width="@dimen/default_icon_size"
android:layout_height="@dimen/default_icon_size"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:padding="@dimen/default_icon_padding"
android:src="?attr/iconSeen"
android:contentDescription="@string/seen"/>
</RelativeLayout> </RelativeLayout>
</android.support.v7.widget.CardView> </android.support.v7.widget.CardView>

View File

@ -44,6 +44,7 @@
android:layout_toEndOf="@id/art" android:layout_toEndOf="@id/art"
android:layout_alignTop="@id/art" android:layout_alignTop="@id/art"
style="@style/TextAppearance.Medialist.Title"/> style="@style/TextAppearance.Medialist.Title"/>
<TextView <TextView
android:id="@+id/details" android:id="@+id/details"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -62,5 +63,15 @@
android:layout_below="@id/details" android:layout_below="@id/details"
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
style="@style/TextAppearance.Medialist.OtherInfo"/> style="@style/TextAppearance.Medialist.OtherInfo"/>
<ImageView
android:id="@+id/checkmark"
android:layout_width="@dimen/default_icon_size"
android:layout_height="@dimen/default_icon_size"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:padding="@dimen/default_icon_padding"
android:src="?attr/iconSeen"
android:contentDescription="@string/seen"/>
</RelativeLayout> </RelativeLayout>
</android.support.v7.widget.CardView> </android.support.v7.widget.CardView>