From 600ebdae18711710983312fba5090297234e13e8 Mon Sep 17 00:00:00 2001 From: Stypox Date: Thu, 23 Feb 2023 23:38:20 +0100 Subject: [PATCH 1/4] Correctly open urls in browser on Android 11+ - Fix misconfiguration in manifest ('http|https|market' is not valid) - Split ShareUtils functions taking a boolean parameter into pairs of functions with better names and less runtime checks - Move all Kore-related functions to KoreUtils - Remove the toast_no_player string --- app/src/main/AndroidManifest.xml | 2 +- .../org/schabi/newpipe/about/AboutActivity.kt | 9 +- .../newpipe/about/LicenseFragmentHelper.kt | 2 +- .../schabi/newpipe/error/ErrorActivity.java | 6 +- .../schabi/newpipe/error/ErrorPanelHelper.kt | 2 +- .../fragments/detail/VideoDetailFragment.java | 13 +- .../list/channel/ChannelFragment.java | 3 +- .../dialog/StreamDialogDefaultEntry.java | 10 +- .../newpipe/player/ui/VideoPlayerUi.java | 9 +- .../schabi/newpipe/util/NavigationHelper.java | 42 +---- .../external_communication/KoreUtils.java | 48 +++++- .../external_communication/ShareUtils.java | 162 +++++++----------- .../util/text/UrlLongPressClickableSpan.java | 2 +- .../giga/ui/adapter/MissionAdapter.java | 12 +- app/src/main/res/values-ar/strings.xml | 1 - app/src/main/res/values-az/strings.xml | 1 - app/src/main/res/values-b+ast/strings.xml | 1 - app/src/main/res/values-b+uz+Latn/strings.xml | 1 - app/src/main/res/values-be/strings.xml | 1 - app/src/main/res/values-bg/strings.xml | 1 - app/src/main/res/values-bn-rBD/strings.xml | 1 - app/src/main/res/values-bn/strings.xml | 1 - app/src/main/res/values-ca/strings.xml | 1 - app/src/main/res/values-ckb/strings.xml | 1 - app/src/main/res/values-cs/strings.xml | 1 - app/src/main/res/values-da/strings.xml | 1 - app/src/main/res/values-de/strings.xml | 1 - app/src/main/res/values-el/strings.xml | 1 - app/src/main/res/values-eo/strings.xml | 1 - app/src/main/res/values-es/strings.xml | 1 - app/src/main/res/values-et/strings.xml | 1 - app/src/main/res/values-eu/strings.xml | 1 - app/src/main/res/values-fa/strings.xml | 1 - app/src/main/res/values-fi/strings.xml | 1 - app/src/main/res/values-fr/strings.xml | 1 - app/src/main/res/values-gl/strings.xml | 1 - app/src/main/res/values-he/strings.xml | 1 - app/src/main/res/values-hi/strings.xml | 1 - app/src/main/res/values-hr/strings.xml | 1 - app/src/main/res/values-hu/strings.xml | 1 - app/src/main/res/values-in/strings.xml | 1 - app/src/main/res/values-is/strings.xml | 1 - app/src/main/res/values-it/strings.xml | 1 - app/src/main/res/values-ja/strings.xml | 1 - app/src/main/res/values-ka/strings.xml | 1 - app/src/main/res/values-kmr/strings.xml | 1 - app/src/main/res/values-ko/strings.xml | 1 - app/src/main/res/values-ku/strings.xml | 1 - app/src/main/res/values-lt/strings.xml | 1 - app/src/main/res/values-lv/strings.xml | 1 - app/src/main/res/values-mk/strings.xml | 1 - app/src/main/res/values-ml/strings.xml | 1 - app/src/main/res/values-ms/strings.xml | 1 - app/src/main/res/values-nb-rNO/strings.xml | 1 - app/src/main/res/values-ne/strings.xml | 1 - app/src/main/res/values-nl-rBE/strings.xml | 1 - app/src/main/res/values-nl/strings.xml | 1 - app/src/main/res/values-or/strings.xml | 1 - app/src/main/res/values-pa/strings.xml | 1 - app/src/main/res/values-pl/strings.xml | 1 - app/src/main/res/values-pt-rBR/strings.xml | 1 - app/src/main/res/values-pt-rPT/strings.xml | 1 - app/src/main/res/values-pt/strings.xml | 1 - app/src/main/res/values-ro/strings.xml | 1 - app/src/main/res/values-ru/strings.xml | 1 - app/src/main/res/values-sc/strings.xml | 1 - app/src/main/res/values-sk/strings.xml | 1 - app/src/main/res/values-sl/strings.xml | 1 - app/src/main/res/values-so/strings.xml | 1 - app/src/main/res/values-sq/strings.xml | 1 - app/src/main/res/values-sr/strings.xml | 1 - app/src/main/res/values-sv/strings.xml | 1 - app/src/main/res/values-te/strings.xml | 1 - app/src/main/res/values-th/strings.xml | 1 - app/src/main/res/values-tr/strings.xml | 1 - app/src/main/res/values-uk/strings.xml | 1 - app/src/main/res/values-ur/strings.xml | 1 - app/src/main/res/values-vi/strings.xml | 1 - app/src/main/res/values-zh-rCN/strings.xml | 1 - app/src/main/res/values-zh-rHK/strings.xml | 1 - app/src/main/res/values-zh-rTW/strings.xml | 1 - app/src/main/res/values/donottranslate.xml | 2 +- app/src/main/res/values/strings.xml | 1 - 83 files changed, 125 insertions(+), 267 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1fb20ef0e..9d86dde6d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,7 +15,7 @@ - + diff --git a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt index c1eec1526..f1d4c26df 100644 --- a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt +++ b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt @@ -6,6 +6,7 @@ import android.view.MenuItem import android.view.View import android.view.ViewGroup import android.widget.Button +import androidx.annotation.StringRes import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity @@ -57,13 +58,9 @@ class AboutActivity : AppCompatActivity() { * A placeholder fragment containing a simple view. */ class AboutFragment : Fragment() { - private fun Button.openLink(url: Int) { + private fun Button.openLink(@StringRes url: Int) { setOnClickListener { - ShareUtils.openUrlInBrowser( - context, - requireContext().getString(url), - false - ) + ShareUtils.openUrlInApp(context, requireContext().getString(url)) } } diff --git a/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.kt b/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.kt index 6e3aa4be8..5af7eefec 100644 --- a/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.kt +++ b/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.kt @@ -66,7 +66,7 @@ fun showLicense(context: Context?, component: SoftwareComponent): Disposable { dialog.dismiss() } setNeutralButton(R.string.open_website_license) { _, _ -> - ShareUtils.openUrlInBrowser(context!!, component.link) + ShareUtils.openUrlInApp(context!!, component.link) } } } diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java index e1dd929d4..dd065c3bb 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java @@ -160,7 +160,7 @@ public class ErrorActivity extends AppCompatActivity { .setMessage(R.string.start_accept_privacy_policy) .setCancelable(false) .setNeutralButton(R.string.read_privacy_policy, (dialog, which) -> - ShareUtils.openUrlInBrowser(context, + ShareUtils.openUrlInApp(context, context.getString(R.string.privacy_policy_url))) .setPositiveButton(R.string.accept, (dialog, which) -> { if (action.equals("EMAIL")) { // send on email @@ -171,9 +171,9 @@ public class ErrorActivity extends AppCompatActivity { + getString(R.string.app_name) + " " + BuildConfig.VERSION_NAME) .putExtra(Intent.EXTRA_TEXT, buildJson()); - ShareUtils.openIntentInApp(context, i, true); + ShareUtils.openIntentInApp(context, i); } else if (action.equals("GITHUB")) { // open the NewPipe issue page on GitHub - ShareUtils.openUrlInBrowser(this, ERROR_GITHUB_ISSUE_URL, false); + ShareUtils.openUrlInApp(this, ERROR_GITHUB_ISSUE_URL); } }) .setNegativeButton(R.string.decline, (dialog, which) -> { diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt b/app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt index b41d3997e..17071dfcb 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt @@ -156,7 +156,7 @@ class ErrorPanelHelper( ) { errorOpenInBrowserButton.isVisible = true errorOpenInBrowserButton.setOnClickListener { - ShareUtils.openUrlInBrowser(context, errorInfo.request, true) + ShareUtils.openUrlInBrowser(context, errorInfo.request) } } diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java index 0fb137528..673f59281 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java @@ -11,7 +11,6 @@ import static org.schabi.newpipe.player.playqueue.PlayQueueItem.RECOVERY_UNSET; import static org.schabi.newpipe.util.ExtractorHelper.showMetaInfoInTextView; import static org.schabi.newpipe.util.ListHelper.getUrlAndNonTorrentStreams; import static org.schabi.newpipe.util.NavigationHelper.openPlayQueue; -import static org.schabi.newpipe.util.NavigationHelper.playWithKore; import android.animation.ValueAnimator; import android.annotation.SuppressLint; @@ -485,16 +484,8 @@ public final class VideoDetailFragment info.getThumbnailUrl()))); binding.detailControlsOpenInBrowser.setOnClickListener(makeOnClickListener(info -> ShareUtils.openUrlInBrowser(requireContext(), info.getUrl()))); - binding.detailControlsPlayWithKodi.setOnClickListener(makeOnClickListener(info -> { - try { - playWithKore(requireContext(), Uri.parse(info.getUrl())); - } catch (final Exception e) { - if (DEBUG) { - Log.i(TAG, "Failed to start kore", e); - } - KoreUtils.showInstallKoreDialog(requireContext()); - } - })); + binding.detailControlsPlayWithKodi.setOnClickListener(makeOnClickListener(info -> + KoreUtils.playWithKore(requireContext(), Uri.parse(info.getUrl())))); if (DEBUG) { binding.detailControlsCrashThePlayer.setOnClickListener(v -> VideoDetailPlayerCrasher.onCrashThePlayer(requireContext(), player)); diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java index 8ed9389c3..a39de376b 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java @@ -204,8 +204,7 @@ public class ChannelFragment extends BaseListInfoFragment { - final Uri videoUrl = Uri.parse(item.getUrl()); - try { - NavigationHelper.playWithKore(fragment.requireContext(), videoUrl); - } catch (final Exception e) { - KoreUtils.showInstallKoreDialog(fragment.requireActivity()); - } - }), + PLAY_WITH_KODI(R.string.play_with_kodi_title, (fragment, item) -> + KoreUtils.playWithKore(fragment.requireContext(), Uri.parse(item.getUrl()))), SHARE(R.string.share, (fragment, item) -> ShareUtils.shareText(fragment.requireContext(), item.getName(), item.getUrl(), diff --git a/app/src/main/java/org/schabi/newpipe/player/ui/VideoPlayerUi.java b/app/src/main/java/org/schabi/newpipe/player/ui/VideoPlayerUi.java index e4f5b05e1..9afd1bf24 100644 --- a/app/src/main/java/org/schabi/newpipe/player/ui/VideoPlayerUi.java +++ b/app/src/main/java/org/schabi/newpipe/player/ui/VideoPlayerUi.java @@ -1420,14 +1420,7 @@ public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBa private void onPlayWithKodiClicked() { if (player.getCurrentMetadata() != null) { player.pause(); - try { - NavigationHelper.playWithKore(context, Uri.parse(player.getVideoUrl())); - } catch (final Exception e) { - if (DEBUG) { - Log.i(TAG, "Failed to start kore", e); - } - KoreUtils.showInstallKoreDialog(player.getContext()); - } + KoreUtils.playWithKore(context, Uri.parse(player.getVideoUrl())); } } diff --git a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java index b4556507c..2c8db77e0 100644 --- a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java @@ -1,6 +1,6 @@ package org.schabi.newpipe.util; -import static org.schabi.newpipe.util.external_communication.ShareUtils.installApp; +import static org.schabi.newpipe.util.ListHelper.getUrlAndNonTorrentStreams; import android.annotation.SuppressLint; import android.app.Activity; @@ -50,9 +50,9 @@ import org.schabi.newpipe.local.history.StatisticsPlaylistFragment; import org.schabi.newpipe.local.playlist.LocalPlaylistFragment; import org.schabi.newpipe.local.subscription.SubscriptionFragment; import org.schabi.newpipe.local.subscription.SubscriptionsImportFragment; -import org.schabi.newpipe.player.PlayerService; import org.schabi.newpipe.player.PlayQueueActivity; import org.schabi.newpipe.player.Player; +import org.schabi.newpipe.player.PlayerService; import org.schabi.newpipe.player.PlayerType; import org.schabi.newpipe.player.helper.PlayerHelper; import org.schabi.newpipe.player.helper.PlayerHolder; @@ -63,8 +63,6 @@ import org.schabi.newpipe.util.external_communication.ShareUtils; import java.util.List; -import static org.schabi.newpipe.util.ListHelper.getUrlAndNonTorrentStreams; - public final class NavigationHelper { public static final String MAIN_FRAGMENT_TAG = "main_fragment_tag"; public static final String SEARCH_FRAGMENT_TAG = "search_fragment_tag"; @@ -323,15 +321,13 @@ public final class NavigationHelper { public static void resolveActivityOrAskToInstall(@NonNull final Context context, @NonNull final Intent intent) { - if (intent.resolveActivity(context.getPackageManager()) != null) { - ShareUtils.openIntentInApp(context, intent, false); - } else { + if (!ShareUtils.tryOpenIntentInApp(context, intent)) { if (context instanceof Activity) { new AlertDialog.Builder(context) .setMessage(R.string.no_player_found) .setPositiveButton(R.string.install, - (dialog, which) -> ShareUtils.openUrlInBrowser(context, - context.getString(R.string.fdroid_vlc_url), false)) + (dialog, which) -> ShareUtils.installApp(context, + context.getString(R.string.vlc_package))) .setNegativeButton(R.string.cancel, (dialog, which) -> Log.i("NavigationHelper", "You unlocked a secret unicorn.")) .show(); @@ -684,34 +680,6 @@ public final class NavigationHelper { return getOpenIntent(context, url, serviceId, StreamingService.LinkType.CHANNEL); } - /** - * Start an activity to install Kore. - * - * @param context the context - */ - public static void installKore(final Context context) { - installApp(context, context.getString(R.string.kore_package)); - } - - /** - * Start Kore app to show a video on Kodi. - *

- * For a list of supported urls see the - * - * Kore source code - * . - * - * @param context the context to use - * @param videoURL the url to the video - */ - public static void playWithKore(final Context context, final Uri videoURL) { - final Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setPackage(context.getString(R.string.kore_package)); - intent.setData(videoURL); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(intent); - } - /** * Finish this Activity as well as all Activities running below it * and then start MainActivity. diff --git a/app/src/main/java/org/schabi/newpipe/util/external_communication/KoreUtils.java b/app/src/main/java/org/schabi/newpipe/util/external_communication/KoreUtils.java index 0df579d88..7fe518113 100644 --- a/app/src/main/java/org/schabi/newpipe/util/external_communication/KoreUtils.java +++ b/app/src/main/java/org/schabi/newpipe/util/external_communication/KoreUtils.java @@ -1,6 +1,11 @@ package org.schabi.newpipe.util.external_communication; +import static org.schabi.newpipe.util.external_communication.ShareUtils.installApp; +import static org.schabi.newpipe.util.external_communication.ShareUtils.tryOpenIntentInApp; + import android.content.Context; +import android.content.Intent; +import android.net.Uri; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; @@ -8,7 +13,6 @@ import androidx.preference.PreferenceManager; import org.schabi.newpipe.R; import org.schabi.newpipe.extractor.ServiceList; -import org.schabi.newpipe.util.NavigationHelper; /** * Util class that provides methods which are related to the Kodi Media Center and its Kore app. @@ -29,13 +33,39 @@ public final class KoreUtils { .getBoolean(context.getString(R.string.show_play_with_kodi_key), false); } - public static void showInstallKoreDialog(@NonNull final Context context) { - final AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setMessage(R.string.kore_not_found) - .setPositiveButton(R.string.install, (dialog, which) -> - NavigationHelper.installKore(context)) - .setNegativeButton(R.string.cancel, (dialog, which) -> { - }); - builder.create().show(); + /** + * Start an activity to install Kore. + * + * @param context the context + */ + public static void installKore(final Context context) { + installApp(context, context.getString(R.string.kore_package)); + } + + /** + * Start Kore app to show a video on Kodi, and if the app is not installed ask the user to + * install it. + *

+ * For a list of supported urls see the + * + * Kore source code + * . + * + * @param context the context to use + * @param videoURL the url to the video + */ + public static void playWithKore(final Context context, final Uri videoURL) { + final Intent intent = new Intent(Intent.ACTION_VIEW) + .setPackage(context.getString(R.string.kore_package)) + .setData(videoURL) + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + + if (!tryOpenIntentInApp(context, intent)) { + final AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setMessage(R.string.kore_not_found) + .setPositiveButton(R.string.install, (dialog, which) -> installKore(context)) + .setNegativeButton(R.string.cancel, (dialog, which) -> { }); + builder.create().show(); + } } } diff --git a/app/src/main/java/org/schabi/newpipe/util/external_communication/ShareUtils.java b/app/src/main/java/org/schabi/newpipe/util/external_communication/ShareUtils.java index 06dd3f945..883633772 100644 --- a/app/src/main/java/org/schabi/newpipe/util/external_communication/ShareUtils.java +++ b/app/src/main/java/org/schabi/newpipe/util/external_communication/ShareUtils.java @@ -41,60 +41,56 @@ public final class ShareUtils { * second param (a system chooser will be opened if there are multiple markets and no default) * and falls back to Google Play Store web URL if no app to handle the market scheme was found. *

- * It uses {@link #openIntentInApp(Context, Intent, boolean)} to open market scheme - * and {@link #openUrlInBrowser(Context, String, boolean)} to open Google Play Store - * web URL with false for the boolean param. + * It uses {@link #openIntentInApp(Context, Intent)} to open market scheme and {@link + * #openUrlInBrowser(Context, String)} to open Google Play Store web URL. * * @param context the context to use * @param packageId the package id of the app to be installed */ public static void installApp(@NonNull final Context context, final String packageId) { // Try market scheme - final boolean marketSchemeResult = openIntentInApp(context, new Intent(Intent.ACTION_VIEW, + final Intent marketSchemeIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageId)) - .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK), false); - if (!marketSchemeResult) { + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + if (!tryOpenIntentInApp(context, marketSchemeIntent)) { // Fall back to Google Play Store Web URL (F-Droid can handle it) - openUrlInBrowser(context, - "https://play.google.com/store/apps/details?id=" + packageId, false); + openUrlInApp(context, "https://play.google.com/store/apps/details?id=" + packageId); } } /** - * Open the url with the system default browser. - *

- * If no browser is set as default, fallbacks to - * {@link #openAppChooser(Context, Intent, boolean)} + * Open the url with the system default browser. If no browser is set as default, falls back to + * {@link #openAppChooser(Context, Intent, boolean)}. This function selects the package to open + * based on which apps respond to the {@code http://} schema alone, which should exclude special + * non-browser apps that are can handle the url (e.g. the official YouTube app). Therefore + * please prefer {@link #openUrlInApp(Context, String)}, that handles package resolution + * in a standard way, unless this is the action of an explicit "Open in browser" button. * - * @param context the context to use - * @param url the url to browse - * @param httpDefaultBrowserTest the boolean to set if the test for the default browser will be - * for HTTP protocol or for the created intent - * @return true if the URL can be opened or false if it cannot - */ - public static boolean openUrlInBrowser(@NonNull final Context context, - final String url, - final boolean httpDefaultBrowserTest) { - final String defaultPackageName; + * @param context the context to use + * @param url the url to browse + **/ + public static void openUrlInBrowser(@NonNull final Context context, final String url) { + // Resolve using a generic http://, so we are sure to get a browser and not e.g. the yt app. + // Note that this requires the `http` schema to be added to `` in the manifest. + final ResolveInfo defaultBrowserInfo = context.getPackageManager().resolveActivity( + new Intent(Intent.ACTION_VIEW, Uri.parse("http://")), + PackageManager.MATCH_DEFAULT_ONLY); + if (defaultBrowserInfo == null) { + // No app installed to open a web url + Toast.makeText(context, R.string.no_app_to_open_intent, Toast.LENGTH_LONG).show(); + return; + } + + final String defaultBrowserPackage = defaultBrowserInfo.activityInfo.packageName; final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)) .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - if (httpDefaultBrowserTest) { - defaultPackageName = getDefaultAppPackageName(context, new Intent(Intent.ACTION_VIEW, - Uri.parse("http://")).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); - } else { - defaultPackageName = getDefaultAppPackageName(context, intent); - } - - if (defaultPackageName.equals("android")) { + if (defaultBrowserPackage.equals("android")) { // No browser set as default (doesn't work on some devices) openAppChooser(context, intent, true); } else { try { - // will be empty on Android 12+ - if (!defaultPackageName.isEmpty()) { - intent.setPackage(defaultPackageName); - } + intent.setPackage(defaultBrowserPackage); context.startActivity(intent); } catch (final ActivityNotFoundException e) { // Not a browser but an app chooser because of OEMs changes @@ -102,61 +98,54 @@ public final class ShareUtils { openAppChooser(context, intent, true); } } - - return true; } /** - * Open the url with the system default browser. - *

- * If no browser is set as default, fallbacks to - * {@link #openAppChooser(Context, Intent, boolean)} - *

- * This calls {@link #openUrlInBrowser(Context, String, boolean)} with true - * for the boolean parameter + * Open a url with the system default app using {@link Intent#ACTION_VIEW}, showing a toast in + * case of failure. * * @param context the context to use - * @param url the url to browse - * @return true if the URL can be opened or false if it cannot be - **/ - public static boolean openUrlInBrowser(@NonNull final Context context, final String url) { - return openUrlInBrowser(context, url, true); + * @param url the url to open + */ + public static void openUrlInApp(@NonNull final Context context, final String url) { + openIntentInApp(context, new Intent(Intent.ACTION_VIEW, Uri.parse(url)) + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); } /** - * Open an intent with the system default app. - *

- * The intent can be of every type, excepted a web intent for which - * {@link #openUrlInBrowser(Context, String, boolean)} should be used. - *

- * If no app can open the intent, a toast with the message {@code No app on your device can - * open this} is shown. + * Open an intent with the system default app. Use {@link #openIntentInApp(Context, Intent)} to + * show a toast in case of failure. * - * @param context the context to use - * @param intent the intent to open - * @param showToast a boolean to set if a toast is displayed to user when no app is installed - * to open the intent (true) or not (false) - * @return true if the intent can be opened or false if it cannot be + * @param context the context to use + * @param intent the intent to open + * @return true if the intent could be opened successfully, false otherwise */ - public static boolean openIntentInApp(@NonNull final Context context, - @NonNull final Intent intent, - final boolean showToast) { - final String defaultPackageName = getDefaultAppPackageName(context, intent); - - if (defaultPackageName.isEmpty()) { - // No app installed to open the intent - if (showToast) { - Toast.makeText(context, R.string.no_app_to_open_intent, Toast.LENGTH_LONG) - .show(); - } - return false; - } else { + public static boolean tryOpenIntentInApp(@NonNull final Context context, + @NonNull final Intent intent) { + try { context.startActivity(intent); + } catch (final ActivityNotFoundException e) { + return false; } - return true; } + /** + * Open an intent with the system default app, showing a toast in case of failure. Use {@link + * #tryOpenIntentInApp(Context, Intent)} if you don't want the toast. Use {@link + * #openUrlInApp(Context, String)} as a shorthand for {@link Intent#ACTION_VIEW} with urls. + * + * @param context the context to use + * @param intent the intent to + */ + public static void openIntentInApp(@NonNull final Context context, + @NonNull final Intent intent) { + if (!tryOpenIntentInApp(context, intent)) { + Toast.makeText(context, R.string.no_app_to_open_intent, Toast.LENGTH_LONG) + .show(); + } + } + /** * Open the system chooser to launch an intent. *

@@ -206,31 +195,6 @@ public final class ShareUtils { context.startActivity(chooserIntent); } - /** - * Get the default app package name. - *

- * If no app is set as default, it will return "android" (not on some devices because some - * OEMs changed the app chooser). - *

- * If no app is installed on user's device to handle the intent, it will return an empty string. - * - * @param context the context to use - * @param intent the intent to get default app - * @return the package name of the default app, an empty string if there's no app installed to - * handle the intent or the app chooser if there's no default - */ - private static String getDefaultAppPackageName(@NonNull final Context context, - @NonNull final Intent intent) { - final ResolveInfo resolveInfo = context.getPackageManager().resolveActivity(intent, - PackageManager.MATCH_DEFAULT_ONLY); - - if (resolveInfo == null) { - return ""; - } else { - return resolveInfo.activityInfo.packageName; - } - } - /** * Open the android share sheet to share a content. * diff --git a/app/src/main/java/org/schabi/newpipe/util/text/UrlLongPressClickableSpan.java b/app/src/main/java/org/schabi/newpipe/util/text/UrlLongPressClickableSpan.java index eb0d7425e..61c1a546d 100644 --- a/app/src/main/java/org/schabi/newpipe/util/text/UrlLongPressClickableSpan.java +++ b/app/src/main/java/org/schabi/newpipe/util/text/UrlLongPressClickableSpan.java @@ -30,7 +30,7 @@ final class UrlLongPressClickableSpan extends LongPressClickableSpan { public void onClick(@NonNull final View view) { if (!InternalUrlsHandler.handleUrlDescriptionTimestamp( disposables, context, url)) { - ShareUtils.openUrlInBrowser(context, url, false); + ShareUtils.openUrlInApp(context, url); } } diff --git a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java index bfb6a15e2..695e7aead 100644 --- a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java +++ b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java @@ -1,6 +1,5 @@ package us.shandian.giga.ui.adapter; -import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static android.content.Intent.FLAG_GRANT_PREFIX_URI_PERMISSION; import static android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION; import static us.shandian.giga.get.DownloadMission.ERROR_CONNECT_HOST; @@ -345,16 +344,7 @@ public class MissionAdapter extends Adapter implements Handler.Callb intent.setDataAndType(resolveShareableUri(mission), mimeType); intent.addFlags(FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(FLAG_GRANT_PREFIX_URI_PERMISSION); - - if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) { - intent.addFlags(FLAG_ACTIVITY_NEW_TASK); - } - - if (intent.resolveActivity(mContext.getPackageManager()) != null) { - ShareUtils.openIntentInApp(mContext, intent, false); - } else { - Toast.makeText(mContext, R.string.toast_no_player, Toast.LENGTH_LONG).show(); - } + ShareUtils.openIntentInApp(mContext, intent); } private void shareFile(Mission mission) { diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 02c471d63..c7fa792e2 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -288,7 +288,6 @@ الملف غير موجود أو الإذن بالقراءة أو الكتابة إليه غير موجود لا يوجد بث متاح للتنزيل تم حذف عنصر واحد. - لم يتم تثبيت أي تطبيق لتشغيل هذا الملف NewPipe هو برنامج مفتوح المصدر وبحقوق متروكة: يمكنك استخدام الكود ودراسته وتحسينه كما شئت. وعلى وجه التحديد يمكنك إعادة توزيعه / أو تعديله تحت شروط رخصة GNU العمومية والتي نشرتها مؤسسة البرمجيات الحرة، سواء الإصدار 3 من الرخصة، أو (باختيارك) أي إصدار أحدث. آخر ما تم تشغيله الأكثر تشغيلا diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 0cce71fb0..bb00af528 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -588,7 +588,6 @@ Sil Android\'də pulsuz yüngül yayımlayıcı. © %1$s, %2$s tərəfindən %3$s altında - Bu faylı oynatmaq üçün heç bir tətbiq quraşdırılmayıb Endirmə Bu icazə, ani görüntü rejimində \naçmaq üçün lazımdır diff --git a/app/src/main/res/values-b+ast/strings.xml b/app/src/main/res/values-b+ast/strings.xml index 12739ba41..0b857e59b 100644 --- a/app/src/main/res/values-b+ast/strings.xml +++ b/app/src/main/res/values-b+ast/strings.xml @@ -425,7 +425,6 @@ El proyeutu de NewPipe toma mui en serio la privacidá. Poro, l\'aplicación nun recueye nengún datu ensin el to consentimientu. \nLa política de privacidá de NewPipe desplica en detalle los datos que s\'unvien y atroxen cuando unvies un informe de casque. Un aplicación llibre pa ver/sentir plataformes de tresmisión n\'Android. - Nun hai nenguna aplicación pa reproducir esti ficheru Caráuteres de troquéu Los caráuteres que nun son válidos van trocase por esti valor Fecho diff --git a/app/src/main/res/values-b+uz+Latn/strings.xml b/app/src/main/res/values-b+uz+Latn/strings.xml index 323dda73d..a4101a9be 100644 --- a/app/src/main/res/values-b+uz+Latn/strings.xml +++ b/app/src/main/res/values-b+uz+Latn/strings.xml @@ -214,7 +214,6 @@ © %1$s tomonidan %2$s gacha %3$s Uchinchi tomon litsenziyalari NewPipe haqida - Ushbu faylni ijro etish uchun dastur o\'rnatilmagan Ko\'pchilik maxsus belgilar Yozuvlar va raqamlar O\'zgartirish belgisi diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 8ed10b126..8031cfe9c 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -210,7 +210,6 @@ Сімвал для замены Літары і лічбы Большасць спецзнакаў - Прыкладанне для прайгравання гэтага файла не ўстаноўлена Аб NewPipe Іншыя ліцэнзіі © %1$s %2$s пад ліцэнзіяй %3$s diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 0c1ce484f..27a70053e 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -191,7 +191,6 @@ Няма абонати Създай Откажи - Няма инсталирано приложение, което да изпълни този файл © %1$s от %2$s под лиценза %3$s Съдействайте За всичко, което се сетите: превод, промени по дизайна, изчистване на кода или много сериозни промени по кода – помощта е винаги добре дошла. Колкото повече развитие, толкова по-добре! diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index 34d507ee3..f37711eb0 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -303,7 +303,6 @@ প্রথম ক্রিয়া বোতাম থাম্বনেল ১:১ অনুপাতে সেট করো সিস্টেম ডিফল্ট - এ ফাইলটি চালানোর জন্য কোন অ্যাপ ইন্সটলকৃত নেই প্লেলিস্ট বুকমার্ক করুন "যখন পর্যাপ্ত নিবেদিত ফিড থেকে ডাটা সংগ্রহ করুন" সবসময় হালনগাদ করুন diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 46d12a8b6..75a41c99a 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -491,7 +491,6 @@ শেষ হালনাগাদের পর একটি সাবস্ক্রিপশনের আগের সময় সেকেলে বিবেচিত — %s তুমি কি এ গ্রুপটি মুছতে চাও\? আরও তথ্য এবং খবরের জন্য নিউপাইপ ওয়েবসাইট দেখো। - এ ফাইলটি চালানোর জন্য কোন অ্যাপ ইন্সটলকৃত নেই এতে তোমার বর্তমান অবস্থা সরানো হবে। সতর্কতা: সব তথ্য আনা যায়নি। © %3$s এর মাধ্যমে %2$s দিয়ে %1$s diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index fc9abd891..633599827 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -299,7 +299,6 @@ No hi ha vídeos que es puguin baixar Subtítols Modifica la mida i el fons dels subtítols. Cal reiniciar l\'aplicació per aplicar els canvis - No s\'ha trobat cap aplicació instal·lada que pugui reproduir aquest fitxer Neteja l\'historial de reproduccions Neteja l\'historial dels vídeos reproduïts i les posicions de reproducció Voleu suprimir tot l\'historial de reproduccions\? diff --git a/app/src/main/res/values-ckb/strings.xml b/app/src/main/res/values-ckb/strings.xml index 00ac35aff..53d32cd93 100644 --- a/app/src/main/res/values-ckb/strings.xml +++ b/app/src/main/res/values-ckb/strings.xml @@ -319,7 +319,6 @@ کرداری بنەڕەتی لەکاتی کردنەوەی بابەتدا — %s هکیۆسکێک دیار بکە کۆنفرانسەکان - هیچ به‌رنامه‌یه‌ك دانەمەزراوە بۆ لێدانی ئەم فایله‌ كردنه‌وه‌ له‌ دۆخی په‌نجه‌ره‌ سنووری قەبارە لەکاتی بەکارهێنانی ڕایه‌ڵه‌ی مۆبایل داخستنی پلیکانە diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index abc77e66c..9696b8d11 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -302,7 +302,6 @@ Výchozí chování při otevírání obsahu — %s Titulky Upravuje velikost textu titulků a styly pozadí. Změny se projeví po restartu aplikace - K přehrání tohoto souboru chybí vhodná aplikace Vymazat historii sledování Vymaže historii přehraných streamů pozic playbacku Vymazat celkovou historii sledování\? diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index f4601ec2d..4f219e97b 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -213,7 +213,6 @@ Erstatningstegn Bogstaver og cifre De fleste specialtegn - Der ingen app installeret der kan afspille denne fil Om NewPipe Tredjepartslicenser © %1$s af %2$s under %3$s diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 2aff15046..ee1bc989f 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -301,7 +301,6 @@ Standardaktion beim Öffnen von Inhalten — %s Untertitel Textgröße und Hintergrund der Untertitel im Player anpassen. Erfordert Neustart der App - Keine App zum Abspielen dieser Datei installiert Wiedergabeverlauf löschen Den Verlauf der wiedergegebenen Streams und die Wiedergabepositionen löschen Den ganzen Wiedergabeverlauf löschen\? diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index d19b5731f..76ebbc070 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -210,7 +210,6 @@ Οι μη έγκυροι χαρακτήρες αντικαθίστανται με αυτήν την τιμή Αντικαταστάτης χαρακτήρας Οι περισσότεροι ειδικοί χαρακτήρες - Δεν υπάρχει εγκατεστημένη εφαρμογή για την αναπαραγωγή αυτού του αρχείου Σχετικά με το NewPipe Άδειες Τρίτων © %1$s από %2$s υπό %3$s diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index f82244246..b52cfe99f 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -187,7 +187,6 @@ Vakigi tutajn kaŝmemorigitajn retpaĝajn datumojn Kaŝmemorojn de metadatumojn vakigis Neniuj torentoj haveblaj por elŝuti - Neniu apo instalita por ludi ĉi tiun dosieron Forviŝi vidohistorion Forviŝi la historion de viditaj filmetojn kaj ludajn poziciojn Ĉu vi volas forviŝi la tutan historion \? diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 1ea514868..21dd5f9bb 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -301,7 +301,6 @@ No hay streams disponibles para descargar Acción de apertura preferida Acción predefinida al abrir contenido: %s - No se encontró ninguna aplicación que reproduzca este archivo Subtítulos Modificar la escala de texto de los subtítulos y los estilos de fondo. Requiere reiniciar la aplicación para que surta efecto Vaciar historial de reproducciones diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index b9114c4d3..17d0981de 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -200,7 +200,6 @@ Asendustähemärk Tähed ja numbrid Erimärgid - Selle faili esitamiseks puudub rakendus NewPipe rakendusest Kolmanda osapoole litsentsid Rakenduse teave ja KKK diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 6b35b7316..d94924259 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -243,7 +243,6 @@ Baztertu Aldatu izena Elementu 1 ezabatuta. - Ez dago fitxategi hau erreproduzitzeko aplikaziorik instalatuta Jotako azkena Ikusiena Esportatuta diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 72dc77660..6836ccb87 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -176,7 +176,6 @@ نویسه جایگزین حروف و اعداد مهم‌ترین نویسه‌های خاص - کاره‌ای برای پخش این پرونده نصب نشده است درباره نیوپایپ درباره و سوالات‌متداول پروانه‌ها diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index b0e6b2aba..026839c50 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -240,7 +240,6 @@ Hylkää Nimeä uudelleen 1 poistettu. - Ohjelmaa tämän toistamiseen ei ole asennettu NewPipen tietosuojakäytäntö NewPipe ottaa yksityisyytesi tosissaan. Siksi se ei kerää sinulta mitään tietoja ilman lupaasi. \nNewPipen tietosuojakäytännössä selitetään tarkasti mitä tietoja lähetetään tai tallennetaan virheraportin yhteydessä. diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 77b4f09bb..370f75ccf 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -302,7 +302,6 @@ Sous-titres Modifier la taille du texte et les styles d’arrière-plan des sous-titres du lecteur. Le redémarrage de l’application est requis pour appliquer les changements Ton - Aucune application installée pour lire ce fichier Effacer l’historique des vues Supprime l’historique des flux lus et des positions de reprise de lecture Voulez-vous supprimer entièrement l’historique des vues \? diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index b70f6266f..dc7ae6011 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -206,7 +206,6 @@ Carácter de substitución Letras e díxitos A maioría dos caracteres especiais - Non hai ningún aplicativo instalado para reproducir este ficheiro Sobre o NewPipe Licenzas de terceiros © %1$s de %2$s, so %3$s diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 6be8c1073..270b94e67 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -225,7 +225,6 @@ התעלמות שינוי שם פריט אחד נמחק. - לא מותקן יישומון שמתאים לנגינת הקובץ הזה הייצוא הסתיים הייבוא הסתיים אין קובץ ZIP תקין diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index dc08899ed..056783cd8 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -275,7 +275,6 @@ एक भूल हुई: %1$s डाउनलोड करने के लिए कोई स्ट्रीम उपलब्ध नही है एक चीज़ साफ कर दी गई। - इस फ़ाइल को चलाने के लिए कोई ऐप स्थापित नही है न्यूपाइप की गोपनीयता नीति न्यूपाइप परियोजना आपकी गोपनीयता को बहोत गंभीर रूप से लेता है। इसलिए, ऐप आपकी अनुमति के बिना कोई डेटा जमा नही करता। \nन्यूपाइप की गोपनीयता नीति विस्तार से समज़ाती है कि कोनसा डेटा भेजा या संग्रह किया जाता है जब आप क्रेश विवरण भेजते है। diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index bc35866e3..cdaae6cf9 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -250,7 +250,6 @@ Odbaci Preimenuj 1 stavka izbrisana. - Nijedan program nije instaliran za reprodukciju ove datoteke Vrati Posjeti NewPipe web-stranicu za više informacija i vijesti. NewPipe pravila o privatnosti diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 8a518bda6..5ae2288c0 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -200,7 +200,6 @@ Csere karakter Betűk és számok Legtöbb speciális karakter - Nincs a fájl lejátszásához szükséges alkalmazás telepítve A NewPipe névjegye Névjegy és GYIK Licencek diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index cc5f6dd3b..f1e426bc7 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -255,7 +255,6 @@ Riwayat pencarian dihapus Tidak ada video yang tersedia untuk diunduh 1 item dihapus. - Tidak ada aplikasi terpasang untuk memutar berkas ini Daftar Putar Putar otomatis video berikutnya Berhenti berlanggan channel diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index ffb0b59d1..0129ead5b 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -253,7 +253,6 @@ Leysa Lokið Beðið eftir þraut reCAPTCHA - Ekkert forrit er uppsett til að spila þessa skrá Leyfi þriðja aðila Hugbúnaðarleyfi © %1$s • %2$s • %3$s diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index ccaf93510..c40a74ef1 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -302,7 +302,6 @@ Azione predefinita all\'apertura del contenuto — %s Sottotitoli Modifica dimensione e stile dei sottotitoli. Riavviare per applicare le modifiche - Nessuna app installata per riprodurre questo file Elimina la cronologia delle visualizzazioni Elimina la cronologia degli elementi riprodotti e le posizioni di riproduzione Eliminare la cronologia delle visualizzazioni\? diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index e320649a3..fefd8ef23 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -245,7 +245,6 @@ 検索履歴を消去 検索キーワードの履歴を削除します 検索履歴を削除しました - このファイルを再生するためのアプリがインストールされていません 設定もインポートしますか? 字幕 チャンネル diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index 1d5d42cac..ecc868f9e 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -633,7 +633,6 @@ დაშვებული სიმბოლოები ფაილის სახელებში არასწორი სიმბოლოები ჩანაცვლებულია ამ მნიშვნელობით შესახებ & ხშირად დასმული კითხვები - ამ ფაილის დასაკრავად აპი არ არის დაინსტალირებული მესამე მხარის ლიცენზიები © %1$s მიერ %2$s %3$s-ის ქვეშ NewPipe შემუშავებულია მოხალისეების მიერ, რომლებიც ატარებენ თავისუფალ დროს და მოგაქვთ საუკეთესო მომხმარებლის გამოცდილება. დაეხმარეთ დეველოპერებს, გააუმჯობესონ NewPipe, სანამ ფინჯანი ყავით ტკბებიან. diff --git a/app/src/main/res/values-kmr/strings.xml b/app/src/main/res/values-kmr/strings.xml index f2baecb0a..c5c4ee46b 100644 --- a/app/src/main/res/values-kmr/strings.xml +++ b/app/src/main/res/values-kmr/strings.xml @@ -538,7 +538,6 @@ Paraxwe dayin Li Android-ê veguhastina ronahiya sivik. Derbarê NewPipe - Ji bo lîstina vê pelê tu bername nehat saz kirin Pir karakterên taybetî Name û reqem Karaktera guheztinê diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 6011432b1..3e6dc1421 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -289,7 +289,6 @@ 피치 영상과 소리 분리 (왜곡이 발생할 수 있음) 다운로드 가능한 스트림이 없습니다 - 이 파일을 재생할 수 있는 플레이어 앱이 없습니다 선호하는 열기 동작 컨텐츠를 열 때 사용할 기본 동작 — %s 자막 diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml index c7dfd05d2..886725624 100644 --- a/app/src/main/res/values-ku/strings.xml +++ b/app/src/main/res/values-ku/strings.xml @@ -256,7 +256,6 @@ هیچ پەخشێک نییە بۆ دابەزاندن ژێرنووسەکان بەهۆی گۆڕانکاری لە شێوەی ژێرنووسکردنەکە. پێویستە ئەپەکە دابخەیت و دیسانەوە بیکەیتەوە. - هیچ ئەپێک دانەمەزراوە بۆ کارپێکردنی ئەم فایلە سڕینەوەی مێژووی تەماشاکردن مێژوو دەسڕێتەوە لەگەڵ ڤیدیۆ کارپێکراوەکان و شوێنی لیستە ڤیدیۆییەکان تەواوی مێژووی تەماشاکردن بسڕدرێتەوە؟ diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index bb45a0970..5792c826c 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -512,7 +512,6 @@ NewPipe į jūsų privatumą žiūri labai rimtai. Programa be jūsų sutikimo nerenka jokių duomenų. \nNewPipe privatumo politika išsamiai parodo kokie duomenys siunčiami ir saugomi pranešant apie problemą. NewPipe privatumo politika - Šio failo atkūrimui nėra įdiegtos programos Atlikta Išspręsta Paspauskite \"atlikta\" kai išspręsta diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 86c756ecb..8667422dd 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -71,7 +71,6 @@ Par Trešo pušu Licences Par NewPipe - Nav instalētu aplikāciju, lai atskaņotu šo failu Lielākā daļa īpašo rakstzīmju Burti un cipari Aizvietošanas rakstzīme diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 6052b871b..4039949c7 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -300,7 +300,6 @@ Избришана е историјата на пребарувања. Нема стримови за симнување 1 ставка избришана. - Нема апликација за пуштање на овој фајл NewPipe е „copyleft“ слободен софтвер: Можеш да ја користиш, истражуваш и подобруваш по твоја желба. Можеш да ја редистрибуираш и/или да ја промениш под условите на GNU GPL лиценцата, публикувана од фондацијата FSF - или верзија 3 од лиценцата, или (по можност) понова верзија. Дали сакаш да се внесат и подесувањата? Претпочитана акција за „отворање“ diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index 35243ca26..2a61f4b0a 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -125,7 +125,6 @@ %3$s ന്റെ കീഴിൽ %2$s ന്റെ ©%1$s തേർഡ്-പാർട്ടി ലൈസൻസുകൾ ന്യൂപൈപ്പിനെക്കുറിച്ച് - ഈ ഫയൽ പ്ലേ ചെയ്യാൻ കഴിയുന്ന ഒരു അപ്പും ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ല പ്രത്യേക അടയാളങ്ങൾ അക്ഷരങ്ങളും അക്കങ്ങളും പകരം ഉപയോഗിക്കാവുന്ന അടയാളം diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index 1ad8fe0ef..202597f2b 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -218,7 +218,6 @@ Karakter pengganti Huruf dan angka Karakter yang paling istimewa - Tiada app dipasang untuk memainkan fail ini Tentang NewPipe Lesen Pihak Ketiga © %1$s oleh %2$s di bawah %3$s diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 79bfa710a..a79c9ddae 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -282,7 +282,6 @@ Slett hele søkehistorikken\? Søkehistorikken er slettet Ett element slettet. - Ingen app installert for å spille av denne filen Undertekster Endre spillerens undertekststørrelse og bakgrunnsstiler. Krever omstart av appen for å tre i kraft NewPipe er copyleft fri programvare: Du kan bruke, studere og forbedre den etter egen vilje. Spesifikt kan du redistribuere og/eller modifisere den i henhold til vilkårene gitt i GNU General Public-lisensen, som er publisert av Free Software Foundation, enten versjon 3 av lisensen, eller (etter eget ønske) enhver senere versjon. diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml index 6f3d2bb6e..28207c583 100644 --- a/app/src/main/res/values-ne/strings.xml +++ b/app/src/main/res/values-ne/strings.xml @@ -225,7 +225,6 @@ प्रतिस्थापन वर्ण अक्षर र अंक सबै विशेष वर्णहरु - कुनै अनुप्रयोग यो फाइल खेल्न स्थापित न्यू पाइपको बारेमा तेस्रो-पक्ष इजाजत पत्र ©%1$s को %2$s द्वारा %3$s अन्तर्गत diff --git a/app/src/main/res/values-nl-rBE/strings.xml b/app/src/main/res/values-nl-rBE/strings.xml index 6ab0fbf5c..507ae7d14 100644 --- a/app/src/main/res/values-nl-rBE/strings.xml +++ b/app/src/main/res/values-nl-rBE/strings.xml @@ -194,7 +194,6 @@ Vervangend teken Letters en cijfers Meeste speciale tekens - Er is geen app geïnstalleerd die dit bestand kan afspelen Over NewPipe Derdepartijlicenties © %1$s door %2$s, uitgebracht onder de %3$s diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index ab73b602f..c01a5a5c4 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -299,7 +299,6 @@ Geen streams beschikbaar voor downloaden Ondertitels Ondertitelgrootte en -achtergrondstijlen wijzigen. Vereist een herstart van de app - Er is geen app geïnstalleerd die dit bestand kan afspelen Kijkgeschiedenis wissen Verwijdert de geschiedenis van bekeken video\'s en afspeelposities De gehele kijkgeschiedenis wissen\? diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index 31a53a6b3..164065836 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -542,7 +542,6 @@ କୌଣସି ଗ୍ରାହକ ନାହାଁନ୍ତି ସୃଷ୍ଟି କରନ୍ତୁ ବିବରଣୀ ପାଇଁ ଟ୍ୟାପ୍ କରନ୍ତୁ - ଏହି ଫାଇଲ୍ ଚଲାଇବା ପାଇଁ କୌଣସି ଆପ୍ ସଂସ୍ଥାପିତ ହୋଇନାହିଁ ନାମ ପରିବର୍ତ୍ତନ କରନ୍ତୁ ଦୟାକରି ଅପେକ୍ଷା କର… ଏପର୍ଯ୍ୟନ୍ତ କୌଣସି ଡାଉନଲୋଡ୍ ଫୋଲ୍ଡର ସେଟ୍ ହୋଇନାହିଁ, ବର୍ତ୍ତମାନ ଡିଫଲ୍ଟ ଡାଉନଲୋଡ୍ ଫୋଲ୍ଡର ବାଛନ୍ତୁ diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index 2dcac20ab..5c43baee7 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -201,7 +201,6 @@ ਵਟਾਂਦਰਾ ਚਿੰਨ ਅੱਖਰ ਅਤੇ ਅੰਕ ਬਹੁਤੇ ਖ਼ਾਸ ਅੱਖਰ - ਇਸ ਫਾਈਲ ਨੂੰ ਚਲਾਉਣ ਲਈ ਕੋਈ ਐਪ ਇੰਸਟਾਲ ਨਹੀਂ ਹੈ ਨਿਊਪਾਈਪ ਬਾਰੇ ਤੀਜੀ ਧਿਰ ਦੇ ਲਾਈਸੈਂਸ © %1$s ਵਲੋਂ %2$s, %3$s ਅਧੀਨ diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 4f5ae1448..bfdb9cb01 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -314,7 +314,6 @@ Usunąć całą historię wyszukiwania\? Usunięto historię wyszukiwania Usunięto jedną pozycję - Brak zainstalowanej aplikacji do odtworzenia tego pliku NewPipe jest wolnym i bezpłatnym oprogramowaniem: Możesz używać, udostępniać i ulepszać je do woli. W szczególności możesz je redystrybuować i/lub modyfikować zgodnie z warunkami GNU General Public License, opublikowanej przez Free Software Fundation, w wersji 3 albo (według Twojego wyboru) jakiejkolwiek późniejszej wersji. Czy chcesz zaimportować również ustawienia? Polityka prywatności NewPipe diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index f9b3ac196..f97420ff5 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -301,7 +301,6 @@ Fechar gaveta Legendas Mudar tamanho da legenda e estilos de plano de fundo. Requer reiniciar o app para ter efeito - Nenhum app instalado para reproduzir este arquivo Excluir histórico de vídeo Exclui o histórico de vídeos e as posições de reprodução Excluir todo o histórico de vídeo\? diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 80f6331e3..d83c45662 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -227,7 +227,6 @@ Limite de atualização da fonte OK Não foi possível atualizar a subscrição - Não existe uma aplicação para reproduzir este ficheiro Sim e também os vídeos parcialmente vistos M Ainda não há listas de reprodução favoritas diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 36528078c..9cceefc2b 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -297,7 +297,6 @@ Remover todo o histórico de pesquisas\? Histórico de pesquisa removido 1 item eliminado. - Não existe uma aplicação para reproduzir este ficheiro NewPipe é desenvolvido por voluntários que utilizam o seu tempo livre para nos proporcionar a melhor experiência. Retribua para ajudar os programadores a tornarem NewPipe ainda melhor. Contribuir Política de privacidade do NewPipe diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 5eae3876f..0091e4360 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -246,7 +246,6 @@ Creați Respingeți Redenumiţi - Nici o aplicație instalată pentru a reda acest fișier Donaţi De asemenea, doriți să importați setări? Nume diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 999e9b2fe..f593fdc61 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -311,7 +311,6 @@ При открытии ссылки на контент — %s Нет потоков для загрузки Субтитры - Приложение для воспроизведения этого файла не установлено Изменить размер текста и стиль субтитров. Нужен перезапуск Очистить историю Удалить всю историю просмотров\? diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index 68c6fd5c1..ce25d6b3f 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -109,7 +109,6 @@ © %1$s de %2$s cun litzèntzia %3$s Litzèntzias de tertzas partes In subra de NewPipe - Peruna aplicatzione installada pro pòdere riproduire custu documentu Majoria de sos caràteres ispetziales Lìteras e tzifras Caràtere de remplasamentu diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index f8340b47b..05f9c70b9 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -262,7 +262,6 @@ Názov súboru nesme byť prázdny Nastala chyba: %1$s Žiadne streamy nie sú k dispozícii na prevzatie - Prehrávač pre daný typ súboru nebol nájdený Preferovaná akcia \'otvoriť\' Predvolená akcia pri otváraní obsahu — %s Automaticky vygenerované diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 222b4b137..188e6f59b 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -362,7 +362,6 @@ \nPolitika zasebnosti NewPipe-a podrobno pojasnjuje, kateri podatki so poslani in shranjeni, ko pošljete poročilo o zrušitvi. Pomagaj NewPipe razvijajo prostovoljci, ki preživljajo svoj prosti čas, da vam prinašajo najboljšo uporabniško izkušnjo. Pomagajte razvijalcem pri izdelavi še boljšega NewPipe-a medtem ko uživajo skodelico kave. - Za predvajanje te datoteke ni nameščena nobena aplikacija Pritisni \"končano\" ko je rešena Odstranjen 1 element. Izračun zgoščevalne funkcije je v teku diff --git a/app/src/main/res/values-so/strings.xml b/app/src/main/res/values-so/strings.xml index 530cb465d..6a299d481 100644 --- a/app/src/main/res/values-so/strings.xml +++ b/app/src/main/res/values-so/strings.xml @@ -183,7 +183,6 @@ © %1$s sameeyay %2$s ayagoo raacaya %3$s Laysimada gacanta sadexaad Kusaabsan NewPipe - Shaygan app fura kuuguma jiro Xarfaha gaarka ah kuwa ugu badan Xarfaha iyo godadka Xarafka lagu baddalayo diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml index 073800b76..7c248c53e 100644 --- a/app/src/main/res/values-sq/strings.xml +++ b/app/src/main/res/values-sq/strings.xml @@ -250,7 +250,6 @@ © %1$s nga %2$s nën %3$s Licensat e palëve të treta Rreth NewPipe - Nuk ka aplikacion të instaluar që mund ta luajë këtë skedar Shumica e karaktereve speciale Shkronjat dhe numrat Karakteri zëvendësues diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index e87498e53..142f179c9 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -389,7 +389,6 @@ Пројекат ЊуПајп врло озбиљно схвата вашу приватност. Стога апликација не прикупља никакве податке без вашег пристанка. \nПолитика приватности ЊуПајпа детаљно објашњава који се подаци шаљу и чувају када пошаљете извештај о паду апликације. Политика приватности ЊуПајпа - Нема апликације за пуштање овог фајла Готово Реши Притисните „Готово“ кад решите diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index a64bbf555..71dadfc6c 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -242,7 +242,6 @@ Avfärda Byt namn 1 objekt borttaget. - Ingen app installerad för att spela upp filen NewPipes sekretesspolicy NewPipe-projektet tar din integritet på största allvar. Appen samlar därför inte in några uppgifter utan ditt medgivande. \nNewPipes sekretesspolicy förklarar i detalj vad för data som skickas och lagras när du skickar en kraschrapport. diff --git a/app/src/main/res/values-te/strings.xml b/app/src/main/res/values-te/strings.xml index ac34a316e..fd38b35d5 100644 --- a/app/src/main/res/values-te/strings.xml +++ b/app/src/main/res/values-te/strings.xml @@ -325,7 +325,6 @@ లోపనివేదన నోటిఫికేషన్ చెరుపు వాటిని తీసివేయడానికి వాటిని స్వైప్ చేయండి - ఈ ఫైల్‌ని ప్లే చేయడానికి యాప్ ఏదీ ఇన్‌స్టాల్ చేయబడలేదు మరింత సమాచారం మరియు వార్తల కోసం NewPipe వెబ్‌సైట్‌ని సందర్శించండి. NewPipe ప్రాజెక్ట్ మీ గోప్యతను చాలా తీవ్రంగా పరిగణిస్తుంది. కాబట్టి, మీ సమ్మతి లేకుండా యాప్ ఎలాంటి డేటాను సేకరించదు. \nNewPipe యొక్క గోప్యతా విధానం మీరు క్రాష్ నివేదికను పంపినప్పుడు ఏ డేటా పంపబడుతుందో మరియు నిల్వ చేయబడుతుందో వివరంగా వివరిస్తుంది. diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index fd7e457bf..19297e8f3 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -207,7 +207,6 @@ อักขระทดแทน ตัวอักษรและตัวเลข อักขระพิเศษส่วนใหญ่ - ไม่มีแอพที่ติดตั้งเพื่อให้เล่นไฟล์นี้ได้ เกี่ยวกับ NewPipe สัญญาอนุญาตของบุคคลที่สาม © %1$s โดย %2$s ภายใต้ %3$s diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 898256031..301b3db89 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -295,7 +295,6 @@ Paylaşma ekranında tanımlı eylem — %s Alt yazılar Oynatıcı alt yazı metin ölçeğini ve arka plan biçimini değiştirin. Etkili olması için uygulamayı yeniden başlatma gerektirir - Bu dosyayı oynatmak için herhangi bir uygulama yüklü değil İzleme geçmişini temizle Oynatılan akışların geçmişini ve kalınan oynatım konumlarını siler İzleme geçmişinin tamamı silinsin mi\? diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index a8904c05e..270ee0d8e 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -307,7 +307,6 @@ Типова дія під час відкриття вмісту — %s Субтитри Зміна висоти тексту субтитрів та стилів тла. Потребує перезапуску застосунку - Не встановлено застосунків для відтворення цього файлу Очистити історію переглядів Видаляє історію відтворень і позицій відтворення Видалити всю історію переглядів\? diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index 686644fd9..a49d7b301 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -294,7 +294,6 @@ غیر مربوط (مسخ کا سبب بن سکتا ہے) عنوانات پلیئر کیپشن ٹیکسٹ اسکیل اور بیک گراونڈ اسٹائل میں ترمیم کریں۔ اثر لینے کیلئے ایپ کو دوبارہ شروع کرنا ضروری ہے۔ - اس فائل کو چلانے کے لئے کوئی ایپ انسٹال نہیں ہے دیکھنے کی سرگزشت صاف کریں چلائے گئے سلسلوں اور پلے بیک پوزیشنز کی سرگزشت کو حذف کیا گیا دیکھے جانے کی تمام سرگزشت حذف کریں؟ diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 8262abcef..54cef6aa1 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -215,7 +215,6 @@ Ký tự thay thế Chỉ chữ cái và chữ số Hầu hết các ký tự đặc biệt - Không có ứng dụng nào được cài đặt để phát tệp này Đóng góp NewPipe được phát triển bởi các tình nguyện viên dành thời gian và tâm huyết của mình để mang lại cho bạn trải nghiệm tốt nhất. Đóng góp một chút xiền để giúp chúng tôi làm NewPipe tốt hơn nữa (Nếu bạn muốn). Đôn Nét diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 06ae30657..b5499483e 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -106,7 +106,6 @@ 新建 退出 重命名 - 未安装可播放此文件的应用程序 已删除一个项目。 自定义主页显示的标签页 列表视图模式 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 42661322f..701b89c07 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -324,7 +324,6 @@ 未設定下載資料夾,請立即揀選預設嘅下載資料夾 刪除咗 1 個項目。 執執佢 - 未裝 app 嚟播放呢個檔案 搞掂 NewPipe 專案非常著重您嘅私隱。因此,呢個 app 未得您同意係唔會收集任何資料。 \nNewPipe 嘅私隱政策,詳述當您傳送彈 app 報告時,有咩資料會傳送同保存。 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 0b5112e18..a311d704a 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -293,7 +293,6 @@ 沒有可供下載的串流 字幕 調整播放器字幕文字大小與背景樣式。必須重新啟動應用程式才會生效 - 未安裝可播放此檔案的應用程式 清除觀看歷史 刪除播放過的串流與播放位置歷史 刪除所有觀看歷史記錄? diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index 09bf9080c..b595a8f2c 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -1,7 +1,7 @@ - https://f-droid.org/packages/org.videolan.vlc/ RSS + org.videolan.vlc org.xbmc.kore https://joinpeertube.org/instances#instances-list newpipe diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 661f05c8c..a8d527ffb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -345,7 +345,6 @@ Replacement character Letters and digits Most special characters - No app installed to play this file About NewPipe Third-party Licenses From c2968a3ff254a54108b570d2c77924e1180f446e Mon Sep 17 00:00:00 2001 From: Stypox Date: Sat, 25 Feb 2023 09:06:15 +0100 Subject: [PATCH 2/4] Use non-deprecated resolveActivity method on API 33+ But such method is not available before API 33 --- .../util/external_communication/ShareUtils.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/util/external_communication/ShareUtils.java b/app/src/main/java/org/schabi/newpipe/util/external_communication/ShareUtils.java index 883633772..b30a5ed4f 100644 --- a/app/src/main/java/org/schabi/newpipe/util/external_communication/ShareUtils.java +++ b/app/src/main/java/org/schabi/newpipe/util/external_communication/ShareUtils.java @@ -72,9 +72,16 @@ public final class ShareUtils { public static void openUrlInBrowser(@NonNull final Context context, final String url) { // Resolve using a generic http://, so we are sure to get a browser and not e.g. the yt app. // Note that this requires the `http` schema to be added to `` in the manifest. - final ResolveInfo defaultBrowserInfo = context.getPackageManager().resolveActivity( - new Intent(Intent.ACTION_VIEW, Uri.parse("http://")), - PackageManager.MATCH_DEFAULT_ONLY); + final ResolveInfo defaultBrowserInfo; + final Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://")); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + defaultBrowserInfo = context.getPackageManager().resolveActivity(browserIntent, + PackageManager.ResolveInfoFlags.of(PackageManager.MATCH_DEFAULT_ONLY)); + } else { + defaultBrowserInfo = context.getPackageManager().resolveActivity(browserIntent, + PackageManager.MATCH_DEFAULT_ONLY); + } + if (defaultBrowserInfo == null) { // No app installed to open a web url Toast.makeText(context, R.string.no_app_to_open_intent, Toast.LENGTH_LONG).show(); From 24ff6a4313071ac630a58fba8b9ecfebe2622432 Mon Sep 17 00:00:00 2001 From: Stypox Date: Sat, 25 Feb 2023 09:08:48 +0100 Subject: [PATCH 3/4] Rename videoURL to streamUrl --- .../newpipe/util/external_communication/KoreUtils.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/util/external_communication/KoreUtils.java b/app/src/main/java/org/schabi/newpipe/util/external_communication/KoreUtils.java index 7fe518113..4dc9c7c07 100644 --- a/app/src/main/java/org/schabi/newpipe/util/external_communication/KoreUtils.java +++ b/app/src/main/java/org/schabi/newpipe/util/external_communication/KoreUtils.java @@ -36,7 +36,7 @@ public final class KoreUtils { /** * Start an activity to install Kore. * - * @param context the context + * @param context the context to use */ public static void installKore(final Context context) { installApp(context, context.getString(R.string.kore_package)); @@ -51,13 +51,13 @@ public final class KoreUtils { * Kore source code * . * - * @param context the context to use - * @param videoURL the url to the video + * @param context the context to use + * @param streamUrl the url to the stream to play */ - public static void playWithKore(final Context context, final Uri videoURL) { + public static void playWithKore(final Context context, final Uri streamUrl) { final Intent intent = new Intent(Intent.ACTION_VIEW) .setPackage(context.getString(R.string.kore_package)) - .setData(videoURL) + .setData(streamUrl) .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (!tryOpenIntentInApp(context, intent)) { From be4f3d9d62d97f864f3ddd2659e1eba39fc93df6 Mon Sep 17 00:00:00 2001 From: Stypox Date: Sat, 25 Feb 2023 09:13:35 +0100 Subject: [PATCH 4/4] Improve javadocs in ShareUtils --- .../external_communication/ShareUtils.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/util/external_communication/ShareUtils.java b/app/src/main/java/org/schabi/newpipe/util/external_communication/ShareUtils.java index b30a5ed4f..2f50a94ae 100644 --- a/app/src/main/java/org/schabi/newpipe/util/external_communication/ShareUtils.java +++ b/app/src/main/java/org/schabi/newpipe/util/external_communication/ShareUtils.java @@ -60,11 +60,15 @@ public final class ShareUtils { /** * Open the url with the system default browser. If no browser is set as default, falls back to - * {@link #openAppChooser(Context, Intent, boolean)}. This function selects the package to open - * based on which apps respond to the {@code http://} schema alone, which should exclude special - * non-browser apps that are can handle the url (e.g. the official YouTube app). Therefore - * please prefer {@link #openUrlInApp(Context, String)}, that handles package resolution - * in a standard way, unless this is the action of an explicit "Open in browser" button. + * {@link #openAppChooser(Context, Intent, boolean)}. + *

+ * This function selects the package to open based on which apps respond to the {@code http://} + * schema alone, which should exclude special non-browser apps that are can handle the url (e.g. + * the official YouTube app). + *

+ * Therefore please prefer {@link #openUrlInApp(Context, String)}, that handles package + * resolution in a standard way, unless this is the action of an explicit "Open in browser" + * button. * * @param context the context to use * @param url the url to browse @@ -120,8 +124,9 @@ public final class ShareUtils { } /** - * Open an intent with the system default app. Use {@link #openIntentInApp(Context, Intent)} to - * show a toast in case of failure. + * Open an intent with the system default app. + *

+ * Use {@link #openIntentInApp(Context, Intent)} to show a toast in case of failure. * * @param context the context to use * @param intent the intent to open @@ -138,8 +143,9 @@ public final class ShareUtils { } /** - * Open an intent with the system default app, showing a toast in case of failure. Use {@link - * #tryOpenIntentInApp(Context, Intent)} if you don't want the toast. Use {@link + * Open an intent with the system default app, showing a toast in case of failure. + *

+ * Use {@link #tryOpenIntentInApp(Context, Intent)} if you don't want the toast. Use {@link * #openUrlInApp(Context, String)} as a shorthand for {@link Intent#ACTION_VIEW} with urls. * * @param context the context to use