diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/MainPlayerEventBridge.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/MainPlayerEventBridge.java index 04b67fe50..c5ec0214d 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/MainPlayerEventBridge.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/MainPlayerEventBridge.java @@ -34,7 +34,10 @@ public class MainPlayerEventBridge implements PlayerEventListener { PlayerUiManager uiManager = new PlayerUiManager(); HqDialogManager hqDialogManager = new HqDialogManager(); + VideoLoader videoLoader = new VideoLoader(); + videoLoader.addErrorListener(uiManager); + SuggestionsLoader suggestionsLoader = new SuggestionsLoader(); suggestionsLoader.addMetadataListener(uiManager); suggestionsLoader.addMetadataListener(videoLoader); diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/managers/PlayerUiManager.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/managers/PlayerUiManager.java index 34984f40a..2fc458f30 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/managers/PlayerUiManager.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/managers/PlayerUiManager.java @@ -14,6 +14,7 @@ import com.liskovsoft.smartyoutubetv2.common.R; import com.liskovsoft.smartyoutubetv2.common.app.models.data.Video; import com.liskovsoft.smartyoutubetv2.common.app.models.playback.PlayerEventListenerHelper; import com.liskovsoft.smartyoutubetv2.common.app.models.playback.managers.SuggestionsLoader.MetadataListener; +import com.liskovsoft.smartyoutubetv2.common.app.models.playback.managers.VideoLoader.ErrorListener; import com.liskovsoft.smartyoutubetv2.common.app.models.playback.ui.UiOptionItem; import com.liskovsoft.smartyoutubetv2.common.app.presenters.AppSettingsPresenter; import com.liskovsoft.smartyoutubetv2.common.app.presenters.ChannelPresenter; @@ -24,10 +25,9 @@ import io.reactivex.schedulers.Schedulers; import java.util.List; -public class PlayerUiManager extends PlayerEventListenerHelper implements MetadataListener { +public class PlayerUiManager extends PlayerEventListenerHelper implements MetadataListener, ErrorListener { private static final String TAG = PlayerUiManager.class.getSimpleName(); private static final long UI_AUTO_HIDE_TIMEOUT_MS = 2_000; - private static final long UI_AUTO_SHOW_TIMEOUT_MS = 3_000; private static final long SUGGESTIONS_RESET_TIMEOUT_MS = 500; private final Handler mHandler; private final MediaItemManager mMediaItemManager; @@ -45,11 +45,6 @@ public class PlayerUiManager extends PlayerEventListenerHelper implements Metada enableUiAutoHideTimeout(); } }; - private final Runnable mUiAutoShowHandler = () -> { - if (!mController.isPlaying()) { - mController.showControls(true); - } - }; public PlayerUiManager() { mHandler = new Handler(Looper.getMainLooper()); @@ -58,12 +53,6 @@ public class PlayerUiManager extends PlayerEventListenerHelper implements Metada mMediaItemManager = service.getMediaItemManager(); } - @Override - public void openVideo(Video item) { - // If video can't be loaded show at least some infos. - enableUiAutoShowTimeout(); - } - @Override public void onActivity(Activity activity) { super.onActivity(activity); @@ -161,27 +150,27 @@ public class PlayerUiManager extends PlayerEventListenerHelper implements Metada @Override public void onSubscribeClicked(boolean subscribed) { if (subscribed) { - handleMediaItemObservable(mMediaItemManager::subscribeObserve); + callMediaItemObservable(mMediaItemManager::subscribeObserve); } else { - handleMediaItemObservable(mMediaItemManager::unsubscribeObserve); + callMediaItemObservable(mMediaItemManager::unsubscribeObserve); } } @Override public void onThumbsDownClicked(boolean thumbsDown) { if (thumbsDown) { - handleMediaItemObservable(mMediaItemManager::setDislikeObserve); + callMediaItemObservable(mMediaItemManager::setDislikeObserve); } else { - handleMediaItemObservable(mMediaItemManager::removeDislikeObserve); + callMediaItemObservable(mMediaItemManager::removeDislikeObserve); } } @Override public void onThumbsUpClicked(boolean thumbsUp) { if (thumbsUp) { - handleMediaItemObservable(mMediaItemManager::setLikeObserve); + callMediaItemObservable(mMediaItemManager::setLikeObserve); } else { - handleMediaItemObservable(mMediaItemManager::removeLikeObserve); + callMediaItemObservable(mMediaItemManager::removeLikeObserve); } } @@ -209,25 +198,12 @@ public class PlayerUiManager extends PlayerEventListenerHelper implements Metada } } - private void disableUiAutoShowTimeout() { - Log.d(TAG, "Stopping auto show ui timer..."); - mHandler.removeCallbacks(mUiAutoShowHandler); - } - - private void enableUiAutoShowTimeout() { - Log.d(TAG, "Starting auto show ui timer..."); - if (mEngineReady) { - mHandler.postDelayed(mUiAutoShowHandler, UI_AUTO_SHOW_TIMEOUT_MS); - } - } - private void disposeTimeouts() { - disableUiAutoShowTimeout(); disableUiAutoHideTimeout(); disableSuggestionsResetTimeout(); } - private void handleMediaItemObservable(VoidObservable callable) { + private void callMediaItemObservable(MediaItemObservable callable) { Video video = mController.getVideo(); if (video == null || video.mediaItem == null) { @@ -242,7 +218,12 @@ public class PlayerUiManager extends PlayerEventListenerHelper implements Metada .subscribe(); } - private interface VoidObservable { + private interface MediaItemObservable { Observable call(MediaItem item); } + + @Override + public void onError(int type) { + mController.showControls(true); + } } diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/managers/VideoLoader.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/managers/VideoLoader.java index 50655d1b3..20c903ab3 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/managers/VideoLoader.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/managers/VideoLoader.java @@ -5,9 +5,7 @@ import com.liskovsoft.mediaserviceinterfaces.MediaService; import com.liskovsoft.mediaserviceinterfaces.data.MediaItem; import com.liskovsoft.mediaserviceinterfaces.data.MediaItemFormatInfo; import com.liskovsoft.mediaserviceinterfaces.data.MediaItemMetadata; -import com.liskovsoft.sharedutils.helpers.MessageHelpers; import com.liskovsoft.sharedutils.mylogger.Log; -import com.liskovsoft.smartyoutubetv2.common.R; import com.liskovsoft.smartyoutubetv2.common.app.models.data.Playlist; import com.liskovsoft.smartyoutubetv2.common.app.models.data.Video; import com.liskovsoft.smartyoutubetv2.common.app.models.playback.PlayerEventListenerHelper; @@ -19,6 +17,9 @@ import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; +import java.util.ArrayList; +import java.util.List; + public class VideoLoader extends PlayerEventListenerHelper implements MetadataListener { private static final String TAG = VideoLoader.class.getSimpleName(); private final Playlist mPlaylist; @@ -28,6 +29,12 @@ public class VideoLoader extends PlayerEventListenerHelper implements MetadataLi private Disposable mFormatInfoAction; private boolean mEngineInitialized; private MediaItem mCachedNextVideo; + private final List mListeners = new ArrayList<>(); + + public interface ErrorListener { + int TYPE_EMPTY_SOURCE = 0; + void onError(int type); + } public VideoLoader() { mPlaylist = Playlist.instance(); @@ -198,6 +205,17 @@ public class VideoLoader extends PlayerEventListenerHelper implements MetadataLi mController.openUrlList(formatInfo.createUrlList()); } else { Log.e(TAG, "Empty format info received. No video data to pass to the player."); + callListener(ErrorListener.TYPE_EMPTY_SOURCE); + } + } + + public void addErrorListener(ErrorListener listener) { + mListeners.add(listener); + } + + private void callListener(int type) { + for (ErrorListener listener : mListeners) { + listener.onError(type); } } }