Merge pull request #683 from nielsvanvelzen/tvapp-direct-utils
Remove a lot of TvApp.getApplication() usages from utils package
This commit is contained in:
@@ -33,7 +33,7 @@ import org.jellyfin.apiclient.model.querying.NextUpQuery
|
||||
* More info: https://developer.android.com/training/tv/discovery/recommendations-channel
|
||||
*/
|
||||
class LeanbackChannelWorker(
|
||||
context: Context,
|
||||
private val context: Context,
|
||||
val workerParams: WorkerParameters,
|
||||
private val apiClient: ApiClient
|
||||
) : CoroutineWorker(context, workerParams) {
|
||||
@@ -47,13 +47,11 @@ class LeanbackChannelWorker(
|
||||
const val PERIODIC_UPDATE_REQUEST_NAME = "LeanbackChannelPeriodicUpdateRequest"
|
||||
}
|
||||
|
||||
private val application = TvApp.getApplication()
|
||||
|
||||
/**
|
||||
* Check if the app can use Leanback features and is API level 26 or higher
|
||||
*/
|
||||
private val isSupported = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
|
||||
&& application.packageManager.hasSystemFeature("android.software.leanback")
|
||||
&& context.packageManager.hasSystemFeature("android.software.leanback")
|
||||
|
||||
/**
|
||||
* Update all channels for the currently authenticated user
|
||||
@@ -62,7 +60,7 @@ class LeanbackChannelWorker(
|
||||
// Fail when not supported
|
||||
!isSupported -> Result.failure()
|
||||
// Retry later if no authenticated user is found
|
||||
application.currentUser == null -> Result.retry()
|
||||
TvApp.getApplication().currentUser == null -> Result.retry()
|
||||
else -> {
|
||||
// Update various channels
|
||||
updateMyMedia()
|
||||
@@ -79,16 +77,16 @@ class LeanbackChannelWorker(
|
||||
* The [name] parameter is used to store the id and should be unique.
|
||||
*/
|
||||
private fun getChannelUri(name: String, settings: Channel): Uri {
|
||||
val store = application.getSharedPreferences("leanback_channels", Context.MODE_PRIVATE)
|
||||
val store = context.getSharedPreferences("leanback_channels", Context.MODE_PRIVATE)
|
||||
|
||||
val uri = if (store.contains(name)) {
|
||||
// Retrieve uri and update content resolver
|
||||
Uri.parse(store.getString(name, null)).also { uri ->
|
||||
application.contentResolver.update(uri, settings.toContentValues(), null, null)
|
||||
context.contentResolver.update(uri, settings.toContentValues(), null, null)
|
||||
}
|
||||
} else {
|
||||
// Create new channel and save uri
|
||||
application.contentResolver.insert(TvContractCompat.Channels.CONTENT_URI, settings.toContentValues())!!.also { uri ->
|
||||
context.contentResolver.insert(TvContractCompat.Channels.CONTENT_URI, settings.toContentValues())!!.also { uri ->
|
||||
store.edit().putString(name, uri.toString()).apply()
|
||||
}
|
||||
|
||||
@@ -98,8 +96,8 @@ class LeanbackChannelWorker(
|
||||
}
|
||||
|
||||
// Update logo
|
||||
ResourcesCompat.getDrawable(application.resources, R.drawable.ic_jellyfin, null)?.let {
|
||||
ChannelLogoUtils.storeChannelLogo(application, ContentUris.parseId(uri), it.toBitmap(80.dp, 80.dp))
|
||||
ResourcesCompat.getDrawable(context.resources, R.drawable.ic_jellyfin, null)?.let {
|
||||
ChannelLogoUtils.storeChannelLogo(context, ContentUris.parseId(uri), it.toBitmap(80.dp, 80.dp))
|
||||
}
|
||||
|
||||
return uri
|
||||
@@ -112,19 +110,19 @@ class LeanbackChannelWorker(
|
||||
// Get channel
|
||||
val channelUri = getChannelUri("my_media", Channel.Builder()
|
||||
.setType(TvContractCompat.Channels.TYPE_PREVIEW)
|
||||
.setDisplayName(application.getString(R.string.lbl_my_media))
|
||||
.setAppLinkIntent(Intent(application, StartupActivity::class.java))
|
||||
.setDisplayName(context.getString(R.string.lbl_my_media))
|
||||
.setAppLinkIntent(Intent(context, StartupActivity::class.java))
|
||||
.build())
|
||||
|
||||
val response = apiClient.getUserViews() ?: return
|
||||
|
||||
// Delete current items
|
||||
application.contentResolver.delete(TvContractCompat.PreviewPrograms.CONTENT_URI, null, null)
|
||||
context.contentResolver.delete(TvContractCompat.PreviewPrograms.CONTENT_URI, null, null)
|
||||
|
||||
// Add new items
|
||||
application.contentResolver.bulkInsert(TvContractCompat.PreviewPrograms.CONTENT_URI, response.items.map { item ->
|
||||
context.contentResolver.bulkInsert(TvContractCompat.PreviewPrograms.CONTENT_URI, response.items.map { item ->
|
||||
val imageUri = if (item.hasPrimaryImage) Uri.parse(apiClient.GetImageUrl(item, ImageOptions()))
|
||||
else Uri.parse(ImageUtils.getResourceUrl(R.drawable.tile_land_tv))
|
||||
else Uri.parse(ImageUtils.getResourceUrl(context, R.drawable.tile_land_tv))
|
||||
|
||||
PreviewProgram.Builder()
|
||||
.setChannelId(ContentUris.parseId(channelUri))
|
||||
@@ -132,7 +130,7 @@ class LeanbackChannelWorker(
|
||||
.setTitle(item.name)
|
||||
.setPosterArtUri(imageUri)
|
||||
.setPosterArtAspectRatio(TvContractCompat.PreviewPrograms.ASPECT_RATIO_16_9)
|
||||
.setIntent(Intent(application, StartupActivity::class.java).apply {
|
||||
.setIntent(Intent(context, StartupActivity::class.java).apply {
|
||||
putExtra(StartupActivity.ITEM_ID, item.id)
|
||||
putExtra(StartupActivity.ITEM_IS_USER_VIEW, true)
|
||||
})
|
||||
@@ -146,10 +144,10 @@ class LeanbackChannelWorker(
|
||||
*/
|
||||
private suspend fun updateWatchNext() = withContext(Dispatchers.Default) {
|
||||
// Delete current items
|
||||
application.contentResolver.delete(WatchNextPrograms.CONTENT_URI, null, null)
|
||||
context.contentResolver.delete(WatchNextPrograms.CONTENT_URI, null, null)
|
||||
|
||||
// Get user or return if no user is found (not authenticated)
|
||||
val user = application.currentUser ?: return@withContext
|
||||
val user = TvApp.getApplication().currentUser ?: return@withContext
|
||||
|
||||
// Get new items
|
||||
val response = apiClient.getNextUpEpisodes(NextUpQuery().apply {
|
||||
@@ -161,7 +159,7 @@ class LeanbackChannelWorker(
|
||||
|
||||
// Add new items
|
||||
response?.items?.let { items ->
|
||||
application.contentResolver.bulkInsert(
|
||||
context.contentResolver.bulkInsert(
|
||||
WatchNextPrograms.CONTENT_URI,
|
||||
items.map { item -> getBaseItemAsWatchNextProgram(item).toContentValues() }.toTypedArray()
|
||||
)
|
||||
@@ -210,7 +208,7 @@ class LeanbackChannelWorker(
|
||||
}
|
||||
|
||||
// Set intent to open the episode
|
||||
setIntent(Intent(application, StartupActivity::class.java).apply {
|
||||
setIntent(Intent(context, StartupActivity::class.java).apply {
|
||||
putExtra(StartupActivity.ITEM_ID, item.id)
|
||||
})
|
||||
}.build()
|
||||
|
||||
@@ -27,7 +27,7 @@ public class FriendlyDateButton extends FrameLayout {
|
||||
dateVal = thisDate;
|
||||
Date date = new Date(thisDate);
|
||||
|
||||
((TextView)v.findViewById(R.id.friendlyName)).setText(TimeUtils.getFriendlyDate(date, true));
|
||||
((TextView)v.findViewById(R.id.friendlyName)).setText(TimeUtils.getFriendlyDate(context, date, true));
|
||||
((TextView)v.findViewById(R.id.date)).setText(android.text.format.DateFormat.getDateFormat(context).format(date));
|
||||
|
||||
}
|
||||
|
||||
@@ -410,7 +410,7 @@ public class LiveProgramDetailPopup {
|
||||
apiClient.getValue().GetLiveTvSeriesTimerAsync(mProgram.getSeriesTimerId(), new Response<SeriesTimerInfoDto>() {
|
||||
@Override
|
||||
public void onResponse(SeriesTimerInfoDto response) {
|
||||
mRecordPopup.setContent(mProgram, response, mSelectedProgramView, recordSeries);
|
||||
mRecordPopup.setContent(mActivity, mProgram, response, mSelectedProgramView, recordSeries);
|
||||
mRecordPopup.show();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -190,7 +190,7 @@ public class RecordPopup {
|
||||
return (mPopup != null && mPopup.isShowing());
|
||||
}
|
||||
|
||||
public void setContent(BaseItemDto program, SeriesTimerInfoDto current, IRecordingIndicatorView selectedView, boolean recordSeries) {
|
||||
public void setContent(Context context, BaseItemDto program, SeriesTimerInfoDto current, IRecordingIndicatorView selectedView, boolean recordSeries) {
|
||||
mProgramId = program.getId();
|
||||
mCurrentOptions = current;
|
||||
mRecordSeries = recordSeries;
|
||||
@@ -199,7 +199,7 @@ public class RecordPopup {
|
||||
mDTitle.setText(program.getName());
|
||||
|
||||
// build timeline info
|
||||
setTimelineRow(mDTimeline, program);
|
||||
setTimelineRow(context, mDTimeline, program);
|
||||
|
||||
// set defaults
|
||||
mPrePadding.setSelection(getPaddingNdx(current.getPrePaddingSeconds()));
|
||||
@@ -239,7 +239,7 @@ public class RecordPopup {
|
||||
if (mPopup != null && mPopup.isShowing()) mPopup.dismiss();
|
||||
}
|
||||
|
||||
private void setTimelineRow(LinearLayout timelineRow, BaseItemDto program) {
|
||||
private void setTimelineRow(Context context, LinearLayout timelineRow, BaseItemDto program) {
|
||||
timelineRow.removeAllViews();
|
||||
if (program.getStartDate() == null) return;
|
||||
|
||||
@@ -253,7 +253,7 @@ public class RecordPopup {
|
||||
channel.setTextColor(mActivity.getResources().getColor(android.R.color.holo_blue_light));
|
||||
timelineRow.addView(channel);
|
||||
TextView datetime = new TextView(mActivity);
|
||||
datetime.setText(TimeUtils.getFriendlyDate(local)+ " @ "+android.text.format.DateFormat.getTimeFormat(mActivity).format(local)+ " ("+ DateUtils.getRelativeTimeSpanString(local.getTime())+")");
|
||||
datetime.setText(TimeUtils.getFriendlyDate(context, local)+ " @ "+android.text.format.DateFormat.getTimeFormat(mActivity).format(local)+ " ("+ DateUtils.getRelativeTimeSpanString(local.getTime())+")");
|
||||
timelineRow.addView(datetime);
|
||||
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ package org.jellyfin.androidtv.ui.browsing;
|
||||
|
||||
import org.jellyfin.androidtv.ui.livetv.TvManager;
|
||||
import org.jellyfin.androidtv.ui.presentation.CardPresenter;
|
||||
|
||||
import org.jellyfin.apiclient.interaction.Response;
|
||||
import org.jellyfin.apiclient.model.livetv.TimerQuery;
|
||||
|
||||
@@ -15,7 +14,7 @@ public class BrowseScheduleFragment extends EnhancedBrowseFragment {
|
||||
|
||||
@Override
|
||||
protected void setupQueries(final IRowLoader rowLoader) {
|
||||
TvManager.getScheduleRowsAsync(new TimerQuery(), new CardPresenter(true), mRowsAdapter, new Response<Integer>() {
|
||||
TvManager.getScheduleRowsAsync(requireContext(), new TimerQuery(), new CardPresenter(true), mRowsAdapter, new Response<Integer>() {
|
||||
@Override
|
||||
public void onResponse(Integer response) {
|
||||
if (response == 0) mActivity.setTitle("No Scheduled Recordings");
|
||||
|
||||
@@ -588,7 +588,7 @@ public class EnhancedBrowseFragment extends Fragment implements IRowLoader {
|
||||
if (mCurrentItem == null) return;
|
||||
mTitle.setText(mCurrentItem.getName());
|
||||
|
||||
String summary = mCurrentItem.getSummary();
|
||||
String summary = mCurrentItem.getSummary(requireContext());
|
||||
if (summary != null) mSummary.setText(TextUtilsKt.toHtmlSpanned(summary));
|
||||
else mSummary.setText(null);
|
||||
|
||||
|
||||
@@ -188,7 +188,7 @@ public class FullDetailsActivity extends BaseActivity implements IRecordingIndic
|
||||
@Override
|
||||
public void onResponse(SeriesTimerInfoDto response) {
|
||||
mSeriesTimerInfo = response;
|
||||
mBaseItem.setOverview(BaseItemUtils.getSeriesOverview(mSeriesTimerInfo));
|
||||
mBaseItem.setOverview(BaseItemUtils.getSeriesOverview(mActivity, mSeriesTimerInfo));
|
||||
mDorPresenter.getSummaryView().setText(mBaseItem.getOverview());
|
||||
}
|
||||
});
|
||||
@@ -335,16 +335,6 @@ public class FullDetailsActivity extends BaseActivity implements IRecordingIndic
|
||||
|
||||
private static List<BaseItemType> buttonTypeList = Arrays.asList(buttonTypes);
|
||||
private static String[] directPlayableTypes = new String[] {"Episode","Movie","Video","Recording","Program"};
|
||||
private static List<String> directPlayableTypeList = Arrays.asList(directPlayableTypes);
|
||||
|
||||
private void updatePoster() {
|
||||
if (isFinishing()) return;
|
||||
Glide.with(mActivity)
|
||||
.load(ImageUtils.getPrimaryImageUrl(mBaseItem, apiClient.getValue(), true, false, false, posterHeight))
|
||||
.override(posterWidth, posterHeight)
|
||||
.centerInside()
|
||||
.into(mDorPresenter.getPosterView());
|
||||
}
|
||||
|
||||
private void updateWatched() {
|
||||
if (mWatchedToggleButton != null && mBaseItem != null && mBaseItem.getUserData() != null && !isFinishing()) {
|
||||
@@ -372,7 +362,7 @@ public class FullDetailsActivity extends BaseActivity implements IRecordingIndic
|
||||
item.setSeriesTimerId(mSeriesTimerInfo.getId());
|
||||
item.setBaseItemType(BaseItemType.SeriesTimer);
|
||||
item.setName(mSeriesTimerInfo.getName());
|
||||
item.setOverview(BaseItemUtils.getSeriesOverview(mSeriesTimerInfo));
|
||||
item.setOverview(BaseItemUtils.getSeriesOverview(this, mSeriesTimerInfo));
|
||||
|
||||
setBaseItem(item);
|
||||
} else {
|
||||
@@ -415,7 +405,7 @@ public class FullDetailsActivity extends BaseActivity implements IRecordingIndic
|
||||
|
||||
String primaryImageUrl = ImageUtils.getLogoImageUrl(mBaseItem, apiClient.getValue(), 600);
|
||||
if (primaryImageUrl == null) {
|
||||
primaryImageUrl = ImageUtils.getPrimaryImageUrl(mBaseItem, apiClient.getValue(), false, posterHeight);
|
||||
primaryImageUrl = ImageUtils.getPrimaryImageUrl(mActivity, mBaseItem, apiClient.getValue(), false, posterHeight);
|
||||
if (item.getRunTimeTicks() != null && item.getRunTimeTicks() > 0 && item.getUserData() != null && item.getUserData().getPlaybackPositionTicks() > 0)
|
||||
mDetailsOverviewRow.setProgress(((int) (item.getUserData().getPlaybackPositionTicks() * 100.0 / item.getRunTimeTicks())));
|
||||
}
|
||||
@@ -724,7 +714,7 @@ public class FullDetailsActivity extends BaseActivity implements IRecordingIndic
|
||||
case SeriesTimer:
|
||||
TimerQuery scheduled = new TimerQuery();
|
||||
scheduled.setSeriesTimerId(mSeriesTimerInfo.getId());
|
||||
TvManager.getScheduleRowsAsync(scheduled, new CardPresenter(true), adapter, new Response<Integer>());
|
||||
TvManager.getScheduleRowsAsync(this, scheduled, new CardPresenter(true), adapter, new Response<Integer>());
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1409,7 +1399,7 @@ public class FullDetailsActivity extends BaseActivity implements IRecordingIndic
|
||||
@Override
|
||||
public void onResponse(SeriesTimerInfoDto response) {
|
||||
if (recordSeries || Utils.isTrue(program.getIsSports())){
|
||||
mRecordPopup.setContent(program, response, mActivity, recordSeries);
|
||||
mRecordPopup.setContent(mActivity, program, response, mActivity, recordSeries);
|
||||
mRecordPopup.show();
|
||||
} else {
|
||||
//just record with defaults
|
||||
|
||||
@@ -506,7 +506,7 @@ public class ItemListActivity extends BaseActivity {
|
||||
int posterWidth = (int)((aspect) * posterHeight);
|
||||
if (posterHeight < 10) posterWidth = Utils.convertDpToPixel(this, 150); //Guard against zero size images causing picasso to barf
|
||||
|
||||
String primaryImageUrl = ImageUtils.getPrimaryImageUrl(mBaseItem, apiClient.getValue(), false, posterHeight);
|
||||
String primaryImageUrl = ImageUtils.getPrimaryImageUrl(this, mBaseItem, apiClient.getValue(), false, posterHeight);
|
||||
|
||||
|
||||
Glide.with(this)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.jellyfin.androidtv.ui.itemhandling;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.text.format.DateUtils;
|
||||
|
||||
@@ -222,30 +223,30 @@ public class BaseRowItem {
|
||||
}
|
||||
}
|
||||
|
||||
public String getImageUrl(String imageType, int maxHeight) {
|
||||
public String getImageUrl(Context context, String imageType, int maxHeight) {
|
||||
switch (type) {
|
||||
case BaseItem:
|
||||
case LiveTvProgram:
|
||||
case LiveTvRecording:
|
||||
switch (imageType) {
|
||||
case org.jellyfin.androidtv.constant.ImageType.BANNER:
|
||||
return ImageUtils.getBannerImageUrl(baseItem, apiClient.getValue(), maxHeight);
|
||||
return ImageUtils.getBannerImageUrl(context, baseItem, apiClient.getValue(), maxHeight);
|
||||
case org.jellyfin.androidtv.constant.ImageType.THUMB:
|
||||
return ImageUtils.getThumbImageUrl(baseItem, apiClient.getValue(), maxHeight);
|
||||
return ImageUtils.getThumbImageUrl(context, baseItem, apiClient.getValue(), maxHeight);
|
||||
default:
|
||||
return getPrimaryImageUrl(maxHeight);
|
||||
return getPrimaryImageUrl(context, maxHeight);
|
||||
}
|
||||
default:
|
||||
return getPrimaryImageUrl(maxHeight);
|
||||
return getPrimaryImageUrl(context, maxHeight);
|
||||
}
|
||||
}
|
||||
|
||||
public String getPrimaryImageUrl(int maxHeight) {
|
||||
public String getPrimaryImageUrl(Context context, int maxHeight) {
|
||||
switch (type) {
|
||||
case BaseItem:
|
||||
case LiveTvProgram:
|
||||
case LiveTvRecording:
|
||||
return ImageUtils.getPrimaryImageUrl(baseItem, apiClient.getValue(), preferParentThumb, maxHeight);
|
||||
return ImageUtils.getPrimaryImageUrl(context, baseItem, apiClient.getValue(), preferParentThumb, maxHeight);
|
||||
case Person:
|
||||
return ImageUtils.getPrimaryImageUrl(person, apiClient.getValue(), maxHeight);
|
||||
case User:
|
||||
@@ -255,11 +256,11 @@ public class BaseRowItem {
|
||||
case LiveTvChannel:
|
||||
return ImageUtils.getPrimaryImageUrl(channelInfo, apiClient.getValue());
|
||||
case Server:
|
||||
return ImageUtils.getResourceUrl(R.drawable.tile_port_server);
|
||||
return ImageUtils.getResourceUrl(context, R.drawable.tile_port_server);
|
||||
case GridButton:
|
||||
return ImageUtils.getResourceUrl(gridButton.getImageIndex());
|
||||
return ImageUtils.getResourceUrl(context, gridButton.getImageIndex());
|
||||
case SeriesTimer:
|
||||
return ImageUtils.getResourceUrl(R.drawable.tile_land_series_timer);
|
||||
return ImageUtils.getResourceUrl(context, R.drawable.tile_land_series_timer);
|
||||
case SearchHint:
|
||||
if (Utils.isNonEmpty(searchHint.getPrimaryImageTag())) {
|
||||
return ImageUtils.getImageUrl(searchHint.getItemId(), ImageType.Primary, searchHint.getPrimaryImageTag(), apiClient.getValue());
|
||||
@@ -400,10 +401,10 @@ public class BaseRowItem {
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getSubText() {
|
||||
public String getSubText(Context context) {
|
||||
switch (type) {
|
||||
case BaseItem:
|
||||
return BaseItemUtils.getSubName(baseItem);
|
||||
return BaseItemUtils.getSubName(context, baseItem);
|
||||
case Person:
|
||||
return person.getRole();
|
||||
case Chapter:
|
||||
@@ -439,7 +440,7 @@ public class BaseRowItem {
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getSummary() {
|
||||
public String getSummary(Context context) {
|
||||
switch (type) {
|
||||
case BaseItem:
|
||||
case LiveTvRecording:
|
||||
@@ -454,7 +455,7 @@ public class BaseRowItem {
|
||||
case GridButton:
|
||||
break;
|
||||
case SeriesTimer:
|
||||
return BaseItemUtils.getSeriesOverview(seriesTimerInfo);
|
||||
return BaseItemUtils.getSeriesOverview(context, seriesTimerInfo);
|
||||
}
|
||||
|
||||
return "";
|
||||
|
||||
@@ -955,7 +955,7 @@ public class LiveTvGuideActivity extends BaseActivity implements ILiveTvGuide {
|
||||
mCurrentGuideStart.set(Calendar.MILLISECOND, 0);
|
||||
mCurrentLocalGuideStart = mCurrentGuideStart.getTimeInMillis();
|
||||
|
||||
mDisplayDate.setText(TimeUtils.getFriendlyDate(mCurrentGuideStart.getTime()));
|
||||
mDisplayDate.setText(TimeUtils.getFriendlyDate(this, mCurrentGuideStart.getTime()));
|
||||
Calendar current = (Calendar) mCurrentGuideStart.clone();
|
||||
mCurrentGuideEnd = (Calendar) mCurrentGuideStart.clone();
|
||||
int oneHour = 60 * PIXELS_PER_MINUTE;
|
||||
@@ -1011,7 +1011,7 @@ public class LiveTvGuideActivity extends BaseActivity implements ILiveTvGuide {
|
||||
InfoLayoutHelper.addInfoRow(mActivity, mSelectedProgram, mInfoRow, false, false);
|
||||
|
||||
if (mSelectedProgram.getId() != null) {
|
||||
mDisplayDate.setText(TimeUtils.getFriendlyDate(TimeUtils.convertToLocalDate(mSelectedProgram.getStartDate())));
|
||||
mDisplayDate.setText(TimeUtils.getFriendlyDate(this, TimeUtils.convertToLocalDate(mSelectedProgram.getStartDate())));
|
||||
String url = ImageUtils.getPrimaryImageUrl(mSelectedProgram, get(ApiClient.class));
|
||||
Glide.with(mActivity).load(url).override(IMAGE_SIZE, IMAGE_SIZE).centerInside().into(mImage);
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.jellyfin.androidtv.ui.livetv;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.graphics.Typeface;
|
||||
import android.text.format.DateUtils;
|
||||
import android.widget.LinearLayout;
|
||||
@@ -360,7 +361,7 @@ public class TvManager {
|
||||
channel.setTextColor(activity.getResources().getColor(android.R.color.holo_blue_light));
|
||||
timelineRow.addView(channel);
|
||||
TextView datetime = new TextView(activity);
|
||||
datetime.setText(TimeUtils.getFriendlyDate(local)+ " @ "+android.text.format.DateFormat.getTimeFormat(activity).format(local)+ " ("+ DateUtils.getRelativeTimeSpanString(local.getTime())+")");
|
||||
datetime.setText(TimeUtils.getFriendlyDate(activity, local)+ " @ "+android.text.format.DateFormat.getTimeFormat(activity).format(local)+ " ("+ DateUtils.getRelativeTimeSpanString(local.getTime())+")");
|
||||
timelineRow.addView(datetime);
|
||||
|
||||
}
|
||||
@@ -395,7 +396,7 @@ public class TvManager {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void getScheduleRowsAsync(TimerQuery query, final Presenter presenter, final ArrayObjectAdapter rowAdapter, final Response<Integer> outerResponse) {
|
||||
public static void getScheduleRowsAsync(Context context, TimerQuery query, final Presenter presenter, final ArrayObjectAdapter rowAdapter, final Response<Integer> outerResponse) {
|
||||
get(ApiClient.class).GetLiveTvTimersAsync(query, new Response<TimerInfoDtoResult>() {
|
||||
@Override
|
||||
public void onResponse(TimerInfoDtoResult response) {
|
||||
@@ -407,7 +408,7 @@ public class TvManager {
|
||||
if (thisDay != currentDay) {
|
||||
if (currentDay > 0 && currentTimers.size() > 0) {
|
||||
//Add the last set of timers as a row
|
||||
addRow(currentTimers, presenter, rowAdapter);
|
||||
addRow(context, currentTimers, presenter, rowAdapter);
|
||||
currentTimers.clear();
|
||||
}
|
||||
currentDay = thisDay;
|
||||
@@ -430,7 +431,7 @@ public class TvManager {
|
||||
|
||||
}
|
||||
|
||||
if (currentTimers.size() > 0) addRow(currentTimers, presenter, rowAdapter);
|
||||
if (currentTimers.size() > 0) addRow(context, currentTimers, presenter, rowAdapter);
|
||||
|
||||
outerResponse.onResponse(rowAdapter.size());
|
||||
}
|
||||
@@ -445,10 +446,10 @@ public class TvManager {
|
||||
|
||||
}
|
||||
|
||||
private static void addRow(List<BaseItemDto> timers, Presenter presenter, ArrayObjectAdapter rowAdapter) {
|
||||
private static void addRow(Context context, List<BaseItemDto> timers, Presenter presenter, ArrayObjectAdapter rowAdapter) {
|
||||
ItemRowAdapter scheduledAdapter = new ItemRowAdapter(timers, presenter, rowAdapter, true);
|
||||
scheduledAdapter.Retrieve();
|
||||
ListRow scheduleRow = new ListRow(new HeaderItem(TimeUtils.getFriendlyDate(TimeUtils.convertToLocalDate(timers.get(0).getStartDate()), true)), scheduledAdapter);
|
||||
ListRow scheduleRow = new ListRow(new HeaderItem(TimeUtils.getFriendlyDate(context, TimeUtils.convertToLocalDate(timers.get(0).getStartDate()), true)), scheduledAdapter);
|
||||
rowAdapter.add(scheduleRow);
|
||||
|
||||
}
|
||||
|
||||
@@ -390,7 +390,7 @@ public class AudioNowPlayingActivity extends BaseActivity {
|
||||
if (posterHeight < 10)
|
||||
posterWidth = Utils.convertDpToPixel(mActivity, 150); //Guard against zero size images causing picasso to barf
|
||||
|
||||
String primaryImageUrl = ImageUtils.getPrimaryImageUrl(mBaseItem, apiClient.getValue(), false, posterHeight);
|
||||
String primaryImageUrl = ImageUtils.getPrimaryImageUrl(this, mBaseItem, apiClient.getValue(), false, posterHeight);
|
||||
Timber.d("Audio Poster url: %s", primaryImageUrl);
|
||||
Glide.with(mActivity)
|
||||
.load(primaryImageUrl)
|
||||
|
||||
@@ -1031,7 +1031,7 @@ public class CustomPlaybackOverlayFragment extends Fragment implements IPlayback
|
||||
mCurrentGuideStart.set(Calendar.MILLISECOND, 0);
|
||||
mCurrentLocalGuideStart = mCurrentGuideStart.getTimeInMillis();
|
||||
|
||||
mDisplayDate.setText(TimeUtils.getFriendlyDate(mCurrentGuideStart.getTime()));
|
||||
mDisplayDate.setText(TimeUtils.getFriendlyDate(requireContext(), mCurrentGuideStart.getTime()));
|
||||
Calendar current = (Calendar) mCurrentGuideStart.clone();
|
||||
mCurrentGuideEnd = (Calendar) mCurrentGuideStart.clone();
|
||||
int oneHour = 60 * PIXELS_PER_MINUTE;
|
||||
@@ -1080,7 +1080,7 @@ public class CustomPlaybackOverlayFragment extends Fragment implements IPlayback
|
||||
//info row
|
||||
InfoLayoutHelper.addInfoRow(mActivity, mSelectedProgram, mGuideInfoRow, false, false);
|
||||
if (mSelectedProgram.getId() != null) {
|
||||
mDisplayDate.setText(TimeUtils.getFriendlyDate(TimeUtils.convertToLocalDate(mSelectedProgram.getStartDate())));
|
||||
mDisplayDate.setText(TimeUtils.getFriendlyDate(mActivity, TimeUtils.convertToLocalDate(mSelectedProgram.getStartDate())));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1164,16 +1164,6 @@ public class CustomPlaybackOverlayFragment extends Fragment implements IPlayback
|
||||
}
|
||||
};
|
||||
|
||||
private void updatePoster(BaseItemDto item, ImageView target, boolean preferSeries) {
|
||||
if (getActivity() != null && !getActivity().isFinishing()) {
|
||||
int height = Utils.convertDpToPixel(getActivity(), 300);
|
||||
int width = Utils.convertDpToPixel(getActivity(), 150);
|
||||
String posterImageUrl = ImageUtils.getPrimaryImageUrl(item, apiClient.getValue(), false, false, preferSeries, height);
|
||||
if (posterImageUrl != null)
|
||||
Glide.with(getActivity()).load(posterImageUrl).override(width, height).centerInside().into(target);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateLogo(BaseItemDto item, ImageView target) {
|
||||
if (getActivity() != null && !getActivity().isFinishing()) {
|
||||
int height = Utils.convertDpToPixel(getActivity(), 60);
|
||||
|
||||
@@ -11,7 +11,7 @@ fun OptionsScreen.aboutCategory() = category {
|
||||
|
||||
info {
|
||||
setTitle(R.string.lbl_version)
|
||||
content = Utils.getVersionString()
|
||||
content = Utils.getVersionString(context)
|
||||
}
|
||||
|
||||
info {
|
||||
|
||||
@@ -6,8 +6,8 @@ import org.jellyfin.androidtv.R
|
||||
import org.jellyfin.androidtv.preference.UserPreferences
|
||||
import org.jellyfin.androidtv.preference.constant.AudioBehavior
|
||||
import org.jellyfin.androidtv.preference.constant.PreferredVideoPlayer
|
||||
import org.jellyfin.androidtv.ui.preference.dsl.*
|
||||
import org.jellyfin.androidtv.ui.preference.custom.DurationSeekBarPreference
|
||||
import org.jellyfin.androidtv.ui.preference.dsl.*
|
||||
import org.jellyfin.androidtv.util.DeviceUtils
|
||||
import org.jellyfin.androidtv.util.TimeUtils
|
||||
|
||||
@@ -72,7 +72,7 @@ fun OptionsScreen.playbackCategory(
|
||||
120, 300
|
||||
).map {
|
||||
val value = if (it == 0) activity.getString(R.string.lbl_none)
|
||||
else TimeUtils.formatSeconds(it)
|
||||
else TimeUtils.formatSeconds(context, it)
|
||||
|
||||
it.toString() to value
|
||||
}.toMap()
|
||||
|
||||
@@ -373,7 +373,7 @@ public class CardPresenter extends Presenter {
|
||||
holder.setItem(rowItem, mImageType, 260, 300, mStaticHeight);
|
||||
|
||||
holder.mCardView.setTitleText(rowItem.getCardName());
|
||||
holder.mCardView.setContentText(rowItem.getSubText());
|
||||
holder.mCardView.setContentText(rowItem.getSubText(holder.mCardView.getContext()));
|
||||
if (ImageType.DEFAULT.equals(mImageType)) {
|
||||
holder.mCardView.setOverlayInfo(rowItem);
|
||||
}
|
||||
@@ -399,7 +399,7 @@ public class CardPresenter extends Presenter {
|
||||
}
|
||||
}
|
||||
|
||||
holder.updateCardViewImage(rowItem.getImageUrl(mImageType, holder.getCardHeight()));
|
||||
holder.updateCardViewImage(rowItem.getImageUrl(holder.mCardView.getContext(), mImageType, holder.getCardHeight()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -7,7 +7,6 @@ import android.os.Handler;
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.jellyfin.androidtv.R;
|
||||
import org.jellyfin.androidtv.TvApp;
|
||||
|
||||
public class DelayedMessage {
|
||||
private final String title;
|
||||
@@ -21,8 +20,8 @@ public class DelayedMessage {
|
||||
}
|
||||
|
||||
public DelayedMessage(@NonNull final Context activity, int delay) {
|
||||
title = TvApp.getApplication().getString(R.string.lbl_please_wait);
|
||||
message = TvApp.getApplication().getString(R.string.msg_little_longer);
|
||||
title = activity.getString(R.string.lbl_please_wait);
|
||||
message = activity.getString(R.string.msg_little_longer);
|
||||
|
||||
handler = new Handler(activity.getMainLooper());
|
||||
runnable = new Runnable() {
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package org.jellyfin.androidtv.util;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
|
||||
import androidx.annotation.AnyRes;
|
||||
|
||||
import org.jellyfin.androidtv.R;
|
||||
import org.jellyfin.androidtv.TvApp;
|
||||
import org.jellyfin.apiclient.interaction.ApiClient;
|
||||
import org.jellyfin.apiclient.model.dto.BaseItemDto;
|
||||
import org.jellyfin.apiclient.model.dto.BaseItemPerson;
|
||||
@@ -121,9 +121,9 @@ public class ImageUtils {
|
||||
return apiClient.GetImageUrl(itemId, options);
|
||||
}
|
||||
|
||||
public static String getBannerImageUrl(BaseItemDto item, ApiClient apiClient, int maxHeight) {
|
||||
public static String getBannerImageUrl(Context context, BaseItemDto item, ApiClient apiClient, int maxHeight) {
|
||||
if (!item.getHasBanner()) {
|
||||
return getPrimaryImageUrl(item, apiClient, false, maxHeight);
|
||||
return getPrimaryImageUrl(context, item, apiClient, false, maxHeight);
|
||||
}
|
||||
|
||||
ImageOptions options = new ImageOptions();
|
||||
@@ -144,9 +144,9 @@ public class ImageUtils {
|
||||
return apiClient.GetImageUrl(item.getId(), options);
|
||||
}
|
||||
|
||||
public static String getThumbImageUrl(BaseItemDto item, ApiClient apiClient, int maxHeight) {
|
||||
public static String getThumbImageUrl(Context context, BaseItemDto item, ApiClient apiClient, int maxHeight) {
|
||||
if (!item.getHasThumb()) {
|
||||
return getPrimaryImageUrl(item, apiClient, true, maxHeight);
|
||||
return getPrimaryImageUrl(context, item, apiClient, true, maxHeight);
|
||||
}
|
||||
|
||||
ImageOptions options = new ImageOptions();
|
||||
@@ -155,13 +155,13 @@ public class ImageUtils {
|
||||
return apiClient.GetImageUrl(item.getId(), options);
|
||||
}
|
||||
|
||||
public static String getPrimaryImageUrl(BaseItemDto item, ApiClient apiClient, boolean preferParentThumb, int maxHeight) {
|
||||
return getPrimaryImageUrl(item, apiClient, false, preferParentThumb, false, maxHeight);
|
||||
public static String getPrimaryImageUrl(Context context, BaseItemDto item, ApiClient apiClient, boolean preferParentThumb, int maxHeight) {
|
||||
return getPrimaryImageUrl(context, item, apiClient, false, preferParentThumb, false, maxHeight);
|
||||
}
|
||||
|
||||
public static String getPrimaryImageUrl(BaseItemDto item, ApiClient apiClient, boolean showProgress, boolean preferParentThumb, boolean preferSeriesPoster, int maxHeight) {
|
||||
public static String getPrimaryImageUrl(Context context, BaseItemDto item, ApiClient apiClient, boolean showProgress, boolean preferParentThumb, boolean preferSeriesPoster, int maxHeight) {
|
||||
if (item.getBaseItemType() == BaseItemType.SeriesTimer) {
|
||||
return getResourceUrl(R.drawable.tile_land_series_timer);
|
||||
return getResourceUrl(context, R.drawable.tile_land_series_timer);
|
||||
}
|
||||
|
||||
ImageOptions options = new ImageOptions();
|
||||
@@ -279,8 +279,8 @@ public class ImageUtils {
|
||||
* @param resourceId The id of the image resource
|
||||
* @return The URL of the image resource
|
||||
*/
|
||||
public static String getResourceUrl(@AnyRes int resourceId) {
|
||||
Resources resources = TvApp.getApplication().getApplicationContext().getResources();
|
||||
public static String getResourceUrl(Context context, @AnyRes int resourceId) {
|
||||
Resources resources = context.getResources();
|
||||
|
||||
return String.format("%s://%s/%s/%s", ContentResolver.SCHEME_ANDROID_RESOURCE, resources.getResourcePackageName(resourceId), resources.getResourceTypeName(resourceId), resources.getResourceEntryName(resourceId));
|
||||
}
|
||||
|
||||
@@ -7,10 +7,11 @@ import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.google.android.flexbox.FlexboxLayout;
|
||||
|
||||
import org.jellyfin.androidtv.R;
|
||||
import org.jellyfin.androidtv.TvApp;
|
||||
import org.jellyfin.androidtv.ui.itemhandling.BaseRowItem;
|
||||
import org.jellyfin.androidtv.util.apiclient.BaseItemUtils;
|
||||
import org.jellyfin.androidtv.util.apiclient.StreamHelper;
|
||||
@@ -26,7 +27,6 @@ import java.util.Date;
|
||||
public class InfoLayoutHelper {
|
||||
|
||||
private static int textSize = 16;
|
||||
private static int BTMARGIN = Utils.convertDpToPixel(TvApp.getApplication(), -2);
|
||||
|
||||
public static void addInfoRow(Activity activity, BaseRowItem item, LinearLayout layout, boolean includeRuntime, boolean includeEndtime) {
|
||||
switch (item.getItemType()) {
|
||||
@@ -169,21 +169,21 @@ public class InfoLayoutHelper {
|
||||
layout.addView(name);
|
||||
}
|
||||
|
||||
private static void addProgramInfo(Activity activity, BaseItemDto item, LinearLayout layout) {
|
||||
private static void addProgramInfo(@NonNull Activity activity, BaseItemDto item, LinearLayout layout) {
|
||||
TextView name = new TextView(activity);
|
||||
name.setTextSize(textSize);
|
||||
name.setText(BaseItemUtils.getProgramSubText(item)+" ");
|
||||
name.setText(BaseItemUtils.getProgramSubText(activity, item)+" ");
|
||||
layout.addView(name);
|
||||
|
||||
if (BaseItemUtils.isNew(item)) {
|
||||
addBlockText(activity, layout, TvApp.getApplication().getString(R.string.lbl_new), 12, Color.GRAY, R.drawable.dark_green_gradient);
|
||||
addBlockText(activity, layout, activity.getString(R.string.lbl_new), 12, Color.GRAY, R.drawable.dark_green_gradient);
|
||||
addSpacer(activity, layout, " ");
|
||||
} else if (Utils.isTrue(item.getIsSeries()) && !Utils.isTrue(item.getIsNews())) {
|
||||
addBlockText(activity, layout, TvApp.getApplication().getString(R.string.lbl_repeat), 12, Color.GRAY, R.color.lb_default_brand_color);
|
||||
addBlockText(activity, layout, activity.getString(R.string.lbl_repeat), 12, Color.GRAY, R.color.lb_default_brand_color);
|
||||
addSpacer(activity, layout, " ");
|
||||
}
|
||||
if (Utils.isTrue(item.getIsLive())) {
|
||||
addBlockText(activity, layout, TvApp.getApplication().getString(R.string.lbl_live), 12, Color.GRAY, R.color.lb_default_brand_color);
|
||||
addBlockText(activity, layout, activity.getString(R.string.lbl_live), 12, Color.GRAY, R.color.lb_default_brand_color);
|
||||
addSpacer(activity, layout, " ");
|
||||
|
||||
}
|
||||
@@ -193,7 +193,7 @@ public class InfoLayoutHelper {
|
||||
layout.removeAllViews();
|
||||
TextView text = new TextView(activity);
|
||||
text.setTextSize(textSize);
|
||||
text.setText(item.getSubText() + " ");
|
||||
text.setText(item.getSubText(activity) + " ");
|
||||
layout.addView(text);
|
||||
|
||||
}
|
||||
@@ -261,14 +261,14 @@ public class InfoLayoutHelper {
|
||||
if (hasSomething) addSpacer(activity, layout, " ");
|
||||
}
|
||||
|
||||
private static void addDate(Activity activity, BaseItemDto item, LinearLayout layout) {
|
||||
private static void addDate(@NonNull Activity activity, BaseItemDto item, LinearLayout layout) {
|
||||
TextView date = new TextView(activity);
|
||||
date.setTextSize(textSize);
|
||||
switch (item.getBaseItemType()) {
|
||||
case Person:
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (item.getPremiereDate() != null) {
|
||||
sb.append(TvApp.getApplication().getString(R.string.lbl_born));
|
||||
sb.append(activity.getString(R.string.lbl_born));
|
||||
sb.append(new SimpleDateFormat("d MMM y").format(TimeUtils.convertToLocalDate(item.getPremiereDate())));
|
||||
}
|
||||
if (item.getEndDate() != null) {
|
||||
@@ -291,8 +291,8 @@ public class InfoLayoutHelper {
|
||||
case Program:
|
||||
case TvChannel:
|
||||
if (item.getStartDate() != null && item.getEndDate() != null) {
|
||||
date.setText(android.text.format.DateFormat.getTimeFormat(TvApp.getApplication()).format(TimeUtils.convertToLocalDate(item.getStartDate()))
|
||||
+ "-"+ android.text.format.DateFormat.getTimeFormat(TvApp.getApplication()).format(TimeUtils.convertToLocalDate(item.getEndDate())));
|
||||
date.setText(android.text.format.DateFormat.getTimeFormat(activity).format(TimeUtils.convertToLocalDate(item.getStartDate()))
|
||||
+ "-"+ android.text.format.DateFormat.getTimeFormat(activity).format(TimeUtils.convertToLocalDate(item.getEndDate())));
|
||||
layout.addView(date);
|
||||
addSpacer(activity, layout, " ");
|
||||
}
|
||||
@@ -382,7 +382,7 @@ public class InfoLayoutHelper {
|
||||
view.setText(" " + text + " ");
|
||||
view.setBackgroundResource(backgroundRes);
|
||||
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
|
||||
params.setMargins(0,BTMARGIN,0,0);
|
||||
params.setMargins(0,Utils.convertDpToPixel(activity, -2),0,0);
|
||||
view.setLayoutParams(params);
|
||||
layout.addView(view);
|
||||
|
||||
|
||||
@@ -434,7 +434,7 @@ public class KeyProcessor {
|
||||
toggleLikes(null);
|
||||
return true;
|
||||
case MENU_GOTO_NOW_PLAYING:
|
||||
Intent nowPlaying = new Intent(TvApp.getApplication(), AudioNowPlayingActivity.class);
|
||||
Intent nowPlaying = new Intent(mCurrentActivity, AudioNowPlayingActivity.class);
|
||||
mCurrentActivity.startActivity(nowPlaying);
|
||||
return true;
|
||||
case MENU_REMOVE_FROM_QUEUE:
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package org.jellyfin.androidtv.util;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.text.format.DateFormat;
|
||||
|
||||
import org.jellyfin.androidtv.R;
|
||||
import org.jellyfin.androidtv.TvApp;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
@@ -56,10 +56,10 @@ public class TimeUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public static String formatSeconds(int seconds) {
|
||||
public static String formatSeconds(Context context, int seconds) {
|
||||
// Seconds
|
||||
if (seconds < SECS_PER_MIN) {
|
||||
return seconds + " " + TvApp.getApplication().getString(R.string.lbl_seconds);
|
||||
return seconds + " " + context.getString(R.string.lbl_seconds);
|
||||
}
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
@@ -68,9 +68,9 @@ public class TimeUtils {
|
||||
builder.append(seconds / SECS_PER_MIN)
|
||||
.append(" ");
|
||||
if (seconds < 2 * SECS_PER_MIN) {
|
||||
builder.append(TvApp.getApplication().getString(R.string.lbl_minute));
|
||||
builder.append(context.getString(R.string.lbl_minute));
|
||||
} else {
|
||||
builder.append(TvApp.getApplication().getString(R.string.lbl_minutes));
|
||||
builder.append(context.getString(R.string.lbl_minutes));
|
||||
}
|
||||
return builder.toString();
|
||||
}
|
||||
@@ -79,9 +79,9 @@ public class TimeUtils {
|
||||
builder.append(seconds / SECS_PER_HR)
|
||||
.append(" ");
|
||||
if (seconds < 2 * SECS_PER_HR) {
|
||||
builder.append(TvApp.getApplication().getString(R.string.lbl_hour));
|
||||
builder.append(context.getString(R.string.lbl_hour));
|
||||
} else {
|
||||
builder.append(TvApp.getApplication().getString(R.string.lbl_hours));
|
||||
builder.append(context.getString(R.string.lbl_hours));
|
||||
}
|
||||
return builder.toString();
|
||||
}
|
||||
@@ -141,29 +141,29 @@ public class TimeUtils {
|
||||
return age;
|
||||
}
|
||||
|
||||
public static String getFriendlyDate(Date date) {
|
||||
return getFriendlyDate(date, false);
|
||||
public static String getFriendlyDate(Context context, Date date) {
|
||||
return getFriendlyDate(context, date, false);
|
||||
}
|
||||
|
||||
public static String getFriendlyDate(Date date, boolean relative) {
|
||||
public static String getFriendlyDate(Context context, Date date, boolean relative) {
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.setTime(date);
|
||||
Calendar now = Calendar.getInstance();
|
||||
if (cal.get(Calendar.YEAR) == now.get(Calendar.YEAR)) {
|
||||
if (cal.get(Calendar.DAY_OF_YEAR) == now.get(Calendar.DAY_OF_YEAR)) {
|
||||
return TvApp.getApplication().getString(R.string.lbl_today);
|
||||
return context.getString(R.string.lbl_today);
|
||||
}
|
||||
if (cal.get(Calendar.DAY_OF_YEAR) == now.get(Calendar.DAY_OF_YEAR) + 1) {
|
||||
return TvApp.getApplication().getString(R.string.lbl_tomorrow);
|
||||
return context.getString(R.string.lbl_tomorrow);
|
||||
}
|
||||
if (cal.get(Calendar.DAY_OF_YEAR) < now.get(Calendar.DAY_OF_YEAR) + 7 && cal.get(Calendar.DAY_OF_YEAR) > now.get(Calendar.DAY_OF_YEAR)) {
|
||||
return cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault());
|
||||
}
|
||||
if (relative) {
|
||||
return TvApp.getApplication().getString(R.string.lbl_in_x_days, cal.get(Calendar.DAY_OF_YEAR) - now.get(Calendar.DAY_OF_YEAR));
|
||||
return context.getString(R.string.lbl_in_x_days, cal.get(Calendar.DAY_OF_YEAR) - now.get(Calendar.DAY_OF_YEAR));
|
||||
}
|
||||
}
|
||||
|
||||
return DateFormat.getDateFormat(TvApp.getApplication()).format(date);
|
||||
return DateFormat.getDateFormat(context).format(date);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,8 +69,8 @@ public class Utils {
|
||||
return value != null && value;
|
||||
}
|
||||
|
||||
public static String getVersionString() {
|
||||
return TvApp.getApplication().getString(R.string.lbl_version) + BuildConfig.VERSION_NAME;
|
||||
public static String getVersionString(Context context) {
|
||||
return context.getString(R.string.lbl_version) + BuildConfig.VERSION_NAME;
|
||||
}
|
||||
|
||||
public static String firstToUpper(String value) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.jellyfin.androidtv.util.apiclient;
|
||||
|
||||
import android.content.Context;
|
||||
import android.text.format.DateFormat;
|
||||
|
||||
import org.jellyfin.androidtv.R;
|
||||
@@ -55,10 +56,10 @@ public class BaseItemUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public static String getSubName(BaseItemDto item) {
|
||||
public static String getSubName(Context context, BaseItemDto item) {
|
||||
switch (item.getBaseItemType()) {
|
||||
case Episode:
|
||||
String addendum = item.getLocationType().equals(LocationType.Virtual) && item.getPremiereDate() != null ? " (" + TimeUtils.getFriendlyDate(TimeUtils.convertToLocalDate(item.getPremiereDate())) + ")" : "";
|
||||
String addendum = item.getLocationType().equals(LocationType.Virtual) && item.getPremiereDate() != null ? " (" + TimeUtils.getFriendlyDate(context, TimeUtils.convertToLocalDate(item.getPremiereDate())) + ")" : "";
|
||||
return item.getName() + addendum;
|
||||
case Season:
|
||||
return item.getChildCount() != null && item.getChildCount() > 0 ? item.getChildCount() + " " + TvApp.getApplication().getString(R.string.lbl_episodes) : "";
|
||||
@@ -76,7 +77,7 @@ public class BaseItemUtils {
|
||||
return TvManager.getChannel(TvManager.getAllChannelsIndex(baseItem.getChannelId())).getName();
|
||||
}
|
||||
|
||||
public static String getProgramSubText(BaseItemDto baseItem) {
|
||||
public static String getProgramSubText(Context context, BaseItemDto baseItem) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
// Add the channel name if set
|
||||
if (baseItem.getChannelName() != null) {
|
||||
@@ -93,7 +94,7 @@ public class BaseItemUtils {
|
||||
startTime.setTime(TimeUtils.convertToLocalDate(baseItem.getStartDate()));
|
||||
// If the start time is on a different day, add the date
|
||||
if (startTime.get(Calendar.DAY_OF_YEAR) != Calendar.getInstance().get(Calendar.DAY_OF_YEAR)) {
|
||||
builder.append(TimeUtils.getFriendlyDate(startTime.getTime()))
|
||||
builder.append(TimeUtils.getFriendlyDate(context, startTime.getTime()))
|
||||
.append(" ");
|
||||
}
|
||||
// Add the start and end time
|
||||
@@ -142,7 +143,7 @@ public class BaseItemUtils {
|
||||
return Utils.isTrue(program.getIsSeries()) && !Utils.isTrue(program.getIsNews()) && !Utils.isTrue(program.getIsRepeat());
|
||||
}
|
||||
|
||||
public static String getSeriesOverview(SeriesTimerInfoDto timer) {
|
||||
public static String getSeriesOverview(Context context, SeriesTimerInfoDto timer) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append(TvApp.getApplication().getString(R.string.msg_will_record))
|
||||
.append(" ");
|
||||
@@ -168,14 +169,14 @@ public class BaseItemUtils {
|
||||
builder.append("\n")
|
||||
.append("Starting");
|
||||
if (timer.getPrePaddingSeconds() > 0) {
|
||||
builder.append(TimeUtils.formatSeconds(timer.getPrePaddingSeconds()))
|
||||
builder.append(TimeUtils.formatSeconds(context, timer.getPrePaddingSeconds()))
|
||||
.append(" Early");
|
||||
} else {
|
||||
builder.append("On Schedule");
|
||||
}
|
||||
builder.append(" And Ending ");
|
||||
if (timer.getPostPaddingSeconds() > 0) {
|
||||
builder.append(TimeUtils.formatSeconds(timer.getPostPaddingSeconds()))
|
||||
builder.append(TimeUtils.formatSeconds(context, timer.getPostPaddingSeconds()))
|
||||
.append(" After Schedule");
|
||||
} else {
|
||||
builder.append("On Schedule");
|
||||
|
||||
Reference in New Issue
Block a user