Add progress bar to tv shows list, similar to the one present in the seasons list

This commit is contained in:
Synced Synapse 2017-08-30 19:32:01 +01:00
parent dcad05580c
commit 2761c8651b
5 changed files with 80 additions and 38 deletions

View File

@ -19,6 +19,7 @@ import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.database.Cursor;
@ -35,6 +36,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.CursorAdapter;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import org.xbmc.kore.R;
@ -311,7 +313,8 @@ public class TVShowListFragment extends AbstractCursorListFragment {
private HostManager hostManager;
private int artWidth, artHeight;
private int themeAccentColor;
private int themeAccentColor,
inProgressColor, finishedColor;
public TVShowsAdapter(Context context) {
super(context, null, false);
@ -319,10 +322,14 @@ public class TVShowListFragment extends AbstractCursorListFragment {
// Get the default accent color
Resources.Theme theme = context.getTheme();
TypedArray styledAttributes = theme.obtainStyledAttributes(new int[] {
R.attr.colorAccent
R.attr.colorAccent,
R.attr.colorinProgress,
R.attr.colorFinished
});
themeAccentColor = styledAttributes.getColor(styledAttributes.getIndex(0), getResources().getColor(R.color.accent_default));
inProgressColor = styledAttributes.getColor(styledAttributes.getIndex(1), getResources().getColor(R.color.orange_500));
finishedColor = styledAttributes.getColor(styledAttributes.getIndex(2), getResources().getColor(R.color.light_green_600));
styledAttributes.recycle();
this.hostManager = HostManager.getInstance(context);
@ -348,8 +355,8 @@ public class TVShowListFragment extends AbstractCursorListFragment {
viewHolder.titleView = (TextView)view.findViewById(R.id.title);
viewHolder.detailsView = (TextView)view.findViewById(R.id.details);
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.watchedProgressView = (ProgressBar)view.findViewById(R.id.tv_shows_progress_bar);
view.setTag(viewHolder);
return view;
@ -359,41 +366,46 @@ public class TVShowListFragment extends AbstractCursorListFragment {
@TargetApi(21)
@Override
public void bindView(View view, Context context, Cursor cursor) {
final ViewHolder viewHolder = (ViewHolder)view.getTag();
final ViewHolder vh = (ViewHolder)view.getTag();
// Save the movie id
viewHolder.dataHolder.setId(cursor.getInt(TVShowListQuery.TVSHOWID));
viewHolder.dataHolder.setTitle(cursor.getString(TVShowListQuery.TITLE));
viewHolder.dataHolder.setDescription(cursor.getString(TVShowListQuery.PLOT));
viewHolder.dataHolder.setRating(cursor.getInt(TVShowListQuery.RATING));
int episode = cursor.getInt(TVShowListQuery.EPISODE);
vh.dataHolder.setId(cursor.getInt(TVShowListQuery.TVSHOWID));
vh.dataHolder.setTitle(cursor.getString(TVShowListQuery.TITLE));
vh.dataHolder.setDescription(cursor.getString(TVShowListQuery.PLOT));
vh.dataHolder.setRating(cursor.getInt(TVShowListQuery.RATING));
int numEpisodes = cursor.getInt(TVShowListQuery.EPISODE);
int watchedEpisodes = cursor.getInt(TVShowListQuery.WATCHEDEPISODES);
viewHolder.titleView.setText(viewHolder.dataHolder.getTitle());
vh.titleView.setText(vh.dataHolder.getTitle());
String details = String.format(context.getString(R.string.num_episodes),
episode, episode - watchedEpisodes);
viewHolder.detailsView.setText(details);
viewHolder.dataHolder.setUndertitle(details);
numEpisodes, numEpisodes - watchedEpisodes);
vh.detailsView.setText(details);
vh.dataHolder.setUndertitle(details);
String premiered = String.format(context.getString(R.string.premiered),
cursor.getString(TVShowListQuery.PREMIERED));
viewHolder.premieredView.setText(premiered);
viewHolder.dataHolder.setDetails(premiered);
viewHolder.dataHolder.setPosterUrl(cursor.getString(TVShowListQuery.THUMBNAIL));
vh.premieredView.setText(premiered);
vh.dataHolder.setDetails(premiered);
vh.dataHolder.setPosterUrl(cursor.getString(TVShowListQuery.THUMBNAIL));
UIUtils.loadImageWithCharacterAvatar(context, hostManager,
viewHolder.dataHolder.getPosterUrl(),
viewHolder.dataHolder.getTitle(),
viewHolder.artView, artWidth, artHeight);
vh.dataHolder.getPosterUrl(),
vh.dataHolder.getTitle(),
vh.artView, artWidth, artHeight);
if (showWatchedStatus && (episode - watchedEpisodes == 0)) {
viewHolder.checkmarkView.setVisibility(View.VISIBLE);
viewHolder.checkmarkView.setColorFilter(themeAccentColor);
if (showWatchedStatus) {
vh.watchedProgressView.setVisibility(View.VISIBLE);
vh.watchedProgressView.setMax(numEpisodes);
vh.watchedProgressView.setProgress(watchedEpisodes);
} else {
viewHolder.checkmarkView.setVisibility(View.INVISIBLE);
vh.watchedProgressView.setVisibility(View.INVISIBLE);
}
if (Utils.isLollipopOrLater()) {
viewHolder.artView.setTransitionName("a" + viewHolder.dataHolder.getId());
if (showWatchedStatus) {
int watchedColor = (numEpisodes - watchedEpisodes == 0)? finishedColor : inProgressColor;
vh.watchedProgressView.setProgressTintList(ColorStateList.valueOf(watchedColor));
}
vh.artView.setTransitionName("a" + vh.dataHolder.getId());
}
}
}
@ -405,8 +417,8 @@ public class TVShowListFragment extends AbstractCursorListFragment {
TextView titleView;
TextView detailsView;
TextView premieredView;
ImageView checkmarkView;
ImageView artView;
ProgressBar watchedProgressView;
AbstractInfoFragment.DataHolder dataHolder = new AbstractInfoFragment.DataHolder(0);
}

View File

@ -18,7 +18,9 @@ package org.xbmc.kore.ui.sections.video;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
@ -47,6 +49,7 @@ import org.xbmc.kore.ui.generic.CastFragment;
import org.xbmc.kore.utils.LogUtils;
import org.xbmc.kore.utils.MediaPlayerUtils;
import org.xbmc.kore.utils.UIUtils;
import org.xbmc.kore.utils.Utils;
public class TVShowProgressFragment extends AbstractAdditionalInfoFragment implements LoaderManager.LoaderCallbacks<Cursor> {
private static final String TAG = LogUtils.makeLogTag(TVShowProgressFragment.class);
@ -280,6 +283,17 @@ public class TVShowProgressFragment extends AbstractAdditionalInfoFragment imple
int artHeight = (int)(resources.getDimension(R.dimen.seasonlist_art_heigth) /
UIUtils.IMAGE_RESIZE_FACTOR);
// Get theme colors
Resources.Theme theme = getActivity().getTheme();
TypedArray styledAttributes = theme.obtainStyledAttributes(new int[] {
R.attr.colorinProgress,
R.attr.colorFinished
});
int inProgressColor = styledAttributes.getColor(styledAttributes.getIndex(0), resources.getColor(R.color.orange_500));
int finishedColor = styledAttributes.getColor(styledAttributes.getIndex(1), resources.getColor(R.color.green_400));
styledAttributes.recycle();
seasonsList.removeAllViews();
do {
int seasonNumber = cursor.getInt(SeasonsListQuery.SEASON);
@ -300,6 +314,11 @@ public class TVShowProgressFragment extends AbstractAdditionalInfoFragment imple
seasonProgressBar.setMax(numEpisodes);
seasonProgressBar.setProgress(watchedEpisodes);
if (Utils.isLollipopOrLater()) {
int watchedColor = (numEpisodes - watchedEpisodes == 0) ? finishedColor : inProgressColor;
seasonProgressBar.setProgressTintList(ColorStateList.valueOf(watchedColor));
}
UIUtils.loadImageWithCharacterAvatar(getActivity(), hostManager,
thumbnail,
String.valueOf(seasonNumber),

View File

@ -45,13 +45,27 @@
android:layout_alignTop="@id/art"
style="@style/TextAppearance.Medialist.Title"/>
<ProgressBar
android:id="@+id/tv_shows_progress_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/title"
android:layout_alignStart="@id/title"
android:layout_below="@id/title"
android:paddingStart="@dimen/large_padding"
android:paddingLeft="@dimen/large_padding"
android:paddingEnd="@dimen/large_padding"
android:paddingRight="@dimen/large_padding"
android:layout_marginTop="@dimen/small_padding"
style="?android:attr/progressBarStyleHorizontal"/>
<TextView
android:id="@+id/details"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/title"
android:layout_alignStart="@id/title"
android:layout_below="@id/title"
android:layout_below="@id/tv_shows_progress_bar"
style="@style/TextAppearance.Medialist.Details"/>
<TextView
@ -63,17 +77,5 @@
android:layout_below="@id/details"
android:layout_alignParentBottom="true"
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:layout_alignParentEnd="true"
android:padding="@dimen/default_icon_padding"
style="@style/Widget.Button.Borderless"
android:src="?attr/iconSeen"
android:contentDescription="@string/seen"/>
</RelativeLayout>
</android.support.v7.widget.CardView>

View File

@ -33,6 +33,9 @@
<attr name="fabColorNormal" format="reference|color" />
<attr name="fabColorPressed" format="reference|color" />
<attr name="colorinProgress" format="reference|color" />
<attr name="colorFinished" format="reference|color" />
<attr name="separatorColor" format="reference|color" />
<attr name="drawerBackgroundColor" format="reference|color" />

View File

@ -64,6 +64,9 @@
<!--<item name="fabColorNormal">@color/accent_default</item>-->
<!--<item name="fabColorPressed">@color/accent_default_dark</item>-->
<item name="colorinProgress">@color/yellow_800</item>
<item name="colorFinished">@color/green_600</item>
<!-- Toolbar bar -->
<item name="actionBarTheme">@style/ThemeOverlay.AppCompat.ActionBar</item>
<item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat</item>
@ -187,6 +190,9 @@
<item name="fabColorNormal">@color/accent_default</item>
<item name="fabColorPressed">@color/accent_default_dark</item>
<item name="colorinProgress">@color/yellow_800</item>
<item name="colorFinished">@color/light_green_600</item>
<!-- Toolbar bar -->
<item name="actionBarTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
<item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>