mirror of
https://github.com/jellyfin/jellyfin-androidtv.git
synced 2025-08-06 15:20:34 +08:00
Replace Response<T> usages with local type
This commit is contained in:

committed by
Niels van Velzen

parent
a4d2f0a030
commit
1ed6611b7d
@ -24,7 +24,7 @@ import org.jellyfin.androidtv.data.model.DataRefreshService;
|
||||
import org.jellyfin.androidtv.ui.livetv.LiveTvGuide;
|
||||
import org.jellyfin.androidtv.ui.livetv.TvManager;
|
||||
import org.jellyfin.androidtv.util.Utils;
|
||||
import org.jellyfin.androidtv.util.apiclient.EmptyLifecycleAwareResponse;
|
||||
import org.jellyfin.androidtv.util.apiclient.EmptyResponse;
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto;
|
||||
import org.koin.java.KoinJavaComponent;
|
||||
|
||||
@ -48,13 +48,13 @@ public class LiveProgramDetailPopup {
|
||||
private Button mFirstButton;
|
||||
private Button mSeriesSettingsButton;
|
||||
|
||||
private EmptyLifecycleAwareResponse mTuneAction;
|
||||
private EmptyResponse mTuneAction;
|
||||
|
||||
private View mAnchor;
|
||||
private int mPosLeft;
|
||||
private int mPosTop;
|
||||
|
||||
public LiveProgramDetailPopup(Context context, LifecycleOwner lifecycleOwner, LiveTvGuide tvGuide, int width, EmptyLifecycleAwareResponse tuneAction) {
|
||||
public LiveProgramDetailPopup(Context context, LifecycleOwner lifecycleOwner, LiveTvGuide tvGuide, int width, EmptyResponse tuneAction) {
|
||||
mContext = context;
|
||||
lifecycle = lifecycleOwner.getLifecycle();
|
||||
mTvGuide = tvGuide;
|
||||
@ -247,7 +247,7 @@ public class LiveProgramDetailPopup {
|
||||
tune.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (mTuneAction != null && mTuneAction.getActive()) mTuneAction.onResponse();
|
||||
if (mTuneAction != null) mTuneAction.onResponse();
|
||||
mPopup.dismiss();
|
||||
}
|
||||
});
|
||||
|
@ -59,7 +59,7 @@ import org.jellyfin.androidtv.util.ImageHelper;
|
||||
import org.jellyfin.androidtv.util.InfoLayoutHelper;
|
||||
import org.jellyfin.androidtv.util.KeyProcessor;
|
||||
import org.jellyfin.androidtv.util.Utils;
|
||||
import org.jellyfin.androidtv.util.apiclient.EmptyLifecycleAwareResponse;
|
||||
import org.jellyfin.androidtv.util.apiclient.EmptyResponse;
|
||||
import org.jellyfin.sdk.api.client.ApiClient;
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto;
|
||||
import org.jellyfin.sdk.model.api.BaseItemKind;
|
||||
@ -659,11 +659,9 @@ public class BrowseGridFragment extends Fragment implements View.OnKeyListener {
|
||||
filters.setFavoriteOnly(libraryPreferences.get(LibraryPreferences.Companion.getFilterFavoritesOnly()));
|
||||
filters.setUnwatchedOnly(libraryPreferences.get(LibraryPreferences.Companion.getFilterUnwatchedOnly()));
|
||||
|
||||
mAdapter.setRetrieveFinishedListener(new EmptyLifecycleAwareResponse(getLifecycle()) {
|
||||
mAdapter.setRetrieveFinishedListener(new EmptyResponse() {
|
||||
@Override
|
||||
public void onResponse() {
|
||||
if (!getActive()) return;
|
||||
|
||||
setStatusText(mFolder.getName());
|
||||
if (mCurrentItem == null) { // don't mess-up pos via loadMoreItemsIfNeeded
|
||||
setItem(null);
|
||||
|
@ -77,7 +77,7 @@ import org.jellyfin.androidtv.util.PlaybackHelper;
|
||||
import org.jellyfin.androidtv.util.TimeUtils;
|
||||
import org.jellyfin.androidtv.util.Utils;
|
||||
import org.jellyfin.androidtv.util.apiclient.BaseItemUtils;
|
||||
import org.jellyfin.androidtv.util.apiclient.LifecycleAwareResponse;
|
||||
import org.jellyfin.androidtv.util.apiclient.Response;
|
||||
import org.jellyfin.androidtv.util.sdk.BaseItemExtensionsKt;
|
||||
import org.jellyfin.androidtv.util.sdk.TrailerUtils;
|
||||
import org.jellyfin.androidtv.util.sdk.compat.JavaCompat;
|
||||
@ -714,11 +714,9 @@ public class FullDetailsFragment extends Fragment implements RecordingIndicatorV
|
||||
BaseItemDto baseItem = mBaseItem;
|
||||
if (baseItem.getType() == BaseItemKind.AUDIO || baseItem.getType() == BaseItemKind.MUSIC_ALBUM || baseItem.getType() == BaseItemKind.MUSIC_ARTIST) {
|
||||
if (baseItem.getType() == BaseItemKind.MUSIC_ALBUM || baseItem.getType() == BaseItemKind.MUSIC_ARTIST) {
|
||||
playbackHelper.getValue().getItemsToPlay(getContext(), baseItem, false, false, new LifecycleAwareResponse<List<BaseItemDto>>(getLifecycle()) {
|
||||
playbackHelper.getValue().getItemsToPlay(getContext(), baseItem, false, false, new Response<List<BaseItemDto>>() {
|
||||
@Override
|
||||
public void onResponse(List<BaseItemDto> response) {
|
||||
if (!getActive()) return;
|
||||
|
||||
mediaManager.getValue().addToAudioQueue(response);
|
||||
}
|
||||
});
|
||||
@ -1196,10 +1194,9 @@ public class FullDetailsFragment extends Fragment implements RecordingIndicatorV
|
||||
}
|
||||
|
||||
void play(final BaseItemDto item, final int pos, final boolean shuffle) {
|
||||
playbackHelper.getValue().getItemsToPlay(getContext(), item, pos == 0 && item.getType() == BaseItemKind.MOVIE, shuffle, new LifecycleAwareResponse<List<BaseItemDto>>(getLifecycle()) {
|
||||
playbackHelper.getValue().getItemsToPlay(getContext(), item, pos == 0 && item.getType() == BaseItemKind.MOVIE, shuffle, new Response<List<BaseItemDto>>() {
|
||||
@Override
|
||||
public void onResponse(List<BaseItemDto> response) {
|
||||
if (!getActive()) return;
|
||||
if (response.isEmpty()) {
|
||||
Timber.e("No items to play - ignoring play request.");
|
||||
return;
|
||||
|
@ -17,8 +17,8 @@ import org.jellyfin.androidtv.ui.playback.PlaybackLauncher;
|
||||
import org.jellyfin.androidtv.ui.playback.VideoQueueManager;
|
||||
import org.jellyfin.androidtv.util.PlaybackHelper;
|
||||
import org.jellyfin.androidtv.util.Utils;
|
||||
import org.jellyfin.androidtv.util.apiclient.Response;
|
||||
import org.jellyfin.androidtv.util.sdk.compat.JavaCompat;
|
||||
import org.jellyfin.apiclient.interaction.Response;
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto;
|
||||
import org.jellyfin.sdk.model.api.BaseItemKind;
|
||||
import org.jellyfin.sdk.model.api.CollectionType;
|
||||
|
@ -3,7 +3,7 @@ package org.jellyfin.androidtv.ui.itemhandling
|
||||
import androidx.lifecycle.ProcessLifecycleOwner
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import kotlinx.coroutines.launch
|
||||
import org.jellyfin.apiclient.interaction.Response
|
||||
import org.jellyfin.androidtv.util.apiclient.Response
|
||||
import org.jellyfin.sdk.api.client.ApiClient
|
||||
import org.jellyfin.sdk.api.client.exception.ApiClientException
|
||||
import org.jellyfin.sdk.api.client.extensions.userLibraryApi
|
||||
|
@ -31,7 +31,7 @@ import org.jellyfin.androidtv.ui.browsing.EnhancedBrowseFragment;
|
||||
import org.jellyfin.androidtv.ui.presentation.MutableObjectAdapter;
|
||||
import org.jellyfin.androidtv.ui.presentation.TextItemPresenter;
|
||||
import org.jellyfin.androidtv.util.Utils;
|
||||
import org.jellyfin.androidtv.util.apiclient.EmptyLifecycleAwareResponse;
|
||||
import org.jellyfin.androidtv.util.apiclient.EmptyResponse;
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto;
|
||||
import org.jellyfin.sdk.model.api.BaseItemPerson;
|
||||
import org.jellyfin.sdk.model.api.ItemSortBy;
|
||||
@ -78,7 +78,7 @@ public class ItemRowAdapter extends MutableObjectAdapter<Object> {
|
||||
private SortOrder sortOrder;
|
||||
private FilterOptions mFilters;
|
||||
|
||||
private EmptyLifecycleAwareResponse mRetrieveFinishedListener;
|
||||
private EmptyResponse mRetrieveFinishedListener;
|
||||
|
||||
private ChangeTriggerType[] reRetrieveTriggers = new ChangeTriggerType[]{};
|
||||
private Instant lastFullRetrieve;
|
||||
@ -720,13 +720,13 @@ public class ItemRowAdapter extends MutableObjectAdapter<Object> {
|
||||
|
||||
protected void notifyRetrieveFinished(@Nullable Exception exception) {
|
||||
setCurrentlyRetrieving(false);
|
||||
if (mRetrieveFinishedListener != null && mRetrieveFinishedListener.getActive()) {
|
||||
if (mRetrieveFinishedListener != null) {
|
||||
if (exception == null) mRetrieveFinishedListener.onResponse();
|
||||
else mRetrieveFinishedListener.onError(exception);
|
||||
}
|
||||
}
|
||||
|
||||
public void setRetrieveFinishedListener(EmptyLifecycleAwareResponse response) {
|
||||
public void setRetrieveFinishedListener(EmptyResponse response) {
|
||||
this.mRetrieveFinishedListener = response;
|
||||
}
|
||||
|
||||
|
@ -49,7 +49,7 @@ import org.jellyfin.androidtv.util.PlaybackHelper;
|
||||
import org.jellyfin.androidtv.util.TextUtilsKt;
|
||||
import org.jellyfin.androidtv.util.TimeUtils;
|
||||
import org.jellyfin.androidtv.util.Utils;
|
||||
import org.jellyfin.androidtv.util.apiclient.EmptyLifecycleAwareResponse;
|
||||
import org.jellyfin.androidtv.util.apiclient.EmptyResponse;
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
@ -426,11 +426,9 @@ public class LiveTvGuideFragment extends Fragment implements LiveTvGuide, View.O
|
||||
public void showProgramOptions() {
|
||||
if (mSelectedProgram == null) return;
|
||||
if (mDetailPopup == null) {
|
||||
mDetailPopup = new LiveProgramDetailPopup(requireActivity(), this, this, mSummary.getWidth()+20, new EmptyLifecycleAwareResponse(getLifecycle()) {
|
||||
mDetailPopup = new LiveProgramDetailPopup(requireActivity(), this, this, mSummary.getWidth()+20, new EmptyResponse() {
|
||||
@Override
|
||||
public void onResponse() {
|
||||
if (!getActive()) return;
|
||||
|
||||
playbackHelper.getValue().retrieveAndPlay(mSelectedProgram.getChannelId(), false, requireContext());
|
||||
}
|
||||
});
|
||||
@ -475,11 +473,9 @@ public class LiveTvGuideFragment extends Fragment implements LiveTvGuide, View.O
|
||||
mChannels.removeAllViews();
|
||||
mChannelStatus.setText("");
|
||||
mFilterStatus.setText("");
|
||||
TvManager.getProgramsAsync(this, mCurrentDisplayChannelStartNdx, mCurrentDisplayChannelEndNdx, mCurrentGuideStart, mCurrentGuideEnd, new EmptyLifecycleAwareResponse(getLifecycle()) {
|
||||
TvManager.getProgramsAsync(this, mCurrentDisplayChannelStartNdx, mCurrentDisplayChannelEndNdx, mCurrentGuideStart, mCurrentGuideEnd, new EmptyResponse() {
|
||||
@Override
|
||||
public void onResponse() {
|
||||
if (!getActive()) return;
|
||||
|
||||
Timber.d("*** Programs response");
|
||||
if (mDisplayProgramsTask != null) mDisplayProgramsTask.cancel(true);
|
||||
mDisplayProgramsTask = new DisplayProgramsTask();
|
||||
|
@ -20,7 +20,7 @@ import org.jellyfin.androidtv.ui.presentation.MutableObjectAdapter;
|
||||
import org.jellyfin.androidtv.util.DateTimeExtensionsKt;
|
||||
import org.jellyfin.androidtv.util.TimeUtils;
|
||||
import org.jellyfin.androidtv.util.Utils;
|
||||
import org.jellyfin.androidtv.util.apiclient.EmptyLifecycleAwareResponse;
|
||||
import org.jellyfin.androidtv.util.apiclient.EmptyResponse;
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto;
|
||||
import org.koin.java.KoinJavaComponent;
|
||||
|
||||
@ -121,7 +121,7 @@ public class TvManager {
|
||||
return ndx;
|
||||
}
|
||||
|
||||
public static void getProgramsAsync(Fragment fragment, int startNdx, int endNdx, final LocalDateTime startTime, LocalDateTime endTime, final EmptyLifecycleAwareResponse outerResponse) {
|
||||
public static void getProgramsAsync(Fragment fragment, int startNdx, int endNdx, final LocalDateTime startTime, LocalDateTime endTime, final EmptyResponse outerResponse) {
|
||||
LocalDateTime startTimeRounded = startTime.withMinute(startTime.getMinute() >= 30 ? 30 : 0).withSecond(0).withNano(0);
|
||||
LocalDateTime endTimeRounded = endTime.minusSeconds(1);
|
||||
|
||||
@ -136,7 +136,7 @@ public class TvManager {
|
||||
buildProgramsDict(programs, startTimeRounded);
|
||||
Timber.d("*** Programs retrieval finished");
|
||||
|
||||
if (outerResponse.getActive()) outerResponse.onResponse();
|
||||
outerResponse.onResponse();
|
||||
} else {
|
||||
outerResponse.onResponse();
|
||||
}
|
||||
|
@ -71,7 +71,7 @@ import org.jellyfin.androidtv.util.InfoLayoutHelper;
|
||||
import org.jellyfin.androidtv.util.TextUtilsKt;
|
||||
import org.jellyfin.androidtv.util.TimeUtils;
|
||||
import org.jellyfin.androidtv.util.Utils;
|
||||
import org.jellyfin.androidtv.util.apiclient.EmptyLifecycleAwareResponse;
|
||||
import org.jellyfin.androidtv.util.apiclient.EmptyResponse;
|
||||
import org.jellyfin.androidtv.util.sdk.BaseItemExtensionsKt;
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto;
|
||||
import org.jellyfin.sdk.model.api.BaseItemKind;
|
||||
@ -796,11 +796,9 @@ public class CustomPlaybackOverlayFragment extends Fragment implements LiveTvGui
|
||||
tvGuideBinding.channelsStatus.setText("");
|
||||
tvGuideBinding.filterStatus.setText("");
|
||||
final CustomPlaybackOverlayFragment self = this;
|
||||
TvManager.getProgramsAsync(this, mCurrentDisplayChannelStartNdx, mCurrentDisplayChannelEndNdx, mCurrentGuideStart, mCurrentGuideEnd, new EmptyLifecycleAwareResponse(getLifecycle()) {
|
||||
TvManager.getProgramsAsync(this, mCurrentDisplayChannelStartNdx, mCurrentDisplayChannelEndNdx, mCurrentGuideStart, mCurrentGuideEnd, new EmptyResponse() {
|
||||
@Override
|
||||
public void onResponse() {
|
||||
if (!getActive()) return;
|
||||
|
||||
Timber.d("*** Programs response");
|
||||
if (mDisplayProgramsTask != null) mDisplayProgramsTask.cancel(true);
|
||||
mDisplayProgramsTask = new DisplayProgramsTask(self);
|
||||
@ -1077,11 +1075,9 @@ public class CustomPlaybackOverlayFragment extends Fragment implements LiveTvGui
|
||||
public void showProgramOptions() {
|
||||
if (mSelectedProgram == null) return;
|
||||
if (mDetailPopup == null)
|
||||
mDetailPopup = new LiveProgramDetailPopup(requireActivity(), this, this, Utils.convertDpToPixel(requireContext(), 600), new EmptyLifecycleAwareResponse(getLifecycle()) {
|
||||
mDetailPopup = new LiveProgramDetailPopup(requireActivity(), this, this, Utils.convertDpToPixel(requireContext(), 600), new EmptyResponse() {
|
||||
@Override
|
||||
public void onResponse() {
|
||||
if (!getActive()) return;
|
||||
|
||||
switchChannel(mSelectedProgram.getChannelId());
|
||||
}
|
||||
});
|
||||
|
@ -27,9 +27,9 @@ import org.jellyfin.androidtv.ui.livetv.TvManager;
|
||||
import org.jellyfin.androidtv.util.TimeUtils;
|
||||
import org.jellyfin.androidtv.util.Utils;
|
||||
import org.jellyfin.androidtv.util.apiclient.ReportingHelper;
|
||||
import org.jellyfin.androidtv.util.apiclient.Response;
|
||||
import org.jellyfin.androidtv.util.profile.DeviceProfileKt;
|
||||
import org.jellyfin.androidtv.util.sdk.compat.JavaCompat;
|
||||
import org.jellyfin.apiclient.interaction.Response;
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto;
|
||||
import org.jellyfin.sdk.model.api.BaseItemKind;
|
||||
import org.jellyfin.sdk.model.api.DeviceProfile;
|
||||
|
@ -6,7 +6,7 @@ import kotlinx.coroutines.launch
|
||||
import org.jellyfin.androidtv.data.compat.PlaybackException
|
||||
import org.jellyfin.androidtv.data.compat.StreamInfo
|
||||
import org.jellyfin.androidtv.data.compat.VideoOptions
|
||||
import org.jellyfin.apiclient.interaction.Response
|
||||
import org.jellyfin.androidtv.util.apiclient.Response
|
||||
import org.jellyfin.sdk.api.client.ApiClient
|
||||
import org.jellyfin.sdk.api.client.extensions.hlsSegmentApi
|
||||
import org.jellyfin.sdk.api.client.extensions.mediaInfoApi
|
||||
|
@ -18,8 +18,8 @@ import org.jellyfin.androidtv.ui.itemhandling.BaseRowType;
|
||||
import org.jellyfin.androidtv.ui.navigation.Destinations;
|
||||
import org.jellyfin.androidtv.ui.navigation.NavigationRepository;
|
||||
import org.jellyfin.androidtv.ui.playback.MediaManager;
|
||||
import org.jellyfin.androidtv.util.apiclient.Response;
|
||||
import org.jellyfin.androidtv.util.sdk.BaseItemExtensionsKt;
|
||||
import org.jellyfin.apiclient.interaction.Response;
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto;
|
||||
import org.jellyfin.sdk.model.api.BaseItemKind;
|
||||
import org.jellyfin.sdk.model.api.ItemSortBy;
|
||||
|
@ -1,7 +1,7 @@
|
||||
package org.jellyfin.androidtv.util
|
||||
|
||||
import android.content.Context
|
||||
import org.jellyfin.apiclient.interaction.Response
|
||||
import org.jellyfin.androidtv.util.apiclient.Response
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||
import java.util.UUID
|
||||
|
||||
|
@ -1,28 +0,0 @@
|
||||
package org.jellyfin.androidtv.util.apiclient
|
||||
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import org.jellyfin.apiclient.interaction.EmptyResponse
|
||||
|
||||
abstract class EmptyLifecycleAwareResponse(
|
||||
private val lifecycle: Lifecycle,
|
||||
) : EmptyResponse() {
|
||||
val active get() = lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)
|
||||
|
||||
override fun triggerInnerResponse() {
|
||||
if (!active) return
|
||||
|
||||
super.triggerInnerResponse()
|
||||
}
|
||||
|
||||
override fun onResponse() {
|
||||
if (!active) return
|
||||
|
||||
super.onResponse()
|
||||
}
|
||||
|
||||
override fun onError(ex: Exception?) {
|
||||
if (!active) return
|
||||
|
||||
super.onError(ex)
|
||||
}
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
package org.jellyfin.androidtv.util.apiclient
|
||||
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import org.jellyfin.apiclient.interaction.Response
|
||||
|
||||
abstract class LifecycleAwareResponse<T>(
|
||||
private val lifecycle: Lifecycle,
|
||||
) : Response<T>() {
|
||||
val active get() = lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)
|
||||
|
||||
override fun triggerInnerResponse() {
|
||||
if (!active) return
|
||||
|
||||
super.triggerInnerResponse()
|
||||
}
|
||||
|
||||
override fun onResponse(response: T) {
|
||||
if (!active) return
|
||||
|
||||
super.onResponse(response)
|
||||
}
|
||||
|
||||
override fun onError(exception: Exception?) {
|
||||
if (!active) return
|
||||
|
||||
super.onError(exception)
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
package org.jellyfin.androidtv.util.apiclient
|
||||
|
||||
@Deprecated("Utility class for callbacks used inside Java code. Do not use for new code.")
|
||||
abstract class Response<T> {
|
||||
abstract fun onResponse(response: T)
|
||||
open fun onError(exception: Exception) = Unit
|
||||
}
|
||||
|
||||
@Deprecated("Utility class for callbacks used inside Java code. Do not use for new code.")
|
||||
abstract class EmptyResponse : Response<Unit>() {
|
||||
override fun onResponse(response: Unit) = onResponse()
|
||||
abstract fun onResponse()
|
||||
}
|
@ -15,7 +15,7 @@ import org.jellyfin.androidtv.ui.playback.PlaybackControllerContainer
|
||||
import org.jellyfin.androidtv.ui.playback.PlaybackLauncher
|
||||
import org.jellyfin.androidtv.ui.playback.VideoQueueManager
|
||||
import org.jellyfin.androidtv.util.PlaybackHelper
|
||||
import org.jellyfin.apiclient.interaction.Response
|
||||
import org.jellyfin.androidtv.util.apiclient.Response
|
||||
import org.jellyfin.sdk.api.client.ApiClient
|
||||
import org.jellyfin.sdk.api.client.extensions.instantMixApi
|
||||
import org.jellyfin.sdk.api.client.extensions.itemsApi
|
||||
|
Reference in New Issue
Block a user