Search in sources :

Example 11 with PlayerView

use of androidx.media3.ui.PlayerView in project odysee-android by OdyseeTeam.

the class FileViewFragment method onResume.

/*
    public void openClaimUrl(String url) {
        resetViewCount();
        resetFee();
        currentUrl = url;

        ClaimCacheKey key = new ClaimCacheKey();
        key.setUrl(currentUrl);
        Claim oldClaim = claim;
        claim = null;
        if (Lbry.claimCache.containsKey(key)) {
            claim = Lbry.claimCache.get(key);
            if (oldClaim != null && oldClaim.getClaimId().equalsIgnoreCase(claim.getClaimId())) {
                // same claim
                return;
            }
        } else {
            resolveUrl(currentUrl);
        }

        resetMedia();
        onNewClaim(currentUrl);
        Helper.setWunderbarValue(currentUrl, getContext());

        if (claim != null) {
            Helper.saveViewHistory(url, claim);
            if (Helper.isClaimBlocked(claim)) {
                renderClaimBlocked();
            } else {
                checkAndLoadRelatedContent();
                checkAndLoadComments();
                renderClaim();
            }
        }
    }

    public void resetMedia() {
        View root = getView();
        if (root != null) {
            PlayerView view = root.findViewById(R.id.file_view_exoplayer_view);
            view.setShutterBackgroundColor(Color.BLACK);
            root.findViewById(R.id.file_view_exoplayer_container).setVisibility(View.GONE);
        }
        if (MainActivity.appPlayer != null) {
            MainActivity.appPlayer.stop();
        }
        resetPlayer();
    }
*/
@Override
public void onResume() {
    super.onResume();
    checkParams();
    Context context = getContext();
    Helper.setWunderbarValue(currentUrl, context);
    Claim actualClaim = collectionClaimItem != null ? collectionClaimItem : fileClaim;
    if (context instanceof MainActivity) {
        MainActivity activity = (MainActivity) context;
        LbryAnalytics.setCurrentScreen(activity, "File", "File");
        activity.updateCurrentDisplayFragment(this);
        if (actualClaim != null && actualClaim.isPlayable() && activity.isInFullscreenMode()) {
            enableFullScreenMode();
        }
        activity.findViewById(R.id.appbar).setFitsSystemWindows(false);
        activity.refreshChannelCreationRequired(getView());
    }
    if (MainActivity.appPlayer != null) {
        if (MainActivity.playerReassigned) {
            setPlayerForPlayerView();
            MainActivity.playerReassigned = false;
        }
        View root = getView();
        if (root != null) {
            PlayerView playerView = root.findViewById(R.id.file_view_exoplayer_view);
            if (playerView.getPlayer() == null) {
                playerView.setPlayer(MainActivity.appPlayer);
            }
        }
        updatePlaybackSpeedView(root);
        updateQualityView(root);
        loadAndScheduleDurations();
    }
    checkOwnClaim();
    fetchChannels();
    applyFilterForBlockedChannels(Lbryio.blockedChannels);
}
Also used : AttributeProviderContext(org.commonmark.renderer.html.AttributeProviderContext) Context(android.content.Context) PlayerView(com.google.android.exoplayer2.ui.PlayerView) MainActivity(com.odysee.app.MainActivity) SolidIconView(com.odysee.app.ui.controls.SolidIconView) PlayerView(com.google.android.exoplayer2.ui.PlayerView) NestedScrollView(androidx.core.widget.NestedScrollView) AdapterView(android.widget.AdapterView) RecyclerView(androidx.recyclerview.widget.RecyclerView) PhotoView(com.github.chrisbanes.photoview.PhotoView) ImageView(android.widget.ImageView) View(android.view.View) WebView(android.webkit.WebView) TextView(android.widget.TextView) Claim(com.odysee.app.model.Claim) TrackSelectionOverride(com.google.android.exoplayer2.trackselection.TrackSelectionOverrides.TrackSelectionOverride)

Example 12 with PlayerView

