Add progress bar to tv shows list, similar to the one present in the seasons list
This commit is contained in:
parent
dcad05580c
commit
2761c8651b
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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>
|
|
@ -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" />
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue