Skip to content

Commit ef29fb6

Browse files
Merge branch 'refactor' into Video-description-compose
2 parents a9e3b16 + f16becc commit ef29fb6

File tree

13 files changed

+506
-455
lines changed

13 files changed

+506
-455
lines changed

app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java

Lines changed: 37 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -188,21 +188,21 @@ public final class VideoDetailFragment
188188
};
189189

190190
@State
191-
protected int serviceId = Constants.NO_SERVICE_ID;
191+
int serviceId = Constants.NO_SERVICE_ID;
192192
@State
193193
@NonNull
194-
protected String title = "";
194+
String title = "";
195195
@State
196196
@Nullable
197-
protected String url = null;
197+
String url = null;
198198
@Nullable
199-
protected PlayQueue playQueue = null;
199+
private PlayQueue playQueue = null;
200200
@State
201201
int bottomSheetState = BottomSheetBehavior.STATE_EXPANDED;
202202
@State
203203
int lastStableBottomSheetState = BottomSheetBehavior.STATE_EXPANDED;
204204
@State
205-
protected boolean autoPlayEnabled = true;
205+
boolean autoPlayEnabled = true;
206206

207207
@Nullable
208208
private StreamInfo currentInfo = null;
@@ -438,18 +438,15 @@ public void onDestroyView() {
438438
@Override
439439
public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
440440
super.onActivityResult(requestCode, resultCode, data);
441-
switch (requestCode) {
442-
case ReCaptchaActivity.RECAPTCHA_REQUEST:
443-
if (resultCode == Activity.RESULT_OK) {
444-
NavigationHelper.openVideoDetailFragment(requireContext(), getFM(),
445-
serviceId, url, title, null, false);
446-
} else {
447-
Log.e(TAG, "ReCaptcha failed");
448-
}
449-
break;
450-
default:
451-
Log.e(TAG, "Request code from activity not supported [" + requestCode + "]");
452-
break;
441+
if (requestCode == ReCaptchaActivity.RECAPTCHA_REQUEST) {
442+
if (resultCode == Activity.RESULT_OK) {
443+
NavigationHelper.openVideoDetailFragment(requireContext(), getFM(),
444+
serviceId, url, title, null, false);
445+
} else {
446+
Log.e(TAG, "ReCaptcha failed");
447+
}
448+
} else {
449+
Log.e(TAG, "Request code from activity not supported [" + requestCode + "]");
453450
}
454451
}
455452

@@ -815,25 +812,17 @@ private void prepareAndHandleInfo(final StreamInfo info, final boolean scrollToT
815812

816813
}
817814

818-
protected void prepareAndLoadInfo() {
815+
private void prepareAndLoadInfo() {
819816
scrollToTop();
820817
startLoading(false);
821818
}
822819

823820
@Override
824821
public void startLoading(final boolean forceLoad) {
825-
super.startLoading(forceLoad);
826-
827-
initTabs();
828-
currentInfo = null;
829-
if (currentWorker != null) {
830-
currentWorker.dispose();
831-
}
832-
833-
runWorker(forceLoad, stack.isEmpty());
822+
startLoading(forceLoad, null);
834823
}
835824

836-
private void startLoading(final boolean forceLoad, final boolean addToBackStack) {
825+
private void startLoading(final boolean forceLoad, final @Nullable Boolean addToBackStack) {
837826
super.startLoading(forceLoad);
838827

839828
initTabs();
@@ -842,7 +831,7 @@ private void startLoading(final boolean forceLoad, final boolean addToBackStack)
842831
currentWorker.dispose();
843832
}
844833

845-
runWorker(forceLoad, addToBackStack);
834+
runWorker(forceLoad, addToBackStack != null ? addToBackStack : stack.isEmpty());
846835
}
847836

848837
private void runWorker(final boolean forceLoad, final boolean addToBackStack) {
@@ -1138,7 +1127,7 @@ private void openNormalBackgroundPlayer(final boolean append) {
11381127
}
11391128

11401129
private void openMainPlayer() {
1141-
if (!isPlayerServiceAvailable()) {
1130+
if (noPlayerServiceAvailable()) {
11421131
playerHolder.startService(autoPlayEnabled, this);
11431132
return;
11441133
}
@@ -1163,7 +1152,7 @@ private void openMainPlayer() {
11631152
*/
11641153
private void hideMainPlayerOnLoadingNewStream() {
11651154
final var root = getRoot();
1166-
if (!isPlayerServiceAvailable() || root.isEmpty() || !player.videoPlayerSelected()) {
1155+
if (noPlayerServiceAvailable() || root.isEmpty() || !player.videoPlayerSelected()) {
11671156
return;
11681157
}
11691158

@@ -1337,31 +1326,31 @@ private void showContent() {
13371326
binding.detailContentRootHiding.setVisibility(View.VISIBLE);
13381327
}
13391328

1340-
protected void setInitialData(final int newServiceId,
1341-
@Nullable final String newUrl,
1342-
@NonNull final String newTitle,
1343-
@Nullable final PlayQueue newPlayQueue) {
1329+
private void setInitialData(final int newServiceId,
1330+
@Nullable final String newUrl,
1331+
@NonNull final String newTitle,
1332+
@Nullable final PlayQueue newPlayQueue) {
13441333
this.serviceId = newServiceId;
13451334
this.url = newUrl;
13461335
this.title = newTitle;
13471336
this.playQueue = newPlayQueue;
13481337
}
13491338

1350-
private void setErrorImage(final int imageResource) {
1339+
private void setErrorImage() {
13511340
if (binding == null || activity == null) {
13521341
return;
13531342
}
13541343

13551344
binding.detailThumbnailImageView.setImageDrawable(
1356-
AppCompatResources.getDrawable(requireContext(), imageResource));
1345+
AppCompatResources.getDrawable(requireContext(), R.drawable.not_available_monkey));
13571346
animate(binding.detailThumbnailImageView, false, 0, AnimationType.ALPHA,
13581347
0, () -> animate(binding.detailThumbnailImageView, true, 500));
13591348
}
13601349

13611350
@Override
13621351
public void handleError() {
13631352
super.handleError();
1364-
setErrorImage(R.drawable.not_available_monkey);
1353+
setErrorImage();
13651354

13661355
if (binding.relatedItemsLayout != null) { // hide related streams for tablets
13671356
binding.relatedItemsLayout.setVisibility(View.INVISIBLE);
@@ -1776,16 +1765,14 @@ public void onPlaybackUpdate(final int state,
17761765
final PlaybackParameters parameters) {
17771766
setOverlayPlayPauseImage(player != null && player.isPlaying());
17781767

1779-
switch (state) {
1780-
case Player.STATE_PLAYING:
1781-
if (binding.positionView.getAlpha() != 1.0f
1782-
&& player.getPlayQueue() != null
1783-
&& player.getPlayQueue().getItem() != null
1784-
&& player.getPlayQueue().getItem().getUrl().equals(url)) {
1785-
animate(binding.positionView, true, 100);
1786-
animate(binding.detailPositionView, true, 100);
1787-
}
1788-
break;
1768+
if (state == Player.STATE_PLAYING) {
1769+
if (binding.positionView.getAlpha() != 1.0f
1770+
&& player.getPlayQueue() != null
1771+
&& player.getPlayQueue().getItem() != null
1772+
&& player.getPlayQueue().getItem().getUrl().equals(url)) {
1773+
animate(binding.positionView, true, 100);
1774+
animate(binding.detailPositionView, true, 100);
1775+
}
17891776
}
17901777
}
17911778

@@ -2444,8 +2431,8 @@ boolean isPlayerAvailable() {
24442431
return player != null;
24452432
}
24462433

2447-
boolean isPlayerServiceAvailable() {
2448-
return playerService != null;
2434+
boolean noPlayerServiceAvailable() {
2435+
return playerService == null;
24492436
}
24502437

24512438
boolean isPlayerAndPlayerServiceAvailable() {

app/src/main/java/org/schabi/newpipe/player/PlayQueueActivity.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,11 +220,18 @@ public void onServiceDisconnected(final ComponentName name) {
220220
}
221221

222222
@Override
223-
public void onServiceConnected(final ComponentName name, final IBinder service) {
223+
public void onServiceConnected(final ComponentName name, final IBinder binder) {
224224
Log.d(TAG, "Player service is connected");
225225

226-
if (service instanceof PlayerService.LocalBinder) {
227-
player = ((PlayerService.LocalBinder) service).getService().getPlayer();
226+
if (binder instanceof PlayerService.LocalBinder) {
227+
@Nullable final PlayerService s =
228+
((PlayerService.LocalBinder) binder).getService();
229+
if (s == null) {
230+
throw new IllegalArgumentException(
231+
"PlayerService.LocalBinder.getService() must never be"
232+
+ "null after the service connects");
233+
}
234+
player = s.getPlayer();
228235
}
229236

230237
if (player == null || player.getPlayQueue() == null || player.exoPlayerIsNull()) {

app/src/main/java/org/schabi/newpipe/player/Player.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -492,15 +492,15 @@ private void initUIsForCurrentPlayerType() {
492492

493493
switch (playerType) {
494494
case MAIN:
495-
UIs.destroyAll(PopupPlayerUi.class);
495+
UIs.destroyAllOfType(PopupPlayerUi.class);
496496
UIs.addAndPrepare(new MainPlayerUi(this, binding));
497497
break;
498498
case POPUP:
499-
UIs.destroyAll(MainPlayerUi.class);
499+
UIs.destroyAllOfType(MainPlayerUi.class);
500500
UIs.addAndPrepare(new PopupPlayerUi(this, binding));
501501
break;
502502
case AUDIO:
503-
UIs.destroyAll(VideoPlayerUi.class);
503+
UIs.destroyAllOfType(VideoPlayerUi.class);
504504
break;
505505
}
506506
}
@@ -591,9 +591,15 @@ private void destroyPlayer() {
591591
}
592592
}
593593

594-
public void destroy() {
594+
595+
/**
596+
* Shut down this player.
597+
* Saves the stream progress, sets recovery.
598+
* Then destroys the player in all UIs and destroys the UIs as well.
599+
*/
600+
public void saveAndShutdown() {
595601
if (DEBUG) {
596-
Log.d(TAG, "destroy() called");
602+
Log.d(TAG, "saveAndShutdown() called");
597603
}
598604

599605
saveStreamProgressState();
@@ -606,7 +612,7 @@ public void destroy() {
606612
databaseUpdateDisposable.clear();
607613
progressUpdateDisposable.set(null);
608614

609-
UIs.destroyAll(Object.class); // destroy every UI: obviously every UI extends Object
615+
UIs.destroyAllOfType(null);
610616
}
611617

612618
public void setRecovery() {
@@ -1995,6 +2001,10 @@ public void setFragmentListener(final PlayerServiceEventListener listener) {
19952001
triggerProgressUpdate();
19962002
}
19972003

2004+
/**
2005+
* Remove the listener, if it was set.
2006+
* @param listener listener to remove
2007+
* */
19982008
public void removeFragmentListener(final PlayerServiceEventListener listener) {
19992009
if (fragmentListener == listener) {
20002010
fragmentListener = null;
@@ -2009,6 +2019,10 @@ void setActivityListener(final PlayerEventListener listener) {
20092019
triggerProgressUpdate();
20102020
}
20112021

2022+
/**
2023+
* Remove the listener, if it was set.
2024+
* @param listener listener to remove
2025+
* */
20122026
void removeActivityListener(final PlayerEventListener listener) {
20132027
if (activityListener == listener) {
20142028
activityListener = null;

0 commit comments

Comments
 (0)