use of androidx.media3.ui.PlayerView 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;
    });
}
Also used : Bundle(android.os.Bundle) ProgressBar(android.widget.ProgressBar) NonNull(androidx.annotation.NonNull) LbryRequestException(com.odysee.app.exceptions.LbryRequestException) ChannelCreateDialogFragment(com.odysee.app.ui.channel.ChannelCreateDialogFragment) JSONException(org.json.JSONException) Future(java.util.concurrent.Future) Handler(android.os.Handler) Map(java.util.Map) Search(com.odysee.app.callable.Search) CreateSupportDialogFragment(com.odysee.app.dialog.CreateSupportDialogFragment) SimpleCache(com.google.android.exoplayer2.upstream.cache.SimpleCache) ContextCompat(androidx.core.content.ContextCompat) Log(android.util.Log) C(com.google.android.exoplayer2.C) ConnectivityManager(android.net.ConnectivityManager) Request(okhttp3.Request) Account(android.accounts.Account) AbandonHandler(com.odysee.app.tasks.claim.AbandonHandler) Helper(com.odysee.app.utils.Helper) Lbryio(com.odysee.app.utils.Lbryio) CommentListHandler(com.odysee.app.tasks.CommentListHandler) CommentItemDecoration(com.odysee.app.adapter.CommentItemDecoration) UrlSuggestion(com.odysee.app.model.UrlSuggestion) SolidIconView(com.odysee.app.ui.controls.SolidIconView) ClaimRewardTask(com.odysee.app.tasks.lbryinc.ClaimRewardTask) PlaybackParameters(com.google.android.exoplayer2.PlaybackParameters) ReadTextFileTask(com.odysee.app.tasks.ReadTextFileTask) PlayerView(com.google.android.exoplayer2.ui.PlayerView) LbryUriException(com.odysee.app.exceptions.LbryUriException) Supplier(java.util.function.Supplier) LinkedHashMap(java.util.LinkedHashMap) ExoPlayer(com.google.android.exoplayer2.ExoPlayer) WebSettings(android.webkit.WebSettings) WebResourceRequest(android.webkit.WebResourceRequest) Comment(com.odysee.app.model.Comment) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) LbryUri(com.odysee.app.utils.LbryUri) Response(okhttp3.Response) InlineChannelSpinnerAdapter(com.odysee.app.adapter.InlineChannelSpinnerAdapter) ClaimSearchResultHandler(com.odysee.app.tasks.claim.ClaimSearchResultHandler) Predefined(com.odysee.app.utils.Predefined) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException) OkHttpClient(okhttp3.OkHttpClient) SharedPreferences(android.content.SharedPreferences) PreferenceManager(androidx.preference.PreferenceManager) TagListAdapter(com.odysee.app.adapter.TagListAdapter) ImageButton(android.widget.ImageButton) LinearLayout(android.widget.LinearLayout) NestedScrollView(androidx.core.widget.NestedScrollView) FileListTask(com.odysee.app.tasks.file.FileListTask) ChannelSubscribeTask(com.odysee.app.tasks.lbryinc.ChannelSubscribeTask) WindowManager(android.view.WindowManager) Player(com.google.android.exoplayer2.Player) CustomTabsIntent(androidx.browser.customtabs.CustomTabsIntent) JSONObject(org.json.JSONObject) ActivityInfo(android.content.pm.ActivityInfo) WebViewClient(android.webkit.WebViewClient) AdapterView(android.widget.AdapterView) RecyclerView(androidx.recyclerview.widget.RecyclerView) Reactions(com.odysee.app.model.Reactions) MediaSource(com.google.android.exoplayer2.source.MediaSource) BufferEventTask(com.odysee.app.tasks.BufferEventTask) MediaItem(com.google.android.exoplayer2.MediaItem) AsyncTask(android.os.AsyncTask) DeleteFileTask(com.odysee.app.tasks.file.DeleteFileTask) TrackGroup(com.google.android.exoplayer2.source.TrackGroup) LbryResponseException(com.odysee.app.exceptions.LbryResponseException) ScheduledThreadPoolExecutor(java.util.concurrent.ScheduledThreadPoolExecutor) GenericTaskHandler(com.odysee.app.tasks.GenericTaskHandler) TrackSelectionOverrides(com.google.android.exoplayer2.trackselection.TrackSelectionOverrides) Claim(com.odysee.app.model.Claim) PorterDuff(android.graphics.PorterDuff) DisplayMetrics(android.util.DisplayMetrics) WebViewFeature(androidx.webkit.WebViewFeature) Objects(java.util.Objects) Nullable(org.jetbrains.annotations.Nullable) CommentListTask(com.odysee.app.tasks.CommentListTask) DefaultHttpDataSource(com.google.android.exoplayer2.upstream.DefaultHttpDataSource) LeastRecentlyUsedCacheEvictor(com.google.android.exoplayer2.upstream.cache.LeastRecentlyUsedCacheEvictor) TextInputEditText(com.google.android.material.textfield.TextInputEditText) AlertDialog(androidx.appcompat.app.AlertDialog) AbandonStreamTask(com.odysee.app.tasks.claim.AbandonStreamTask) ResolveTask(com.odysee.app.tasks.claim.ResolveTask) ProgressiveMediaSource(com.google.android.exoplayer2.source.ProgressiveMediaSource) ClaimListResultHandler(com.odysee.app.tasks.claim.ClaimListResultHandler) Lbry(com.odysee.app.utils.Lbry) CompletableFuture(java.util.concurrent.CompletableFuture) MenuItem(android.view.MenuItem) InputMethodManager(android.view.inputmethod.InputMethodManager) LighthouseSearch(com.odysee.app.callable.LighthouseSearch) MaterialButton(com.google.android.material.button.MaterialButton) LbryioRequestException(com.odysee.app.exceptions.LbryioRequestException) Build(android.os.Build) ExecutorService(java.util.concurrent.ExecutorService) LbryioResponseException(com.odysee.app.exceptions.LbryioResponseException) CustomTabColorSchemeParams(androidx.browser.customtabs.CustomTabColorSchemeParams) ApiCallException(com.odysee.app.exceptions.ApiCallException) LayoutInflater(android.view.LayoutInflater) PhotoView(com.github.chrisbanes.photoview.PhotoView) Tag(com.odysee.app.model.Tag) DecimalFormat(java.text.DecimalFormat) ClaimListAdapter(com.odysee.app.adapter.ClaimListAdapter) Color(android.graphics.Color) Fee(com.odysee.app.model.Fee) Base64(android.util.Base64) LbryAnalytics(com.odysee.app.utils.LbryAnalytics) Comparator(java.util.Comparator) Activity(android.app.Activity) AttributeProviderFactory(org.commonmark.renderer.html.AttributeProviderFactory) R(com.odysee.app.R) ClaimSearchTask(com.odysee.app.tasks.claim.ClaimSearchTask) Arrays(java.util.Arrays) Uri(android.net.Uri) ImageView(android.widget.ImageView) AppCompatSpinner(androidx.appcompat.widget.AppCompatSpinner) Parser(org.commonmark.parser.Parser) Manifest(android.Manifest) Looper(android.os.Looper) WebSettingsCompat(androidx.webkit.WebSettingsCompat) AccountManager(android.accounts.AccountManager) DefaultLoadErrorHandlingPolicy(com.google.android.exoplayer2.upstream.DefaultLoadErrorHandlingPolicy) TrackGroupInfo(com.google.android.exoplayer2.TracksInfo.TrackGroupInfo) Executors(java.util.concurrent.Executors) ReactToComment(com.odysee.app.runnable.ReactToComment) StringRes(androidx.annotation.StringRes) ClaimCacheKey(com.odysee.app.model.ClaimCacheKey) PurchaseListTask(com.odysee.app.tasks.claim.PurchaseListTask) ConstraintLayout(androidx.constraintlayout.widget.ConstraintLayout) Subscription(com.odysee.app.model.lbryinc.Subscription) DefaultExtractorsFactory(com.google.android.exoplayer2.extractor.DefaultExtractorsFactory) StoragePermissionListener(com.odysee.app.listener.StoragePermissionListener) LinearLayoutManager(androidx.recyclerview.widget.LinearLayoutManager) TextWatcher(android.text.TextWatcher) HlsMediaSource(com.google.android.exoplayer2.source.hls.HlsMediaSource) GestureDetector(android.view.GestureDetector) FetchClaimsListener(com.odysee.app.listener.FetchClaimsListener) FlexboxLayoutManager(com.google.android.flexbox.FlexboxLayoutManager) Callable(java.util.concurrent.Callable) GetFileTask(com.odysee.app.tasks.file.GetFileTask) Editable(android.text.Editable) NumberFormat(java.text.NumberFormat) ScreenOrientationListener(com.odysee.app.listener.ScreenOrientationListener) ArrayList(java.util.ArrayList) Node(org.commonmark.node.Node) PIPModeListener(com.odysee.app.listener.PIPModeListener) Code(org.commonmark.node.Code) RequestOptions(com.bumptech.glide.request.RequestOptions) CommentListAdapter(com.odysee.app.adapter.CommentListAdapter) TextUtils(android.text.TextUtils) AnyThread(androidx.annotation.AnyThread) AttributeProviderContext(org.commonmark.renderer.html.AttributeProviderContext) File(java.io.File) TracksInfo(com.google.android.exoplayer2.TracksInfo) DownloadActionListener(com.odysee.app.listener.DownloadActionListener) HtmlRenderer(org.commonmark.renderer.html.HtmlRenderer) Configuration(android.content.res.Configuration) Util(com.google.android.exoplayer2.util.Util) DateUtils(android.text.format.DateUtils) ScheduledFuture(java.util.concurrent.ScheduledFuture) ClaimListTask(com.odysee.app.tasks.claim.ClaimListTask) LinkMovementMethod(android.text.method.LinkMovementMethod) CommentCreateTask(com.odysee.app.tasks.CommentCreateTask) Comments(com.odysee.app.utils.Comments) CommentEnabledCheck(com.odysee.app.checkers.CommentEnabledCheck) View(android.view.View) WebView(android.webkit.WebView) OdyseeCollection(com.odysee.app.model.OdyseeCollection) HtmlCompat(androidx.core.text.HtmlCompat) ViewGroup(android.view.ViewGroup) List(java.util.List) TextView(android.widget.TextView) Reward(com.odysee.app.model.lbryinc.Reward) BaseFragment(com.odysee.app.ui.BaseFragment) RelativeLayout(android.widget.RelativeLayout) NotNull(org.jetbrains.annotations.NotNull) AudioAttributes(com.google.android.exoplayer2.audio.AudioAttributes) Snackbar(com.google.android.material.snackbar.Snackbar) Typeface(android.graphics.Typeface) Context(android.content.Context) ContextMenu(android.view.ContextMenu) ExoDatabaseProvider(com.google.android.exoplayer2.database.ExoDatabaseProvider) Intent(android.content.Intent) HashMap(java.util.HashMap) SuppressLint(android.annotation.SuppressLint) MainActivity(com.odysee.app.MainActivity) MotionEvent(android.view.MotionEvent) LbryFile(com.odysee.app.model.LbryFile) DialogInterface(android.content.DialogInterface) BuildCommentReactOptions(com.odysee.app.callable.BuildCommentReactOptions) CacheDataSource(com.google.android.exoplayer2.upstream.cache.CacheDataSource) AttributeProvider(org.commonmark.renderer.html.AttributeProvider) Iterator(java.util.Iterator) FetchStatCountTask(com.odysee.app.tasks.lbryinc.FetchStatCountTask) TimeUnit(java.util.concurrent.TimeUnit) Glide(com.bumptech.glide.Glide) TrackSelectionOverride(com.google.android.exoplayer2.trackselection.TrackSelectionOverrides.TrackSelectionOverride) Collections(java.util.Collections) RepostClaimDialogFragment(com.odysee.app.dialog.RepostClaimDialogFragment) RepostClaimDialogFragment(com.odysee.app.dialog.RepostClaimDialogFragment) AlertDialog(androidx.appcompat.app.AlertDialog) Account(android.accounts.Account) DialogInterface(android.content.DialogInterface) CustomTabColorSchemeParams(androidx.browser.customtabs.CustomTabColorSchemeParams) DecimalFormat(java.text.DecimalFormat) ArrayList(java.util.ArrayList) ContextMenu(android.view.ContextMenu) GestureDetector(android.view.GestureDetector) MainActivity(com.odysee.app.MainActivity) LinearLayoutManager(androidx.recyclerview.widget.LinearLayoutManager) CreateSupportDialogFragment(com.odysee.app.dialog.CreateSupportDialogFragment) TextView(android.widget.TextView) ImageView(android.widget.ImageView) LbryUri(com.odysee.app.utils.LbryUri) TrackSelectionOverride(com.google.android.exoplayer2.trackselection.TrackSelectionOverrides.TrackSelectionOverride) AttributeProviderContext(org.commonmark.renderer.html.AttributeProviderContext) Context(android.content.Context) Handler(android.os.Handler) AbandonHandler(com.odysee.app.tasks.claim.AbandonHandler) CommentListHandler(com.odysee.app.tasks.CommentListHandler) ClaimSearchResultHandler(com.odysee.app.tasks.claim.ClaimSearchResultHandler) GenericTaskHandler(com.odysee.app.tasks.GenericTaskHandler) ClaimListResultHandler(com.odysee.app.tasks.claim.ClaimListResultHandler) CustomTabsIntent(androidx.browser.customtabs.CustomTabsIntent) Intent(android.content.Intent) InlineChannelSpinnerAdapter(com.odysee.app.adapter.InlineChannelSpinnerAdapter) SolidIconView(com.odysee.app.ui.controls.SolidIconView) PlayerView(com.google.android.exoplayer2.ui.PlayerView) NestedScrollView(androidx.core.widget.NestedScrollView) AdapterView(android.widget.AdapterView) RecyclerView(androidx.recyclerview.widget.RecyclerView) PhotoView(com.github.chrisbanes.photoview.PhotoView) ImageView(android.widget.ImageView) View(android.view.View) WebView(android.webkit.WebView) TextView(android.widget.TextView) SuppressLint(android.annotation.SuppressLint) MotionEvent(android.view.MotionEvent) CustomTabsIntent(androidx.browser.customtabs.CustomTabsIntent) LbryUriException(com.odysee.app.exceptions.LbryUriException) PlayerView(com.google.android.exoplayer2.ui.PlayerView) AccountManager(android.accounts.AccountManager) RecyclerView(androidx.recyclerview.widget.RecyclerView) Map(java.util.Map) LinkedHashMap(java.util.LinkedHashMap) HashMap(java.util.HashMap) Claim(com.odysee.app.model.Claim)

