use of com.odysee.app.adapter.CommentListAdapter in project odysee-android by OdyseeTeam.
the class FileViewFragment method initUi.
@SuppressWarnings("ClickableViewAccessibility")
private void initUi(View root) {
buttonPublishSomething.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Context context = getContext();
if (!Helper.isNullOrEmpty(currentUrl) && context instanceof MainActivity) {
LbryUri uri = LbryUri.tryParse(currentUrl);
if (uri != null) {
Map<String, Object> params = new HashMap<>();
params.put("suggestedUrl", uri.getStreamName());
// ((MainActivity) context).openFragment(PublishFragment.class, true, NavMenuItem.ID_ITEM_NEW_PUBLISH, params);
}
}
}
});
root.findViewById(R.id.file_view_title_area).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ImageView descIndicator = root.findViewById(R.id.file_view_desc_toggle_arrow);
View descriptionArea = root.findViewById(R.id.file_view_description_area);
Claim actualClaim = collectionClaimItem != null ? collectionClaimItem : fileClaim;
boolean hasDescription = actualClaim != null && !Helper.isNullOrEmpty(actualClaim.getDescription());
boolean hasTags = actualClaim != null && actualClaim.getTags() != null && actualClaim.getTags().size() > 0;
if (descriptionArea.getVisibility() != View.VISIBLE) {
if (hasDescription || hasTags) {
descriptionArea.setVisibility(View.VISIBLE);
}
descIndicator.setImageResource(R.drawable.ic_arrow_dropup);
} else {
descriptionArea.setVisibility(View.GONE);
descIndicator.setImageResource(R.drawable.ic_arrow_dropdown);
}
}
});
root.findViewById(R.id.file_view_action_like).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AccountManager am = AccountManager.get(root.getContext());
Account odyseeAccount = Helper.getOdyseeAccount(am.getAccounts());
Claim actualClaim = collectionClaimItem != null ? collectionClaimItem : fileClaim;
if (actualClaim != null && odyseeAccount != null) {
react(actualClaim, true);
}
}
});
root.findViewById(R.id.file_view_action_dislike).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AccountManager am = AccountManager.get(root.getContext());
Account odyseeAccount = Helper.getOdyseeAccount(am.getAccounts());
Claim actualClaim = collectionClaimItem != null ? collectionClaimItem : fileClaim;
if (actualClaim != null && odyseeAccount != null) {
react(actualClaim, false);
}
}
});
root.findViewById(R.id.file_view_action_share).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Claim actualClaim = collectionClaimItem != null ? collectionClaimItem : fileClaim;
if (actualClaim != null) {
try {
String shareUrl = LbryUri.parse(!Helper.isNullOrEmpty(actualClaim.getCanonicalUrl()) ? actualClaim.getCanonicalUrl() : (!Helper.isNullOrEmpty(actualClaim.getShortUrl()) ? actualClaim.getShortUrl() : actualClaim.getPermanentUrl())).toOdyseeString();
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, shareUrl);
MainActivity.startingShareActivity = true;
Intent shareUrlIntent = Intent.createChooser(shareIntent, getString(R.string.share_lbry_content));
shareUrlIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(shareUrlIntent);
} catch (LbryUriException ex) {
// pass
}
}
}
});
root.findViewById(R.id.file_view_action_tip).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MainActivity activity = (MainActivity) getActivity();
if (activity != null && activity.isSignedIn()) {
Claim actualClaim = collectionClaimItem != null ? collectionClaimItem : fileClaim;
if (actualClaim != null) {
CreateSupportDialogFragment dialog = CreateSupportDialogFragment.newInstance(actualClaim, (amount, isTip) -> {
double sentAmount = amount.doubleValue();
String message = getResources().getQuantityString(isTip ? R.plurals.you_sent_a_tip : R.plurals.you_sent_a_support, sentAmount == 1.0 ? 1 : 2, new DecimalFormat("#,###.##").format(sentAmount));
Snackbar.make(root.findViewById(R.id.file_view_claim_display_area), message, Snackbar.LENGTH_LONG).show();
});
Context context = getContext();
if (context instanceof MainActivity) {
dialog.show(((MainActivity) context).getSupportFragmentManager(), CreateSupportDialogFragment.TAG);
}
}
} else {
if (activity != null) {
activity.simpleSignIn(0);
}
}
}
});
root.findViewById(R.id.file_view_action_repost).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Claim actualClaim = collectionClaimItem != null ? collectionClaimItem : fileClaim;
if (actualClaim != null) {
RepostClaimDialogFragment dialog = RepostClaimDialogFragment.newInstance(actualClaim, claim -> {
Context context = getContext();
if (context instanceof MainActivity) {
((MainActivity) context).showMessage(R.string.content_successfully_reposted);
}
});
Context context = getContext();
if (context instanceof MainActivity) {
dialog.show(((MainActivity) context).getSupportFragmentManager(), RepostClaimDialogFragment.TAG);
}
}
}
});
root.findViewById(R.id.file_view_action_edit).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Context context = getContext();
Claim actualClaim = collectionClaimItem != null ? collectionClaimItem : fileClaim;
if (actualClaim != null && context instanceof MainActivity) {
((MainActivity) context).openPublishForm(actualClaim);
}
}
});
root.findViewById(R.id.file_view_action_delete).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Claim actualClaim = collectionClaimItem != null ? collectionClaimItem : fileClaim;
if (actualClaim != null) {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext()).setTitle(R.string.delete_file).setMessage(R.string.confirm_delete_file_message).setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
deleteClaimFile();
}
}).setNegativeButton(R.string.no, null);
builder.show();
}
}
});
root.findViewById(R.id.file_view_action_unpublish).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Claim actualClaim = collectionClaimItem != null ? collectionClaimItem : fileClaim;
if (actualClaim != null) {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext()).setTitle(R.string.delete_content).setMessage(R.string.confirm_delete_content_message).setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
deleteCurrentClaim();
}
}).setNegativeButton(R.string.no, null);
builder.show();
}
}
});
root.findViewById(R.id.file_view_action_download).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Claim actualClaim = collectionClaimItem != null ? collectionClaimItem : fileClaim;
if (actualClaim != null) {
if (downloadInProgress) {
onDownloadAborted();
} else {
checkStoragePermissionAndStartDownload();
}
}
}
});
root.findViewById(R.id.file_view_action_report).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Claim actualClaim = collectionClaimItem != null ? collectionClaimItem : fileClaim;
if (actualClaim != null) {
Context context = getContext();
CustomTabColorSchemeParams.Builder ctcspb = new CustomTabColorSchemeParams.Builder();
ctcspb.setToolbarColor(ContextCompat.getColor(context, R.color.colorPrimary));
CustomTabColorSchemeParams ctcsp = ctcspb.build();
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder().setDefaultColorSchemeParams(ctcsp);
CustomTabsIntent intent = builder.build();
intent.launchUrl(context, Uri.parse(String.format("https://odysee.com/$/report_content?claimId=%s", actualClaim.getClaimId())));
}
}
});
root.findViewById(R.id.player_toggle_cast).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
toggleCast();
}
});
PlayerView playerView = root.findViewById(R.id.file_view_exoplayer_view);
View playbackSpeedContainer = playerView.findViewById(R.id.player_playback_speed);
TextView textPlaybackSpeed = playerView.findViewById(R.id.player_playback_speed_label);
View qualityContainer = playerView.findViewById(R.id.player_quality);
TextView textQuality = playerView.findViewById(R.id.player_quality_label);
textPlaybackSpeed.setText(DEFAULT_PLAYBACK_SPEED);
textQuality.setText(AUTO_QUALITY_STRING);
playbackSpeedContainer.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu contextMenu, View view, ContextMenu.ContextMenuInfo contextMenuInfo) {
Helper.buildPlaybackSpeedMenu(contextMenu);
}
});
playbackSpeedContainer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Context context = getContext();
if (context instanceof MainActivity) {
((MainActivity) context).openContextMenu(playbackSpeedContainer);
}
}
});
qualityContainer.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu contextMenu, View view, ContextMenu.ContextMenuInfo contextMenuInfo) {
if (MainActivity.appPlayer != null) {
Helper.buildQualityMenu(contextMenu, MainActivity.appPlayer, MainActivity.videoIsTranscoded);
}
}
});
qualityContainer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Context context = getContext();
if (context instanceof MainActivity) {
((MainActivity) context).openContextMenu(qualityContainer);
}
}
});
playerView.findViewById(R.id.player_toggle_fullscreen).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// check full screen mode
if (isInFullscreenMode()) {
disableFullScreenMode();
} else {
enableFullScreenMode();
}
}
});
playerView.findViewById(R.id.player_skip_back_10).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (MainActivity.appPlayer != null) {
MainActivity.appPlayer.seekTo(Math.max(0, MainActivity.appPlayer.getCurrentPosition() - 10000));
}
}
});
playerView.findViewById(R.id.player_skip_forward_10).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (MainActivity.appPlayer != null) {
MainActivity.appPlayer.seekTo(MainActivity.appPlayer.getCurrentPosition() + 10000);
}
}
});
root.findViewById(R.id.file_view_publisher_info_area).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Claim actualClaim = collectionClaimItem != null ? collectionClaimItem : fileClaim;
if (actualClaim != null && actualClaim.getSigningChannel() != null) {
removeNotificationAsSource();
Claim publisher = actualClaim.getSigningChannel();
Context context = getContext();
if (context instanceof MainActivity) {
((MainActivity) context).openChannelClaim(publisher);
}
}
}
});
View buttonFollow = root.findViewById(R.id.file_view_icon_follow);
View buttonUnfollow = root.findViewById(R.id.file_view_icon_unfollow);
View buttonBell = root.findViewById(R.id.file_view_icon_bell);
buttonFollow.setOnClickListener(followUnfollowListener);
buttonUnfollow.setOnClickListener(followUnfollowListener);
buttonBell.setOnClickListener(bellIconListener);
commentChannelSpinnerAdapter = new InlineChannelSpinnerAdapter(getContext(), R.layout.spinner_item_channel, new ArrayList<>());
commentChannelSpinnerAdapter.addPlaceholder(false);
initCommentForm(root);
expandButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Prevents crash for when comment list isn't loaded yet but user tries to expand.
if (commentListAdapter != null) {
switchCommentListVisibility(commentListAdapter.isCollapsed());
commentListAdapter.switchExpandedState();
}
}
});
singleCommentRoot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
expandButton.performClick();
}
});
RecyclerView relatedContentList = root.findViewById(R.id.file_view_related_content_list);
RecyclerView commentsList = root.findViewById(R.id.file_view_comments_list);
relatedContentList.setNestedScrollingEnabled(false);
commentsList.setNestedScrollingEnabled(false);
LinearLayoutManager relatedContentListLLM = new LinearLayoutManager(getContext());
LinearLayoutManager commentsListLLM = new LinearLayoutManager(getContext());
relatedContentList.setLayoutManager(relatedContentListLLM);
commentsList.setLayoutManager(commentsListLLM);
GestureDetector.SimpleOnGestureListener gestureListener = new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onDoubleTap(MotionEvent e) {
ImageView seekOverlay = root.findViewById(R.id.seek_overlay);
int width = playerView.getWidth();
float eventX = e.getX();
if (eventX < width / 3.0) {
if (MainActivity.appPlayer != null) {
MainActivity.appPlayer.seekTo(Math.max(0, MainActivity.appPlayer.getCurrentPosition() - 10000));
seekOverlay.setVisibility(View.VISIBLE);
seekOverlay.setImageResource(R.drawable.ic_rewind);
}
} else if (eventX > width * 2.0 / 3.0) {
if (MainActivity.appPlayer != null) {
MainActivity.appPlayer.seekTo(MainActivity.appPlayer.getCurrentPosition() + 10000);
seekOverlay.setVisibility(View.VISIBLE);
seekOverlay.setImageResource(R.drawable.ic_forward);
}
} else {
return true;
}
if (seekOverlayHandler == null) {
seekOverlayHandler = new Handler();
} else {
// Clear pending messages
seekOverlayHandler.removeCallbacksAndMessages(null);
}
seekOverlayHandler.postDelayed(() -> {
seekOverlay.setVisibility(View.GONE);
}, 500);
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
if (playerView.isControllerVisible()) {
playerView.hideController();
} else {
playerView.showController();
}
return true;
}
};
GestureDetector detector = new GestureDetector(getContext(), gestureListener);
playerView.setOnTouchListener((view, motionEvent) -> {
detector.onTouchEvent(motionEvent);
return true;
});
}
use of com.odysee.app.adapter.CommentListAdapter in project odysee-android by OdyseeTeam.
the class FileViewFragment method ensureCommentListAdapterCreated.
private void ensureCommentListAdapterCreated(final List<Comment> comments) {
Claim actualClaim = collectionClaimItem != null ? collectionClaimItem : fileClaim;
if (commentListAdapter == null) {
final Context androidContext = getContext();
final View root = getView();
commentListAdapter = new CommentListAdapter(comments, getContext(), actualClaim, new CommentListAdapter.CommentListListener() {
@Override
public void onListChanged() {
checkNoComments();
}
@Override
public void onCommentReactClicked(Comment c, boolean liked) {
react(c, liked);
}
@Override
public void onReplyClicked(Comment comment) {
setReplyToComment(comment);
}
});
commentListAdapter.setListener(new ClaimListAdapter.ClaimListItemListener() {
@Override
public void onClaimClicked(Claim claim, int position) {
if (!Helper.isNullOrEmpty(claim.getName()) && claim.getName().startsWith("@") && androidContext instanceof MainActivity) {
removeNotificationAsSource();
((MainActivity) androidContext).openChannelClaim(claim);
}
}
});
RecyclerView commentsList = root.findViewById(R.id.file_view_comments_list);
// Indent reply-type items
int marginInPx = Math.round(40 * ((float) androidContext.getResources().getDisplayMetrics().densityDpi / DisplayMetrics.DENSITY_DEFAULT));
commentsList.addItemDecoration(new CommentItemDecoration(marginInPx));
commentsList.setAdapter(commentListAdapter);
commentListAdapter.notifyItemRangeInserted(0, comments.size());
scrollToCommentHash();
checkNoComments();
resolveCommentPosters();
}
}
use of com.odysee.app.adapter.CommentListAdapter in project odysee-android by OdyseeTeam.
the class ChannelCommentsFragment method ensureCommentListAdapterCreated.
private void ensureCommentListAdapterCreated(final List<Comment> comments) {
if (commentListAdapter == null) {
Context ctx = getContext();
View root = getView();
commentListAdapter = new CommentListAdapter(comments, ctx, claim, new CommentListAdapter.CommentListListener() {
@Override
public void onListChanged() {
checkNoComments();
}
@Override
public void onCommentReactClicked(Comment c, boolean liked) {
// Not used for now.
}
@Override
public void onReplyClicked(Comment comment) {
setReplyToComment(comment);
}
});
commentListAdapter.setListener(new ClaimListAdapter.ClaimListItemListener() {
@Override
public void onClaimClicked(Claim claim, int position) {
if (!Helper.isNullOrEmpty(claim.getName()) && claim.getName().startsWith("@") && ctx instanceof MainActivity) {
((MainActivity) ctx).openChannelClaim(claim);
}
}
});
RecyclerView commentList = root.findViewById(R.id.channel_comments_list);
int marginInPx = Math.round(40 * ((float) ctx.getResources().getDisplayMetrics().densityDpi / DisplayMetrics.DENSITY_DEFAULT));
commentList.addItemDecoration(new CommentItemDecoration(marginInPx));
commentList.setAdapter(commentListAdapter);
commentListAdapter.notifyItemRangeInserted(0, comments.size());
commentListAdapter.setCollapsed(false);
checkNoComments();
resolveCommentPosters();
scrollToCommentHash();
}
}
Aggregations