use of com.odysee.app.utils.LbryUri in project odysee-android by OdyseeTeam.
the class SignInActivity method loadSharedUserStateAndFinish.
private void loadSharedUserStateAndFinish() {
// load the shared user state after wallet sync is done
LoadSharedUserStateTask loadTask = new LoadSharedUserStateTask(SignInActivity.this, new LoadSharedUserStateTask.LoadSharedUserStateHandler() {
@Override
public void onSuccess(List<Subscription> subscriptions, List<Tag> followedTags, List<LbryUri> blockedChannels) {
Lbryio.subscriptions = new ArrayList<>(subscriptions);
Lbryio.blockedChannels = new ArrayList<>(blockedChannels);
finishSignInActivity();
}
@Override
public void onError(Exception error) {
// shouldn't happen, but if it does, finish anyway
finishSignInActivity();
}
}, Lbryio.AUTH_TOKEN);
loadTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
use of com.odysee.app.utils.LbryUri in project odysee-android by OdyseeTeam.
the class LoadSharedUserStateTask method loadSubscriptionsFromSharedUserState.
public static List<Subscription> loadSubscriptionsFromSharedUserState(JSONObject shared) {
List<Subscription> subscriptions = new ArrayList<>();
try {
JSONObject value = shared.getJSONObject("value");
JSONArray subscriptionUrls = value.has("subscriptions") && !value.isNull("subscriptions") ? value.getJSONArray("subscriptions") : null;
JSONArray following = value.has("following") && !value.isNull("following") ? value.getJSONArray("following") : null;
if (subscriptionUrls != null) {
subscriptions = new ArrayList<>();
for (int i = 0; i < subscriptionUrls.length(); i++) {
String url = subscriptionUrls.getString(i);
try {
LbryUri uri = LbryUri.parse(LbryUri.normalize(url));
Subscription subscription = new Subscription();
subscription.setChannelName(uri.getChannelName());
subscription.setUrl(uri.toString());
subscription.setNotificationsDisabled(isNotificationsDisabledForSubUrl(uri.toString(), following));
subscriptions.add(subscription);
} catch (LbryUriException | SQLiteException ex) {
// pass
}
}
}
} catch (JSONException ex) {
// pass
}
return subscriptions;
}
use of com.odysee.app.utils.LbryUri in project odysee-android by OdyseeTeam.
the class SaveSharedUserStateTask method buildUpdatedNotificationsDisabledStates.
private static JSONArray buildUpdatedNotificationsDisabledStates(List<Subscription> subscriptions) {
JSONArray states = new JSONArray();
for (Subscription subscription : subscriptions) {
if (!Helper.isNullOrEmpty(subscription.getUrl())) {
try {
JSONObject item = new JSONObject();
LbryUri uri = LbryUri.parse(LbryUri.normalize(subscription.getUrl()));
item.put("uri", uri.toString());
item.put("notificationsDisabled", subscription.isNotificationsDisabled());
states.put(item);
} catch (JSONException | LbryUriException ex) {
// pass
}
}
}
return states;
}
use of com.odysee.app.utils.LbryUri in project odysee-android by OdyseeTeam.
the class SaveSharedUserStateTask method doInBackground.
protected Boolean doInBackground(Void... params) {
boolean loadedSubs = false;
boolean loadedBlocked = false;
SQLiteDatabase db = null;
if (context instanceof MainActivity) {
db = ((MainActivity) context).getDbHelper().getReadableDatabase();
}
// data to save
// current subscriptions
List<Subscription> subs = new ArrayList<>();
try {
if (db != null) {
subs = new ArrayList<>(DatabaseHelper.getSubscriptions(db));
loadedSubs = true;
}
} catch (SQLiteException ex) {
// pass
}
List<String> subscriptionUrls = new ArrayList<>();
try {
for (Subscription subscription : subs) {
LbryUri uri = LbryUri.parse(LbryUri.normalize(subscription.getUrl()));
subscriptionUrls.add(uri.toString());
}
} catch (LbryUriException ex) {
error = ex;
return false;
}
// followed tags
List<String> followedTags = Helper.getTagsForTagObjects(Lbry.followedTags);
// blocked channels
List<LbryUri> blockedChannels = new ArrayList<>();
try {
if (db != null) {
blockedChannels = new ArrayList<>(DatabaseHelper.getBlockedChannels(db));
loadedBlocked = true;
}
} catch (SQLiteException ex) {
// pass
}
List<String> blockedChannelUrls = new ArrayList<>();
for (LbryUri uri : blockedChannels) {
blockedChannelUrls.add(uri.toString());
}
Map<String, OdyseeCollection> allCollections = null;
OdyseeCollection favoritesPlaylist = null;
OdyseeCollection watchlaterPlaylist = null;
if (db != null) {
allCollections = DatabaseHelper.loadAllCollections(db);
// get the built in collections
favoritesPlaylist = allCollections.get(OdyseeCollection.BUILT_IN_ID_FAVORITES);
watchlaterPlaylist = allCollections.get(OdyseeCollection.BUILT_IN_ID_WATCHLATER);
}
// Get the previous saved state
try {
boolean isExistingValid = false;
JSONObject sharedObject = null;
JSONObject result = (JSONObject) Lbry.authenticatedGenericApiCall(Lbry.METHOD_PREFERENCE_GET, Lbry.buildSingleParam("key", KEY), authToken);
if (result != null) {
JSONObject shared = result.getJSONObject("shared");
if (shared.has("type") && "object".equalsIgnoreCase(shared.getString("type")) && shared.has("value")) {
isExistingValid = true;
JSONObject value = shared.getJSONObject("value");
if (loadedSubs) {
// make sure the subs were actually loaded from the local store before overwriting the data
value.put("subscriptions", Helper.jsonArrayFromList(subscriptionUrls));
value.put("following", buildUpdatedNotificationsDisabledStates(subs));
}
value.put("tags", Helper.jsonArrayFromList(followedTags));
if (loadedBlocked) {
// make sure blocked list was actually loaded from the local store before overwriting
value.put("blocked", Helper.jsonArrayFromList(blockedChannelUrls));
}
// handle builtInCollections
// check favorites last updated at, and compare
JSONObject builtinCollections = Helper.getJSONObject("builtinCollections", value);
if (builtinCollections != null) {
if (favoritesPlaylist != null) {
JSONObject priorFavorites = Helper.getJSONObject(favoritesPlaylist.getId(), builtinCollections);
long priorFavUpdatedAt = Helper.getJSONLong("updatedAt", 0, priorFavorites);
if (priorFavUpdatedAt < favoritesPlaylist.getUpdatedAtTimestamp()) {
// the current playlist is newer, so we replace
builtinCollections.put(favoritesPlaylist.getId(), favoritesPlaylist.toJSONObject());
}
}
if (watchlaterPlaylist != null) {
JSONObject priorWatchLater = Helper.getJSONObject(watchlaterPlaylist.getId(), builtinCollections);
long priorWatchLaterUpdatedAt = Helper.getJSONLong("updatedAt", 0, priorWatchLater);
if (priorWatchLaterUpdatedAt < watchlaterPlaylist.getUpdatedAtTimestamp()) {
// the current playlist is newer, so we replace
builtinCollections.put(watchlaterPlaylist.getId(), watchlaterPlaylist.toJSONObject());
}
}
}
// handle unpublishedCollections
JSONObject unpublishedCollections = Helper.getJSONObject("unpublishedCollections", value);
if (unpublishedCollections != null && allCollections != null) {
for (Map.Entry<String, OdyseeCollection> entry : allCollections.entrySet()) {
String collectionId = entry.getKey();
if (Arrays.asList(OdyseeCollection.BUILT_IN_ID_FAVORITES, OdyseeCollection.BUILT_IN_ID_WATCHLATER).contains(collectionId)) {
continue;
}
OdyseeCollection localCollection = entry.getValue();
if (localCollection.getVisibility() != OdyseeCollection.VISIBILITY_PRIVATE) {
continue;
}
JSONObject priorCollection = Helper.getJSONObject(collectionId, unpublishedCollections);
if (priorCollection != null) {
long priorCollectionUpdatedAt = Helper.getJSONLong("updatedAt", 0, priorCollection);
if (priorCollectionUpdatedAt < localCollection.getUpdatedAtTimestamp()) {
unpublishedCollections.put(collectionId, localCollection.toJSONObject());
}
} else {
unpublishedCollections.put(collectionId, localCollection.toJSONObject());
}
}
}
sharedObject = shared;
}
}
if (!isExistingValid) {
// build a new object
JSONObject value = new JSONObject();
value.put("subscriptions", Helper.jsonArrayFromList(subscriptionUrls));
value.put("tags", Helper.jsonArrayFromList(followedTags));
value.put("following", buildUpdatedNotificationsDisabledStates(subs));
value.put("blocked", Helper.jsonArrayFromList(blockedChannelUrls));
JSONObject builtinCollections = new JSONObject();
if (favoritesPlaylist != null) {
builtinCollections.put(favoritesPlaylist.getId(), favoritesPlaylist.toJSONObject());
}
if (watchlaterPlaylist != null) {
builtinCollections.put(watchlaterPlaylist.getId(), watchlaterPlaylist.toJSONObject());
}
value.put("builtinCollections", builtinCollections);
JSONObject unpublishedCollections = new JSONObject();
if (allCollections != null) {
for (Map.Entry<String, OdyseeCollection> entry : allCollections.entrySet()) {
String collectionId = entry.getKey();
if (Arrays.asList(OdyseeCollection.BUILT_IN_ID_FAVORITES, OdyseeCollection.BUILT_IN_ID_WATCHLATER).contains(collectionId)) {
continue;
}
OdyseeCollection localCollection = entry.getValue();
if (localCollection.getVisibility() != OdyseeCollection.VISIBILITY_PRIVATE) {
continue;
}
unpublishedCollections.put(collectionId, localCollection.toJSONObject());
}
}
value.put("unpublishedCollections", unpublishedCollections);
sharedObject = new JSONObject();
sharedObject.put("type", "object");
sharedObject.put("value", value);
sharedObject.put("version", VERSION);
}
Map<String, Object> options = new HashMap<>();
options.put("key", KEY);
options.put("value", sharedObject.toString());
Lbry.authenticatedGenericApiCall(Lbry.METHOD_PREFERENCE_SET, options, authToken);
return true;
} catch (ApiCallException | JSONException ex) {
// failed
error = ex;
}
return false;
}
use of com.odysee.app.utils.LbryUri 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;
});
}
Aggregations