scroll last comment into view
This commit is contained in:
parent
5f32d001cc
commit
b4016c91c1
|
@ -563,10 +563,7 @@ public class MainActivity extends AppCompatActivity {
|
|||
// to show the top level comments again.
|
||||
final FragmentManager.BackStackEntry bse = fm.getBackStackEntryAt(
|
||||
fm.getBackStackEntryCount() - 2); // current fragment is at the top
|
||||
if (!CommentRepliesFragment.TAG.equals(bse.getName())) {
|
||||
BottomSheetBehavior.from(mainBinding.fragmentPlayerHolder)
|
||||
.setState(BottomSheetBehavior.STATE_EXPANDED);
|
||||
}
|
||||
openDetailFragmentFromCommentReplies(fm, bse);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
@ -652,10 +649,7 @@ public class MainActivity extends AppCompatActivity {
|
|||
fm.popBackStackImmediate();
|
||||
final FragmentManager.BackStackEntry bse = fm.getBackStackEntryAt(
|
||||
fm.getBackStackEntryCount() - 1);
|
||||
if (!CommentRepliesFragment.TAG.equals(bse.getName())) {
|
||||
BottomSheetBehavior.from(mainBinding.fragmentPlayerHolder)
|
||||
.setState(BottomSheetBehavior.STATE_EXPANDED);
|
||||
}
|
||||
openDetailFragmentFromCommentReplies(fm, bse);
|
||||
} else if (!NavigationHelper.tryGotoSearchFragment(fm)) {
|
||||
// If search fragment wasn't found in the backstack go to the main fragment
|
||||
NavigationHelper.gotoMainFragment(fm);
|
||||
|
@ -854,6 +848,42 @@ public class MainActivity extends AppCompatActivity {
|
|||
}
|
||||
}
|
||||
|
||||
private void openDetailFragmentFromCommentReplies(
|
||||
@NonNull final FragmentManager fm,
|
||||
@NonNull final FragmentManager.BackStackEntry bse) {
|
||||
if (!CommentRepliesFragment.TAG.equals(bse.getName())) {
|
||||
final CommentRepliesFragment commentRepliesFragment =
|
||||
(CommentRepliesFragment) fm.findFragmentByTag(
|
||||
CommentRepliesFragment.TAG);
|
||||
final BottomSheetBehavior bsb = BottomSheetBehavior
|
||||
.from(mainBinding.fragmentPlayerHolder);
|
||||
bsb.addBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
|
||||
@Override
|
||||
public void onStateChanged(@NonNull final View bottomSheet,
|
||||
final int newState) {
|
||||
if (newState == BottomSheetBehavior.STATE_EXPANDED) {
|
||||
final Fragment detailFragment = fm.findFragmentById(
|
||||
R.id.fragment_player_holder);
|
||||
if (detailFragment instanceof VideoDetailFragment
|
||||
&& commentRepliesFragment != null) {
|
||||
// should always be the case
|
||||
((VideoDetailFragment) detailFragment).scrollToComment(
|
||||
commentRepliesFragment.getCommentsInfoItem());
|
||||
}
|
||||
bsb.removeBottomSheetCallback(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSlide(@NonNull final View bottomSheet,
|
||||
final float slideOffset) {
|
||||
// not needed, listener is removed once the sheet is expanded
|
||||
}
|
||||
});
|
||||
bsb.setState(BottomSheetBehavior.STATE_EXPANDED);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean bottomSheetHiddenOrCollapsed() {
|
||||
final BottomSheetBehavior<FrameLayout> bottomSheetBehavior =
|
||||
BottomSheetBehavior.from(mainBinding.fragmentPlayerHolder);
|
||||
|
|
|
@ -74,6 +74,7 @@ import org.schabi.newpipe.error.UserAction;
|
|||
import org.schabi.newpipe.extractor.Image;
|
||||
import org.schabi.newpipe.extractor.InfoItem;
|
||||
import org.schabi.newpipe.extractor.NewPipe;
|
||||
import org.schabi.newpipe.extractor.comments.CommentsInfoItem;
|
||||
import org.schabi.newpipe.extractor.exceptions.ContentNotSupportedException;
|
||||
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
||||
import org.schabi.newpipe.extractor.stream.AudioStream;
|
||||
|
@ -1012,6 +1013,14 @@ public final class VideoDetailFragment
|
|||
updateTabLayoutVisibility();
|
||||
}
|
||||
|
||||
public void scrollToComment(final CommentsInfoItem comment) {
|
||||
final Fragment fragment = pageAdapter.getItem(
|
||||
pageAdapter.getItemPositionByTitle(COMMENTS_TAB_TAG));
|
||||
if (fragment instanceof CommentsFragment) {
|
||||
((CommentsFragment) fragment).scrollToComment(comment);
|
||||
}
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Play Utils
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
|
|
@ -159,4 +159,10 @@ public final class CommentRepliesFragment
|
|||
return ItemViewMode.LIST;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the comment to which the replies are shown
|
||||
*/
|
||||
public CommentsInfoItem getCommentsInfoItem() {
|
||||
return commentsInfoItem;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -110,4 +110,8 @@ public class CommentsFragment extends BaseListInfoFragment<CommentsInfoItem, Com
|
|||
protected ItemViewMode getItemViewMode() {
|
||||
return ItemViewMode.LIST;
|
||||
}
|
||||
|
||||
public void scrollToComment(final CommentsInfoItem comment) {
|
||||
itemsList.scrollToPosition(infoListAdapter.getItemsList().indexOf(comment));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -504,7 +504,8 @@ public final class NavigationHelper {
|
|||
public static void openCommentRepliesFragment(@NonNull final FragmentActivity activity,
|
||||
final CommentsInfoItem commentsInfoItem) {
|
||||
defaultTransaction(activity.getSupportFragmentManager())
|
||||
.replace(R.id.fragment_holder, new CommentRepliesFragment(commentsInfoItem))
|
||||
.replace(R.id.fragment_holder, new CommentRepliesFragment(commentsInfoItem),
|
||||
CommentRepliesFragment.TAG)
|
||||
.addToBackStack(CommentRepliesFragment.TAG)
|
||||
.commit();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue