Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
import android.widget.RelativeLayout;

import androidx.annotation.AttrRes;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
Expand Down Expand Up @@ -580,6 +579,7 @@ private void toggleTitleAndSecondaryControls() {
Player.DEFAULT_CONTROLS_DURATION, 0);
binding.detailSecondaryControlPanel.setVisibility(View.GONE);
}
// view pager height has changed, update the tab layout
updateTabLayoutVisibility();
}

Expand Down Expand Up @@ -650,6 +650,7 @@ protected void initListeners() {
// prevent useless updates to tab layout visibility if nothing changed
if (verticalOffset != lastAppBarVerticalOffset) {
lastAppBarVerticalOffset = verticalOffset;
// the view was scrolled
updateTabLayoutVisibility();
}
});
Expand Down Expand Up @@ -952,6 +953,7 @@ private void initTabs() {
}
updateTabIconsAndContentDescriptions();
}
// the page adapter now contains tabs: show the tab layout
updateTabLayoutVisibility();
}

Expand All @@ -974,23 +976,23 @@ private void updateTabIconsAndContentDescriptions() {
private void updateTabs(@NonNull final StreamInfo info) {
if (showRelatedStreams) {
if (binding.relatedStreamsLayout == null) { // phone
pageAdapter.updateItem(RELATED_TAB_TAG,
RelatedVideosFragment.getInstance(info));
pageAdapter.updateItem(RELATED_TAB_TAG, RelatedVideosFragment.getInstance(info));
} else { // tablet + TV
getChildFragmentManager().beginTransaction()
.replace(R.id.relatedStreamsLayout,
RelatedVideosFragment.getInstance(info))
.replace(R.id.relatedStreamsLayout, RelatedVideosFragment.getInstance(info))
.commitAllowingStateLoss();
binding.relatedStreamsLayout.setVisibility(
player != null && player.isFullscreen() ? View.GONE : View.VISIBLE);
}
}

if (showDescription) {
pageAdapter.updateItem(DESCRIPTION_TAB_TAG,
new DescriptionFragment(info));
pageAdapter.updateItem(DESCRIPTION_TAB_TAG, new DescriptionFragment(info));
}

binding.viewPager.setVisibility(View.VISIBLE);
// make sure the tab layout is visible
updateTabLayoutVisibility();
pageAdapter.notifyDataSetUpdate();
updateTabIconsAndContentDescriptions();
}
Expand All @@ -1007,9 +1009,12 @@ private boolean shouldShowComments() {
}

public void updateTabLayoutVisibility() {
if (pageAdapter.getCount() < 2) {
if (pageAdapter.getCount() < 2 || binding.viewPager.getVisibility() != View.VISIBLE) {
// hide tab layout if there is only one tab or if the view pager is also hidden
binding.tabLayout.setVisibility(View.GONE);
} else {
// call `post()` to be sure `viewPager.getHitRect()`
// is up to date and not being currently recomputed
binding.tabLayout.post(() -> {
if (getContext() != null) {
final Rect pagerHitRect = new Rect();
Expand All @@ -1020,7 +1025,7 @@ public void updateTabLayoutVisibility() {
WindowManager.class)).getDefaultDisplay().getSize(displaySize);

final int viewPagerVisibleHeight = displaySize.y - pagerHitRect.top;
// see TabLayout.DEFAULT_HEIGHT
// see TabLayout.DEFAULT_HEIGHT, which is equal to 48dp
final float tabLayoutHeight = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 48, getResources().getDisplayMetrics());

Expand All @@ -1030,6 +1035,7 @@ public void updateTabLayoutVisibility() {
Math.max(0, tabLayoutHeight * 3 - viewPagerVisibleHeight));
binding.tabLayout.setVisibility(View.VISIBLE);
} else {
// view pager is not visible enough
binding.tabLayout.setVisibility(View.GONE);
}
}
Expand All @@ -1039,6 +1045,7 @@ public void updateTabLayoutVisibility() {

public void scrollToTop() {
binding.appBarLayout.setExpanded(true, true);
// notify tab layout of scrolling
updateTabLayoutVisibility();
}

Expand Down Expand Up @@ -1321,13 +1328,21 @@ private void setErrorImage(final int imageResource) {

@Override
public void showError(final String message, final boolean showRetryButton) {
showError(message, showRetryButton, R.drawable.not_available_monkey);
super.showError(message, showRetryButton);
setErrorImage(R.drawable.not_available_monkey);

if (binding.relatedStreamsLayout != null) { // hide related streams for tablets
binding.relatedStreamsLayout.setVisibility(View.INVISIBLE);
}

// hide comments / related streams / description tabs
binding.viewPager.setVisibility(View.GONE);
binding.tabLayout.setVisibility(View.GONE);
}

protected void showError(final String message, final boolean showRetryButton,
@DrawableRes final int imageError) {
super.showError(message, showRetryButton);
setErrorImage(imageError);
private void hideAgeRestrictedContent() {
showError(getString(R.string.restricted_video,
getString(R.string.show_age_restricted_content_title)), false);
}

private void setupBroadcastReceiver() {
Expand Down Expand Up @@ -1552,18 +1567,6 @@ public void handleResult(@NonNull final StreamInfo info) {
noVideoStreams ? R.drawable.ic_headset_shadow : R.drawable.ic_play_arrow_shadow);
}

private void hideAgeRestrictedContent() {
showError(getString(R.string.restricted_video,
getString(R.string.show_age_restricted_content_title)), false);

if (binding.relatedStreamsLayout != null) { // tablet
binding.relatedStreamsLayout.setVisibility(View.INVISIBLE);
}

binding.viewPager.setVisibility(View.GONE);
binding.tabLayout.setVisibility(View.GONE);
}

private void displayUploaderAsSubChannel(final StreamInfo info) {
binding.detailSubChannelTextView.setText(info.getUploaderName());
binding.detailSubChannelTextView.setVisibility(View.VISIBLE);
Expand Down