Example 13 with PlayerView

use of androidx.media3.ui.PlayerView in project odysee-android by OdyseeTeam.

the class FileViewFragment method updatePlaybackSpeedView.

private void updatePlaybackSpeedView(View root) {
    if (root != null) {
        PlayerView playerView = root.findViewById(R.id.file_view_exoplayer_view);
        TextView textPlaybackSpeed = playerView.findViewById(R.id.player_playback_speed_label);
        textPlaybackSpeed.setText(MainActivity.appPlayer != null && MainActivity.appPlayer.getPlaybackParameters() != null ? Helper.getDisplayValueForPlaybackSpeed((double) MainActivity.appPlayer.getPlaybackParameters().speed) : DEFAULT_PLAYBACK_SPEED);
    }
}
Also used : PlayerView(com.google.android.exoplayer2.ui.PlayerView) TextView(android.widget.TextView)

Example 14 with PlayerView

use of androidx.media3.ui.PlayerView in project odysee-android by OdyseeTeam.

the class FileViewFragment method showBuffering.

private void showBuffering() {
    View root = getView();
    if (root != null) {
        root.findViewById(R.id.player_buffering_progress).setVisibility(View.VISIBLE);
        PlayerView playerView = root.findViewById(R.id.file_view_exoplayer_view);
        playerView.findViewById(R.id.player_skip_back_10).setVisibility(View.INVISIBLE);
        playerView.findViewById(R.id.player_skip_forward_10).setVisibility(View.INVISIBLE);
    }
}
Also used : PlayerView(com.google.android.exoplayer2.ui.PlayerView) SolidIconView(com.odysee.app.ui.controls.SolidIconView) PlayerView(com.google.android.exoplayer2.ui.PlayerView) NestedScrollView(androidx.core.widget.NestedScrollView) AdapterView(android.widget.AdapterView) RecyclerView(androidx.recyclerview.widget.RecyclerView) PhotoView(com.github.chrisbanes.photoview.PhotoView) ImageView(android.widget.ImageView) View(android.view.View) WebView(android.webkit.WebView) TextView(android.widget.TextView)

Example 15 with PlayerView

use of androidx.media3.ui.PlayerView in project odysee-android by OdyseeTeam.

the class FileViewFragment method disableFullScreenMode.

@SuppressLint("SourceLockedOrientationActivity")
private void disableFullScreenMode() {
    Context context = getContext();
    if (context instanceof MainActivity) {
        MainActivity activity = (MainActivity) context;
        View root = getView();
        if (root != null) {
            RelativeLayout mediaContainer = root.findViewById(R.id.file_view_media_container);
            View exoplayerContainer = root.findViewById(R.id.file_view_exoplayer_container);
            ((ViewGroup) exoplayerContainer.getParent()).removeView(exoplayerContainer);
            mediaContainer.addView(exoplayerContainer);
            View playerView = root.findViewById(R.id.file_view_exoplayer_view);
            ((ImageView) playerView.findViewById(R.id.player_image_full_screen_toggle)).setImageResource(R.drawable.ic_fullscreen);
            exoplayerContainer.setPadding(0, 0, 0, 0);
            activity.exitFullScreenMode();
            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
        }
    }
}
Also used : AttributeProviderContext(org.commonmark.renderer.html.AttributeProviderContext) Context(android.content.Context) ViewGroup(android.view.ViewGroup) RelativeLayout(android.widget.RelativeLayout) MainActivity(com.odysee.app.MainActivity) ImageView(android.widget.ImageView) SolidIconView(com.odysee.app.ui.controls.SolidIconView) PlayerView(com.google.android.exoplayer2.ui.PlayerView) NestedScrollView(androidx.core.widget.NestedScrollView) AdapterView(android.widget.AdapterView) RecyclerView(androidx.recyclerview.widget.RecyclerView) PhotoView(com.github.chrisbanes.photoview.PhotoView) ImageView(android.widget.ImageView) View(android.view.View) WebView(android.webkit.WebView) TextView(android.widget.TextView) SuppressLint(android.annotation.SuppressLint)

Aggregations

PlayerView (com.google.android.exoplayer2.ui.PlayerView)25 TextView (android.widget.TextView)18 View (android.view.View)15 ImageView (android.widget.ImageView)14 RecyclerView (androidx.recyclerview.widget.RecyclerView)13 WebView (android.webkit.WebView)12 AdapterView (android.widget.AdapterView)10 NestedScrollView (androidx.core.widget.NestedScrollView)10 PhotoView (com.github.chrisbanes.photoview.PhotoView)10 SolidIconView (com.odysee.app.ui.controls.SolidIconView)10 Context (android.content.Context)6 Nullable (androidx.annotation.Nullable)5 SuppressLint (android.annotation.SuppressLint)4 ViewGroup (android.view.ViewGroup)4 MainActivity (com.odysee.app.MainActivity)4 AttributeProviderContext (org.commonmark.renderer.html.AttributeProviderContext)4 Intent (android.content.Intent)3 Uri (android.net.Uri)3 Bundle (android.os.Bundle)3 FrameLayout (android.widget.FrameLayout)3