mirror of
https://github.com/TeamNewPipe/NewPipe
synced 2024-12-23 16:40:32 +00:00
Merge pull request #11237 from TeamNewPipe/revert-11201-Coil
Revert "Migrate image loading from Picasso to Coil"
This commit is contained in:
commit
5062d38b65
@ -267,7 +267,8 @@ dependencies {
|
|||||||
implementation "com.github.lisawray.groupie:groupie-viewbinding:${groupieVersion}"
|
implementation "com.github.lisawray.groupie:groupie-viewbinding:${groupieVersion}"
|
||||||
|
|
||||||
// Image loading
|
// Image loading
|
||||||
implementation 'io.coil-kt:coil:2.6.0'
|
//noinspection GradleDependency --> 2.8 is the last version, not 2.71828!
|
||||||
|
implementation "com.squareup.picasso:picasso:2.8"
|
||||||
|
|
||||||
// Markdown library for Android
|
// Markdown library for Android
|
||||||
implementation "io.noties.markwon:core:${markwonVersion}"
|
implementation "io.noties.markwon:core:${markwonVersion}"
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package org.schabi.newpipe;
|
package org.schabi.newpipe;
|
||||||
|
|
||||||
import android.app.ActivityManager;
|
|
||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
@ -9,7 +8,6 @@ import android.util.Log;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.core.app.NotificationChannelCompat;
|
import androidx.core.app.NotificationChannelCompat;
|
||||||
import androidx.core.app.NotificationManagerCompat;
|
import androidx.core.app.NotificationManagerCompat;
|
||||||
import androidx.core.content.ContextCompat;
|
|
||||||
import androidx.preference.PreferenceManager;
|
import androidx.preference.PreferenceManager;
|
||||||
|
|
||||||
import com.jakewharton.processphoenix.ProcessPhoenix;
|
import com.jakewharton.processphoenix.ProcessPhoenix;
|
||||||
@ -22,9 +20,10 @@ import org.schabi.newpipe.extractor.downloader.Downloader;
|
|||||||
import org.schabi.newpipe.ktx.ExceptionUtils;
|
import org.schabi.newpipe.ktx.ExceptionUtils;
|
||||||
import org.schabi.newpipe.settings.NewPipeSettings;
|
import org.schabi.newpipe.settings.NewPipeSettings;
|
||||||
import org.schabi.newpipe.util.Localization;
|
import org.schabi.newpipe.util.Localization;
|
||||||
|
import org.schabi.newpipe.util.image.ImageStrategy;
|
||||||
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
import org.schabi.newpipe.util.ServiceHelper;
|
import org.schabi.newpipe.util.ServiceHelper;
|
||||||
import org.schabi.newpipe.util.StateSaver;
|
import org.schabi.newpipe.util.StateSaver;
|
||||||
import org.schabi.newpipe.util.image.ImageStrategy;
|
|
||||||
import org.schabi.newpipe.util.image.PreferredImageQuality;
|
import org.schabi.newpipe.util.image.PreferredImageQuality;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -33,9 +32,6 @@ import java.net.SocketException;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import coil.ImageLoader;
|
|
||||||
import coil.ImageLoaderFactory;
|
|
||||||
import coil.util.DebugLogger;
|
|
||||||
import io.reactivex.rxjava3.exceptions.CompositeException;
|
import io.reactivex.rxjava3.exceptions.CompositeException;
|
||||||
import io.reactivex.rxjava3.exceptions.MissingBackpressureException;
|
import io.reactivex.rxjava3.exceptions.MissingBackpressureException;
|
||||||
import io.reactivex.rxjava3.exceptions.OnErrorNotImplementedException;
|
import io.reactivex.rxjava3.exceptions.OnErrorNotImplementedException;
|
||||||
@ -61,7 +57,7 @@ import io.reactivex.rxjava3.plugins.RxJavaPlugins;
|
|||||||
* along with NewPipe. If not, see <http://www.gnu.org/licenses/>.
|
* along with NewPipe. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class App extends Application implements ImageLoaderFactory {
|
public class App extends Application {
|
||||||
public static final String PACKAGE_NAME = BuildConfig.APPLICATION_ID;
|
public static final String PACKAGE_NAME = BuildConfig.APPLICATION_ID;
|
||||||
private static final String TAG = App.class.toString();
|
private static final String TAG = App.class.toString();
|
||||||
|
|
||||||
@ -112,22 +108,20 @@ public class App extends Application implements ImageLoaderFactory {
|
|||||||
|
|
||||||
// Initialize image loader
|
// Initialize image loader
|
||||||
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
PicassoHelper.init(this);
|
||||||
ImageStrategy.setPreferredImageQuality(PreferredImageQuality.fromPreferenceKey(this,
|
ImageStrategy.setPreferredImageQuality(PreferredImageQuality.fromPreferenceKey(this,
|
||||||
prefs.getString(getString(R.string.image_quality_key),
|
prefs.getString(getString(R.string.image_quality_key),
|
||||||
getString(R.string.image_quality_default))));
|
getString(R.string.image_quality_default))));
|
||||||
|
PicassoHelper.setIndicatorsEnabled(MainActivity.DEBUG
|
||||||
|
&& prefs.getBoolean(getString(R.string.show_image_indicators_key), false));
|
||||||
|
|
||||||
configureRxJavaErrorHandler();
|
configureRxJavaErrorHandler();
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
|
||||||
@Override
|
@Override
|
||||||
public ImageLoader newImageLoader() {
|
public void onTerminate() {
|
||||||
return new ImageLoader.Builder(this)
|
super.onTerminate();
|
||||||
.allowRgb565(ContextCompat.getSystemService(this, ActivityManager.class)
|
PicassoHelper.terminate();
|
||||||
.isLowRamDevice())
|
|
||||||
.logger(BuildConfig.DEBUG ? new DebugLogger() : null)
|
|
||||||
.crossfade(true)
|
|
||||||
.build();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Downloader getDownloader() {
|
protected Downloader getDownloader() {
|
||||||
|
@ -167,8 +167,8 @@ class AboutActivity : AppCompatActivity() {
|
|||||||
"https://square.github.io/okhttp/", StandardLicenses.APACHE2
|
"https://square.github.io/okhttp/", StandardLicenses.APACHE2
|
||||||
),
|
),
|
||||||
SoftwareComponent(
|
SoftwareComponent(
|
||||||
"Coil", "2023", "Coil Contributors",
|
"Picasso", "2013", "Square, Inc.",
|
||||||
"https://coil-kt.github.io/coil/", StandardLicenses.APACHE2
|
"https://square.github.io/picasso/", StandardLicenses.APACHE2
|
||||||
),
|
),
|
||||||
SoftwareComponent(
|
SoftwareComponent(
|
||||||
"PrettyTime", "2012 - 2020", "Lincoln Baxter, III",
|
"PrettyTime", "2012 - 2020", "Lincoln Baxter, III",
|
||||||
|
@ -116,7 +116,7 @@ import org.schabi.newpipe.util.StreamTypeUtil;
|
|||||||
import org.schabi.newpipe.util.ThemeHelper;
|
import org.schabi.newpipe.util.ThemeHelper;
|
||||||
import org.schabi.newpipe.util.external_communication.KoreUtils;
|
import org.schabi.newpipe.util.external_communication.KoreUtils;
|
||||||
import org.schabi.newpipe.util.external_communication.ShareUtils;
|
import org.schabi.newpipe.util.external_communication.ShareUtils;
|
||||||
import org.schabi.newpipe.util.image.CoilHelper;
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
@ -127,7 +127,6 @@ import java.util.Optional;
|
|||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
import coil.util.CoilUtils;
|
|
||||||
import icepick.State;
|
import icepick.State;
|
||||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
|
||||||
import io.reactivex.rxjava3.disposables.CompositeDisposable;
|
import io.reactivex.rxjava3.disposables.CompositeDisposable;
|
||||||
@ -160,6 +159,8 @@ public final class VideoDetailFragment
|
|||||||
private static final String DESCRIPTION_TAB_TAG = "DESCRIPTION TAB";
|
private static final String DESCRIPTION_TAB_TAG = "DESCRIPTION TAB";
|
||||||
private static final String EMPTY_TAB_TAG = "EMPTY TAB";
|
private static final String EMPTY_TAB_TAG = "EMPTY TAB";
|
||||||
|
|
||||||
|
private static final String PICASSO_VIDEO_DETAILS_TAG = "PICASSO_VIDEO_DETAILS_TAG";
|
||||||
|
|
||||||
// tabs
|
// tabs
|
||||||
private boolean showComments;
|
private boolean showComments;
|
||||||
private boolean showRelatedItems;
|
private boolean showRelatedItems;
|
||||||
@ -1470,10 +1471,7 @@ public final class VideoDetailFragment
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CoilUtils.dispose(binding.detailThumbnailImageView);
|
PicassoHelper.cancelTag(PICASSO_VIDEO_DETAILS_TAG);
|
||||||
CoilUtils.dispose(binding.detailSubChannelThumbnailView);
|
|
||||||
CoilUtils.dispose(binding.overlayThumbnail);
|
|
||||||
|
|
||||||
binding.detailThumbnailImageView.setImageBitmap(null);
|
binding.detailThumbnailImageView.setImageBitmap(null);
|
||||||
binding.detailSubChannelThumbnailView.setImageBitmap(null);
|
binding.detailSubChannelThumbnailView.setImageBitmap(null);
|
||||||
}
|
}
|
||||||
@ -1564,8 +1562,8 @@ public final class VideoDetailFragment
|
|||||||
binding.detailSecondaryControlPanel.setVisibility(View.GONE);
|
binding.detailSecondaryControlPanel.setVisibility(View.GONE);
|
||||||
|
|
||||||
checkUpdateProgressInfo(info);
|
checkUpdateProgressInfo(info);
|
||||||
CoilHelper.INSTANCE.loadDetailsThumbnail(binding.detailThumbnailImageView,
|
PicassoHelper.loadDetailsThumbnail(info.getThumbnails()).tag(PICASSO_VIDEO_DETAILS_TAG)
|
||||||
info.getThumbnails());
|
.into(binding.detailThumbnailImageView);
|
||||||
showMetaInfoInTextView(info.getMetaInfo(), binding.detailMetaInfoTextView,
|
showMetaInfoInTextView(info.getMetaInfo(), binding.detailMetaInfoTextView,
|
||||||
binding.detailMetaInfoSeparator, disposables);
|
binding.detailMetaInfoSeparator, disposables);
|
||||||
|
|
||||||
@ -1615,8 +1613,8 @@ public final class VideoDetailFragment
|
|||||||
binding.detailUploaderTextView.setVisibility(View.GONE);
|
binding.detailUploaderTextView.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
CoilHelper.INSTANCE.loadAvatar(binding.detailSubChannelThumbnailView,
|
PicassoHelper.loadAvatar(info.getUploaderAvatars()).tag(PICASSO_VIDEO_DETAILS_TAG)
|
||||||
info.getUploaderAvatars());
|
.into(binding.detailSubChannelThumbnailView);
|
||||||
binding.detailSubChannelThumbnailView.setVisibility(View.VISIBLE);
|
binding.detailSubChannelThumbnailView.setVisibility(View.VISIBLE);
|
||||||
binding.detailUploaderThumbnailView.setVisibility(View.GONE);
|
binding.detailUploaderThumbnailView.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
@ -1647,11 +1645,11 @@ public final class VideoDetailFragment
|
|||||||
binding.detailUploaderTextView.setVisibility(View.GONE);
|
binding.detailUploaderTextView.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
CoilHelper.INSTANCE.loadAvatar(binding.detailSubChannelThumbnailView,
|
PicassoHelper.loadAvatar(info.getSubChannelAvatars()).tag(PICASSO_VIDEO_DETAILS_TAG)
|
||||||
info.getSubChannelAvatars());
|
.into(binding.detailSubChannelThumbnailView);
|
||||||
binding.detailSubChannelThumbnailView.setVisibility(View.VISIBLE);
|
binding.detailSubChannelThumbnailView.setVisibility(View.VISIBLE);
|
||||||
CoilHelper.INSTANCE.loadAvatar(binding.detailUploaderThumbnailView,
|
PicassoHelper.loadAvatar(info.getUploaderAvatars()).tag(PICASSO_VIDEO_DETAILS_TAG)
|
||||||
info.getUploaderAvatars());
|
.into(binding.detailUploaderThumbnailView);
|
||||||
binding.detailUploaderThumbnailView.setVisibility(View.VISIBLE);
|
binding.detailUploaderThumbnailView.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2405,7 +2403,8 @@ public final class VideoDetailFragment
|
|||||||
binding.overlayTitleTextView.setText(isEmpty(overlayTitle) ? "" : overlayTitle);
|
binding.overlayTitleTextView.setText(isEmpty(overlayTitle) ? "" : overlayTitle);
|
||||||
binding.overlayChannelTextView.setText(isEmpty(uploader) ? "" : uploader);
|
binding.overlayChannelTextView.setText(isEmpty(uploader) ? "" : uploader);
|
||||||
binding.overlayThumbnail.setImageDrawable(null);
|
binding.overlayThumbnail.setImageDrawable(null);
|
||||||
CoilHelper.INSTANCE.loadDetailsThumbnail(binding.overlayThumbnail, thumbnails);
|
PicassoHelper.loadDetailsThumbnail(thumbnails).tag(PICASSO_VIDEO_DETAILS_TAG)
|
||||||
|
.into(binding.overlayThumbnail);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setOverlayPlayPauseImage(final boolean playerIsPlaying) {
|
private void setOverlayPlayPauseImage(final boolean playerIsPlaying) {
|
||||||
|
@ -50,16 +50,15 @@ import org.schabi.newpipe.util.ExtractorHelper;
|
|||||||
import org.schabi.newpipe.util.Localization;
|
import org.schabi.newpipe.util.Localization;
|
||||||
import org.schabi.newpipe.util.NavigationHelper;
|
import org.schabi.newpipe.util.NavigationHelper;
|
||||||
import org.schabi.newpipe.util.StateSaver;
|
import org.schabi.newpipe.util.StateSaver;
|
||||||
|
import org.schabi.newpipe.util.image.ImageStrategy;
|
||||||
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
import org.schabi.newpipe.util.ThemeHelper;
|
import org.schabi.newpipe.util.ThemeHelper;
|
||||||
import org.schabi.newpipe.util.external_communication.ShareUtils;
|
import org.schabi.newpipe.util.external_communication.ShareUtils;
|
||||||
import org.schabi.newpipe.util.image.CoilHelper;
|
|
||||||
import org.schabi.newpipe.util.image.ImageStrategy;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import coil.util.CoilUtils;
|
|
||||||
import icepick.State;
|
import icepick.State;
|
||||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
|
||||||
import io.reactivex.rxjava3.core.Observable;
|
import io.reactivex.rxjava3.core.Observable;
|
||||||
@ -74,6 +73,7 @@ public class ChannelFragment extends BaseStateFragment<ChannelInfo>
|
|||||||
implements StateSaver.WriteRead {
|
implements StateSaver.WriteRead {
|
||||||
|
|
||||||
private static final int BUTTON_DEBOUNCE_INTERVAL = 100;
|
private static final int BUTTON_DEBOUNCE_INTERVAL = 100;
|
||||||
|
private static final String PICASSO_CHANNEL_TAG = "PICASSO_CHANNEL_TAG";
|
||||||
|
|
||||||
@State
|
@State
|
||||||
protected int serviceId = Constants.NO_SERVICE_ID;
|
protected int serviceId = Constants.NO_SERVICE_ID;
|
||||||
@ -576,9 +576,7 @@ public class ChannelFragment extends BaseStateFragment<ChannelInfo>
|
|||||||
@Override
|
@Override
|
||||||
public void showLoading() {
|
public void showLoading() {
|
||||||
super.showLoading();
|
super.showLoading();
|
||||||
CoilUtils.dispose(binding.channelAvatarView);
|
PicassoHelper.cancelTag(PICASSO_CHANNEL_TAG);
|
||||||
CoilUtils.dispose(binding.channelBannerImage);
|
|
||||||
CoilUtils.dispose(binding.subChannelAvatarView);
|
|
||||||
animate(binding.channelSubscribeButton, false, 100);
|
animate(binding.channelSubscribeButton, false, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -589,15 +587,17 @@ public class ChannelFragment extends BaseStateFragment<ChannelInfo>
|
|||||||
setInitialData(result.getServiceId(), result.getOriginalUrl(), result.getName());
|
setInitialData(result.getServiceId(), result.getOriginalUrl(), result.getName());
|
||||||
|
|
||||||
if (ImageStrategy.shouldLoadImages() && !result.getBanners().isEmpty()) {
|
if (ImageStrategy.shouldLoadImages() && !result.getBanners().isEmpty()) {
|
||||||
CoilHelper.INSTANCE.loadBanner(binding.channelBannerImage, result.getBanners());
|
PicassoHelper.loadBanner(result.getBanners()).tag(PICASSO_CHANNEL_TAG)
|
||||||
|
.into(binding.channelBannerImage);
|
||||||
} else {
|
} else {
|
||||||
// do not waste space for the banner, if the user disabled images or there is not one
|
// do not waste space for the banner, if the user disabled images or there is not one
|
||||||
binding.channelBannerImage.setImageDrawable(null);
|
binding.channelBannerImage.setImageDrawable(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
CoilHelper.INSTANCE.loadAvatar(binding.channelAvatarView, result.getAvatars());
|
PicassoHelper.loadAvatar(result.getAvatars()).tag(PICASSO_CHANNEL_TAG)
|
||||||
CoilHelper.INSTANCE.loadAvatar(binding.subChannelAvatarView,
|
.into(binding.channelAvatarView);
|
||||||
result.getParentChannelAvatars());
|
PicassoHelper.loadAvatar(result.getParentChannelAvatars()).tag(PICASSO_CHANNEL_TAG)
|
||||||
|
.into(binding.subChannelAvatarView);
|
||||||
|
|
||||||
binding.channelTitleView.setText(result.getName());
|
binding.channelTitleView.setText(result.getName());
|
||||||
binding.channelSubscriberView.setVisibility(View.VISIBLE);
|
binding.channelSubscriberView.setVisibility(View.VISIBLE);
|
||||||
|
@ -23,8 +23,8 @@ import org.schabi.newpipe.util.DeviceUtils;
|
|||||||
import org.schabi.newpipe.util.ExtractorHelper;
|
import org.schabi.newpipe.util.ExtractorHelper;
|
||||||
import org.schabi.newpipe.util.Localization;
|
import org.schabi.newpipe.util.Localization;
|
||||||
import org.schabi.newpipe.util.NavigationHelper;
|
import org.schabi.newpipe.util.NavigationHelper;
|
||||||
import org.schabi.newpipe.util.image.CoilHelper;
|
|
||||||
import org.schabi.newpipe.util.image.ImageStrategy;
|
import org.schabi.newpipe.util.image.ImageStrategy;
|
||||||
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
import org.schabi.newpipe.util.text.TextLinkifier;
|
import org.schabi.newpipe.util.text.TextLinkifier;
|
||||||
|
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
@ -82,7 +82,7 @@ public final class CommentRepliesFragment
|
|||||||
final CommentsInfoItem item = commentsInfoItem;
|
final CommentsInfoItem item = commentsInfoItem;
|
||||||
|
|
||||||
// load the author avatar
|
// load the author avatar
|
||||||
CoilHelper.INSTANCE.loadAvatar(binding.authorAvatar, item.getUploaderAvatars());
|
PicassoHelper.loadAvatar(item.getUploaderAvatars()).into(binding.authorAvatar);
|
||||||
binding.authorAvatar.setVisibility(ImageStrategy.shouldLoadImages()
|
binding.authorAvatar.setVisibility(ImageStrategy.shouldLoadImages()
|
||||||
? View.VISIBLE : View.GONE);
|
? View.VISIBLE : View.GONE);
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ import org.schabi.newpipe.util.Localization;
|
|||||||
import org.schabi.newpipe.util.NavigationHelper;
|
import org.schabi.newpipe.util.NavigationHelper;
|
||||||
import org.schabi.newpipe.util.PlayButtonHelper;
|
import org.schabi.newpipe.util.PlayButtonHelper;
|
||||||
import org.schabi.newpipe.util.external_communication.ShareUtils;
|
import org.schabi.newpipe.util.external_communication.ShareUtils;
|
||||||
import org.schabi.newpipe.util.image.CoilHelper;
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
import org.schabi.newpipe.util.text.TextEllipsizer;
|
import org.schabi.newpipe.util.text.TextEllipsizer;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -62,7 +62,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
|||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import coil.util.CoilUtils;
|
|
||||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
|
||||||
import io.reactivex.rxjava3.core.Flowable;
|
import io.reactivex.rxjava3.core.Flowable;
|
||||||
import io.reactivex.rxjava3.core.Single;
|
import io.reactivex.rxjava3.core.Single;
|
||||||
@ -72,6 +71,8 @@ import io.reactivex.rxjava3.disposables.Disposable;
|
|||||||
public class PlaylistFragment extends BaseListInfoFragment<StreamInfoItem, PlaylistInfo>
|
public class PlaylistFragment extends BaseListInfoFragment<StreamInfoItem, PlaylistInfo>
|
||||||
implements PlaylistControlViewHolder {
|
implements PlaylistControlViewHolder {
|
||||||
|
|
||||||
|
private static final String PICASSO_PLAYLIST_TAG = "PICASSO_PLAYLIST_TAG";
|
||||||
|
|
||||||
private CompositeDisposable disposables;
|
private CompositeDisposable disposables;
|
||||||
private Subscription bookmarkReactor;
|
private Subscription bookmarkReactor;
|
||||||
private AtomicBoolean isBookmarkButtonReady;
|
private AtomicBoolean isBookmarkButtonReady;
|
||||||
@ -275,7 +276,7 @@ public class PlaylistFragment extends BaseListInfoFragment<StreamInfoItem, Playl
|
|||||||
animate(headerBinding.getRoot(), false, 200);
|
animate(headerBinding.getRoot(), false, 200);
|
||||||
animateHideRecyclerViewAllowingScrolling(itemsList);
|
animateHideRecyclerViewAllowingScrolling(itemsList);
|
||||||
|
|
||||||
CoilUtils.dispose(headerBinding.uploaderAvatarView);
|
PicassoHelper.cancelTag(PICASSO_PLAYLIST_TAG);
|
||||||
animate(headerBinding.uploaderLayout, false, 200);
|
animate(headerBinding.uploaderLayout, false, 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -326,8 +327,8 @@ public class PlaylistFragment extends BaseListInfoFragment<StreamInfoItem, Playl
|
|||||||
R.drawable.ic_radio)
|
R.drawable.ic_radio)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
CoilHelper.INSTANCE.loadAvatar(headerBinding.uploaderAvatarView,
|
PicassoHelper.loadAvatar(result.getUploaderAvatars()).tag(PICASSO_PLAYLIST_TAG)
|
||||||
result.getUploaderAvatars());
|
.into(headerBinding.uploaderAvatarView);
|
||||||
}
|
}
|
||||||
|
|
||||||
streamCount = result.getStreamCount();
|
streamCount = result.getStreamCount();
|
||||||
|
@ -1,18 +1,19 @@
|
|||||||
package org.schabi.newpipe.info_list
|
package org.schabi.newpipe.info_list
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.xwray.groupie.viewbinding.BindableItem
|
import android.widget.ImageView
|
||||||
import com.xwray.groupie.viewbinding.GroupieViewHolder
|
import android.widget.TextView
|
||||||
|
import com.xwray.groupie.GroupieViewHolder
|
||||||
|
import com.xwray.groupie.Item
|
||||||
import org.schabi.newpipe.R
|
import org.schabi.newpipe.R
|
||||||
import org.schabi.newpipe.databinding.ItemStreamSegmentBinding
|
|
||||||
import org.schabi.newpipe.extractor.stream.StreamSegment
|
import org.schabi.newpipe.extractor.stream.StreamSegment
|
||||||
import org.schabi.newpipe.util.Localization
|
import org.schabi.newpipe.util.Localization
|
||||||
import org.schabi.newpipe.util.image.CoilHelper
|
import org.schabi.newpipe.util.image.PicassoHelper
|
||||||
|
|
||||||
class StreamSegmentItem(
|
class StreamSegmentItem(
|
||||||
private val item: StreamSegment,
|
private val item: StreamSegment,
|
||||||
private val onClick: StreamSegmentAdapter.StreamSegmentListener
|
private val onClick: StreamSegmentAdapter.StreamSegmentListener
|
||||||
) : BindableItem<ItemStreamSegmentBinding>() {
|
) : Item<GroupieViewHolder>() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val PAYLOAD_SELECT = 1
|
const val PAYLOAD_SELECT = 1
|
||||||
@ -20,32 +21,31 @@ class StreamSegmentItem(
|
|||||||
|
|
||||||
var isSelected = false
|
var isSelected = false
|
||||||
|
|
||||||
override fun bind(viewBinding: ItemStreamSegmentBinding, position: Int) {
|
override fun bind(viewHolder: GroupieViewHolder, position: Int) {
|
||||||
CoilHelper.loadThumbnail(viewBinding.previewImage, item.previewUrl)
|
item.previewUrl?.let {
|
||||||
viewBinding.textViewTitle.text = item.title
|
PicassoHelper.loadThumbnail(it)
|
||||||
|
.into(viewHolder.root.findViewById<ImageView>(R.id.previewImage))
|
||||||
|
}
|
||||||
|
viewHolder.root.findViewById<TextView>(R.id.textViewTitle).text = item.title
|
||||||
if (item.channelName == null) {
|
if (item.channelName == null) {
|
||||||
viewBinding.textViewChannel.visibility = View.GONE
|
viewHolder.root.findViewById<TextView>(R.id.textViewChannel).visibility = View.GONE
|
||||||
// When the channel name is displayed there is less space
|
// When the channel name is displayed there is less space
|
||||||
// and thus the segment title needs to be only one line height.
|
// and thus the segment title needs to be only one line height.
|
||||||
// But when there is no channel name displayed, the title can be two lines long.
|
// But when there is no channel name displayed, the title can be two lines long.
|
||||||
// The default maxLines value is set to 1 to display all elements in the AS preview,
|
// The default maxLines value is set to 1 to display all elements in the AS preview,
|
||||||
viewBinding.textViewTitle.maxLines = 2
|
viewHolder.root.findViewById<TextView>(R.id.textViewTitle).maxLines = 2
|
||||||
} else {
|
} else {
|
||||||
viewBinding.textViewChannel.text = item.channelName
|
viewHolder.root.findViewById<TextView>(R.id.textViewChannel).text = item.channelName
|
||||||
viewBinding.textViewChannel.visibility = View.VISIBLE
|
viewHolder.root.findViewById<TextView>(R.id.textViewChannel).visibility = View.VISIBLE
|
||||||
}
|
}
|
||||||
viewBinding.textViewStartSeconds.text =
|
viewHolder.root.findViewById<TextView>(R.id.textViewStartSeconds).text =
|
||||||
Localization.getDurationString(item.startTimeSeconds.toLong())
|
Localization.getDurationString(item.startTimeSeconds.toLong())
|
||||||
viewBinding.root.setOnClickListener { onClick.onItemClick(this, item.startTimeSeconds) }
|
viewHolder.root.setOnClickListener { onClick.onItemClick(this, item.startTimeSeconds) }
|
||||||
viewBinding.root.setOnLongClickListener { onClick.onItemLongClick(this, item.startTimeSeconds); true }
|
viewHolder.root.setOnLongClickListener { onClick.onItemLongClick(this, item.startTimeSeconds); true }
|
||||||
viewBinding.root.isSelected = isSelected
|
viewHolder.root.isSelected = isSelected
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun bind(
|
override fun bind(viewHolder: GroupieViewHolder, position: Int, payloads: MutableList<Any>) {
|
||||||
viewHolder: GroupieViewHolder<ItemStreamSegmentBinding>,
|
|
||||||
position: Int,
|
|
||||||
payloads: MutableList<Any>
|
|
||||||
) {
|
|
||||||
if (payloads.contains(PAYLOAD_SELECT)) {
|
if (payloads.contains(PAYLOAD_SELECT)) {
|
||||||
viewHolder.root.isSelected = isSelected
|
viewHolder.root.isSelected = isSelected
|
||||||
return
|
return
|
||||||
@ -54,6 +54,4 @@ class StreamSegmentItem(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getLayout() = R.layout.item_stream_segment
|
override fun getLayout() = R.layout.item_stream_segment
|
||||||
|
|
||||||
override fun initializeViewBinding(view: View) = ItemStreamSegmentBinding.bind(view)
|
|
||||||
}
|
}
|
||||||
|
@ -13,8 +13,8 @@ import org.schabi.newpipe.extractor.channel.ChannelInfoItem;
|
|||||||
import org.schabi.newpipe.extractor.utils.Utils;
|
import org.schabi.newpipe.extractor.utils.Utils;
|
||||||
import org.schabi.newpipe.info_list.InfoItemBuilder;
|
import org.schabi.newpipe.info_list.InfoItemBuilder;
|
||||||
import org.schabi.newpipe.local.history.HistoryRecordManager;
|
import org.schabi.newpipe.local.history.HistoryRecordManager;
|
||||||
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
import org.schabi.newpipe.util.Localization;
|
import org.schabi.newpipe.util.Localization;
|
||||||
import org.schabi.newpipe.util.image.CoilHelper;
|
|
||||||
|
|
||||||
public class ChannelMiniInfoItemHolder extends InfoItemHolder {
|
public class ChannelMiniInfoItemHolder extends InfoItemHolder {
|
||||||
private final ImageView itemThumbnailView;
|
private final ImageView itemThumbnailView;
|
||||||
@ -56,7 +56,7 @@ public class ChannelMiniInfoItemHolder extends InfoItemHolder {
|
|||||||
itemAdditionalDetailView.setText(getDetailLine(item));
|
itemAdditionalDetailView.setText(getDetailLine(item));
|
||||||
}
|
}
|
||||||
|
|
||||||
CoilHelper.INSTANCE.loadAvatar(itemThumbnailView, item.getThumbnails());
|
PicassoHelper.loadAvatar(item.getThumbnails()).into(itemThumbnailView);
|
||||||
|
|
||||||
itemView.setOnClickListener(view -> {
|
itemView.setOnClickListener(view -> {
|
||||||
if (itemBuilder.getOnChannelSelectedListener() != null) {
|
if (itemBuilder.getOnChannelSelectedListener() != null) {
|
||||||
|
@ -27,8 +27,8 @@ import org.schabi.newpipe.util.DeviceUtils;
|
|||||||
import org.schabi.newpipe.util.Localization;
|
import org.schabi.newpipe.util.Localization;
|
||||||
import org.schabi.newpipe.util.NavigationHelper;
|
import org.schabi.newpipe.util.NavigationHelper;
|
||||||
import org.schabi.newpipe.util.external_communication.ShareUtils;
|
import org.schabi.newpipe.util.external_communication.ShareUtils;
|
||||||
import org.schabi.newpipe.util.image.CoilHelper;
|
|
||||||
import org.schabi.newpipe.util.image.ImageStrategy;
|
import org.schabi.newpipe.util.image.ImageStrategy;
|
||||||
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
import org.schabi.newpipe.util.text.TextEllipsizer;
|
import org.schabi.newpipe.util.text.TextEllipsizer;
|
||||||
|
|
||||||
public class CommentInfoItemHolder extends InfoItemHolder {
|
public class CommentInfoItemHolder extends InfoItemHolder {
|
||||||
@ -82,12 +82,14 @@ public class CommentInfoItemHolder extends InfoItemHolder {
|
|||||||
@Override
|
@Override
|
||||||
public void updateFromItem(final InfoItem infoItem,
|
public void updateFromItem(final InfoItem infoItem,
|
||||||
final HistoryRecordManager historyRecordManager) {
|
final HistoryRecordManager historyRecordManager) {
|
||||||
if (!(infoItem instanceof CommentsInfoItem item)) {
|
if (!(infoItem instanceof CommentsInfoItem)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
final CommentsInfoItem item = (CommentsInfoItem) infoItem;
|
||||||
|
|
||||||
|
|
||||||
// load the author avatar
|
// load the author avatar
|
||||||
CoilHelper.INSTANCE.loadAvatar(itemThumbnailView, item.getUploaderAvatars());
|
PicassoHelper.loadAvatar(item.getUploaderAvatars()).into(itemThumbnailView);
|
||||||
if (ImageStrategy.shouldLoadImages()) {
|
if (ImageStrategy.shouldLoadImages()) {
|
||||||
itemThumbnailView.setVisibility(View.VISIBLE);
|
itemThumbnailView.setVisibility(View.VISIBLE);
|
||||||
itemRoot.setPadding(commentVerticalPadding, commentVerticalPadding,
|
itemRoot.setPadding(commentVerticalPadding, commentVerticalPadding,
|
||||||
|
@ -9,8 +9,8 @@ import org.schabi.newpipe.extractor.InfoItem;
|
|||||||
import org.schabi.newpipe.extractor.playlist.PlaylistInfoItem;
|
import org.schabi.newpipe.extractor.playlist.PlaylistInfoItem;
|
||||||
import org.schabi.newpipe.info_list.InfoItemBuilder;
|
import org.schabi.newpipe.info_list.InfoItemBuilder;
|
||||||
import org.schabi.newpipe.local.history.HistoryRecordManager;
|
import org.schabi.newpipe.local.history.HistoryRecordManager;
|
||||||
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
import org.schabi.newpipe.util.Localization;
|
import org.schabi.newpipe.util.Localization;
|
||||||
import org.schabi.newpipe.util.image.CoilHelper;
|
|
||||||
|
|
||||||
public class PlaylistMiniInfoItemHolder extends InfoItemHolder {
|
public class PlaylistMiniInfoItemHolder extends InfoItemHolder {
|
||||||
public final ImageView itemThumbnailView;
|
public final ImageView itemThumbnailView;
|
||||||
@ -46,7 +46,7 @@ public class PlaylistMiniInfoItemHolder extends InfoItemHolder {
|
|||||||
.localizeStreamCountMini(itemStreamCountView.getContext(), item.getStreamCount()));
|
.localizeStreamCountMini(itemStreamCountView.getContext(), item.getStreamCount()));
|
||||||
itemUploaderView.setText(item.getUploaderName());
|
itemUploaderView.setText(item.getUploaderName());
|
||||||
|
|
||||||
CoilHelper.INSTANCE.loadPlaylistThumbnail(itemThumbnailView, item.getThumbnails());
|
PicassoHelper.loadPlaylistThumbnail(item.getThumbnails()).into(itemThumbnailView);
|
||||||
|
|
||||||
itemView.setOnClickListener(view -> {
|
itemView.setOnClickListener(view -> {
|
||||||
if (itemBuilder.getOnPlaylistSelectedListener() != null) {
|
if (itemBuilder.getOnPlaylistSelectedListener() != null) {
|
||||||
|
@ -16,8 +16,8 @@ import org.schabi.newpipe.ktx.ViewUtils;
|
|||||||
import org.schabi.newpipe.local.history.HistoryRecordManager;
|
import org.schabi.newpipe.local.history.HistoryRecordManager;
|
||||||
import org.schabi.newpipe.util.DependentPreferenceHelper;
|
import org.schabi.newpipe.util.DependentPreferenceHelper;
|
||||||
import org.schabi.newpipe.util.Localization;
|
import org.schabi.newpipe.util.Localization;
|
||||||
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
import org.schabi.newpipe.util.StreamTypeUtil;
|
import org.schabi.newpipe.util.StreamTypeUtil;
|
||||||
import org.schabi.newpipe.util.image.CoilHelper;
|
|
||||||
import org.schabi.newpipe.views.AnimatedProgressBar;
|
import org.schabi.newpipe.views.AnimatedProgressBar;
|
||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
@ -87,7 +87,7 @@ public class StreamMiniInfoItemHolder extends InfoItemHolder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Default thumbnail is shown on error, while loading and if the url is empty
|
// Default thumbnail is shown on error, while loading and if the url is empty
|
||||||
CoilHelper.INSTANCE.loadThumbnail(itemThumbnailView, item.getThumbnails());
|
PicassoHelper.loadThumbnail(item.getThumbnails()).into(itemThumbnailView);
|
||||||
|
|
||||||
itemView.setOnClickListener(view -> {
|
itemView.setOnClickListener(view -> {
|
||||||
if (itemBuilder.getOnStreamSelectedListener() != null) {
|
if (itemBuilder.getOnStreamSelectedListener() != null) {
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
package org.schabi.newpipe.ktx
|
|
||||||
|
|
||||||
import android.graphics.Bitmap
|
|
||||||
import android.graphics.Rect
|
|
||||||
import androidx.core.graphics.BitmapCompat
|
|
||||||
|
|
||||||
@Suppress("NOTHING_TO_INLINE")
|
|
||||||
inline fun Bitmap.scale(
|
|
||||||
width: Int,
|
|
||||||
height: Int,
|
|
||||||
srcRect: Rect? = null,
|
|
||||||
scaleInLinearSpace: Boolean = true,
|
|
||||||
) = BitmapCompat.createScaledBitmap(this, width, height, srcRect, scaleInLinearSpace)
|
|
@ -19,7 +19,7 @@ import org.schabi.newpipe.extractor.stream.StreamType.POST_LIVE_STREAM
|
|||||||
import org.schabi.newpipe.extractor.stream.StreamType.VIDEO_STREAM
|
import org.schabi.newpipe.extractor.stream.StreamType.VIDEO_STREAM
|
||||||
import org.schabi.newpipe.util.Localization
|
import org.schabi.newpipe.util.Localization
|
||||||
import org.schabi.newpipe.util.StreamTypeUtil
|
import org.schabi.newpipe.util.StreamTypeUtil
|
||||||
import org.schabi.newpipe.util.image.CoilHelper
|
import org.schabi.newpipe.util.image.PicassoHelper
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import java.util.function.Consumer
|
import java.util.function.Consumer
|
||||||
|
|
||||||
@ -101,7 +101,7 @@ data class StreamItem(
|
|||||||
viewBinding.itemProgressView.visibility = View.GONE
|
viewBinding.itemProgressView.visibility = View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
CoilHelper.loadThumbnail(viewBinding.itemThumbnailView, stream.thumbnailUrl)
|
PicassoHelper.loadThumbnail(stream.thumbnailUrl).into(viewBinding.itemThumbnailView)
|
||||||
|
|
||||||
if (itemVersion != ItemVersion.MINI) {
|
if (itemVersion != ItemVersion.MINI) {
|
||||||
viewBinding.itemAdditionalDetails.text =
|
viewBinding.itemAdditionalDetails.text =
|
||||||
|
@ -6,6 +6,7 @@ import android.app.PendingIntent
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
|
import android.graphics.drawable.Drawable
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
@ -15,17 +16,20 @@ import androidx.core.app.PendingIntentCompat
|
|||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.content.getSystemService
|
import androidx.core.content.getSystemService
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
|
import com.squareup.picasso.Picasso
|
||||||
|
import com.squareup.picasso.Target
|
||||||
import org.schabi.newpipe.R
|
import org.schabi.newpipe.R
|
||||||
import org.schabi.newpipe.extractor.stream.StreamInfoItem
|
import org.schabi.newpipe.extractor.stream.StreamInfoItem
|
||||||
import org.schabi.newpipe.local.feed.service.FeedUpdateInfo
|
import org.schabi.newpipe.local.feed.service.FeedUpdateInfo
|
||||||
import org.schabi.newpipe.util.NavigationHelper
|
import org.schabi.newpipe.util.NavigationHelper
|
||||||
import org.schabi.newpipe.util.image.CoilHelper
|
import org.schabi.newpipe.util.image.PicassoHelper
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper for everything related to show notifications about new streams to the user.
|
* Helper for everything related to show notifications about new streams to the user.
|
||||||
*/
|
*/
|
||||||
class NotificationHelper(val context: Context) {
|
class NotificationHelper(val context: Context) {
|
||||||
private val manager = NotificationManagerCompat.from(context)
|
private val manager = NotificationManagerCompat.from(context)
|
||||||
|
private val iconLoadingTargets = ArrayList<Target>()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show notifications for new streams from a single channel. The individual notifications are
|
* Show notifications for new streams from a single channel. The individual notifications are
|
||||||
@ -64,23 +68,51 @@ class NotificationHelper(val context: Context) {
|
|||||||
summaryBuilder.setStyle(style)
|
summaryBuilder.setStyle(style)
|
||||||
|
|
||||||
// open the channel page when clicking on the summary notification
|
// open the channel page when clicking on the summary notification
|
||||||
val intent = NavigationHelper
|
|
||||||
.getChannelIntent(context, data.serviceId, data.url)
|
|
||||||
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
|
||||||
summaryBuilder.setContentIntent(
|
summaryBuilder.setContentIntent(
|
||||||
PendingIntentCompat.getActivity(context, data.pseudoId, intent, 0, false)
|
PendingIntentCompat.getActivity(
|
||||||
|
context,
|
||||||
|
data.pseudoId,
|
||||||
|
NavigationHelper
|
||||||
|
.getChannelIntent(context, data.serviceId, data.url)
|
||||||
|
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK),
|
||||||
|
0,
|
||||||
|
false
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
val avatarIcon =
|
// a Target is like a listener for image loading events
|
||||||
CoilHelper.loadBitmapBlocking(context, data.avatarUrl, R.drawable.ic_newpipe_triangle_white)
|
val target = object : Target {
|
||||||
|
override fun onBitmapLoaded(bitmap: Bitmap, from: Picasso.LoadedFrom) {
|
||||||
summaryBuilder.setLargeIcon(avatarIcon)
|
// set channel icon only if there is actually one (for Android versions < 7.0)
|
||||||
|
summaryBuilder.setLargeIcon(bitmap)
|
||||||
|
|
||||||
// Show individual stream notifications, set channel icon only if there is actually
|
// Show individual stream notifications, set channel icon only if there is actually
|
||||||
// one
|
// one
|
||||||
showStreamNotifications(newStreams, data.serviceId, avatarIcon)
|
showStreamNotifications(newStreams, data.serviceId, bitmap)
|
||||||
// Show summary notification
|
// Show summary notification
|
||||||
manager.notify(data.pseudoId, summaryBuilder.build())
|
manager.notify(data.pseudoId, summaryBuilder.build())
|
||||||
|
|
||||||
|
iconLoadingTargets.remove(this) // allow it to be garbage-collected
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onBitmapFailed(e: Exception, errorDrawable: Drawable) {
|
||||||
|
// Show individual stream notifications
|
||||||
|
showStreamNotifications(newStreams, data.serviceId, null)
|
||||||
|
// Show summary notification
|
||||||
|
manager.notify(data.pseudoId, summaryBuilder.build())
|
||||||
|
iconLoadingTargets.remove(this) // allow it to be garbage-collected
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onPrepareLoad(placeHolderDrawable: Drawable) {
|
||||||
|
// Nothing to do
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// add the target to the list to hold a strong reference and prevent it from being garbage
|
||||||
|
// collected, since Picasso only holds weak references to targets
|
||||||
|
iconLoadingTargets.add(target)
|
||||||
|
|
||||||
|
PicassoHelper.loadNotificationIcon(data.avatarUrl).into(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showStreamNotifications(
|
private fun showStreamNotifications(
|
||||||
|
@ -8,8 +8,8 @@ import org.schabi.newpipe.database.playlist.PlaylistDuplicatesEntry;
|
|||||||
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
|
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
|
||||||
import org.schabi.newpipe.local.LocalItemBuilder;
|
import org.schabi.newpipe.local.LocalItemBuilder;
|
||||||
import org.schabi.newpipe.local.history.HistoryRecordManager;
|
import org.schabi.newpipe.local.history.HistoryRecordManager;
|
||||||
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
import org.schabi.newpipe.util.Localization;
|
import org.schabi.newpipe.util.Localization;
|
||||||
import org.schabi.newpipe.util.image.CoilHelper;
|
|
||||||
|
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
@ -30,16 +30,17 @@ public class LocalPlaylistItemHolder extends PlaylistItemHolder {
|
|||||||
public void updateFromItem(final LocalItem localItem,
|
public void updateFromItem(final LocalItem localItem,
|
||||||
final HistoryRecordManager historyRecordManager,
|
final HistoryRecordManager historyRecordManager,
|
||||||
final DateTimeFormatter dateTimeFormatter) {
|
final DateTimeFormatter dateTimeFormatter) {
|
||||||
if (!(localItem instanceof PlaylistMetadataEntry item)) {
|
if (!(localItem instanceof PlaylistMetadataEntry)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
final PlaylistMetadataEntry item = (PlaylistMetadataEntry) localItem;
|
||||||
|
|
||||||
itemTitleView.setText(item.name);
|
itemTitleView.setText(item.name);
|
||||||
itemStreamCountView.setText(Localization.localizeStreamCountMini(
|
itemStreamCountView.setText(Localization.localizeStreamCountMini(
|
||||||
itemStreamCountView.getContext(), item.streamCount));
|
itemStreamCountView.getContext(), item.streamCount));
|
||||||
itemUploaderView.setVisibility(View.INVISIBLE);
|
itemUploaderView.setVisibility(View.INVISIBLE);
|
||||||
|
|
||||||
CoilHelper.INSTANCE.loadPlaylistThumbnail(itemThumbnailView, item.thumbnailUrl);
|
PicassoHelper.loadPlaylistThumbnail(item.thumbnailUrl).into(itemThumbnailView);
|
||||||
|
|
||||||
if (item instanceof PlaylistDuplicatesEntry
|
if (item instanceof PlaylistDuplicatesEntry
|
||||||
&& ((PlaylistDuplicatesEntry) item).timesStreamIsContained > 0) {
|
&& ((PlaylistDuplicatesEntry) item).timesStreamIsContained > 0) {
|
||||||
|
@ -16,8 +16,8 @@ import org.schabi.newpipe.local.LocalItemBuilder;
|
|||||||
import org.schabi.newpipe.local.history.HistoryRecordManager;
|
import org.schabi.newpipe.local.history.HistoryRecordManager;
|
||||||
import org.schabi.newpipe.util.DependentPreferenceHelper;
|
import org.schabi.newpipe.util.DependentPreferenceHelper;
|
||||||
import org.schabi.newpipe.util.Localization;
|
import org.schabi.newpipe.util.Localization;
|
||||||
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
import org.schabi.newpipe.util.ServiceHelper;
|
import org.schabi.newpipe.util.ServiceHelper;
|
||||||
import org.schabi.newpipe.util.image.CoilHelper;
|
|
||||||
import org.schabi.newpipe.views.AnimatedProgressBar;
|
import org.schabi.newpipe.views.AnimatedProgressBar;
|
||||||
|
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
@ -83,8 +83,8 @@ public class LocalPlaylistStreamItemHolder extends LocalItemHolder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Default thumbnail is shown on error, while loading and if the url is empty
|
// Default thumbnail is shown on error, while loading and if the url is empty
|
||||||
CoilHelper.INSTANCE.loadThumbnail(itemThumbnailView,
|
PicassoHelper.loadThumbnail(item.getStreamEntity().getThumbnailUrl())
|
||||||
item.getStreamEntity().getThumbnailUrl());
|
.into(itemThumbnailView);
|
||||||
|
|
||||||
itemView.setOnClickListener(view -> {
|
itemView.setOnClickListener(view -> {
|
||||||
if (itemBuilder.getOnItemSelectedListener() != null) {
|
if (itemBuilder.getOnItemSelectedListener() != null) {
|
||||||
|
@ -16,8 +16,8 @@ import org.schabi.newpipe.local.LocalItemBuilder;
|
|||||||
import org.schabi.newpipe.local.history.HistoryRecordManager;
|
import org.schabi.newpipe.local.history.HistoryRecordManager;
|
||||||
import org.schabi.newpipe.util.DependentPreferenceHelper;
|
import org.schabi.newpipe.util.DependentPreferenceHelper;
|
||||||
import org.schabi.newpipe.util.Localization;
|
import org.schabi.newpipe.util.Localization;
|
||||||
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
import org.schabi.newpipe.util.ServiceHelper;
|
import org.schabi.newpipe.util.ServiceHelper;
|
||||||
import org.schabi.newpipe.util.image.CoilHelper;
|
|
||||||
import org.schabi.newpipe.views.AnimatedProgressBar;
|
import org.schabi.newpipe.views.AnimatedProgressBar;
|
||||||
|
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
@ -117,8 +117,8 @@ public class LocalStatisticStreamItemHolder extends LocalItemHolder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Default thumbnail is shown on error, while loading and if the url is empty
|
// Default thumbnail is shown on error, while loading and if the url is empty
|
||||||
CoilHelper.INSTANCE.loadThumbnail(itemThumbnailView,
|
PicassoHelper.loadThumbnail(item.getStreamEntity().getThumbnailUrl())
|
||||||
item.getStreamEntity().getThumbnailUrl());
|
.into(itemThumbnailView);
|
||||||
|
|
||||||
itemView.setOnClickListener(view -> {
|
itemView.setOnClickListener(view -> {
|
||||||
if (itemBuilder.getOnItemSelectedListener() != null) {
|
if (itemBuilder.getOnItemSelectedListener() != null) {
|
||||||
|
@ -8,8 +8,8 @@ import org.schabi.newpipe.database.playlist.model.PlaylistRemoteEntity;
|
|||||||
import org.schabi.newpipe.local.LocalItemBuilder;
|
import org.schabi.newpipe.local.LocalItemBuilder;
|
||||||
import org.schabi.newpipe.local.history.HistoryRecordManager;
|
import org.schabi.newpipe.local.history.HistoryRecordManager;
|
||||||
import org.schabi.newpipe.util.Localization;
|
import org.schabi.newpipe.util.Localization;
|
||||||
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
import org.schabi.newpipe.util.ServiceHelper;
|
import org.schabi.newpipe.util.ServiceHelper;
|
||||||
import org.schabi.newpipe.util.image.CoilHelper;
|
|
||||||
|
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
@ -29,9 +29,10 @@ public class RemotePlaylistItemHolder extends PlaylistItemHolder {
|
|||||||
public void updateFromItem(final LocalItem localItem,
|
public void updateFromItem(final LocalItem localItem,
|
||||||
final HistoryRecordManager historyRecordManager,
|
final HistoryRecordManager historyRecordManager,
|
||||||
final DateTimeFormatter dateTimeFormatter) {
|
final DateTimeFormatter dateTimeFormatter) {
|
||||||
if (!(localItem instanceof PlaylistRemoteEntity item)) {
|
if (!(localItem instanceof PlaylistRemoteEntity)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
final PlaylistRemoteEntity item = (PlaylistRemoteEntity) localItem;
|
||||||
|
|
||||||
itemTitleView.setText(item.getName());
|
itemTitleView.setText(item.getName());
|
||||||
itemStreamCountView.setText(Localization.localizeStreamCountMini(
|
itemStreamCountView.setText(Localization.localizeStreamCountMini(
|
||||||
@ -44,7 +45,7 @@ public class RemotePlaylistItemHolder extends PlaylistItemHolder {
|
|||||||
itemUploaderView.setText(ServiceHelper.getNameOfServiceById(item.getServiceId()));
|
itemUploaderView.setText(ServiceHelper.getNameOfServiceById(item.getServiceId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
CoilHelper.INSTANCE.loadPlaylistThumbnail(itemThumbnailView, item.getThumbnailUrl());
|
PicassoHelper.loadPlaylistThumbnail(item.getThumbnailUrl()).into(itemThumbnailView);
|
||||||
|
|
||||||
super.updateFromItem(localItem, historyRecordManager, dateTimeFormatter);
|
super.updateFromItem(localItem, historyRecordManager, dateTimeFormatter);
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@ import org.schabi.newpipe.R
|
|||||||
import org.schabi.newpipe.extractor.channel.ChannelInfoItem
|
import org.schabi.newpipe.extractor.channel.ChannelInfoItem
|
||||||
import org.schabi.newpipe.util.Localization
|
import org.schabi.newpipe.util.Localization
|
||||||
import org.schabi.newpipe.util.OnClickGesture
|
import org.schabi.newpipe.util.OnClickGesture
|
||||||
import org.schabi.newpipe.util.image.CoilHelper
|
import org.schabi.newpipe.util.image.PicassoHelper
|
||||||
|
|
||||||
class ChannelItem(
|
class ChannelItem(
|
||||||
private val infoItem: ChannelInfoItem,
|
private val infoItem: ChannelInfoItem,
|
||||||
@ -39,7 +39,7 @@ class ChannelItem(
|
|||||||
itemChannelDescriptionView.text = infoItem.description
|
itemChannelDescriptionView.text = infoItem.description
|
||||||
}
|
}
|
||||||
|
|
||||||
CoilHelper.loadAvatar(itemThumbnailView, infoItem.thumbnails)
|
PicassoHelper.loadAvatar(infoItem.thumbnails).into(itemThumbnailView)
|
||||||
|
|
||||||
gesturesListener?.run {
|
gesturesListener?.run {
|
||||||
viewHolder.root.setOnClickListener { selected(infoItem) }
|
viewHolder.root.setOnClickListener { selected(infoItem) }
|
||||||
|
@ -10,7 +10,7 @@ import org.schabi.newpipe.database.subscription.SubscriptionEntity
|
|||||||
import org.schabi.newpipe.databinding.PickerSubscriptionItemBinding
|
import org.schabi.newpipe.databinding.PickerSubscriptionItemBinding
|
||||||
import org.schabi.newpipe.ktx.AnimationType
|
import org.schabi.newpipe.ktx.AnimationType
|
||||||
import org.schabi.newpipe.ktx.animate
|
import org.schabi.newpipe.ktx.animate
|
||||||
import org.schabi.newpipe.util.image.CoilHelper
|
import org.schabi.newpipe.util.image.PicassoHelper
|
||||||
|
|
||||||
data class PickerSubscriptionItem(
|
data class PickerSubscriptionItem(
|
||||||
val subscriptionEntity: SubscriptionEntity,
|
val subscriptionEntity: SubscriptionEntity,
|
||||||
@ -21,7 +21,7 @@ data class PickerSubscriptionItem(
|
|||||||
override fun getSpanSize(spanCount: Int, position: Int): Int = 1
|
override fun getSpanSize(spanCount: Int, position: Int): Int = 1
|
||||||
|
|
||||||
override fun bind(viewBinding: PickerSubscriptionItemBinding, position: Int) {
|
override fun bind(viewBinding: PickerSubscriptionItemBinding, position: Int) {
|
||||||
CoilHelper.loadAvatar(viewBinding.thumbnailView, subscriptionEntity.avatarUrl)
|
PicassoHelper.loadAvatar(subscriptionEntity.avatarUrl).into(viewBinding.thumbnailView)
|
||||||
viewBinding.titleView.text = subscriptionEntity.name
|
viewBinding.titleView.text = subscriptionEntity.name
|
||||||
viewBinding.selectedHighlight.isVisible = isSelected
|
viewBinding.selectedHighlight.isVisible = isSelected
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,6 @@ import android.view.LayoutInflater;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.core.graphics.drawable.DrawableKt;
|
|
||||||
import androidx.core.math.MathUtils;
|
import androidx.core.math.MathUtils;
|
||||||
import androidx.preference.PreferenceManager;
|
import androidx.preference.PreferenceManager;
|
||||||
|
|
||||||
@ -78,6 +77,8 @@ import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
|
|||||||
import com.google.android.exoplayer2.trackselection.MappingTrackSelector;
|
import com.google.android.exoplayer2.trackselection.MappingTrackSelector;
|
||||||
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
|
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
|
||||||
import com.google.android.exoplayer2.video.VideoSize;
|
import com.google.android.exoplayer2.video.VideoSize;
|
||||||
|
import com.squareup.picasso.Picasso;
|
||||||
|
import com.squareup.picasso.Target;
|
||||||
|
|
||||||
import org.schabi.newpipe.MainActivity;
|
import org.schabi.newpipe.MainActivity;
|
||||||
import org.schabi.newpipe.R;
|
import org.schabi.newpipe.R;
|
||||||
@ -85,8 +86,8 @@ import org.schabi.newpipe.databinding.PlayerBinding;
|
|||||||
import org.schabi.newpipe.error.ErrorInfo;
|
import org.schabi.newpipe.error.ErrorInfo;
|
||||||
import org.schabi.newpipe.error.ErrorUtil;
|
import org.schabi.newpipe.error.ErrorUtil;
|
||||||
import org.schabi.newpipe.error.UserAction;
|
import org.schabi.newpipe.error.UserAction;
|
||||||
import org.schabi.newpipe.extractor.Image;
|
|
||||||
import org.schabi.newpipe.extractor.stream.AudioStream;
|
import org.schabi.newpipe.extractor.stream.AudioStream;
|
||||||
|
import org.schabi.newpipe.extractor.Image;
|
||||||
import org.schabi.newpipe.extractor.stream.StreamInfo;
|
import org.schabi.newpipe.extractor.stream.StreamInfo;
|
||||||
import org.schabi.newpipe.extractor.stream.StreamType;
|
import org.schabi.newpipe.extractor.stream.StreamType;
|
||||||
import org.schabi.newpipe.extractor.stream.VideoStream;
|
import org.schabi.newpipe.extractor.stream.VideoStream;
|
||||||
@ -117,15 +118,14 @@ import org.schabi.newpipe.player.ui.VideoPlayerUi;
|
|||||||
import org.schabi.newpipe.util.DependentPreferenceHelper;
|
import org.schabi.newpipe.util.DependentPreferenceHelper;
|
||||||
import org.schabi.newpipe.util.ListHelper;
|
import org.schabi.newpipe.util.ListHelper;
|
||||||
import org.schabi.newpipe.util.NavigationHelper;
|
import org.schabi.newpipe.util.NavigationHelper;
|
||||||
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
import org.schabi.newpipe.util.SerializedCache;
|
import org.schabi.newpipe.util.SerializedCache;
|
||||||
import org.schabi.newpipe.util.StreamTypeUtil;
|
import org.schabi.newpipe.util.StreamTypeUtil;
|
||||||
import org.schabi.newpipe.util.image.CoilHelper;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.IntStream;
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
import coil.target.Target;
|
|
||||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
|
||||||
import io.reactivex.rxjava3.core.Observable;
|
import io.reactivex.rxjava3.core.Observable;
|
||||||
import io.reactivex.rxjava3.disposables.CompositeDisposable;
|
import io.reactivex.rxjava3.disposables.CompositeDisposable;
|
||||||
@ -174,6 +174,7 @@ public final class Player implements PlaybackListener, Listener {
|
|||||||
//////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
public static final int RENDERER_UNAVAILABLE = -1;
|
public static final int RENDERER_UNAVAILABLE = -1;
|
||||||
|
private static final String PICASSO_PLAYER_THUMBNAIL_TAG = "PICASSO_PLAYER_THUMBNAIL_TAG";
|
||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////
|
||||||
// Playback
|
// Playback
|
||||||
@ -245,6 +246,12 @@ public final class Player implements PlaybackListener, Listener {
|
|||||||
@NonNull
|
@NonNull
|
||||||
private final CompositeDisposable databaseUpdateDisposable = new CompositeDisposable();
|
private final CompositeDisposable databaseUpdateDisposable = new CompositeDisposable();
|
||||||
|
|
||||||
|
// This is the only listener we need for thumbnail loading, since there is always at most only
|
||||||
|
// one thumbnail being loaded at a time. This field is also here to maintain a strong reference,
|
||||||
|
// which would otherwise be garbage collected since Picasso holds weak references to targets.
|
||||||
|
@NonNull
|
||||||
|
private final Target currentThumbnailTarget;
|
||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////
|
||||||
// Utils
|
// Utils
|
||||||
//////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////*/
|
||||||
@ -288,6 +295,8 @@ public final class Player implements PlaybackListener, Listener {
|
|||||||
videoResolver = new VideoPlaybackResolver(context, dataSource, getQualityResolver());
|
videoResolver = new VideoPlaybackResolver(context, dataSource, getQualityResolver());
|
||||||
audioResolver = new AudioPlaybackResolver(context, dataSource);
|
audioResolver = new AudioPlaybackResolver(context, dataSource);
|
||||||
|
|
||||||
|
currentThumbnailTarget = getCurrentThumbnailTarget();
|
||||||
|
|
||||||
// The UIs added here should always be present. They will be initialized when the player
|
// The UIs added here should always be present. They will be initialized when the player
|
||||||
// reaches the initialization step. Make sure the media session ui is before the
|
// reaches the initialization step. Make sure the media session ui is before the
|
||||||
// notification ui in the UIs list, since the notification depends on the media session in
|
// notification ui in the UIs list, since the notification depends on the media session in
|
||||||
@ -593,6 +602,7 @@ public final class Player implements PlaybackListener, Listener {
|
|||||||
|
|
||||||
databaseUpdateDisposable.clear();
|
databaseUpdateDisposable.clear();
|
||||||
progressUpdateDisposable.set(null);
|
progressUpdateDisposable.set(null);
|
||||||
|
cancelLoadingCurrentThumbnail();
|
||||||
|
|
||||||
UIs.destroyAll(Object.class); // destroy every UI: obviously every UI extends Object
|
UIs.destroyAll(Object.class); // destroy every UI: obviously every UI extends Object
|
||||||
}
|
}
|
||||||
@ -766,52 +776,67 @@ public final class Player implements PlaybackListener, Listener {
|
|||||||
//////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////*/
|
||||||
//region Thumbnail loading
|
//region Thumbnail loading
|
||||||
|
|
||||||
|
private Target getCurrentThumbnailTarget() {
|
||||||
|
// a Picasso target is just a listener for thumbnail loading events
|
||||||
|
return new Target() {
|
||||||
|
@Override
|
||||||
|
public void onBitmapLoaded(final Bitmap bitmap, final Picasso.LoadedFrom from) {
|
||||||
|
if (DEBUG) {
|
||||||
|
Log.d(TAG, "Thumbnail - onBitmapLoaded() called with: bitmap = [" + bitmap
|
||||||
|
+ " -> " + bitmap.getWidth() + "x" + bitmap.getHeight() + "], from = ["
|
||||||
|
+ from + "]");
|
||||||
|
}
|
||||||
|
// there is a new thumbnail, so e.g. the end screen thumbnail needs to change, too.
|
||||||
|
onThumbnailLoaded(bitmap);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBitmapFailed(final Exception e, final Drawable errorDrawable) {
|
||||||
|
Log.e(TAG, "Thumbnail - onBitmapFailed() called", e);
|
||||||
|
// there is a new thumbnail, so e.g. the end screen thumbnail needs to change, too.
|
||||||
|
onThumbnailLoaded(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPrepareLoad(final Drawable placeHolderDrawable) {
|
||||||
|
if (DEBUG) {
|
||||||
|
Log.d(TAG, "Thumbnail - onPrepareLoad() called");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private void loadCurrentThumbnail(final List<Image> thumbnails) {
|
private void loadCurrentThumbnail(final List<Image> thumbnails) {
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.d(TAG, "Thumbnail - loadCurrentThumbnail() called with thumbnails = ["
|
Log.d(TAG, "Thumbnail - loadCurrentThumbnail() called with thumbnails = ["
|
||||||
+ thumbnails.size() + "]");
|
+ thumbnails.size() + "]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// first cancel any previous loading
|
||||||
|
cancelLoadingCurrentThumbnail();
|
||||||
|
|
||||||
// Unset currentThumbnail, since it is now outdated. This ensures it is not used in media
|
// Unset currentThumbnail, since it is now outdated. This ensures it is not used in media
|
||||||
// session metadata while the new thumbnail is being loaded by Coil.
|
// session metadata while the new thumbnail is being loaded by Picasso.
|
||||||
onThumbnailLoaded(null);
|
onThumbnailLoaded(null);
|
||||||
if (thumbnails.isEmpty()) {
|
if (thumbnails.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// scale down the notification thumbnail for performance
|
// scale down the notification thumbnail for performance
|
||||||
final var target = new Target() {
|
PicassoHelper.loadScaledDownThumbnail(context, thumbnails)
|
||||||
@Override
|
.tag(PICASSO_PLAYER_THUMBNAIL_TAG)
|
||||||
public void onError(@Nullable final Drawable error) {
|
.into(currentThumbnailTarget);
|
||||||
Log.e(TAG, "Thumbnail - onError() called");
|
|
||||||
// there is a new thumbnail, so e.g. the end screen thumbnail needs to change, too.
|
|
||||||
onThumbnailLoaded(null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private void cancelLoadingCurrentThumbnail() {
|
||||||
public void onStart(@Nullable final Drawable placeholder) {
|
// cancel the Picasso job associated with the player thumbnail, if any
|
||||||
if (DEBUG) {
|
PicassoHelper.cancelTag(PICASSO_PLAYER_THUMBNAIL_TAG);
|
||||||
Log.d(TAG, "Thumbnail - onStart() called");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onSuccess(@NonNull final Drawable result) {
|
|
||||||
if (DEBUG) {
|
|
||||||
Log.d(TAG, "Thumbnail - onSuccess() called with: drawable = [" + result + "]");
|
|
||||||
}
|
|
||||||
// there is a new thumbnail, so e.g. the end screen thumbnail needs to change, too.
|
|
||||||
onThumbnailLoaded(DrawableKt.toBitmapOrNull(result, result.getIntrinsicWidth(),
|
|
||||||
result.getIntrinsicHeight(), null));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
CoilHelper.INSTANCE.loadScaledDownThumbnail(context, thumbnails, target);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onThumbnailLoaded(@Nullable final Bitmap bitmap) {
|
private void onThumbnailLoaded(@Nullable final Bitmap bitmap) {
|
||||||
// Avoid useless thumbnail updates, if the thumbnail has not actually changed. Based on the
|
// Avoid useless thumbnail updates, if the thumbnail has not actually changed. Based on the
|
||||||
// thumbnail loading code, this if would be skipped only when both bitmaps are `null`, since
|
// thumbnail loading code, this if would be skipped only when both bitmaps are `null`, since
|
||||||
// onThumbnailLoaded won't be called twice with the same nonnull bitmap by Coil's target.
|
// onThumbnailLoaded won't be called twice with the same nonnull bitmap by Picasso's target.
|
||||||
if (currentThumbnail != bitmap) {
|
if (currentThumbnail != bitmap) {
|
||||||
currentThumbnail = bitmap;
|
currentThumbnail = bitmap;
|
||||||
UIs.call(playerUi -> playerUi.onThumbnailLoaded(bitmap));
|
UIs.call(playerUi -> playerUi.onThumbnailLoaded(bitmap));
|
||||||
|
@ -6,8 +6,8 @@ import android.view.MotionEvent;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import org.schabi.newpipe.util.Localization;
|
import org.schabi.newpipe.util.Localization;
|
||||||
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
import org.schabi.newpipe.util.ServiceHelper;
|
import org.schabi.newpipe.util.ServiceHelper;
|
||||||
import org.schabi.newpipe.util.image.CoilHelper;
|
|
||||||
|
|
||||||
public class PlayQueueItemBuilder {
|
public class PlayQueueItemBuilder {
|
||||||
private static final String TAG = PlayQueueItemBuilder.class.toString();
|
private static final String TAG = PlayQueueItemBuilder.class.toString();
|
||||||
@ -33,7 +33,7 @@ public class PlayQueueItemBuilder {
|
|||||||
holder.itemDurationView.setVisibility(View.GONE);
|
holder.itemDurationView.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
CoilHelper.INSTANCE.loadThumbnail(holder.itemThumbnailView, item.getThumbnails());
|
PicassoHelper.loadThumbnail(item.getThumbnails()).into(holder.itemThumbnailView);
|
||||||
|
|
||||||
holder.itemRoot.setOnClickListener(view -> {
|
holder.itemRoot.setOnClickListener(view -> {
|
||||||
if (onItemClickListener != null) {
|
if (onItemClickListener != null) {
|
||||||
|
@ -13,9 +13,8 @@ import androidx.collection.SparseArrayCompat;
|
|||||||
|
|
||||||
import com.google.common.base.Stopwatch;
|
import com.google.common.base.Stopwatch;
|
||||||
|
|
||||||
import org.schabi.newpipe.App;
|
|
||||||
import org.schabi.newpipe.extractor.stream.Frameset;
|
import org.schabi.newpipe.extractor.stream.Frameset;
|
||||||
import org.schabi.newpipe.util.image.CoilHelper;
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
|
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -178,8 +177,8 @@ public class SeekbarPreviewThumbnailHolder {
|
|||||||
Log.d(TAG, "Downloading bitmap for seekbarPreview from '" + url + "'");
|
Log.d(TAG, "Downloading bitmap for seekbarPreview from '" + url + "'");
|
||||||
|
|
||||||
// Gets the bitmap within the timeout of 15 seconds imposed by default by OkHttpClient
|
// Gets the bitmap within the timeout of 15 seconds imposed by default by OkHttpClient
|
||||||
// Ensure that you are not running on the main thread, otherwise this will hang
|
// Ensure that your are not running on the main-Thread this will otherwise hang
|
||||||
final var bitmap = CoilHelper.INSTANCE.loadBitmapBlocking(App.getApp(), url);
|
final Bitmap bitmap = PicassoHelper.loadSeekbarThumbnailPreview(url).get();
|
||||||
|
|
||||||
if (sw != null) {
|
if (sw != null) {
|
||||||
Log.d(TAG, "Download of bitmap for seekbarPreview from '" + url + "' took "
|
Log.d(TAG, "Download of bitmap for seekbarPreview from '" + url + "' took "
|
||||||
|
@ -13,9 +13,10 @@ import org.schabi.newpipe.extractor.NewPipe;
|
|||||||
import org.schabi.newpipe.extractor.localization.ContentCountry;
|
import org.schabi.newpipe.extractor.localization.ContentCountry;
|
||||||
import org.schabi.newpipe.extractor.localization.Localization;
|
import org.schabi.newpipe.extractor.localization.Localization;
|
||||||
import org.schabi.newpipe.util.image.ImageStrategy;
|
import org.schabi.newpipe.util.image.ImageStrategy;
|
||||||
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
import org.schabi.newpipe.util.image.PreferredImageQuality;
|
import org.schabi.newpipe.util.image.PreferredImageQuality;
|
||||||
|
|
||||||
import coil.Coil;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class ContentSettingsFragment extends BasePreferenceFragment {
|
public class ContentSettingsFragment extends BasePreferenceFragment {
|
||||||
private String youtubeRestrictedModeEnabledKey;
|
private String youtubeRestrictedModeEnabledKey;
|
||||||
@ -41,17 +42,14 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
|
|||||||
(preference, newValue) -> {
|
(preference, newValue) -> {
|
||||||
ImageStrategy.setPreferredImageQuality(PreferredImageQuality
|
ImageStrategy.setPreferredImageQuality(PreferredImageQuality
|
||||||
.fromPreferenceKey(requireContext(), (String) newValue));
|
.fromPreferenceKey(requireContext(), (String) newValue));
|
||||||
final var loader = Coil.imageLoader(preference.getContext());
|
try {
|
||||||
if (loader.getMemoryCache() != null) {
|
PicassoHelper.clearCache(preference.getContext());
|
||||||
loader.getMemoryCache().clear();
|
|
||||||
}
|
|
||||||
if (loader.getDiskCache() != null) {
|
|
||||||
loader.getDiskCache().clear();
|
|
||||||
}
|
|
||||||
Toast.makeText(preference.getContext(),
|
Toast.makeText(preference.getContext(),
|
||||||
R.string.thumbnail_cache_wipe_complete_notice, Toast.LENGTH_SHORT)
|
R.string.thumbnail_cache_wipe_complete_notice, Toast.LENGTH_SHORT)
|
||||||
.show();
|
.show();
|
||||||
|
} catch (final IOException e) {
|
||||||
|
Log.e(TAG, "Unable to clear Picasso cache", e);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ import org.schabi.newpipe.error.ErrorInfo;
|
|||||||
import org.schabi.newpipe.error.ErrorUtil;
|
import org.schabi.newpipe.error.ErrorUtil;
|
||||||
import org.schabi.newpipe.error.UserAction;
|
import org.schabi.newpipe.error.UserAction;
|
||||||
import org.schabi.newpipe.local.feed.notifications.NotificationWorker;
|
import org.schabi.newpipe.local.feed.notifications.NotificationWorker;
|
||||||
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@ -24,6 +25,8 @@ public class DebugSettingsFragment extends BasePreferenceFragment {
|
|||||||
findPreference(getString(R.string.allow_heap_dumping_key));
|
findPreference(getString(R.string.allow_heap_dumping_key));
|
||||||
final Preference showMemoryLeaksPreference =
|
final Preference showMemoryLeaksPreference =
|
||||||
findPreference(getString(R.string.show_memory_leaks_key));
|
findPreference(getString(R.string.show_memory_leaks_key));
|
||||||
|
final Preference showImageIndicatorsPreference =
|
||||||
|
findPreference(getString(R.string.show_image_indicators_key));
|
||||||
final Preference checkNewStreamsPreference =
|
final Preference checkNewStreamsPreference =
|
||||||
findPreference(getString(R.string.check_new_streams_key));
|
findPreference(getString(R.string.check_new_streams_key));
|
||||||
final Preference crashTheAppPreference =
|
final Preference crashTheAppPreference =
|
||||||
@ -35,6 +38,7 @@ public class DebugSettingsFragment extends BasePreferenceFragment {
|
|||||||
|
|
||||||
assert allowHeapDumpingPreference != null;
|
assert allowHeapDumpingPreference != null;
|
||||||
assert showMemoryLeaksPreference != null;
|
assert showMemoryLeaksPreference != null;
|
||||||
|
assert showImageIndicatorsPreference != null;
|
||||||
assert checkNewStreamsPreference != null;
|
assert checkNewStreamsPreference != null;
|
||||||
assert crashTheAppPreference != null;
|
assert crashTheAppPreference != null;
|
||||||
assert showErrorSnackbarPreference != null;
|
assert showErrorSnackbarPreference != null;
|
||||||
@ -57,6 +61,11 @@ public class DebugSettingsFragment extends BasePreferenceFragment {
|
|||||||
showMemoryLeaksPreference.setSummary(R.string.leak_canary_not_available);
|
showMemoryLeaksPreference.setSummary(R.string.leak_canary_not_available);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
showImageIndicatorsPreference.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
|
PicassoHelper.setIndicatorsEnabled((Boolean) newValue);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
checkNewStreamsPreference.setOnPreferenceClickListener(preference -> {
|
checkNewStreamsPreference.setOnPreferenceClickListener(preference -> {
|
||||||
NotificationWorker.runNow(preference.getContext());
|
NotificationWorker.runNow(preference.getContext());
|
||||||
return true;
|
return true;
|
||||||
|
@ -19,8 +19,8 @@ import org.schabi.newpipe.R;
|
|||||||
import org.schabi.newpipe.database.subscription.SubscriptionEntity;
|
import org.schabi.newpipe.database.subscription.SubscriptionEntity;
|
||||||
import org.schabi.newpipe.error.ErrorUtil;
|
import org.schabi.newpipe.error.ErrorUtil;
|
||||||
import org.schabi.newpipe.local.subscription.SubscriptionManager;
|
import org.schabi.newpipe.local.subscription.SubscriptionManager;
|
||||||
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
import org.schabi.newpipe.util.ThemeHelper;
|
import org.schabi.newpipe.util.ThemeHelper;
|
||||||
import org.schabi.newpipe.util.image.CoilHelper;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
@ -190,7 +190,7 @@ public class SelectChannelFragment extends DialogFragment {
|
|||||||
final SubscriptionEntity entry = subscriptions.get(position);
|
final SubscriptionEntity entry = subscriptions.get(position);
|
||||||
holder.titleView.setText(entry.getName());
|
holder.titleView.setText(entry.getName());
|
||||||
holder.view.setOnClickListener(view -> clickedItem(position));
|
holder.view.setOnClickListener(view -> clickedItem(position));
|
||||||
CoilHelper.INSTANCE.loadAvatar(holder.thumbnailView, entry.getAvatarUrl());
|
PicassoHelper.loadAvatar(entry.getAvatarUrl()).into(holder.thumbnailView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -27,7 +27,7 @@ import org.schabi.newpipe.error.ErrorUtil;
|
|||||||
import org.schabi.newpipe.error.UserAction;
|
import org.schabi.newpipe.error.UserAction;
|
||||||
import org.schabi.newpipe.local.playlist.LocalPlaylistManager;
|
import org.schabi.newpipe.local.playlist.LocalPlaylistManager;
|
||||||
import org.schabi.newpipe.local.playlist.RemotePlaylistManager;
|
import org.schabi.newpipe.local.playlist.RemotePlaylistManager;
|
||||||
import org.schabi.newpipe.util.image.CoilHelper;
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
@ -154,15 +154,20 @@ public class SelectPlaylistFragment extends DialogFragment {
|
|||||||
final int position) {
|
final int position) {
|
||||||
final PlaylistLocalItem selectedItem = playlists.get(position);
|
final PlaylistLocalItem selectedItem = playlists.get(position);
|
||||||
|
|
||||||
if (selectedItem instanceof PlaylistMetadataEntry entry) {
|
if (selectedItem instanceof PlaylistMetadataEntry) {
|
||||||
|
final PlaylistMetadataEntry entry = ((PlaylistMetadataEntry) selectedItem);
|
||||||
|
|
||||||
holder.titleView.setText(entry.name);
|
holder.titleView.setText(entry.name);
|
||||||
holder.view.setOnClickListener(view -> clickedItem(position));
|
holder.view.setOnClickListener(view -> clickedItem(position));
|
||||||
CoilHelper.INSTANCE.loadPlaylistThumbnail(holder.thumbnailView, entry.thumbnailUrl);
|
PicassoHelper.loadPlaylistThumbnail(entry.thumbnailUrl).into(holder.thumbnailView);
|
||||||
} else if (selectedItem instanceof PlaylistRemoteEntity entry) {
|
|
||||||
|
} else if (selectedItem instanceof PlaylistRemoteEntity) {
|
||||||
|
final PlaylistRemoteEntity entry = ((PlaylistRemoteEntity) selectedItem);
|
||||||
|
|
||||||
holder.titleView.setText(entry.getName());
|
holder.titleView.setText(entry.getName());
|
||||||
holder.view.setOnClickListener(view -> clickedItem(position));
|
holder.view.setOnClickListener(view -> clickedItem(position));
|
||||||
CoilHelper.INSTANCE.loadPlaylistThumbnail(holder.thumbnailView,
|
PicassoHelper.loadPlaylistThumbnail(entry.getThumbnailUrl())
|
||||||
entry.getThumbnailUrl());
|
.into(holder.thumbnailView);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,8 +24,8 @@ import androidx.core.content.FileProvider;
|
|||||||
import org.schabi.newpipe.BuildConfig;
|
import org.schabi.newpipe.BuildConfig;
|
||||||
import org.schabi.newpipe.R;
|
import org.schabi.newpipe.R;
|
||||||
import org.schabi.newpipe.extractor.Image;
|
import org.schabi.newpipe.extractor.Image;
|
||||||
import org.schabi.newpipe.util.image.CoilHelper;
|
|
||||||
import org.schabi.newpipe.util.image.ImageStrategy;
|
import org.schabi.newpipe.util.image.ImageStrategy;
|
||||||
|
import org.schabi.newpipe.util.image.PicassoHelper;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
@ -278,7 +278,7 @@ public final class ShareUtils {
|
|||||||
* @param content the content to share
|
* @param content the content to share
|
||||||
* @param images a set of possible {@link Image}s of the subject, among which to choose with
|
* @param images a set of possible {@link Image}s of the subject, among which to choose with
|
||||||
* {@link ImageStrategy#choosePreferredImage(List)} since that's likely to
|
* {@link ImageStrategy#choosePreferredImage(List)} since that's likely to
|
||||||
* provide an image that is in Coil's cache
|
* provide an image that is in Picasso's cache
|
||||||
*/
|
*/
|
||||||
public static void shareText(@NonNull final Context context,
|
public static void shareText(@NonNull final Context context,
|
||||||
@NonNull final String title,
|
@NonNull final String title,
|
||||||
@ -335,7 +335,15 @@ public final class ShareUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate a {@link ClipData} with the image of the content shared.
|
* Generate a {@link ClipData} with the image of the content shared, if it's in the app cache.
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* In order not to worry about network issues (timeouts, DNS issues, low connection speed, ...)
|
||||||
|
* when sharing a content, only images in the {@link com.squareup.picasso.LruCache LruCache}
|
||||||
|
* used by the Picasso library inside {@link PicassoHelper} are used as preview images. If the
|
||||||
|
* thumbnail image is not in the cache, no {@link ClipData} will be generated and {@code null}
|
||||||
|
* will be returned.
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
* In order to display the image in the content preview of the Android share sheet, an URI of
|
* In order to display the image in the content preview of the Android share sheet, an URI of
|
||||||
@ -351,8 +359,9 @@ public final class ShareUtils {
|
|||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
* This method will call {@link CoilHelper#loadBitmapBlocking(Context, String)} to get the
|
* This method will call {@link PicassoHelper#getImageFromCacheIfPresent(String)} to get the
|
||||||
* thumbnail of the content.
|
* thumbnail of the content in the {@link com.squareup.picasso.LruCache LruCache} used by
|
||||||
|
* the Picasso library inside {@link PicassoHelper}.
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
@ -369,7 +378,7 @@ public final class ShareUtils {
|
|||||||
@NonNull final Context context,
|
@NonNull final Context context,
|
||||||
@NonNull final String thumbnailUrl) {
|
@NonNull final String thumbnailUrl) {
|
||||||
try {
|
try {
|
||||||
final var bitmap = CoilHelper.INSTANCE.loadBitmapBlocking(context, thumbnailUrl);
|
final Bitmap bitmap = PicassoHelper.getImageFromCacheIfPresent(thumbnailUrl);
|
||||||
if (bitmap == null) {
|
if (bitmap == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -1,142 +0,0 @@
|
|||||||
package org.schabi.newpipe.util.image
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.graphics.Bitmap
|
|
||||||
import android.util.Log
|
|
||||||
import android.widget.ImageView
|
|
||||||
import androidx.annotation.DrawableRes
|
|
||||||
import androidx.core.graphics.drawable.toBitmapOrNull
|
|
||||||
import coil.executeBlocking
|
|
||||||
import coil.imageLoader
|
|
||||||
import coil.request.ImageRequest
|
|
||||||
import coil.size.Size
|
|
||||||
import coil.target.Target
|
|
||||||
import coil.transform.Transformation
|
|
||||||
import org.schabi.newpipe.MainActivity
|
|
||||||
import org.schabi.newpipe.R
|
|
||||||
import org.schabi.newpipe.extractor.Image
|
|
||||||
import org.schabi.newpipe.ktx.scale
|
|
||||||
import kotlin.math.min
|
|
||||||
|
|
||||||
object CoilHelper {
|
|
||||||
private val TAG = CoilHelper::class.java.simpleName
|
|
||||||
|
|
||||||
@JvmOverloads
|
|
||||||
fun loadBitmapBlocking(
|
|
||||||
context: Context,
|
|
||||||
url: String?,
|
|
||||||
@DrawableRes placeholderResId: Int = 0
|
|
||||||
): Bitmap? {
|
|
||||||
val request = getImageRequest(context, url, placeholderResId).build()
|
|
||||||
return context.imageLoader.executeBlocking(request).drawable?.toBitmapOrNull()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun loadAvatar(target: ImageView, images: List<Image>) {
|
|
||||||
loadImageDefault(target, images, R.drawable.placeholder_person)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun loadAvatar(target: ImageView, url: String?) {
|
|
||||||
loadImageDefault(target, url, R.drawable.placeholder_person)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun loadThumbnail(target: ImageView, images: List<Image>) {
|
|
||||||
loadImageDefault(target, images, R.drawable.placeholder_thumbnail_video)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun loadThumbnail(target: ImageView, url: String?) {
|
|
||||||
loadImageDefault(target, url, R.drawable.placeholder_thumbnail_video)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun loadScaledDownThumbnail(context: Context, images: List<Image>, target: Target) {
|
|
||||||
val url = ImageStrategy.choosePreferredImage(images)
|
|
||||||
val request = getImageRequest(context, url, R.drawable.placeholder_thumbnail_video)
|
|
||||||
.target(target)
|
|
||||||
.transformations(object : Transformation {
|
|
||||||
override val cacheKey = "COIL_PLAYER_THUMBNAIL_TRANSFORMATION_KEY"
|
|
||||||
|
|
||||||
override suspend fun transform(input: Bitmap, size: Size): Bitmap {
|
|
||||||
if (MainActivity.DEBUG) {
|
|
||||||
Log.d(TAG, "Thumbnail - transform() called")
|
|
||||||
}
|
|
||||||
|
|
||||||
val notificationThumbnailWidth = min(
|
|
||||||
context.resources.getDimension(R.dimen.player_notification_thumbnail_width),
|
|
||||||
input.width.toFloat()
|
|
||||||
).toInt()
|
|
||||||
|
|
||||||
var newHeight = input.height / (input.width / notificationThumbnailWidth)
|
|
||||||
val result = input.scale(notificationThumbnailWidth, newHeight)
|
|
||||||
|
|
||||||
return if (result == input || !result.isMutable) {
|
|
||||||
// create a new mutable bitmap to prevent strange crashes on some
|
|
||||||
// devices (see #4638)
|
|
||||||
newHeight = input.height / (input.width / (notificationThumbnailWidth - 1))
|
|
||||||
input.scale(notificationThumbnailWidth, newHeight)
|
|
||||||
} else {
|
|
||||||
result
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.build()
|
|
||||||
|
|
||||||
context.imageLoader.enqueue(request)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun loadDetailsThumbnail(target: ImageView, images: List<Image>) {
|
|
||||||
val url = ImageStrategy.choosePreferredImage(images)
|
|
||||||
loadImageDefault(target, url, R.drawable.placeholder_thumbnail_video, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun loadBanner(target: ImageView, images: List<Image>) {
|
|
||||||
loadImageDefault(target, images, R.drawable.placeholder_channel_banner)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun loadPlaylistThumbnail(target: ImageView, images: List<Image>) {
|
|
||||||
loadImageDefault(target, images, R.drawable.placeholder_thumbnail_playlist)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun loadPlaylistThumbnail(target: ImageView, url: String?) {
|
|
||||||
loadImageDefault(target, url, R.drawable.placeholder_thumbnail_playlist)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun loadImageDefault(
|
|
||||||
target: ImageView,
|
|
||||||
images: List<Image>,
|
|
||||||
@DrawableRes placeholderResId: Int
|
|
||||||
) {
|
|
||||||
loadImageDefault(target, ImageStrategy.choosePreferredImage(images), placeholderResId)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun loadImageDefault(
|
|
||||||
target: ImageView,
|
|
||||||
url: String?,
|
|
||||||
@DrawableRes placeholderResId: Int,
|
|
||||||
showPlaceholder: Boolean = true
|
|
||||||
) {
|
|
||||||
val request = getImageRequest(target.context, url, placeholderResId, showPlaceholder)
|
|
||||||
.target(target)
|
|
||||||
.build()
|
|
||||||
target.context.imageLoader.enqueue(request)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getImageRequest(
|
|
||||||
context: Context,
|
|
||||||
url: String?,
|
|
||||||
@DrawableRes placeholderResId: Int,
|
|
||||||
showPlaceholderWhileLoading: Boolean = true
|
|
||||||
): ImageRequest.Builder {
|
|
||||||
// if the URL was chosen with `choosePreferredImage` it will be null, but check again
|
|
||||||
// `shouldLoadImages` in case the URL was chosen with `imageListToDbUrl` (which is the case
|
|
||||||
// for URLs stored in the database)
|
|
||||||
val takenUrl = url?.takeIf { it.isNotEmpty() && ImageStrategy.shouldLoadImages() }
|
|
||||||
|
|
||||||
return ImageRequest.Builder(context)
|
|
||||||
.data(takenUrl)
|
|
||||||
.error(placeholderResId)
|
|
||||||
.apply {
|
|
||||||
if (takenUrl != null || showPlaceholderWhileLoading) {
|
|
||||||
placeholder(placeholderResId)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,224 @@
|
|||||||
|
package org.schabi.newpipe.util.image;
|
||||||
|
|
||||||
|
import static org.schabi.newpipe.MainActivity.DEBUG;
|
||||||
|
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
|
||||||
|
import static org.schabi.newpipe.util.image.ImageStrategy.choosePreferredImage;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.annotation.DrawableRes;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.core.graphics.BitmapCompat;
|
||||||
|
|
||||||
|
import com.squareup.picasso.Cache;
|
||||||
|
import com.squareup.picasso.LruCache;
|
||||||
|
import com.squareup.picasso.OkHttp3Downloader;
|
||||||
|
import com.squareup.picasso.Picasso;
|
||||||
|
import com.squareup.picasso.RequestCreator;
|
||||||
|
import com.squareup.picasso.Transformation;
|
||||||
|
|
||||||
|
import org.schabi.newpipe.R;
|
||||||
|
import org.schabi.newpipe.extractor.Image;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import okhttp3.OkHttpClient;
|
||||||
|
|
||||||
|
public final class PicassoHelper {
|
||||||
|
private static final String TAG = PicassoHelper.class.getSimpleName();
|
||||||
|
private static final String PLAYER_THUMBNAIL_TRANSFORMATION_KEY =
|
||||||
|
"PICASSO_PLAYER_THUMBNAIL_TRANSFORMATION_KEY";
|
||||||
|
|
||||||
|
private PicassoHelper() {
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Cache picassoCache;
|
||||||
|
private static OkHttpClient picassoDownloaderClient;
|
||||||
|
|
||||||
|
// suppress because terminate() is called in App.onTerminate(), preventing leaks
|
||||||
|
@SuppressLint("StaticFieldLeak")
|
||||||
|
private static Picasso picassoInstance;
|
||||||
|
|
||||||
|
|
||||||
|
public static void init(final Context context) {
|
||||||
|
picassoCache = new LruCache(10 * 1024 * 1024);
|
||||||
|
picassoDownloaderClient = new OkHttpClient.Builder()
|
||||||
|
.cache(new okhttp3.Cache(new File(context.getExternalCacheDir(), "picasso"),
|
||||||
|
50L * 1024L * 1024L))
|
||||||
|
// this should already be the default timeout in OkHttp3, but just to be sure...
|
||||||
|
.callTimeout(15, TimeUnit.SECONDS)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
picassoInstance = new Picasso.Builder(context)
|
||||||
|
.memoryCache(picassoCache) // memory cache
|
||||||
|
.downloader(new OkHttp3Downloader(picassoDownloaderClient)) // disk cache
|
||||||
|
.defaultBitmapConfig(Bitmap.Config.RGB_565)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void terminate() {
|
||||||
|
picassoCache = null;
|
||||||
|
picassoDownloaderClient = null;
|
||||||
|
|
||||||
|
if (picassoInstance != null) {
|
||||||
|
picassoInstance.shutdown();
|
||||||
|
picassoInstance = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void clearCache(final Context context) throws IOException {
|
||||||
|
picassoInstance.shutdown();
|
||||||
|
picassoCache.clear(); // clear memory cache
|
||||||
|
final okhttp3.Cache diskCache = picassoDownloaderClient.cache();
|
||||||
|
if (diskCache != null) {
|
||||||
|
diskCache.delete(); // clear disk cache
|
||||||
|
}
|
||||||
|
init(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void cancelTag(final Object tag) {
|
||||||
|
picassoInstance.cancelTag(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setIndicatorsEnabled(final boolean enabled) {
|
||||||
|
picassoInstance.setIndicatorsEnabled(enabled); // useful for debugging
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static RequestCreator loadAvatar(@NonNull final List<Image> images) {
|
||||||
|
return loadImageDefault(images, R.drawable.placeholder_person);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RequestCreator loadAvatar(@Nullable final String url) {
|
||||||
|
return loadImageDefault(url, R.drawable.placeholder_person);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RequestCreator loadThumbnail(@NonNull final List<Image> images) {
|
||||||
|
return loadImageDefault(images, R.drawable.placeholder_thumbnail_video);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RequestCreator loadThumbnail(@Nullable final String url) {
|
||||||
|
return loadImageDefault(url, R.drawable.placeholder_thumbnail_video);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RequestCreator loadDetailsThumbnail(@NonNull final List<Image> images) {
|
||||||
|
return loadImageDefault(choosePreferredImage(images),
|
||||||
|
R.drawable.placeholder_thumbnail_video, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RequestCreator loadBanner(@NonNull final List<Image> images) {
|
||||||
|
return loadImageDefault(images, R.drawable.placeholder_channel_banner);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RequestCreator loadPlaylistThumbnail(@NonNull final List<Image> images) {
|
||||||
|
return loadImageDefault(images, R.drawable.placeholder_thumbnail_playlist);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RequestCreator loadPlaylistThumbnail(@Nullable final String url) {
|
||||||
|
return loadImageDefault(url, R.drawable.placeholder_thumbnail_playlist);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RequestCreator loadSeekbarThumbnailPreview(@Nullable final String url) {
|
||||||
|
return picassoInstance.load(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RequestCreator loadNotificationIcon(@Nullable final String url) {
|
||||||
|
return loadImageDefault(url, R.drawable.ic_newpipe_triangle_white);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static RequestCreator loadScaledDownThumbnail(final Context context,
|
||||||
|
@NonNull final List<Image> images) {
|
||||||
|
// scale down the notification thumbnail for performance
|
||||||
|
return PicassoHelper.loadThumbnail(images)
|
||||||
|
.transform(new Transformation() {
|
||||||
|
@Override
|
||||||
|
public Bitmap transform(final Bitmap source) {
|
||||||
|
if (DEBUG) {
|
||||||
|
Log.d(TAG, "Thumbnail - transform() called");
|
||||||
|
}
|
||||||
|
|
||||||
|
final float notificationThumbnailWidth = Math.min(
|
||||||
|
context.getResources()
|
||||||
|
.getDimension(R.dimen.player_notification_thumbnail_width),
|
||||||
|
source.getWidth());
|
||||||
|
|
||||||
|
final Bitmap result = BitmapCompat.createScaledBitmap(
|
||||||
|
source,
|
||||||
|
(int) notificationThumbnailWidth,
|
||||||
|
(int) (source.getHeight()
|
||||||
|
/ (source.getWidth() / notificationThumbnailWidth)),
|
||||||
|
null,
|
||||||
|
true);
|
||||||
|
|
||||||
|
if (result == source || !result.isMutable()) {
|
||||||
|
// create a new mutable bitmap to prevent strange crashes on some
|
||||||
|
// devices (see #4638)
|
||||||
|
final Bitmap copied = BitmapCompat.createScaledBitmap(
|
||||||
|
source,
|
||||||
|
(int) notificationThumbnailWidth - 1,
|
||||||
|
(int) (source.getHeight() / (source.getWidth()
|
||||||
|
/ (notificationThumbnailWidth - 1))),
|
||||||
|
null,
|
||||||
|
true);
|
||||||
|
source.recycle();
|
||||||
|
return copied;
|
||||||
|
} else {
|
||||||
|
source.recycle();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String key() {
|
||||||
|
return PLAYER_THUMBNAIL_TRANSFORMATION_KEY;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public static Bitmap getImageFromCacheIfPresent(@NonNull final String imageUrl) {
|
||||||
|
// URLs in the internal cache finish with \n so we need to add \n to image URLs
|
||||||
|
return picassoCache.get(imageUrl + "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static RequestCreator loadImageDefault(@NonNull final List<Image> images,
|
||||||
|
@DrawableRes final int placeholderResId) {
|
||||||
|
return loadImageDefault(choosePreferredImage(images), placeholderResId);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static RequestCreator loadImageDefault(@Nullable final String url,
|
||||||
|
@DrawableRes final int placeholderResId) {
|
||||||
|
return loadImageDefault(url, placeholderResId, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static RequestCreator loadImageDefault(@Nullable final String url,
|
||||||
|
@DrawableRes final int placeholderResId,
|
||||||
|
final boolean showPlaceholderWhileLoading) {
|
||||||
|
// if the URL was chosen with `choosePreferredImage` it will be null, but check again
|
||||||
|
// `shouldLoadImages` in case the URL was chosen with `imageListToDbUrl` (which is the case
|
||||||
|
// for URLs stored in the database)
|
||||||
|
if (isNullOrEmpty(url) || !ImageStrategy.shouldLoadImages()) {
|
||||||
|
return picassoInstance
|
||||||
|
.load((String) null)
|
||||||
|
.placeholder(placeholderResId) // show placeholder when no image should load
|
||||||
|
.error(placeholderResId);
|
||||||
|
} else {
|
||||||
|
final RequestCreator requestCreator = picassoInstance
|
||||||
|
.load(url)
|
||||||
|
.error(placeholderResId);
|
||||||
|
if (showPlaceholderWhileLoading) {
|
||||||
|
requestCreator.placeholder(placeholderResId);
|
||||||
|
}
|
||||||
|
return requestCreator;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -302,6 +302,7 @@
|
|||||||
<item quantity="other">%s مشارك</item>
|
<item quantity="other">%s مشارك</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="loading_metadata_title">جلب البيانات الوصفية…</string>
|
<string name="loading_metadata_title">جلب البيانات الوصفية…</string>
|
||||||
|
<string name="show_image_indicators_title">إظهار مؤشرات الصور</string>
|
||||||
<string name="app_update_available_notification_text">انقر للتنزيل %s</string>
|
<string name="app_update_available_notification_text">انقر للتنزيل %s</string>
|
||||||
<string name="feed_use_dedicated_fetch_method_disable_button">تعطيل الوضع السريع</string>
|
<string name="feed_use_dedicated_fetch_method_disable_button">تعطيل الوضع السريع</string>
|
||||||
<string name="enumeration_comma">,</string>
|
<string name="enumeration_comma">,</string>
|
||||||
@ -829,6 +830,7 @@
|
|||||||
<string name="you_successfully_subscribed">لقد اشتركت الآن في هذه القناة</string>
|
<string name="you_successfully_subscribed">لقد اشتركت الآن في هذه القناة</string>
|
||||||
<string name="downloads_storage_use_saf_summary_api_29">بدءًا من Android 10، يتم دعم \"Storage Access Framework\" فقط</string>
|
<string name="downloads_storage_use_saf_summary_api_29">بدءًا من Android 10، يتم دعم \"Storage Access Framework\" فقط</string>
|
||||||
<string name="generate_unique_name">إنشاء اسم فريد</string>
|
<string name="generate_unique_name">إنشاء اسم فريد</string>
|
||||||
|
<string name="show_image_indicators_summary">أظهر أشرطة ملونة لبيكاسو أعلى الصور تشير إلى مصدرها: الأحمر للشبكة والأزرق للقرص والأخضر للذاكرة</string>
|
||||||
<string name="error_ssl_exception">فشل الاتصال الآمن</string>
|
<string name="error_ssl_exception">فشل الاتصال الآمن</string>
|
||||||
<string name="youtube_music_premium_content">يتوفر هذا الفيديو فقط لأعضاء YouTube Music Premium، لذلك لا يمكن بثه أو تنزيله من قبل NewPipe.</string>
|
<string name="youtube_music_premium_content">يتوفر هذا الفيديو فقط لأعضاء YouTube Music Premium، لذلك لا يمكن بثه أو تنزيله من قبل NewPipe.</string>
|
||||||
<string name="previous_stream">البث السابق</string>
|
<string name="previous_stream">البث السابق</string>
|
||||||
|
@ -674,6 +674,8 @@
|
|||||||
<string name="seekbar_preview_thumbnail_title">معاينة مصغرة على شريط التمرير</string>
|
<string name="seekbar_preview_thumbnail_title">معاينة مصغرة على شريط التمرير</string>
|
||||||
<string name="mark_as_watched">وضع علامة على تمت مشاهدته</string>
|
<string name="mark_as_watched">وضع علامة على تمت مشاهدته</string>
|
||||||
<string name="detail_heart_img_view_description">أُعجب بها منشئ المحتوى</string>
|
<string name="detail_heart_img_view_description">أُعجب بها منشئ المحتوى</string>
|
||||||
|
<string name="show_image_indicators_summary">أظهر أشرطة ملونة لبيكاسو أعلى الصور تشير إلى مصدرها: الأحمر للشبكة والأزرق للقرص والأخضر للذاكرة</string>
|
||||||
|
<string name="show_image_indicators_title">إظهار مؤشرات الصور</string>
|
||||||
<string name="remote_search_suggestions">اقتراحات البحث عن بعد</string>
|
<string name="remote_search_suggestions">اقتراحات البحث عن بعد</string>
|
||||||
<string name="local_search_suggestions">اقتراحات البحث المحلية</string>
|
<string name="local_search_suggestions">اقتراحات البحث المحلية</string>
|
||||||
<string name="main_page_content_swipe_remove">اسحب العناصر لإزالتها</string>
|
<string name="main_page_content_swipe_remove">اسحب العناصر لإزالتها</string>
|
||||||
|
@ -505,6 +505,8 @@
|
|||||||
<string name="preferred_player_fetcher_notification_title">Məlumat əldə edilir…</string>
|
<string name="preferred_player_fetcher_notification_title">Məlumat əldə edilir…</string>
|
||||||
<string name="show_original_time_ago_title">Elementlərdə orijinal əvvəlki vaxtı göstər</string>
|
<string name="show_original_time_ago_title">Elementlərdə orijinal əvvəlki vaxtı göstər</string>
|
||||||
<string name="enable_disposed_exceptions_title">Yaşam dövrəsi xaricindəki xətaları bildir</string>
|
<string name="enable_disposed_exceptions_title">Yaşam dövrəsi xaricindəki xətaları bildir</string>
|
||||||
|
<string name="show_image_indicators_title">Şəkil göstəricilərini göstər</string>
|
||||||
|
<string name="show_image_indicators_summary">Şəkillərin üzərində mənbəsini göstərən Picasso rəngli lentləri göstər: şəbəkə üçün qırmızı, disk üçün mavi və yaddaş üçün yaşıl</string>
|
||||||
<string name="pause_downloads_on_mobile_desc">Bəzi endirmələri dayandırmaq mümkün olmasa da, mobil dataya keçərkən faydalıdır</string>
|
<string name="pause_downloads_on_mobile_desc">Bəzi endirmələri dayandırmaq mümkün olmasa da, mobil dataya keçərkən faydalıdır</string>
|
||||||
<string name="close">Bağla</string>
|
<string name="close">Bağla</string>
|
||||||
<string name="error_progress_lost">Fayl silindiyi üçün irəliləyiş itirildi</string>
|
<string name="error_progress_lost">Fayl silindiyi üçün irəliləyiş itirildi</string>
|
||||||
|
@ -630,6 +630,8 @@
|
|||||||
<string name="faq">Перайсці на вэбсайт</string>
|
<string name="faq">Перайсці на вэбсайт</string>
|
||||||
<string name="main_page_content_swipe_remove">Правядзіце пальцам па элементах, каб выдаліць іх</string>
|
<string name="main_page_content_swipe_remove">Правядзіце пальцам па элементах, каб выдаліць іх</string>
|
||||||
<string name="unset_playlist_thumbnail">Адмяніць пастаянную мініяцюру</string>
|
<string name="unset_playlist_thumbnail">Адмяніць пастаянную мініяцюру</string>
|
||||||
|
<string name="show_image_indicators_title">Паказаць індыкатары выявы</string>
|
||||||
|
<string name="show_image_indicators_summary">Паказваць каляровыя стужкі Пікаса на выявах, якія пазначаюць іх крыніцу: чырвоная для сеткі, сіняя для дыска і зялёная для памяці</string>
|
||||||
<string name="feed_processing_message">Апрацоўка стужкі…</string>
|
<string name="feed_processing_message">Апрацоўка стужкі…</string>
|
||||||
<string name="downloads_storage_ask_summary_no_saf_notice">Вам будзе прапанавана, дзе захоўваць кожную спампоўку</string>
|
<string name="downloads_storage_ask_summary_no_saf_notice">Вам будзе прапанавана, дзе захоўваць кожную спампоўку</string>
|
||||||
<string name="feed_notification_loading">Загрузка стужкі…</string>
|
<string name="feed_notification_loading">Загрузка стужкі…</string>
|
||||||
|
@ -539,6 +539,7 @@
|
|||||||
<string name="restricted_video">Това видео е с възрастова граница.
|
<string name="restricted_video">Това видео е с възрастова граница.
|
||||||
\n
|
\n
|
||||||
\nВключете „%1$s“ в настройките ако искате да го пуснете.</string>
|
\nВключете „%1$s“ в настройките ако искате да го пуснете.</string>
|
||||||
|
<string name="show_image_indicators_summary">Показвай цветни Picasso-панделки в горната част на изображенията като индикатор за техния произход (червен – от мрежата, син – от диска и червен – от паметта)</string>
|
||||||
<string name="auto_device_theme_title">Автоматична (тази на устройството)</string>
|
<string name="auto_device_theme_title">Автоматична (тази на устройството)</string>
|
||||||
<string name="notification_scale_to_square_image_summary">Мащабиране на миниатюрата в известието от 16:9 към 1:1 формат (възможни са изкривявания)</string>
|
<string name="notification_scale_to_square_image_summary">Мащабиране на миниатюрата в известието от 16:9 към 1:1 формат (възможни са изкривявания)</string>
|
||||||
<string name="select_a_playlist">Избете плейлист</string>
|
<string name="select_a_playlist">Избете плейлист</string>
|
||||||
|
@ -589,6 +589,7 @@
|
|||||||
<string name="streams_notification_channel_name">নতুন ধারা</string>
|
<string name="streams_notification_channel_name">নতুন ধারা</string>
|
||||||
<string name="streams_notifications_interval_title">কম্পাঙ্ক দেখো</string>
|
<string name="streams_notifications_interval_title">কম্পাঙ্ক দেখো</string>
|
||||||
<string name="seekbar_preview_thumbnail_title">পূর্বদর্শন রেখার মাধ্যমে প্রাকদর্শন</string>
|
<string name="seekbar_preview_thumbnail_title">পূর্বদর্শন রেখার মাধ্যমে প্রাকদর্শন</string>
|
||||||
|
<string name="show_image_indicators_title">ছবিরূপ সূচক দেখাও</string>
|
||||||
<string name="dont_show">দেখিও না</string>
|
<string name="dont_show">দেখিও না</string>
|
||||||
<string name="any_network">যেকোনো নেটওয়ার্ক</string>
|
<string name="any_network">যেকোনো নেটওয়ার্ক</string>
|
||||||
<string name="enqueued_next">পরেরটা ক্রমে রাখা হয়েছে</string>
|
<string name="enqueued_next">পরেরটা ক্রমে রাখা হয়েছে</string>
|
||||||
|
@ -625,6 +625,7 @@
|
|||||||
<string name="dont_show">No mostris</string>
|
<string name="dont_show">No mostris</string>
|
||||||
<string name="low_quality_smaller">Baixa qualitat (més petit)</string>
|
<string name="low_quality_smaller">Baixa qualitat (més petit)</string>
|
||||||
<string name="high_quality_larger">Alta qualitat (més gran)</string>
|
<string name="high_quality_larger">Alta qualitat (més gran)</string>
|
||||||
|
<string name="show_image_indicators_title">Mostra indicadors de la imatge</string>
|
||||||
<string name="disable_media_tunneling_summary">Desactiva l\'entunelament del contingut si en els videos hi ha una pantalla negre o tartamudegen</string>
|
<string name="disable_media_tunneling_summary">Desactiva l\'entunelament del contingut si en els videos hi ha una pantalla negre o tartamudegen</string>
|
||||||
<string name="show_channel_details">Mostra detalls del canal</string>
|
<string name="show_channel_details">Mostra detalls del canal</string>
|
||||||
<string name="no_dir_yet">No s\'ha establert una carpeta de descàrregues, selecciona la carpeta per defecte ara</string>
|
<string name="no_dir_yet">No s\'ha establert una carpeta de descàrregues, selecciona la carpeta per defecte ara</string>
|
||||||
@ -668,6 +669,7 @@
|
|||||||
<string name="detail_pinned_comment_view_description">Comentari fixat</string>
|
<string name="detail_pinned_comment_view_description">Comentari fixat</string>
|
||||||
<string name="show_crash_the_player_title">Mostra \"Força el tancament del reproductor\"</string>
|
<string name="show_crash_the_player_title">Mostra \"Força el tancament del reproductor\"</string>
|
||||||
<string name="show_crash_the_player_summary">Mostra una opció de fallada quan s\'utilitza el reproductor</string>
|
<string name="show_crash_the_player_summary">Mostra una opció de fallada quan s\'utilitza el reproductor</string>
|
||||||
|
<string name="show_image_indicators_summary">Mostra les cintes de color Picasso a la part superior de les imatges que indiquen la seva font: vermell per a la xarxa, blau per al disc i verd per a la memòria</string>
|
||||||
<string name="leak_canary_not_available">El LeakCanary no està disponible</string>
|
<string name="leak_canary_not_available">El LeakCanary no està disponible</string>
|
||||||
<string name="streams_notifications_interval_title">Comprovant freqüència</string>
|
<string name="streams_notifications_interval_title">Comprovant freqüència</string>
|
||||||
<string name="streams_notifications_network_title">Es necesita una conexió a Internet</string>
|
<string name="streams_notifications_network_title">Es necesita una conexió a Internet</string>
|
||||||
|
@ -631,6 +631,8 @@
|
|||||||
<string name="dont_show">پیشان نەدرێت</string>
|
<string name="dont_show">پیشان نەدرێت</string>
|
||||||
<string name="low_quality_smaller">کواڵێتی نزم (بچووکتر)</string>
|
<string name="low_quality_smaller">کواڵێتی نزم (بچووکتر)</string>
|
||||||
<string name="high_quality_larger">کواڵێتی بەرز (گەورەتر)</string>
|
<string name="high_quality_larger">کواڵێتی بەرز (گەورەتر)</string>
|
||||||
|
<string name="show_image_indicators_summary">پیشاندانی شریتە ڕەنگکراوەکانی پیکاسۆ لەسەرووی وێنەکانەوە بۆ بەدیار خستنی سەرچاوەکانیان : سوور بۆ تۆڕ ، شین بۆ دیسک و سەوز بۆ بیرگە</string>
|
||||||
|
<string name="show_image_indicators_title">پیشاندانی دیارخەرەکانی وێنە</string>
|
||||||
<string name="remote_search_suggestions">پێشنیازکراوەکانی گەڕانی ڕیمۆت</string>
|
<string name="remote_search_suggestions">پێشنیازکراوەکانی گەڕانی ڕیمۆت</string>
|
||||||
<string name="local_search_suggestions">پێشنیازکراوەکانی گەڕانی نێوخۆیی</string>
|
<string name="local_search_suggestions">پێشنیازکراوەکانی گەڕانی نێوخۆیی</string>
|
||||||
<string name="mark_as_watched">دیارکردن وەک بینراو</string>
|
<string name="mark_as_watched">دیارکردن وەک بینراو</string>
|
||||||
|
@ -654,6 +654,8 @@
|
|||||||
<item quantity="few">%s stahování dokončena</item>
|
<item quantity="few">%s stahování dokončena</item>
|
||||||
<item quantity="other">%s stahováních dokončeno</item>
|
<item quantity="other">%s stahováních dokončeno</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
<string name="show_image_indicators_summary">Zobrazit barevné pásky Picasso na obrázcích označujících jejich zdroj: červená pro síť, modrá pro disk a zelená pro paměť</string>
|
||||||
|
<string name="show_image_indicators_title">Zobrazit indikátory obrázků</string>
|
||||||
<string name="remote_search_suggestions">Vzdálené návrhy vyhledávání</string>
|
<string name="remote_search_suggestions">Vzdálené návrhy vyhledávání</string>
|
||||||
<string name="local_search_suggestions">Lokální návrhy vyhledávání</string>
|
<string name="local_search_suggestions">Lokální návrhy vyhledávání</string>
|
||||||
<string name="start_main_player_fullscreen_summary">Pokud je vypnuté automatické otáčení, nespouštět video v mini přehrávači, ale přepnout se přímo do režimu celé obrazovky. Do mini přehrávače se lze i nadále dostat ukončením režimu celé obrazovky</string>
|
<string name="start_main_player_fullscreen_summary">Pokud je vypnuté automatické otáčení, nespouštět video v mini přehrávači, ale přepnout se přímo do režimu celé obrazovky. Do mini přehrávače se lze i nadále dostat ukončením režimu celé obrazovky</string>
|
||||||
|
@ -516,6 +516,7 @@
|
|||||||
<string name="processing_may_take_a_moment">Behandler… Det kan tage et øjeblik</string>
|
<string name="processing_may_take_a_moment">Behandler… Det kan tage et øjeblik</string>
|
||||||
<string name="show_memory_leaks">Vis hukommelseslækager</string>
|
<string name="show_memory_leaks">Vis hukommelseslækager</string>
|
||||||
<string name="disable_media_tunneling_title">Deaktivér medietunneling</string>
|
<string name="disable_media_tunneling_title">Deaktivér medietunneling</string>
|
||||||
|
<string name="show_image_indicators_title">Vis billedindikatorer</string>
|
||||||
<string name="streams_notifications_network_title">Netværkskrav</string>
|
<string name="streams_notifications_network_title">Netværkskrav</string>
|
||||||
<string name="any_network">Alle netværk</string>
|
<string name="any_network">Alle netværk</string>
|
||||||
<string name="streams_notifications_interval_title">Kontrolfrekvens</string>
|
<string name="streams_notifications_interval_title">Kontrolfrekvens</string>
|
||||||
@ -694,6 +695,7 @@
|
|||||||
<string name="faq_title">Ofte stillede spørgsmål</string>
|
<string name="faq_title">Ofte stillede spørgsmål</string>
|
||||||
<string name="faq_description">Hvis du har problemer med at bruge appen, bør du tjekke disse svar på almindelige spørgsmål!</string>
|
<string name="faq_description">Hvis du har problemer med at bruge appen, bør du tjekke disse svar på almindelige spørgsmål!</string>
|
||||||
<string name="faq">Se på webside</string>
|
<string name="faq">Se på webside</string>
|
||||||
|
<string name="show_image_indicators_summary">Vis Picasso-farvede bånd oven på billeder, der angiver deres kilde: rød for netværk, blå for disk og grøn for hukommelse</string>
|
||||||
<string name="app_update_unavailable_toast">Du kører den nyeste version af NewPipe</string>
|
<string name="app_update_unavailable_toast">Du kører den nyeste version af NewPipe</string>
|
||||||
<string name="new_seek_duration_toast">Pga. ExoPlayer-begrænsninger blev søgevarigheden sat til %d sekunder</string>
|
<string name="new_seek_duration_toast">Pga. ExoPlayer-begrænsninger blev søgevarigheden sat til %d sekunder</string>
|
||||||
<string name="feed_group_show_only_ungrouped_subscriptions">Vis kun ikke-grupperede abonnementer</string>
|
<string name="feed_group_show_only_ungrouped_subscriptions">Vis kun ikke-grupperede abonnementer</string>
|
||||||
|
@ -637,6 +637,8 @@
|
|||||||
<string name="off">Aus</string>
|
<string name="off">Aus</string>
|
||||||
<string name="mark_as_watched">Als gesehen markieren</string>
|
<string name="mark_as_watched">Als gesehen markieren</string>
|
||||||
<string name="detail_heart_img_view_description">Vom Ersteller mit Herz versehen</string>
|
<string name="detail_heart_img_view_description">Vom Ersteller mit Herz versehen</string>
|
||||||
|
<string name="show_image_indicators_summary">Farbige Picasso-Bänder über den Bildern anzeigen, die deren Quelle angeben: rot für Netzwerk, blau für Festplatte und grün für Speicher</string>
|
||||||
|
<string name="show_image_indicators_title">Bildindikatoren anzeigen</string>
|
||||||
<string name="remote_search_suggestions">Entfernte Suchvorschläge</string>
|
<string name="remote_search_suggestions">Entfernte Suchvorschläge</string>
|
||||||
<string name="local_search_suggestions">Lokale Suchvorschläge</string>
|
<string name="local_search_suggestions">Lokale Suchvorschläge</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
|
@ -634,6 +634,8 @@
|
|||||||
<string name="seekbar_preview_thumbnail_title">Προεπισκόπηση στην μπάρα αναζήτησης</string>
|
<string name="seekbar_preview_thumbnail_title">Προεπισκόπηση στην μπάρα αναζήτησης</string>
|
||||||
<string name="mark_as_watched">Σήμανση ως αναπαραχθέν</string>
|
<string name="mark_as_watched">Σήμανση ως αναπαραχθέν</string>
|
||||||
<string name="detail_heart_img_view_description">Επισημάνθηκε από τον δημιουργό</string>
|
<string name="detail_heart_img_view_description">Επισημάνθηκε από τον δημιουργό</string>
|
||||||
|
<string name="show_image_indicators_summary">Εμφάνιση χρωματιστής κορδέλας πάνω στις εικόνες, που δείχνει την πηγή τους: κόκκινη για δίκτυο, μπλε για δίσκο και πράσινο για μνήμη</string>
|
||||||
|
<string name="show_image_indicators_title">Εμφάνιση δεικτών εικόνων</string>
|
||||||
<string name="remote_search_suggestions">Προτάσεις απομακρυσμένης αναζήτησης</string>
|
<string name="remote_search_suggestions">Προτάσεις απομακρυσμένης αναζήτησης</string>
|
||||||
<string name="local_search_suggestions">Προτάσεις τοπικής αναζήτησης</string>
|
<string name="local_search_suggestions">Προτάσεις τοπικής αναζήτησης</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
|
@ -647,6 +647,8 @@
|
|||||||
<string name="comments_are_disabled">Los comentarios están deshabilitados</string>
|
<string name="comments_are_disabled">Los comentarios están deshabilitados</string>
|
||||||
<string name="detail_heart_img_view_description">De corazón por el creador</string>
|
<string name="detail_heart_img_view_description">De corazón por el creador</string>
|
||||||
<string name="mark_as_watched">Marcar como visto</string>
|
<string name="mark_as_watched">Marcar como visto</string>
|
||||||
|
<string name="show_image_indicators_summary">Mostrar cintas de colores Picasso encima de las imágenes indicando su origen: rojo para la red, azul para el disco y verde para la memoria</string>
|
||||||
|
<string name="show_image_indicators_title">Mostrar indicadores de imagen</string>
|
||||||
<string name="remote_search_suggestions">Sugerencias de búsqueda remota</string>
|
<string name="remote_search_suggestions">Sugerencias de búsqueda remota</string>
|
||||||
<string name="local_search_suggestions">Sugerencias de búsqueda local</string>
|
<string name="local_search_suggestions">Sugerencias de búsqueda local</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
|
@ -634,6 +634,8 @@
|
|||||||
\n
|
\n
|
||||||
\nNii et valik taandub sellele, mida eelistad: kiirus või täpne teave.</string>
|
\nNii et valik taandub sellele, mida eelistad: kiirus või täpne teave.</string>
|
||||||
<string name="mark_as_watched">Märgi vaadatuks</string>
|
<string name="mark_as_watched">Märgi vaadatuks</string>
|
||||||
|
<string name="show_image_indicators_summary">Näita piltide kohal Picasso värvides riba, mis märgib pildi allikat: punane tähistab võrku, sinine kohalikku andmekandjat ja roheline kohalikku mälu</string>
|
||||||
|
<string name="show_image_indicators_title">Näita piltide allikat</string>
|
||||||
<string name="remote_search_suggestions">Kaugotsingu soovitused</string>
|
<string name="remote_search_suggestions">Kaugotsingu soovitused</string>
|
||||||
<string name="local_search_suggestions">Kohaliku otsingu soovitused</string>
|
<string name="local_search_suggestions">Kohaliku otsingu soovitused</string>
|
||||||
<string name="main_page_content_swipe_remove">Üksuse eemaldamiseks viipa</string>
|
<string name="main_page_content_swipe_remove">Üksuse eemaldamiseks viipa</string>
|
||||||
|
@ -641,6 +641,8 @@
|
|||||||
<item quantity="one">Deskarga amaituta</item>
|
<item quantity="one">Deskarga amaituta</item>
|
||||||
<item quantity="other">%s Deskarga amaituta</item>
|
<item quantity="other">%s Deskarga amaituta</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
<string name="show_image_indicators_summary">Irudien gainean Picasso koloretako zintak erakutsi, jatorria adieraziz: gorria sarerako, urdina diskorako eta berdea memoriarako</string>
|
||||||
|
<string name="show_image_indicators_title">Erakutsi irudi-adierazleak</string>
|
||||||
<string name="remote_search_suggestions">Urruneko bilaketaren iradokizunak</string>
|
<string name="remote_search_suggestions">Urruneko bilaketaren iradokizunak</string>
|
||||||
<string name="local_search_suggestions">Tokiko bilaketa-iradokizunak</string>
|
<string name="local_search_suggestions">Tokiko bilaketa-iradokizunak</string>
|
||||||
<string name="mark_as_watched">Ikusi gisa markatu</string>
|
<string name="mark_as_watched">Ikusi gisa markatu</string>
|
||||||
|
@ -597,6 +597,7 @@
|
|||||||
<string name="notification_colorize_title">رنگی کردن آگاهی</string>
|
<string name="notification_colorize_title">رنگی کردن آگاهی</string>
|
||||||
<string name="open_with">گشودن با</string>
|
<string name="open_with">گشودن با</string>
|
||||||
<string name="mark_as_watched">نشانه به عنوان دیده شده</string>
|
<string name="mark_as_watched">نشانه به عنوان دیده شده</string>
|
||||||
|
<string name="show_image_indicators_summary">نمایش روبانهای رنگی پیکاسو در بالای تصویرها کهنشانگر منبعشان است: قرمز برای شبکه ، آبی برای دیسک و سبز برای حافظه</string>
|
||||||
<string name="notification_colorize_summary">درخواست از اندروید برای سفارشیسازی رنگ آگاهی براساس رنگ اصلی در بندانگشتی (توجّه داشته باشید که روی همهٔ افزارهها در دسترس نیست)</string>
|
<string name="notification_colorize_summary">درخواست از اندروید برای سفارشیسازی رنگ آگاهی براساس رنگ اصلی در بندانگشتی (توجّه داشته باشید که روی همهٔ افزارهها در دسترس نیست)</string>
|
||||||
<string name="restricted_video">این ویدیو محدود به سن است.
|
<string name="restricted_video">این ویدیو محدود به سن است.
|
||||||
\n
|
\n
|
||||||
@ -634,6 +635,7 @@
|
|||||||
<string name="detail_heart_img_view_description">قلبشده به دست ایجادگر</string>
|
<string name="detail_heart_img_view_description">قلبشده به دست ایجادگر</string>
|
||||||
<string name="local_search_suggestions">پیشنهادهای جستوجوی محلّی</string>
|
<string name="local_search_suggestions">پیشنهادهای جستوجوی محلّی</string>
|
||||||
<string name="remote_search_suggestions">پیشنهادهای جستوجوی دوردست</string>
|
<string name="remote_search_suggestions">پیشنهادهای جستوجوی دوردست</string>
|
||||||
|
<string name="show_image_indicators_title">نمایش نشانگرهای تصویر</string>
|
||||||
<plurals name="download_finished_notification">
|
<plurals name="download_finished_notification">
|
||||||
<item quantity="one">بارگیری پایان یافت</item>
|
<item quantity="one">بارگیری پایان یافت</item>
|
||||||
<item quantity="other">%s بارگیری پایان یافتند</item>
|
<item quantity="other">%s بارگیری پایان یافتند</item>
|
||||||
|
@ -634,6 +634,8 @@
|
|||||||
<string name="no_dir_yet">Latauskansiota ei vielä asetettu, valitse ensin oletuslatauskansio</string>
|
<string name="no_dir_yet">Latauskansiota ei vielä asetettu, valitse ensin oletuslatauskansio</string>
|
||||||
<string name="comments_are_disabled">Kommentit poistettu käytöstä</string>
|
<string name="comments_are_disabled">Kommentit poistettu käytöstä</string>
|
||||||
<string name="mark_as_watched">Merkitse katsotuksi</string>
|
<string name="mark_as_watched">Merkitse katsotuksi</string>
|
||||||
|
<string name="show_image_indicators_summary">Näytä Picasso-värjätyt nauhat kuvien päällä osoittaakseen lähteen: punainen tarkoittaa verkkoa, sininen tarkoittaa levytilaa ja vihreä tarkoittaa muistia</string>
|
||||||
|
<string name="show_image_indicators_title">Näytä kuvailmaisimet</string>
|
||||||
<string name="remote_search_suggestions">Etähakuehdotukset</string>
|
<string name="remote_search_suggestions">Etähakuehdotukset</string>
|
||||||
<string name="local_search_suggestions">Paikalliset hakuehdotukset</string>
|
<string name="local_search_suggestions">Paikalliset hakuehdotukset</string>
|
||||||
<string name="enqueue_next_stream">Lisää seuraavaksi</string>
|
<string name="enqueue_next_stream">Lisää seuraavaksi</string>
|
||||||
|
@ -646,8 +646,10 @@
|
|||||||
<string name="seekbar_preview_thumbnail_title">Prévisualisation de la barre de progression sur la miniature</string>
|
<string name="seekbar_preview_thumbnail_title">Prévisualisation de la barre de progression sur la miniature</string>
|
||||||
<string name="mark_as_watched">Marquer comme visionné</string>
|
<string name="mark_as_watched">Marquer comme visionné</string>
|
||||||
<string name="detail_heart_img_view_description">Apprécié par le créateur</string>
|
<string name="detail_heart_img_view_description">Apprécié par le créateur</string>
|
||||||
|
<string name="show_image_indicators_title">Afficher les indicateurs d’image</string>
|
||||||
<string name="remote_search_suggestions">Suggestions de recherche distante</string>
|
<string name="remote_search_suggestions">Suggestions de recherche distante</string>
|
||||||
<string name="local_search_suggestions">Suggestions de recherche locale</string>
|
<string name="local_search_suggestions">Suggestions de recherche locale</string>
|
||||||
|
<string name="show_image_indicators_summary">Affiche les rubans colorés de Picasso au-dessus des images indiquant leur source : rouge pour le réseau, bleu pour le disque et vert pour la mémoire</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
<item quantity="one">%1$s téléchargement supprimé</item>
|
<item quantity="one">%1$s téléchargement supprimé</item>
|
||||||
<item quantity="many">%1$s téléchargements supprimés</item>
|
<item quantity="many">%1$s téléchargements supprimés</item>
|
||||||
|
@ -627,6 +627,7 @@
|
|||||||
<item quantity="other">%s descargas finalizadas</item>
|
<item quantity="other">%s descargas finalizadas</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="seekbar_preview_thumbnail_title">Miniatura na barra de busca</string>
|
<string name="seekbar_preview_thumbnail_title">Miniatura na barra de busca</string>
|
||||||
|
<string name="show_image_indicators_title">Mostrar indicadores de imaxe</string>
|
||||||
<string name="disable_media_tunneling_summary">Desactive o túnel multimedia se experimentar unha pantalla en negro ou interrupcións na reprodución.</string>
|
<string name="disable_media_tunneling_summary">Desactive o túnel multimedia se experimentar unha pantalla en negro ou interrupcións na reprodución.</string>
|
||||||
<string name="disable_media_tunneling_title">Desactivar túnel multimedia</string>
|
<string name="disable_media_tunneling_title">Desactivar túnel multimedia</string>
|
||||||
<string name="enqueued">Engadido á cola</string>
|
<string name="enqueued">Engadido á cola</string>
|
||||||
@ -663,6 +664,7 @@
|
|||||||
<string name="downloads_storage_use_saf_summary_api_29">A partir do Android 10, só o \'Sistema de Acceso ao Almacenamento\' está soportado</string>
|
<string name="downloads_storage_use_saf_summary_api_29">A partir do Android 10, só o \'Sistema de Acceso ao Almacenamento\' está soportado</string>
|
||||||
<string name="processing_may_take_a_moment">Procesando... Pode devagar un momento</string>
|
<string name="processing_may_take_a_moment">Procesando... Pode devagar un momento</string>
|
||||||
<string name="create_error_notification">Crear unha notificación de erro</string>
|
<string name="create_error_notification">Crear unha notificación de erro</string>
|
||||||
|
<string name="show_image_indicators_summary">Amosar fitas coloridas de Picasso na cima das imaxes que indican a súa fonte: vermello para a rede, azul para o disco e verde para a memoria</string>
|
||||||
<string name="feed_new_items">Novos elementos</string>
|
<string name="feed_new_items">Novos elementos</string>
|
||||||
<string name="progressive_load_interval_exoplayer_default">Predefinido do ExoPlayer</string>
|
<string name="progressive_load_interval_exoplayer_default">Predefinido do ExoPlayer</string>
|
||||||
<string name="show_crash_the_player_title">Amosar \"Travar o reprodutor\"</string>
|
<string name="show_crash_the_player_title">Amosar \"Travar o reprodutor\"</string>
|
||||||
|
@ -654,6 +654,8 @@
|
|||||||
<string name="seekbar_preview_thumbnail_title">תמונה מוקטנת בסרגל הנגינה</string>
|
<string name="seekbar_preview_thumbnail_title">תמונה מוקטנת בסרגל הנגינה</string>
|
||||||
<string name="detail_heart_img_view_description">סומן בלב על ידי היוצר</string>
|
<string name="detail_heart_img_view_description">סומן בלב על ידי היוצר</string>
|
||||||
<string name="mark_as_watched">סימון כנצפה</string>
|
<string name="mark_as_watched">סימון כנצפה</string>
|
||||||
|
<string name="show_image_indicators_summary">הצגת סרטים בסגנון פיקאסו בראש התמונות לציון המקור שלהם: אדום זה מהרשת, כחול מהכונן וירוק מהזיכרון</string>
|
||||||
|
<string name="show_image_indicators_title">הצגת מחווני תמונות</string>
|
||||||
<string name="remote_search_suggestions">הצעות חיפוש מרוחקות</string>
|
<string name="remote_search_suggestions">הצעות חיפוש מרוחקות</string>
|
||||||
<string name="local_search_suggestions">הצעות חיפוש מקומיות</string>
|
<string name="local_search_suggestions">הצעות חיפוש מקומיות</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
|
@ -570,6 +570,7 @@
|
|||||||
<string name="enqueued">कतारबद्ध हुआ</string>
|
<string name="enqueued">कतारबद्ध हुआ</string>
|
||||||
<string name="loading_stream_details">स्ट्रीम विवरण लोड हो रहे हैं…</string>
|
<string name="loading_stream_details">स्ट्रीम विवरण लोड हो रहे हैं…</string>
|
||||||
<string name="processing_may_take_a_moment">प्रोसेस हो रहा है… कुछ समय लग सकता है</string>
|
<string name="processing_may_take_a_moment">प्रोसेस हो रहा है… कुछ समय लग सकता है</string>
|
||||||
|
<string name="show_image_indicators_title">छवि संकेतक दिखाएं</string>
|
||||||
<string name="show_crash_the_player_summary">प्लेयर का उपयोग करते समय क्रैश विकल्प दिखाता है</string>
|
<string name="show_crash_the_player_summary">प्लेयर का उपयोग करते समय क्रैश विकल्प दिखाता है</string>
|
||||||
<string name="check_new_streams">नई स्ट्रीमों के लिए जांच चलाएं</string>
|
<string name="check_new_streams">नई स्ट्रीमों के लिए जांच चलाएं</string>
|
||||||
<string name="show_error_snackbar">एक त्रुटि स्नैकबार दिखाएं</string>
|
<string name="show_error_snackbar">एक त्रुटि स्नैकबार दिखाएं</string>
|
||||||
@ -667,6 +668,7 @@
|
|||||||
<string name="leak_canary_not_available">लीक-कैनरी उपलब्ध नहीं है</string>
|
<string name="leak_canary_not_available">लीक-कैनरी उपलब्ध नहीं है</string>
|
||||||
<string name="error_report_notification_toast">एक त्रुटी हुई है, नोटीफिकेशन देखें</string>
|
<string name="error_report_notification_toast">एक त्रुटी हुई है, नोटीफिकेशन देखें</string>
|
||||||
<string name="disable_media_tunneling_summary">यदि वीडियो प्लेबैक पर आप काली स्क्रीन या रुक-रुक कर वीडियो चलने का अनुभव करते हैं तो मीडिया टनलिंग को अक्षम करें।</string>
|
<string name="disable_media_tunneling_summary">यदि वीडियो प्लेबैक पर आप काली स्क्रीन या रुक-रुक कर वीडियो चलने का अनुभव करते हैं तो मीडिया टनलिंग को अक्षम करें।</string>
|
||||||
|
<string name="show_image_indicators_summary">छवियों के शीर्ष पर पिकासो रंगीन रिबन दिखाएँ जो उनके स्रोत को दर्शाता है: नेटवर्क के लिए लाल, डिस्क के लिए नीला और मेमोरी के लिए हरा</string>
|
||||||
<string name="create_error_notification">त्रुटी की नोटीफिकेशन बनाएं</string>
|
<string name="create_error_notification">त्रुटी की नोटीफिकेशन बनाएं</string>
|
||||||
<string name="error_download_resource_gone">इस डाउनलोड को पुनर्प्राप्त नहीं किया जा सकता</string>
|
<string name="error_download_resource_gone">इस डाउनलोड को पुनर्प्राप्त नहीं किया जा सकता</string>
|
||||||
<string name="no_dir_yet">अभी तक कोई डाउनलोड फ़ोल्डर सेट नहीं किया गया है, अब डिफ़ॉल्ट डाउनलोड फ़ोल्डर चुनें</string>
|
<string name="no_dir_yet">अभी तक कोई डाउनलोड फ़ोल्डर सेट नहीं किया गया है, अब डिफ़ॉल्ट डाउनलोड फ़ोल्डर चुनें</string>
|
||||||
|
@ -646,6 +646,7 @@
|
|||||||
<string name="service_provides_reason">%s pruža ovaj razlog:</string>
|
<string name="service_provides_reason">%s pruža ovaj razlog:</string>
|
||||||
<string name="processing_may_take_a_moment">Obrada u tijeku … Može malo potrajati</string>
|
<string name="processing_may_take_a_moment">Obrada u tijeku … Može malo potrajati</string>
|
||||||
<string name="main_page_content_swipe_remove">Za ukljanjanje stavki povuci ih</string>
|
<string name="main_page_content_swipe_remove">Za ukljanjanje stavki povuci ih</string>
|
||||||
|
<string name="show_image_indicators_title">Prikaži indikatore slike</string>
|
||||||
<plurals name="download_finished_notification">
|
<plurals name="download_finished_notification">
|
||||||
<item quantity="one">Preuzimanje je gotovo</item>
|
<item quantity="one">Preuzimanje je gotovo</item>
|
||||||
<item quantity="few">%s preuzimanja su gotova</item>
|
<item quantity="few">%s preuzimanja su gotova</item>
|
||||||
@ -654,6 +655,7 @@
|
|||||||
<string name="start_main_player_fullscreen_title">Pokreni glavni player u cjeloekranskom prikazu</string>
|
<string name="start_main_player_fullscreen_title">Pokreni glavni player u cjeloekranskom prikazu</string>
|
||||||
<string name="enqueue_next_stream">Dodaj u popis kao sljedeći</string>
|
<string name="enqueue_next_stream">Dodaj u popis kao sljedeći</string>
|
||||||
<string name="enqueued_next">Dodano u popis kao sljedeći</string>
|
<string name="enqueued_next">Dodano u popis kao sljedeći</string>
|
||||||
|
<string name="show_image_indicators_summary">Prikaži Picassove vrpce u boji na slikama koje označavaju njihov izvor: crvena za mrežu, plava za disk i zelena za memoriju</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
<item quantity="one">Izbrisano %1$s preuzimanje</item>
|
<item quantity="one">Izbrisano %1$s preuzimanje</item>
|
||||||
<item quantity="few">Izbrisana %1$s preuzimanja</item>
|
<item quantity="few">Izbrisana %1$s preuzimanja</item>
|
||||||
|
@ -570,6 +570,7 @@
|
|||||||
<string name="enable_disposed_exceptions_summary">Az eltávolítás utáni, fragment vagy activity életcikluson kívüli, nem kézbesíthető Rx kivételek jelentésének kényszerítése</string>
|
<string name="enable_disposed_exceptions_summary">Az eltávolítás utáni, fragment vagy activity életcikluson kívüli, nem kézbesíthető Rx kivételek jelentésének kényszerítése</string>
|
||||||
<string name="show_original_time_ago_title">Eredeti „ennyi ideje” megjelenítése az elemeken</string>
|
<string name="show_original_time_ago_title">Eredeti „ennyi ideje” megjelenítése az elemeken</string>
|
||||||
<string name="disable_media_tunneling_summary">Tiltsa le a médiacsatornázást, ha fekete képernyőt vagy akadozást tapasztal videólejátszáskor.</string>
|
<string name="disable_media_tunneling_summary">Tiltsa le a médiacsatornázást, ha fekete képernyőt vagy akadozást tapasztal videólejátszáskor.</string>
|
||||||
|
<string name="show_image_indicators_summary">Picasso színes szalagok megjelenítése a képek fölött, megjelölve a forrásukat: piros a hálózathoz, kék a lemezhez, zöld a memóriához</string>
|
||||||
<string name="downloads_storage_ask_summary_no_saf_notice">Minden letöltésnél meg fogja kérdezni, hogy hova mentse el</string>
|
<string name="downloads_storage_ask_summary_no_saf_notice">Minden letöltésnél meg fogja kérdezni, hogy hova mentse el</string>
|
||||||
<string name="choose_instance_prompt">Válasszon egy példányt</string>
|
<string name="choose_instance_prompt">Válasszon egy példányt</string>
|
||||||
<string name="feed_oldest_subscription_update">Lista legutóbbi frissítése: %s</string>
|
<string name="feed_oldest_subscription_update">Lista legutóbbi frissítése: %s</string>
|
||||||
@ -656,6 +657,7 @@
|
|||||||
\nBiztos benne\? Ez nem vonható vissza!</string>
|
\nBiztos benne\? Ez nem vonható vissza!</string>
|
||||||
<string name="show_original_time_ago_summary">A szolgáltatásokból származó eredeti szövegek láthatók lesznek a közvetítési elemeken</string>
|
<string name="show_original_time_ago_summary">A szolgáltatásokból származó eredeti szövegek láthatók lesznek a közvetítési elemeken</string>
|
||||||
<string name="crash_the_player">Lejátszó összeomlasztása</string>
|
<string name="crash_the_player">Lejátszó összeomlasztása</string>
|
||||||
|
<string name="show_image_indicators_title">Képjelölők megjelenítése</string>
|
||||||
<string name="show_crash_the_player_title">A „lejátszó összeomlasztása” lehetőség megjelenítése</string>
|
<string name="show_crash_the_player_title">A „lejátszó összeomlasztása” lehetőség megjelenítése</string>
|
||||||
<string name="show_crash_the_player_summary">Megjeleníti az összeomlasztási lehetőséget a lejátszó használatakor</string>
|
<string name="show_crash_the_player_summary">Megjeleníti az összeomlasztási lehetőséget a lejátszó használatakor</string>
|
||||||
<string name="unhook_checkbox">Hangmagasság megtartása (torzítást okozhat)</string>
|
<string name="unhook_checkbox">Hangmagasság megtartása (torzítást okozhat)</string>
|
||||||
|
@ -631,11 +631,13 @@
|
|||||||
<string name="detail_heart_img_view_description">Disukai oleh kreator</string>
|
<string name="detail_heart_img_view_description">Disukai oleh kreator</string>
|
||||||
<string name="local_search_suggestions">Saran pencarian lokal</string>
|
<string name="local_search_suggestions">Saran pencarian lokal</string>
|
||||||
<string name="remote_search_suggestions">Saran pencarian remote</string>
|
<string name="remote_search_suggestions">Saran pencarian remote</string>
|
||||||
|
<string name="show_image_indicators_title">Tampilkan indikator gambar</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
<item quantity="other">Menghapus %1$s unduhan</item>
|
<item quantity="other">Menghapus %1$s unduhan</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="enqueue_next_stream">tambahkan ke selanjutnya</string>
|
<string name="enqueue_next_stream">tambahkan ke selanjutnya</string>
|
||||||
<string name="enqueued_next">telah ditambahkan ke selanjutnya</string>
|
<string name="enqueued_next">telah ditambahkan ke selanjutnya</string>
|
||||||
|
<string name="show_image_indicators_summary">Tampilkan Ribon bewarna Picasso di atas gambar yang mengindikasikan asalnya: merah untuk jaringan, biru untuk disk dan hijau untuk memori</string>
|
||||||
<string name="start_main_player_fullscreen_summary">Jangan memulai memutar video di mini player, tapi nyalakan langsung di mode layar penuh, jika rotasi otomatis terkunci. Anda tetap dapat mengakses mini player dengan keluar dari layar penuh</string>
|
<string name="start_main_player_fullscreen_summary">Jangan memulai memutar video di mini player, tapi nyalakan langsung di mode layar penuh, jika rotasi otomatis terkunci. Anda tetap dapat mengakses mini player dengan keluar dari layar penuh</string>
|
||||||
<string name="processing_may_take_a_moment">Memproses… Mungkin butuh waktu sebentar</string>
|
<string name="processing_may_take_a_moment">Memproses… Mungkin butuh waktu sebentar</string>
|
||||||
<string name="check_for_updates">Periksa Pembaruan</string>
|
<string name="check_for_updates">Periksa Pembaruan</string>
|
||||||
|
@ -657,6 +657,8 @@
|
|||||||
<string name="show_original_time_ago_summary">Upprunalegir textar frá þjónustu verða sýnilegir í atriðum</string>
|
<string name="show_original_time_ago_summary">Upprunalegir textar frá þjónustu verða sýnilegir í atriðum</string>
|
||||||
<string name="disable_media_tunneling_title">Slökkva á fjölmiðlagöngum</string>
|
<string name="disable_media_tunneling_title">Slökkva á fjölmiðlagöngum</string>
|
||||||
<string name="disable_media_tunneling_summary">Slökktu á fjölmiðlagöngum ef þú finnur fyrir svörtum skjá eða stami við spilun myndbandar</string>
|
<string name="disable_media_tunneling_summary">Slökktu á fjölmiðlagöngum ef þú finnur fyrir svörtum skjá eða stami við spilun myndbandar</string>
|
||||||
|
<string name="show_image_indicators_title">Sýna myndvísa</string>
|
||||||
|
<string name="show_image_indicators_summary">Sýna Picasso litaða borða ofan á myndum sem gefa til kynna uppruna þeirra: rauðan fyrir netið, bláan fyrir disk og grænan fyrir minni</string>
|
||||||
<string name="show_crash_the_player_title">Sýna „Hrynja spilara“</string>
|
<string name="show_crash_the_player_title">Sýna „Hrynja spilara“</string>
|
||||||
<string name="show_crash_the_player_summary">Sýna valkost til að hrynja spilara</string>
|
<string name="show_crash_the_player_summary">Sýna valkost til að hrynja spilara</string>
|
||||||
<string name="crash_the_app">Hrynja forrit</string>
|
<string name="crash_the_app">Hrynja forrit</string>
|
||||||
|
@ -644,6 +644,8 @@
|
|||||||
<string name="comments_are_disabled">Commenti disattivati</string>
|
<string name="comments_are_disabled">Commenti disattivati</string>
|
||||||
<string name="detail_heart_img_view_description">Apprezzato dall\'autore</string>
|
<string name="detail_heart_img_view_description">Apprezzato dall\'autore</string>
|
||||||
<string name="mark_as_watched">Segna come visto</string>
|
<string name="mark_as_watched">Segna come visto</string>
|
||||||
|
<string name="show_image_indicators_summary">Mostra gli indicatori colorati Picasso sopra le immagini, per indicare la loro fonte: rosso per la rete, blu per il disco e verde per la memoria</string>
|
||||||
|
<string name="show_image_indicators_title">Mostra indicatori immagine</string>
|
||||||
<string name="remote_search_suggestions">Suggerimenti di ricerca remoti</string>
|
<string name="remote_search_suggestions">Suggerimenti di ricerca remoti</string>
|
||||||
<string name="local_search_suggestions">Suggerimenti di ricerca locali</string>
|
<string name="local_search_suggestions">Suggerimenti di ricerca locali</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
|
@ -634,6 +634,8 @@
|
|||||||
<plurals name="download_finished_notification">
|
<plurals name="download_finished_notification">
|
||||||
<item quantity="other">%s つのダウンロードが完了しました</item>
|
<item quantity="other">%s つのダウンロードが完了しました</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
<string name="show_image_indicators_summary">ピカソは、画像の上に、画像の出所を識別する色彩記章を表示します: 赤はネットワーク、青はディスク、緑はメモリ</string>
|
||||||
|
<string name="show_image_indicators_title">画像に標識を表示</string>
|
||||||
<string name="processing_may_take_a_moment">処理中… 少し時間がかかるかもしれません</string>
|
<string name="processing_may_take_a_moment">処理中… 少し時間がかかるかもしれません</string>
|
||||||
<string name="manual_update_description">新しいバージョンを手動で確認します</string>
|
<string name="manual_update_description">新しいバージョンを手動で確認します</string>
|
||||||
<string name="checking_updates_toast">アップデートを確認中…</string>
|
<string name="checking_updates_toast">アップデートを確認中…</string>
|
||||||
|
@ -384,6 +384,7 @@
|
|||||||
<string name="show_original_time_ago_summary">ორიგინალური ტექსტები სერვისებიდან ხილული იქნება ნაკადის ერთეულებში</string>
|
<string name="show_original_time_ago_summary">ორიგინალური ტექსტები სერვისებიდან ხილული იქნება ნაკადის ერთეულებში</string>
|
||||||
<string name="disable_media_tunneling_title">მედია გვირაბის გათიშვა</string>
|
<string name="disable_media_tunneling_title">მედია გვირაბის გათიშვა</string>
|
||||||
<string name="disable_media_tunneling_summary">გამორთეთ მედია გვირაბი, თუ ვიდეოს დაკვრისას შავი ეკრანი ან ჭუჭყი გაქვთ</string>
|
<string name="disable_media_tunneling_summary">გამორთეთ მედია გვირაბი, თუ ვიდეოს დაკვრისას შავი ეკრანი ან ჭუჭყი გაქვთ</string>
|
||||||
|
<string name="show_image_indicators_title">გამოსახულების ინდიკატორების ჩვენება</string>
|
||||||
<string name="show_crash_the_player_title">აჩვენე \"დამკვრელის დამსხვრევა\"</string>
|
<string name="show_crash_the_player_title">აჩვენე \"დამკვრელის დამსხვრევა\"</string>
|
||||||
<string name="show_crash_the_player_summary">აჩვენებს ავარიის ვარიანტს დამკვრელის გამოყენებისას</string>
|
<string name="show_crash_the_player_summary">აჩვენებს ავარიის ვარიანტს დამკვრელის გამოყენებისას</string>
|
||||||
<string name="check_new_streams">გაუშვით შემოწმება ახალი ნაკადებისთვის</string>
|
<string name="check_new_streams">გაუშვით შემოწმება ახალი ნაკადებისთვის</string>
|
||||||
@ -682,6 +683,7 @@
|
|||||||
<string name="subscriptions_import_unsuccessful">გამოწერების იმპორტი ვერ მოხერხდა</string>
|
<string name="subscriptions_import_unsuccessful">გამოწერების იმპორტი ვერ მოხერხდა</string>
|
||||||
<string name="enable_disposed_exceptions_title">შეატყობინეთ სასიცოცხლო ციკლის შეცდომებს</string>
|
<string name="enable_disposed_exceptions_title">შეატყობინეთ სასიცოცხლო ციკლის შეცდომებს</string>
|
||||||
<string name="enable_disposed_exceptions_summary">იძულებითი მოხსენება შეუსაბამო Rx გამონაკლისების შესახებ ფრაგმენტის ან აქტივობის სასიცოცხლო ციკლის გარეთ განკარგვის შემდეგ</string>
|
<string name="enable_disposed_exceptions_summary">იძულებითი მოხსენება შეუსაბამო Rx გამონაკლისების შესახებ ფრაგმენტის ან აქტივობის სასიცოცხლო ციკლის გარეთ განკარგვის შემდეგ</string>
|
||||||
|
<string name="show_image_indicators_summary">აჩვენეთ პიკასოს ფერადი ლენტები სურათების თავზე, სადაც მითითებულია მათი წყარო: წითელი ქსელისთვის, ლურჯი დისკისთვის და მწვანე მეხსიერებისთვის</string>
|
||||||
<string name="feed_load_error_fast_unknown">სწრაფი კვების რეჟიმი ამაზე მეტ ინფორმაციას არ იძლევა.</string>
|
<string name="feed_load_error_fast_unknown">სწრაფი კვების რეჟიმი ამაზე მეტ ინფორმაციას არ იძლევა.</string>
|
||||||
<string name="feed_load_error_account_info">„%s“-ის არხის ჩატვირთვა ვერ მოხერხდა.</string>
|
<string name="feed_load_error_account_info">„%s“-ის არხის ჩატვირთვა ვერ მოხერხდა.</string>
|
||||||
<string name="feed_use_dedicated_fetch_method_summary">ხელმისაწვდომია ზოგიერთ სერვისში, როგორც წესი, ბევრად უფრო სწრაფია, მაგრამ შეიძლება დააბრუნოს შეზღუდული რაოდენობის ელემენტი და ხშირად არასრული ინფორმაცია (მაგ. ხანგრძლივობის გარეშე, ელემენტის ტიპი, არ არის ლაივის სტატუსი)</string>
|
<string name="feed_use_dedicated_fetch_method_summary">ხელმისაწვდომია ზოგიერთ სერვისში, როგორც წესი, ბევრად უფრო სწრაფია, მაგრამ შეიძლება დააბრუნოს შეზღუდული რაოდენობის ელემენტი და ხშირად არასრული ინფორმაცია (მაგ. ხანგრძლივობის გარეშე, ელემენტის ტიპი, არ არის ლაივის სტატუსი)</string>
|
||||||
|
@ -545,6 +545,8 @@
|
|||||||
<string name="disable_media_tunneling_title">미디어 터널링 비활성화</string>
|
<string name="disable_media_tunneling_title">미디어 터널링 비활성화</string>
|
||||||
<string name="show_original_time_ago_summary">서비스의 원본 텍스트가 스트림 항목에 표시됩니다</string>
|
<string name="show_original_time_ago_summary">서비스의 원본 텍스트가 스트림 항목에 표시됩니다</string>
|
||||||
<string name="disable_media_tunneling_summary">동영상 재생 시 검은 화면이 나타나거나 끊김 현상이 발생하면 미디어 터널링을 비활성화하세요.</string>
|
<string name="disable_media_tunneling_summary">동영상 재생 시 검은 화면이 나타나거나 끊김 현상이 발생하면 미디어 터널링을 비활성화하세요.</string>
|
||||||
|
<string name="show_image_indicators_title">이미지 표시기 표시</string>
|
||||||
|
<string name="show_image_indicators_summary">원본을 나타내는 이미지 위에 피카소 컬러 리본 표시: 네트워크는 빨간색, 디스크는 파란색, 메모리는 녹색</string>
|
||||||
<string name="show_crash_the_player_title">\"플레이어 충돌\" 표시</string>
|
<string name="show_crash_the_player_title">\"플레이어 충돌\" 표시</string>
|
||||||
<string name="show_crash_the_player_summary">플레이어를 사용할 때 충돌 옵션을 표시합니다</string>
|
<string name="show_crash_the_player_summary">플레이어를 사용할 때 충돌 옵션을 표시합니다</string>
|
||||||
<string name="check_new_streams">새로운 스트림 확인 실행</string>
|
<string name="check_new_streams">새로운 스트림 확인 실행</string>
|
||||||
|
@ -644,6 +644,8 @@
|
|||||||
<string name="dont_show">Nerodyti</string>
|
<string name="dont_show">Nerodyti</string>
|
||||||
<string name="detail_heart_img_view_description">Širdelė nuo kurėjo</string>
|
<string name="detail_heart_img_view_description">Širdelė nuo kurėjo</string>
|
||||||
<string name="mark_as_watched">Pažymėti kaip peržiūrėtą</string>
|
<string name="mark_as_watched">Pažymėti kaip peržiūrėtą</string>
|
||||||
|
<string name="show_image_indicators_summary">Rodyti „Picasso“ spalvotas juosteles ant vaizdų, nurodančių jų šaltinį: raudona tinklui, mėlyna diskui ir žalia atmintis</string>
|
||||||
|
<string name="show_image_indicators_title">Rodyti vaizdo indikatorius</string>
|
||||||
<string name="remote_search_suggestions">Nuotolinės paieškos pasiūlymai</string>
|
<string name="remote_search_suggestions">Nuotolinės paieškos pasiūlymai</string>
|
||||||
<string name="local_search_suggestions">Vietinės paieškos pasiūlymai</string>
|
<string name="local_search_suggestions">Vietinės paieškos pasiūlymai</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
|
@ -625,10 +625,12 @@
|
|||||||
<string name="start_main_player_fullscreen_summary">Nesākt video atskaņošanu samazinātā režīmā, bet pilnekrāna režīmā, ja automātiskā rotācija ir izslēgta</string>
|
<string name="start_main_player_fullscreen_summary">Nesākt video atskaņošanu samazinātā režīmā, bet pilnekrāna režīmā, ja automātiskā rotācija ir izslēgta</string>
|
||||||
<string name="disable_media_tunneling_title">Izslēgt multivides tuneļošanu</string>
|
<string name="disable_media_tunneling_title">Izslēgt multivides tuneļošanu</string>
|
||||||
<string name="disable_media_tunneling_summary">Izslēdziet multivides tuneļošanu, ja jums video atskaņošanas laikā parādās melns ekrāns vai aizķeršanās</string>
|
<string name="disable_media_tunneling_summary">Izslēdziet multivides tuneļošanu, ja jums video atskaņošanas laikā parādās melns ekrāns vai aizķeršanās</string>
|
||||||
|
<string name="show_image_indicators_summary">Rādīt krāsainas lentes virs attēliem, norādot to avotu: sarkana - tīkls, zila - disks, zaļa - atmiņa</string>
|
||||||
<string name="description_select_enable">Ieslēgt teksta atlasīšanu video aprakstā</string>
|
<string name="description_select_enable">Ieslēgt teksta atlasīšanu video aprakstā</string>
|
||||||
<string name="no_dir_yet">Lejupielādes mape vēl nav iestatīta, izvēlieties noklusējuma lejupielādes mapi</string>
|
<string name="no_dir_yet">Lejupielādes mape vēl nav iestatīta, izvēlieties noklusējuma lejupielādes mapi</string>
|
||||||
<string name="main_page_content_swipe_remove">Pārvelciet objektus, lai tos noņemtu</string>
|
<string name="main_page_content_swipe_remove">Pārvelciet objektus, lai tos noņemtu</string>
|
||||||
<string name="local_search_suggestions">Lokālie meklēšanas ieteikumi</string>
|
<string name="local_search_suggestions">Lokālie meklēšanas ieteikumi</string>
|
||||||
|
<string name="show_image_indicators_title">Rādīt attēlu indikatorus</string>
|
||||||
<string name="high_quality_larger">Augstas kvalitātes (lielāks)</string>
|
<string name="high_quality_larger">Augstas kvalitātes (lielāks)</string>
|
||||||
<string name="check_for_updates">Pārbaudīt atjauninājumus</string>
|
<string name="check_for_updates">Pārbaudīt atjauninājumus</string>
|
||||||
<string name="manual_update_description">Manuāli pārbaudīt, vai ir atjauninājumi</string>
|
<string name="manual_update_description">Manuāli pārbaudīt, vai ir atjauninājumi</string>
|
||||||
|
@ -595,6 +595,7 @@
|
|||||||
<string name="notification_action_1_title">രണ്ടാം പ്രവർത്തന ബട്ടൺ</string>
|
<string name="notification_action_1_title">രണ്ടാം പ്രവർത്തന ബട്ടൺ</string>
|
||||||
<string name="notification_action_0_title">ആദ്യ പ്രവർത്തന ബട്ടൺ</string>
|
<string name="notification_action_0_title">ആദ്യ പ്രവർത്തന ബട്ടൺ</string>
|
||||||
<string name="disable_media_tunneling_summary">വീഡിയോ കാണുമ്പോൾ കറുത്ത സ്ക്രീൻ, അവ്യക്തത അനുഭവിക്കുന്നു എങ്കിൽ മീഡിയ ട്യൂൺലിങ് പ്രവർത്തനരഹിതമാക്കുക</string>
|
<string name="disable_media_tunneling_summary">വീഡിയോ കാണുമ്പോൾ കറുത്ത സ്ക്രീൻ, അവ്യക്തത അനുഭവിക്കുന്നു എങ്കിൽ മീഡിയ ട്യൂൺലിങ് പ്രവർത്തനരഹിതമാക്കുക</string>
|
||||||
|
<string name="show_image_indicators_summary">ഉറവിടം തിരിച്ചറിയാൻ പിക്കാസോ കളർഡ് റിബൺ ചിത്രങ്ങളുടെ മുകളിൽ കാണിക്കുക: നെറ്റ്വർക്കിന് ചുവപ്പ്, ഡിസ്കിനു നീല, മെമ്മറിയിക്ക് പച്ച</string>
|
||||||
<string name="seekbar_preview_thumbnail_title">സീക്ബാർ ചെറുചിത്രം പ്രദർശനം</string>
|
<string name="seekbar_preview_thumbnail_title">സീക്ബാർ ചെറുചിത്രം പ്രദർശനം</string>
|
||||||
<string name="detail_heart_img_view_description">സ്നേഹത്തോടെ സൃഷ്ടാവ്</string>
|
<string name="detail_heart_img_view_description">സ്നേഹത്തോടെ സൃഷ്ടാവ്</string>
|
||||||
<string name="description_select_disable">ഡിസ്ക്രിപ്ഷനിലെ ടെക്സ്റ്റ് സെലക്ട് ചെയ്യുവാൻ അനുവദിക്കാതെ ഇരിക്കുക</string>
|
<string name="description_select_disable">ഡിസ്ക്രിപ്ഷനിലെ ടെക്സ്റ്റ് സെലക്ട് ചെയ്യുവാൻ അനുവദിക്കാതെ ഇരിക്കുക</string>
|
||||||
@ -629,6 +630,7 @@
|
|||||||
<string name="dont_show">കാണിക്കരുത്</string>
|
<string name="dont_show">കാണിക്കരുത്</string>
|
||||||
<string name="low_quality_smaller">കുറഞ്ഞ നിലവാരം (ചെറുത് )</string>
|
<string name="low_quality_smaller">കുറഞ്ഞ നിലവാരം (ചെറുത് )</string>
|
||||||
<string name="high_quality_larger">ഉയർന്ന നിലവാരം (വലിയത് )</string>
|
<string name="high_quality_larger">ഉയർന്ന നിലവാരം (വലിയത് )</string>
|
||||||
|
<string name="show_image_indicators_title">ഇമേജ് ഇൻഡിക്കേറ്ററുകൾ കാണിക്കുക</string>
|
||||||
<string name="disable_media_tunneling_title">മീഡിയ ട്യൂൺലിങ് പ്രവർത്തനരഹിതമാക്കുക</string>
|
<string name="disable_media_tunneling_title">മീഡിയ ട്യൂൺലിങ് പ്രവർത്തനരഹിതമാക്കുക</string>
|
||||||
<string name="no_dir_yet">ഡൌൺലോഡ് ഫോൾഡർ ഇത് വരെയും സെറ്റ് ചെയ്തിട്ടില്ല, സ്ഥിര ഡൌൺലോഡ് ഫോൾഡർ ഇപ്പോൾ തിരഞ്ഞെക്കുക</string>
|
<string name="no_dir_yet">ഡൌൺലോഡ് ഫോൾഡർ ഇത് വരെയും സെറ്റ് ചെയ്തിട്ടില്ല, സ്ഥിര ഡൌൺലോഡ് ഫോൾഡർ ഇപ്പോൾ തിരഞ്ഞെക്കുക</string>
|
||||||
<string name="comments_are_disabled">അഭിപ്രായങ്ങൾ പ്രവർത്തനരഹിതമായിരിക്കുന്നു</string>
|
<string name="comments_are_disabled">അഭിപ്രായങ്ങൾ പ്രവർത്തനരഹിതമായിരിക്കുന്നു</string>
|
||||||
|
@ -644,7 +644,9 @@
|
|||||||
<string name="local_search_suggestions">Lokale søkeforslag</string>
|
<string name="local_search_suggestions">Lokale søkeforslag</string>
|
||||||
<string name="mark_as_watched">Marker som sett</string>
|
<string name="mark_as_watched">Marker som sett</string>
|
||||||
<string name="start_main_player_fullscreen_summary">Ikke start videoer i minispilleren, men bytt til fullskjermsmodus direkte dersom auto-rotering er låst. Du har fremdeles tilgang til minispilleren ved å avslutte fullskjermsvisningen</string>
|
<string name="start_main_player_fullscreen_summary">Ikke start videoer i minispilleren, men bytt til fullskjermsmodus direkte dersom auto-rotering er låst. Du har fremdeles tilgang til minispilleren ved å avslutte fullskjermsvisningen</string>
|
||||||
|
<string name="show_image_indicators_summary">Vis Picasso-fargede bånd på toppen av bilder for å indikere kilde: Rød for nettverk, blå for disk, og grønn for minne</string>
|
||||||
<string name="detail_heart_img_view_description">Hjertemerket av skaperen</string>
|
<string name="detail_heart_img_view_description">Hjertemerket av skaperen</string>
|
||||||
|
<string name="show_image_indicators_title">Vis bildeindikatorer</string>
|
||||||
<string name="main_page_content_swipe_remove">Dra elementer for å fjerne dem</string>
|
<string name="main_page_content_swipe_remove">Dra elementer for å fjerne dem</string>
|
||||||
<string name="start_main_player_fullscreen_title">Start hovedspiller i fullskjerm</string>
|
<string name="start_main_player_fullscreen_title">Start hovedspiller i fullskjerm</string>
|
||||||
<string name="enqueue_next_stream">Still i kø neste</string>
|
<string name="enqueue_next_stream">Still i kø neste</string>
|
||||||
|
@ -611,6 +611,7 @@
|
|||||||
<string name="no_dir_yet">Geen download map ingesteld, kies nu de standaard download map</string>
|
<string name="no_dir_yet">Geen download map ingesteld, kies nu de standaard download map</string>
|
||||||
<string name="dont_show">Niet tonen</string>
|
<string name="dont_show">Niet tonen</string>
|
||||||
<string name="comments_are_disabled">Reacties zijn uitgeschakeld</string>
|
<string name="comments_are_disabled">Reacties zijn uitgeschakeld</string>
|
||||||
|
<string name="show_image_indicators_title">Toon afbeeldingsindicatoren</string>
|
||||||
<string name="settings_category_player_notification_title">Speler melding</string>
|
<string name="settings_category_player_notification_title">Speler melding</string>
|
||||||
<string name="settings_category_player_notification_summary">Configureer actieve stream melding</string>
|
<string name="settings_category_player_notification_summary">Configureer actieve stream melding</string>
|
||||||
<string name="notifications">Meldingen</string>
|
<string name="notifications">Meldingen</string>
|
||||||
|
@ -632,6 +632,8 @@
|
|||||||
<string name="low_quality_smaller">Lage kwaliteit (kleiner)</string>
|
<string name="low_quality_smaller">Lage kwaliteit (kleiner)</string>
|
||||||
<string name="high_quality_larger">Hoge kwaliteit (groter)</string>
|
<string name="high_quality_larger">Hoge kwaliteit (groter)</string>
|
||||||
<string name="seekbar_preview_thumbnail_title">Zoekbalk miniatuurafbeelding voorbeeld</string>
|
<string name="seekbar_preview_thumbnail_title">Zoekbalk miniatuurafbeelding voorbeeld</string>
|
||||||
|
<string name="show_image_indicators_summary">Toon Picasso-gekleurde linten bovenop afbeeldingen die hun bron aangeven: rood voor netwerk, blauw voor schijf en groen voor geheugen</string>
|
||||||
|
<string name="show_image_indicators_title">Afbeeldingsindicatoren tonen</string>
|
||||||
<string name="comments_are_disabled">Reacties zijn uitgeschakeld</string>
|
<string name="comments_are_disabled">Reacties zijn uitgeschakeld</string>
|
||||||
<string name="remote_search_suggestions">Zoeksuggesties op afstand</string>
|
<string name="remote_search_suggestions">Zoeksuggesties op afstand</string>
|
||||||
<string name="local_search_suggestions">Lokale zoeksuggesties</string>
|
<string name="local_search_suggestions">Lokale zoeksuggesties</string>
|
||||||
|
@ -440,6 +440,8 @@
|
|||||||
<string name="show_original_time_ago_summary">ߗߋߢߊߟߌ ߟߎ߬ ߞߟߏߜߍ߫ ߓߐߛߎ߲ߡߊ ߟߎ߬ ߦߌ߬ߘߊ߬ߕߐ߫ ߟߋ߬ ߟߊ߬ߖߍ߲߬ߛߍ߲߬ߠߌ߲ ߘߐ߫</string>
|
<string name="show_original_time_ago_summary">ߗߋߢߊߟߌ ߟߎ߬ ߞߟߏߜߍ߫ ߓߐߛߎ߲ߡߊ ߟߎ߬ ߦߌ߬ߘߊ߬ߕߐ߫ ߟߋ߬ ߟߊ߬ߖߍ߲߬ߛߍ߲߬ߠߌ߲ ߘߐ߫</string>
|
||||||
<string name="disable_media_tunneling_title">ߞߋߟߋߞߋߟߋ ߟߊ߫ ߝߊߟߊ߲ߓߍߦߊ ߟߊߛߊ߬</string>
|
<string name="disable_media_tunneling_title">ߞߋߟߋߞߋߟߋ ߟߊ߫ ߝߊߟߊ߲ߓߍߦߊ ߟߊߛߊ߬</string>
|
||||||
<string name="disable_media_tunneling_summary">ߞߋߟߋߞߋߟߋ ߟߊ߫ ߝߊߟߊ߲ߓߍߦߊ ߟߊߛߊ߬ ߣߴߌ ߞߊ߬ ߥߊ߲߬ߊߥߊ߲߬ ߝߌ߲ ߦߋ߫ ߥߟߊ߫ ߜߊߘߊ߲ߜߊߘߊ߲ߠߌ߲ ߦߋߡߍ߲ߕߊ ߘߏ߫ ߘߐߛߊߙߌ߫ ߕߎߡߊ</string>
|
<string name="disable_media_tunneling_summary">ߞߋߟߋߞߋߟߋ ߟߊ߫ ߝߊߟߊ߲ߓߍߦߊ ߟߊߛߊ߬ ߣߴߌ ߞߊ߬ ߥߊ߲߬ߊߥߊ߲߬ ߝߌ߲ ߦߋ߫ ߥߟߊ߫ ߜߊߘߊ߲ߜߊߘߊ߲ߠߌ߲ ߦߋߡߍ߲ߕߊ ߘߏ߫ ߘߐߛߊߙߌ߫ ߕߎߡߊ</string>
|
||||||
|
<string name="show_image_indicators_title">ߞߊ߬ ߖߌ߬ߦߊ߬ߓߍ߫ ߦߌ߬ߘߊ߬ߟߊ߲ ߠߎ߫ ߝߍ߲߬ߛߍ߲߫</string>
|
||||||
|
<string name="show_image_indicators_summary">ߏ߬ ߦߋ߫ ߔߌߛߊߞߏ߫ ߟߊ߫ ߡߙߎߝߋ߫ ߞߟߐ߬ߡߊ ߟߎ߫ ߟߋ߬ ߝߍ߲߬ߛߍ߲߬ ߠߊ߫ ߖߌ߬ߦߊ߬ߓߍ ߟߎ߫ ߞߎ߲߬ߘߐ߫ ߞߵߊ߬ߟߎ߬ ߓߐߛߎ߲ ߦߌ߬ߘߊ߬: ߥߎߟߋ߲߬ߡߊ߲ ߦߋ߫ ߞߙߏ߬ߝߏ ߕߊ ߘߌ߫߸ ߓߊ߯ߡߊ ߦߋ߫ ߝߘߍ߬ ߜߍߟߍ߲ ߕߊ ߘߌ߫ ߊ߬ߣߌ߫ ߝߙߌߛߌߡߊ ߦߋ߫ ߦߟߌߕߏߟߊ߲ ߕߊ ߘߌ߫</string>
|
||||||
<string name="export_ongoing">ߟߊ߬ߓߐ߬ߟߌ ߦߴߌߘߐ߫…</string>
|
<string name="export_ongoing">ߟߊ߬ߓߐ߬ߟߌ ߦߴߌߘߐ߫…</string>
|
||||||
<string name="start">ߞߵߊ߬ ߘߊߡߌ߬ߣߊ߬</string>
|
<string name="start">ߞߵߊ߬ ߘߊߡߌ߬ߣߊ߬</string>
|
||||||
<string name="comments_are_disabled">ߞߊ߲߬ߞߎߡߊ ߟߎ߬ ߟߊߛߊ߬ߣߍ߲ ߠߋ߬</string>
|
<string name="comments_are_disabled">ߞߊ߲߬ߞߎߡߊ ߟߎ߬ ߟߊߛߊ߬ߣߍ߲ ߠߋ߬</string>
|
||||||
|
@ -342,6 +342,7 @@
|
|||||||
<string name="show_original_time_ago_summary">ସେବାଗୁଡିକରୁ ମୂଳ ଲେଖା ଷ୍ଟ୍ରିମ୍ ଆଇଟମ୍ ଗୁଡିକରେ ଦୃଶ୍ୟମାନ ହେବ</string>
|
<string name="show_original_time_ago_summary">ସେବାଗୁଡିକରୁ ମୂଳ ଲେଖା ଷ୍ଟ୍ରିମ୍ ଆଇଟମ୍ ଗୁଡିକରେ ଦୃଶ୍ୟମାନ ହେବ</string>
|
||||||
<string name="disable_media_tunneling_title">ମିଡିଆ ଟନେଲିଂକୁ ଅକ୍ଷମ କରନ୍ତୁ</string>
|
<string name="disable_media_tunneling_title">ମିଡିଆ ଟନେଲିଂକୁ ଅକ୍ଷମ କରନ୍ତୁ</string>
|
||||||
<string name="disable_media_tunneling_summary">ଯଦି ଆପଣ ଏକ କଳା ପରଦା ଅନୁଭବ କରନ୍ତି କିମ୍ବା ଭିଡିଓ ପ୍ଲେବେକ୍ ଉପରେ ଝୁଣ୍ଟି ପଡ଼ନ୍ତି ତେବେ ମିଡିଆ ଟନେଲିଂକୁ ଅକ୍ଷମ କରନ୍ତୁ ।</string>
|
<string name="disable_media_tunneling_summary">ଯଦି ଆପଣ ଏକ କଳା ପରଦା ଅନୁଭବ କରନ୍ତି କିମ୍ବା ଭିଡିଓ ପ୍ଲେବେକ୍ ଉପରେ ଝୁଣ୍ଟି ପଡ଼ନ୍ତି ତେବେ ମିଡିଆ ଟନେଲିଂକୁ ଅକ୍ଷମ କରନ୍ତୁ ।</string>
|
||||||
|
<string name="show_image_indicators_summary">ଚିତ୍ରଗୁଡ଼ିକର ଉପରେ ପିକାସୋ ରଙ୍ଗୀନ ଫିତା ଦେଖାନ୍ତୁ: ସେମାନଙ୍କର ଉତ୍ସକୁ ସୂଚାଇଥାଏ: ନେଟୱାର୍କ ପାଇଁ ନାଲି, ଡିସ୍କ ପାଇଁ ନୀଳ ଏବଂ ସ୍ମୃତି ପାଇଁ ସବୁଜ</string>
|
||||||
<string name="import_title">ଆମଦାନି କରନ୍ତୁ</string>
|
<string name="import_title">ଆମଦାନି କରନ୍ତୁ</string>
|
||||||
<string name="import_from">ଠାରୁ ଆମଦାନୀ କରନ୍ତୁ</string>
|
<string name="import_from">ଠାରୁ ଆମଦାନୀ କରନ୍ତୁ</string>
|
||||||
<string name="import_ongoing">ଆମଦାନି…</string>
|
<string name="import_ongoing">ଆମଦାନି…</string>
|
||||||
@ -656,6 +657,7 @@
|
|||||||
<string name="playlist_no_uploader">ଅଟୋ-ଜେନେରେଟ୍ (କୌଣସି ଅପଲୋଡର୍ ମିଳିଲା ନାହିଁ)</string>
|
<string name="playlist_no_uploader">ଅଟୋ-ଜେନେରେଟ୍ (କୌଣସି ଅପଲୋଡର୍ ମିଳିଲା ନାହିଁ)</string>
|
||||||
<string name="resize_fill">ପୁରଣ କରନ୍ତୁ</string>
|
<string name="resize_fill">ପୁରଣ କରନ୍ତୁ</string>
|
||||||
<string name="caption_setting_title">କ୍ୟାପସନ୍</string>
|
<string name="caption_setting_title">କ୍ୟାପସନ୍</string>
|
||||||
|
<string name="show_image_indicators_title">ପ୍ରତିଛବି ସୂଚକ ଦେଖାନ୍ତୁ</string>
|
||||||
<string name="show_crash_the_player_summary">ପ୍ଲେୟାର ବ୍ୟବହାର କରିବା ସମୟରେ ଏକ କ୍ରାସ୍ ବିକଳ୍ପ ଦେଖାଏ</string>
|
<string name="show_crash_the_player_summary">ପ୍ଲେୟାର ବ୍ୟବହାର କରିବା ସମୟରେ ଏକ କ୍ରାସ୍ ବିକଳ୍ପ ଦେଖାଏ</string>
|
||||||
<string name="check_new_streams">ନୂତନ ଷ୍ଟ୍ରିମ୍ ପାଇଁ ଯାଞ୍ଚ ଚଲାନ୍ତୁ</string>
|
<string name="check_new_streams">ନୂତନ ଷ୍ଟ୍ରିମ୍ ପାଇଁ ଯାଞ୍ଚ ଚଲାନ୍ତୁ</string>
|
||||||
<string name="crash_the_app">ଆପ୍ କ୍ରାସ୍ କରନ୍ତୁ</string>
|
<string name="crash_the_app">ଆପ୍ କ୍ରାସ୍ କରନ୍ତୁ</string>
|
||||||
|
@ -626,6 +626,8 @@
|
|||||||
<string name="error_report_notification_title">ਨਿਊਪਾਈਪ ਖਾਮੀ ਤੋਂ ਪ੍ਰਭਾਵਤ ਹੋਈ ਹੈ, ਇੱਥੇ ਨੱਪ ਕੇ ਰਿਪੋਰਟ ਕਰੋ</string>
|
<string name="error_report_notification_title">ਨਿਊਪਾਈਪ ਖਾਮੀ ਤੋਂ ਪ੍ਰਭਾਵਤ ਹੋਈ ਹੈ, ਇੱਥੇ ਨੱਪ ਕੇ ਰਿਪੋਰਟ ਕਰੋ</string>
|
||||||
<string name="error_report_notification_toast">ਇੱਕ ਖਾਮੀ ਪ੍ਰਭਾਵੀ ਹੋਈ ਹੈ, ਨੋਟੀਫੀਕੇਸ਼ਨ ਵੇਖੋ</string>
|
<string name="error_report_notification_toast">ਇੱਕ ਖਾਮੀ ਪ੍ਰਭਾਵੀ ਹੋਈ ਹੈ, ਨੋਟੀਫੀਕੇਸ਼ਨ ਵੇਖੋ</string>
|
||||||
<string name="main_page_content_swipe_remove">ਆਈਟਮਾਂ ਨੂੰ ਇੱਕ ਪਾਸੇ ਖਿੱਚ ਕੇ ਹਟਾਓ</string>
|
<string name="main_page_content_swipe_remove">ਆਈਟਮਾਂ ਨੂੰ ਇੱਕ ਪਾਸੇ ਖਿੱਚ ਕੇ ਹਟਾਓ</string>
|
||||||
|
<string name="show_image_indicators_title">ਦ੍ਰਿਸ਼ ਸੂਚਕ ਵਿਖਾਓ</string>
|
||||||
|
<string name="show_image_indicators_summary">ਦ੍ਰਿਸ਼ਾਂ ਦੇ ਉੱਪਰ ਉਹਨਾਂ ਦੀ ਸਰੋਤ-ਪਛਾਣ ਲਈ ਪਿਕਾਸੋ ਦੇ ਰੰਗਦਾਰ ਰਿਬਨ ਵਿਖਾਓ : ਨੈੱਟਵਰਕ ਲਈ ਲਾਲ, ਡਿਸਕ ਲਈ ਨੀਲੇ ਤੇ ਮੈਮਰੀ ਲਈ ਹਰੇ</string>
|
||||||
<string name="enable_streams_notifications_title">ਨਵੀਂ ਸਟ੍ਰੀਮ ਦੇ ਨੋਟੀਫਿਕੇਸ਼ਨ</string>
|
<string name="enable_streams_notifications_title">ਨਵੀਂ ਸਟ੍ਰੀਮ ਦੇ ਨੋਟੀਫਿਕੇਸ਼ਨ</string>
|
||||||
<string name="detail_pinned_comment_view_description">ਪਿੰਨ ਕੀਤੀ ਟਿੱਪਣੀ</string>
|
<string name="detail_pinned_comment_view_description">ਪਿੰਨ ਕੀਤੀ ਟਿੱਪਣੀ</string>
|
||||||
<string name="checking_updates_toast">ਅੱਪਡੇਟ ਦੀ ਉਪਲੱਬਧਤਾ ਪਰਖੀ ਜਾ ਰਹੀ…</string>
|
<string name="checking_updates_toast">ਅੱਪਡੇਟ ਦੀ ਉਪਲੱਬਧਤਾ ਪਰਖੀ ਜਾ ਰਹੀ…</string>
|
||||||
|
@ -649,6 +649,8 @@
|
|||||||
<string name="dont_show">Nie pokazuj</string>
|
<string name="dont_show">Nie pokazuj</string>
|
||||||
<string name="detail_heart_img_view_description">Serduszko od twórcy</string>
|
<string name="detail_heart_img_view_description">Serduszko od twórcy</string>
|
||||||
<string name="mark_as_watched">Oznacz jako obejrzane</string>
|
<string name="mark_as_watched">Oznacz jako obejrzane</string>
|
||||||
|
<string name="show_image_indicators_summary">Pokazuj kolorowe wstążki Picasso nad obrazami wskazujące ich źródło: czerwone dla sieci, niebieskie dla dysku i zielone dla pamięci</string>
|
||||||
|
<string name="show_image_indicators_title">Pokazuj wskaźniki obrazu</string>
|
||||||
<string name="remote_search_suggestions">Zdalne podpowiedzi wyszukiwania</string>
|
<string name="remote_search_suggestions">Zdalne podpowiedzi wyszukiwania</string>
|
||||||
<string name="local_search_suggestions">Lokalne podpowiedzi wyszukiwania</string>
|
<string name="local_search_suggestions">Lokalne podpowiedzi wyszukiwania</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
|
@ -644,6 +644,7 @@
|
|||||||
<string name="comments_are_disabled">Os comentários estão desabilitados</string>
|
<string name="comments_are_disabled">Os comentários estão desabilitados</string>
|
||||||
<string name="mark_as_watched">Marcar como assistido</string>
|
<string name="mark_as_watched">Marcar como assistido</string>
|
||||||
<string name="detail_heart_img_view_description">Curtido pelo criador</string>
|
<string name="detail_heart_img_view_description">Curtido pelo criador</string>
|
||||||
|
<string name="show_image_indicators_summary">Exibir fitas coloridas no topo das imagens indicando sua fonte: vermelho para rede, azul para disco e verde para memória</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
<item quantity="one">%1$s download excluído</item>
|
<item quantity="one">%1$s download excluído</item>
|
||||||
<item quantity="many">%1$s downloads excluídos</item>
|
<item quantity="many">%1$s downloads excluídos</item>
|
||||||
@ -654,6 +655,7 @@
|
|||||||
<item quantity="many">%s downloads concluídos</item>
|
<item quantity="many">%s downloads concluídos</item>
|
||||||
<item quantity="other">%s downloads concluídos</item>
|
<item quantity="other">%s downloads concluídos</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
<string name="show_image_indicators_title">Mostrar indicadores de imagem</string>
|
||||||
<string name="enqueued_next">Adicionado na próxima posição da fila</string>
|
<string name="enqueued_next">Adicionado na próxima posição da fila</string>
|
||||||
<string name="enqueue_next_stream">Enfileira a próxima</string>
|
<string name="enqueue_next_stream">Enfileira a próxima</string>
|
||||||
<string name="main_page_content_swipe_remove">Deslize os itens para remove-los</string>
|
<string name="main_page_content_swipe_remove">Deslize os itens para remove-los</string>
|
||||||
|
@ -644,6 +644,8 @@
|
|||||||
<string name="no_dir_yet">Ainda não foi definida uma pasta de descarregamento, escolha agora a pasta de descarregamento padrão</string>
|
<string name="no_dir_yet">Ainda não foi definida uma pasta de descarregamento, escolha agora a pasta de descarregamento padrão</string>
|
||||||
<string name="comments_are_disabled">Comentários estão desativados</string>
|
<string name="comments_are_disabled">Comentários estão desativados</string>
|
||||||
<string name="mark_as_watched">Marcar como visto</string>
|
<string name="mark_as_watched">Marcar como visto</string>
|
||||||
|
<string name="show_image_indicators_summary">Mostrar fitas coloridas de Picasso em cima das imagens que indicam a sua fonte: vermelho para rede, azul para disco e verde para memória</string>
|
||||||
|
<string name="show_image_indicators_title">Mostrar indicadores de imagem</string>
|
||||||
<string name="remote_search_suggestions">Sugestões de pesquisa remotas</string>
|
<string name="remote_search_suggestions">Sugestões de pesquisa remotas</string>
|
||||||
<string name="local_search_suggestions">Sugestões de pesquisa locais</string>
|
<string name="local_search_suggestions">Sugestões de pesquisa locais</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
|
@ -644,6 +644,8 @@
|
|||||||
<string name="low_quality_smaller">Baixa qualidade (menor)</string>
|
<string name="low_quality_smaller">Baixa qualidade (menor)</string>
|
||||||
<string name="high_quality_larger">Alta qualidade (maior)</string>
|
<string name="high_quality_larger">Alta qualidade (maior)</string>
|
||||||
<string name="comments_are_disabled">Os comentários estão desativados</string>
|
<string name="comments_are_disabled">Os comentários estão desativados</string>
|
||||||
|
<string name="show_image_indicators_summary">Mostrar fitas coloridas de Picasso em cima das imagens que indicam a sua fonte: vermelho para rede, azul para disco e verde para memória</string>
|
||||||
|
<string name="show_image_indicators_title">Mostrar indicadores de imagem</string>
|
||||||
<string name="remote_search_suggestions">Sugestões de pesquisa remotas</string>
|
<string name="remote_search_suggestions">Sugestões de pesquisa remotas</string>
|
||||||
<string name="local_search_suggestions">Sugestões de pesquisa locais</string>
|
<string name="local_search_suggestions">Sugestões de pesquisa locais</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
|
@ -660,6 +660,8 @@
|
|||||||
<string name="low_quality_smaller">Calitate scăzută (mai mică)</string>
|
<string name="low_quality_smaller">Calitate scăzută (mai mică)</string>
|
||||||
<string name="high_quality_larger">Calitate înaltă (mai mare)</string>
|
<string name="high_quality_larger">Calitate înaltă (mai mare)</string>
|
||||||
<string name="seekbar_preview_thumbnail_title">Miniatură de previzualizare în bara de derulare</string>
|
<string name="seekbar_preview_thumbnail_title">Miniatură de previzualizare în bara de derulare</string>
|
||||||
|
<string name="show_image_indicators_summary">Afișați panglici colorate de Picasso deasupra imaginilor, indicând sursa acestora: roșu pentru rețea, albastru pentru disc și verde pentru memorie</string>
|
||||||
|
<string name="show_image_indicators_title">Afișați indicatorii de imagine</string>
|
||||||
<string name="disable_media_tunneling_summary">Dezactivați tunelarea media dacă întâmpinați un ecran negru sau blocaje la redarea video.</string>
|
<string name="disable_media_tunneling_summary">Dezactivați tunelarea media dacă întâmpinați un ecran negru sau blocaje la redarea video.</string>
|
||||||
<string name="processing_may_take_a_moment">Procesarea.. Poate dura un moment</string>
|
<string name="processing_may_take_a_moment">Procesarea.. Poate dura un moment</string>
|
||||||
<string name="check_for_updates">Verifică dacă există actualizări</string>
|
<string name="check_for_updates">Verifică dacă există actualizări</string>
|
||||||
|
@ -652,6 +652,8 @@
|
|||||||
<string name="seekbar_preview_thumbnail_title">Миниатюра над полосой прокрутки</string>
|
<string name="seekbar_preview_thumbnail_title">Миниатюра над полосой прокрутки</string>
|
||||||
<string name="detail_heart_img_view_description">Автору видео понравилось это</string>
|
<string name="detail_heart_img_view_description">Автору видео понравилось это</string>
|
||||||
<string name="mark_as_watched">Пометить проигранным</string>
|
<string name="mark_as_watched">Пометить проигранным</string>
|
||||||
|
<string name="show_image_indicators_summary">Picasso: указать цветом источник изображений (красный — сеть, синий — диск, зелёный — память)</string>
|
||||||
|
<string name="show_image_indicators_title">Цветные метки на изображениях</string>
|
||||||
<string name="remote_search_suggestions">Серверные предложения поиска</string>
|
<string name="remote_search_suggestions">Серверные предложения поиска</string>
|
||||||
<string name="local_search_suggestions">Локальные предложения поиска</string>
|
<string name="local_search_suggestions">Локальные предложения поиска</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
|
@ -646,6 +646,8 @@
|
|||||||
<item quantity="one">%sちぬダウンロードぬかんりょうさびたん</item>
|
<item quantity="one">%sちぬダウンロードぬかんりょうさびたん</item>
|
||||||
<item quantity="other">%sちぬダウンロードぬかんりょうさびたん</item>
|
<item quantity="other">%sちぬダウンロードぬかんりょうさびたん</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
<string name="show_image_indicators_summary">ピカソー、がぞうぬういに、がぞうくとぅどぅくるしーきびちするしきさいきしーょうひょうじさびーん: あかーネットワーク、あおーディスク、みどぅれーメモリ</string>
|
||||||
|
<string name="show_image_indicators_title">やしがぞうんかいふぃいょうしきひょうじ</string>
|
||||||
<string name="processing_may_take_a_moment">しーょりちゅう… くーてーんじがんがかかいんかむしりやびらん</string>
|
<string name="processing_may_take_a_moment">しーょりちゅう… くーてーんじがんがかかいんかむしりやびらん</string>
|
||||||
<string name="manual_update_description">みーさるバージョンしーゅどうでぃかくにんさびーん</string>
|
<string name="manual_update_description">みーさるバージョンしーゅどうでぃかくにんさびーん</string>
|
||||||
<string name="checking_updates_toast">アップデートかくにんちゅう…</string>
|
<string name="checking_updates_toast">アップデートかくにんちゅう…</string>
|
||||||
|
@ -270,6 +270,7 @@
|
|||||||
<string name="leak_canary_not_available">LeakCanary ᱵᱟᱭ ᱧᱟᱢᱚᱜ ᱠᱟᱱᱟ</string>
|
<string name="leak_canary_not_available">LeakCanary ᱵᱟᱭ ᱧᱟᱢᱚᱜ ᱠᱟᱱᱟ</string>
|
||||||
<string name="enable_leak_canary_summary">ᱢᱮᱢᱚᱨᱤ ᱞᱤᱠᱟᱞ ᱢᱚᱱᱤᱴᱚᱨᱤᱝ ᱦᱤᱯ ᱰᱟᱢᱯᱤᱝ ᱚᱠᱛᱚ ᱨᱮ ᱮᱯᱞᱤᱠᱮᱥᱚᱱ ᱨᱟᱥᱴᱨᱤᱭ ᱦᱩᱭ ᱫᱟᱲᱮᱭᱟᱜ-ᱟ</string>
|
<string name="enable_leak_canary_summary">ᱢᱮᱢᱚᱨᱤ ᱞᱤᱠᱟᱞ ᱢᱚᱱᱤᱴᱚᱨᱤᱝ ᱦᱤᱯ ᱰᱟᱢᱯᱤᱝ ᱚᱠᱛᱚ ᱨᱮ ᱮᱯᱞᱤᱠᱮᱥᱚᱱ ᱨᱟᱥᱴᱨᱤᱭ ᱦᱩᱭ ᱫᱟᱲᱮᱭᱟᱜ-ᱟ</string>
|
||||||
<string name="enable_disposed_exceptions_title">ᱡᱤᱭᱚᱱ ᱪᱤᱠᱤ ᱠᱷᱚᱱ ᱵᱟᱦᱨᱮ ᱨᱮ ᱵᱷᱮᱜᱟᱨ ᱠᱚ ᱚᱱᱚᱞ ᱢᱮ</string>
|
<string name="enable_disposed_exceptions_title">ᱡᱤᱭᱚᱱ ᱪᱤᱠᱤ ᱠᱷᱚᱱ ᱵᱟᱦᱨᱮ ᱨᱮ ᱵᱷᱮᱜᱟᱨ ᱠᱚ ᱚᱱᱚᱞ ᱢᱮ</string>
|
||||||
|
<string name="show_image_indicators_summary">ᱱᱮᱴᱣᱟᱨᱠ ᱞᱟᱹᱜᱤᱫ red, ᱰᱤᱥᱠ ᱞᱟᱹᱜᱤᱫ blue ᱟᱨ ᱢᱮᱢᱚᱨᱤ ᱞᱟᱹᱜᱤᱫ green</string>
|
||||||
<string name="show_crash_the_player_summary">ᱯᱞᱮᱭᱟᱨ ᱵᱮᱵᱷᱟᱨ ᱚᱠᱛᱮ ᱨᱮ ᱠᱨᱟᱥ ᱚᱯᱥᱚᱱ ᱧᱮᱞᱚᱜ ᱠᱟᱱᱟ</string>
|
<string name="show_crash_the_player_summary">ᱯᱞᱮᱭᱟᱨ ᱵᱮᱵᱷᱟᱨ ᱚᱠᱛᱮ ᱨᱮ ᱠᱨᱟᱥ ᱚᱯᱥᱚᱱ ᱧᱮᱞᱚᱜ ᱠᱟᱱᱟ</string>
|
||||||
<string name="import_title">ᱤᱢᱯᱳᱨᱴ</string>
|
<string name="import_title">ᱤᱢᱯᱳᱨᱴ</string>
|
||||||
<string name="import_from">ᱤᱢᱯᱚᱨᱴ</string>
|
<string name="import_from">ᱤᱢᱯᱚᱨᱴ</string>
|
||||||
@ -539,6 +540,7 @@
|
|||||||
<string name="show_original_time_ago_title">ᱡᱤᱱᱤᱥ ᱠᱚᱨᱮᱱᱟᱜ ᱢᱩᱞ ᱚᱠᱛᱚ ᱧᱮᱞ ᱢᱮ</string>
|
<string name="show_original_time_ago_title">ᱡᱤᱱᱤᱥ ᱠᱚᱨᱮᱱᱟᱜ ᱢᱩᱞ ᱚᱠᱛᱚ ᱧᱮᱞ ᱢᱮ</string>
|
||||||
<string name="show_original_time_ago_summary">ᱥᱮᱵᱟ ᱠᱷᱚᱱ ᱚᱨᱡᱤᱱᱤᱭᱟᱞ ᱴᱮᱠᱥᱴ ᱠᱚ ᱥᱴᱨᱤᱢ ᱤᱴᱮᱢ ᱨᱮ ᱧᱮᱞᱚᱜᱼᱟ</string>
|
<string name="show_original_time_ago_summary">ᱥᱮᱵᱟ ᱠᱷᱚᱱ ᱚᱨᱡᱤᱱᱤᱭᱟᱞ ᱴᱮᱠᱥᱴ ᱠᱚ ᱥᱴᱨᱤᱢ ᱤᱴᱮᱢ ᱨᱮ ᱧᱮᱞᱚᱜᱼᱟ</string>
|
||||||
<string name="disable_media_tunneling_summary">ᱡᱩᱫᱤ ᱟᱢ ᱵᱷᱤᱰᱤᱭᱳ ᱯᱞᱮᱭᱚᱯ ᱨᱮ ᱵᱞᱮᱠ ᱥᱠᱨᱤᱱ ᱟᱨᱵᱟᱝ ᱠᱷᱟᱹᱞᱤ ᱥᱴᱮᱴᱞᱤᱝ ᱮᱢ ᱧᱟᱢᱟ ᱮᱱᱠᱷᱟᱱ ᱢᱤᱰᱤᱭᱟ ᱴᱩᱱᱮᱞᱤᱝ ᱵᱚᱫᱚᱞ ᱢᱮ ᱾</string>
|
<string name="disable_media_tunneling_summary">ᱡᱩᱫᱤ ᱟᱢ ᱵᱷᱤᱰᱤᱭᱳ ᱯᱞᱮᱭᱚᱯ ᱨᱮ ᱵᱞᱮᱠ ᱥᱠᱨᱤᱱ ᱟᱨᱵᱟᱝ ᱠᱷᱟᱹᱞᱤ ᱥᱴᱮᱴᱞᱤᱝ ᱮᱢ ᱧᱟᱢᱟ ᱮᱱᱠᱷᱟᱱ ᱢᱤᱰᱤᱭᱟ ᱴᱩᱱᱮᱞᱤᱝ ᱵᱚᱫᱚᱞ ᱢᱮ ᱾</string>
|
||||||
|
<string name="show_image_indicators_title">ᱪᱤᱛᱟᱹᱨ ᱪᱤᱱᱦᱟᱹ ᱠᱚ ᱧᱮᱞ ᱢᱮ</string>
|
||||||
<string name="check_new_streams">ᱱᱟᱣᱟ ᱥᱴᱨᱤᱢ ᱞᱟᱹᱜᱤᱫ ᱪᱟᱪᱞᱟᱣ ᱢᱮ</string>
|
<string name="check_new_streams">ᱱᱟᱣᱟ ᱥᱴᱨᱤᱢ ᱞᱟᱹᱜᱤᱫ ᱪᱟᱪᱞᱟᱣ ᱢᱮ</string>
|
||||||
<string name="create_error_notification">ᱢᱤᱫ error notification ᱛᱮᱭᱟᱨ ᱢᱮ</string>
|
<string name="create_error_notification">ᱢᱤᱫ error notification ᱛᱮᱭᱟᱨ ᱢᱮ</string>
|
||||||
<string name="subscriptions_export_unsuccessful">ᱥᱮᱞᱮᱫ ᱮᱠᱥᱯᱳᱨᱴ ᱵᱟᱝ ᱦᱩᱭ ᱫᱟᱲᱮᱭᱟᱜ ᱠᱟᱱᱟ</string>
|
<string name="subscriptions_export_unsuccessful">ᱥᱮᱞᱮᱫ ᱮᱠᱥᱯᱳᱨᱴ ᱵᱟᱝ ᱦᱩᱭ ᱫᱟᱲᱮᱭᱟᱜ ᱠᱟᱱᱟ</string>
|
||||||
|
@ -634,6 +634,8 @@
|
|||||||
<string name="comments_are_disabled">Sos cummentos sunt disabilitados</string>
|
<string name="comments_are_disabled">Sos cummentos sunt disabilitados</string>
|
||||||
<string name="detail_heart_img_view_description">Su creadore b\'at postu unu coro</string>
|
<string name="detail_heart_img_view_description">Su creadore b\'at postu unu coro</string>
|
||||||
<string name="mark_as_watched">Marca comente pompiadu</string>
|
<string name="mark_as_watched">Marca comente pompiadu</string>
|
||||||
|
<string name="show_image_indicators_summary">Ammustra sos listrones colorados de Picasso in subra de sas immàgines chi indicant sa fonte issoro: ruja pro sa retze, biaita pro su discu e birde pro sa memòria</string>
|
||||||
|
<string name="show_image_indicators_title">Ammustra sos indicadores de immàgines</string>
|
||||||
<string name="remote_search_suggestions">Impòsitos de chirca remota</string>
|
<string name="remote_search_suggestions">Impòsitos de chirca remota</string>
|
||||||
<string name="local_search_suggestions">Impòsitos de chirca locales</string>
|
<string name="local_search_suggestions">Impòsitos de chirca locales</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
|
@ -653,6 +653,8 @@
|
|||||||
<string name="low_quality_smaller">Nízka kvalita (menšie)</string>
|
<string name="low_quality_smaller">Nízka kvalita (menšie)</string>
|
||||||
<string name="high_quality_larger">Vysoká kvalita (väčšie)</string>
|
<string name="high_quality_larger">Vysoká kvalita (väčšie)</string>
|
||||||
<string name="seekbar_preview_thumbnail_title">Náhľad miniatúry pri vyhľadávaní</string>
|
<string name="seekbar_preview_thumbnail_title">Náhľad miniatúry pri vyhľadávaní</string>
|
||||||
|
<string name="show_image_indicators_summary">Zobrazí farebné pásiky Picasso na obrázkoch podľa ich zdroja: červený pre sieť, modrý pre disk a zelený pre pamäť</string>
|
||||||
|
<string name="show_image_indicators_title">Zobraziť indikátory obrázka</string>
|
||||||
<string name="main_page_content_swipe_remove">Potiahnutím vymazať</string>
|
<string name="main_page_content_swipe_remove">Potiahnutím vymazať</string>
|
||||||
<string name="comments_are_disabled">Komentáre sú zakázané</string>
|
<string name="comments_are_disabled">Komentáre sú zakázané</string>
|
||||||
<string name="start_main_player_fullscreen_summary">Ak je automatické otáčanie zablokované, nespustí videá v miniprehrávači, ale prepne sa do celoobrazovkového režimu. Do miniprehrávača sa dostanete po ukončení režimu celej obrazovky</string>
|
<string name="start_main_player_fullscreen_summary">Ak je automatické otáčanie zablokované, nespustí videá v miniprehrávači, ale prepne sa do celoobrazovkového režimu. Do miniprehrávača sa dostanete po ukončení režimu celej obrazovky</string>
|
||||||
|
@ -633,6 +633,8 @@
|
|||||||
<string name="comments_are_disabled">Fallooyinka waa laxidhay</string>
|
<string name="comments_are_disabled">Fallooyinka waa laxidhay</string>
|
||||||
<string name="detail_heart_img_view_description">Kahelay soosaaraha</string>
|
<string name="detail_heart_img_view_description">Kahelay soosaaraha</string>
|
||||||
<string name="mark_as_watched">Waan daawaday</string>
|
<string name="mark_as_watched">Waan daawaday</string>
|
||||||
|
<string name="show_image_indicators_summary">Soo bandhig shaambado midabka Picasso leh sawirrada dushooda oo tilmaamaya isha laga keenay: guduud waa khadka, buluug waa kaydka gudaha, cagaar waa kaydka K/G</string>
|
||||||
|
<string name="show_image_indicators_title">Tus tilmaamayaasha sawirka</string>
|
||||||
<string name="remote_search_suggestions">Soojeedinada raadinta banaanka</string>
|
<string name="remote_search_suggestions">Soojeedinada raadinta banaanka</string>
|
||||||
<string name="local_search_suggestions">Soojeedinada raadinta gudaha</string>
|
<string name="local_search_suggestions">Soojeedinada raadinta gudaha</string>
|
||||||
<string name="progressive_load_interval_title">Cabirka soodaarida udhexeeya</string>
|
<string name="progressive_load_interval_title">Cabirka soodaarida udhexeeya</string>
|
||||||
|
@ -644,6 +644,7 @@
|
|||||||
<string name="mark_as_watched">Означи као одгледано</string>
|
<string name="mark_as_watched">Означи као одгледано</string>
|
||||||
<string name="comments_are_disabled">Коментари су онемогућени</string>
|
<string name="comments_are_disabled">Коментари су онемогућени</string>
|
||||||
<string name="processing_may_take_a_moment">Обрађивање… Може потрајати пар тренутака</string>
|
<string name="processing_may_take_a_moment">Обрађивање… Може потрајати пар тренутака</string>
|
||||||
|
<string name="show_image_indicators_title">Прикажи индикаторе слике</string>
|
||||||
<string name="start_main_player_fullscreen_summary">Не покрећите видео снимке у мини-плејеру, већ директно пређите на режим целог екрана, ако је аутоматска ротација закључана. И даље можете приступити мини-плејеру тако што ћете изаћи из целог екрана</string>
|
<string name="start_main_player_fullscreen_summary">Не покрећите видео снимке у мини-плејеру, већ директно пређите на режим целог екрана, ако је аутоматска ротација закључана. И даље можете приступити мини-плејеру тако што ћете изаћи из целог екрана</string>
|
||||||
<string name="start_main_player_fullscreen_title">Покрени главни плејер преко целог екрана</string>
|
<string name="start_main_player_fullscreen_title">Покрени главни плејер преко целог екрана</string>
|
||||||
<string name="crash_the_player">Срушите плејер</string>
|
<string name="crash_the_player">Срушите плејер</string>
|
||||||
@ -739,6 +740,7 @@
|
|||||||
<string name="error_report_channel_description">Обавештења за пријаву грешака</string>
|
<string name="error_report_channel_description">Обавештења за пријаву грешака</string>
|
||||||
<string name="import_subscriptions_hint">Увезите или извезите праћења из менија са 3 тачке</string>
|
<string name="import_subscriptions_hint">Увезите или извезите праћења из менија са 3 тачке</string>
|
||||||
<string name="audio_track">Аудио снимак</string>
|
<string name="audio_track">Аудио снимак</string>
|
||||||
|
<string name="show_image_indicators_summary">Прикажите Picasso обојене траке на врху слика које указују на њихов извор: црвена за мрежу, плава за диск и зелена за меморију</string>
|
||||||
<string name="create_error_notification">Направите обавештење о грешци</string>
|
<string name="create_error_notification">Направите обавештење о грешци</string>
|
||||||
<string name="percent">Проценат</string>
|
<string name="percent">Проценат</string>
|
||||||
<string name="app_update_unavailable_toast">Користите најновију верзију NewPipe-а</string>
|
<string name="app_update_unavailable_toast">Користите најновију верзију NewPipe-а</string>
|
||||||
|
@ -633,6 +633,7 @@
|
|||||||
<string name="select_night_theme_toast">Du kan välja det natt-tema du föredrar nedan</string>
|
<string name="select_night_theme_toast">Du kan välja det natt-tema du föredrar nedan</string>
|
||||||
<string name="night_theme_summary">Välj det natt-tema du föredrar — %s</string>
|
<string name="night_theme_summary">Välj det natt-tema du föredrar — %s</string>
|
||||||
<string name="seekbar_preview_thumbnail_title">Sökradens förhandsvisningsminiatyr</string>
|
<string name="seekbar_preview_thumbnail_title">Sökradens förhandsvisningsminiatyr</string>
|
||||||
|
<string name="show_image_indicators_title">Visa bildindikatorer</string>
|
||||||
<string name="local_search_suggestions">Lokala sökningsförslag</string>
|
<string name="local_search_suggestions">Lokala sökningsförslag</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
<item quantity="one">Tog bort %1$s nedladdning</item>
|
<item quantity="one">Tog bort %1$s nedladdning</item>
|
||||||
@ -650,6 +651,7 @@
|
|||||||
<string name="main_page_content_swipe_remove">Svep objekt för att ta bort dem</string>
|
<string name="main_page_content_swipe_remove">Svep objekt för att ta bort dem</string>
|
||||||
<string name="remote_search_suggestions">Förslag via fjärrsökning</string>
|
<string name="remote_search_suggestions">Förslag via fjärrsökning</string>
|
||||||
<string name="start_main_player_fullscreen_summary">Starta inte videor i minispelaren, utan byt till helskärmsläge direkt, om automatisk rotation är låst. Du kan fortfarande komma åt minispelaren genom att gå ut ur helskärmsläge</string>
|
<string name="start_main_player_fullscreen_summary">Starta inte videor i minispelaren, utan byt till helskärmsläge direkt, om automatisk rotation är låst. Du kan fortfarande komma åt minispelaren genom att gå ut ur helskärmsläge</string>
|
||||||
|
<string name="show_image_indicators_summary">Visa Picasso färgade band ovanpå bilderna som anger deras källa: rött för nätverk, blått för disk och grönt för minne</string>
|
||||||
<string name="check_for_updates">Sök efter uppdateringar</string>
|
<string name="check_for_updates">Sök efter uppdateringar</string>
|
||||||
<string name="manual_update_description">Kolla manuellt efter nya versioner</string>
|
<string name="manual_update_description">Kolla manuellt efter nya versioner</string>
|
||||||
<string name="checking_updates_toast">Söker efter uppdateringar…</string>
|
<string name="checking_updates_toast">Söker efter uppdateringar…</string>
|
||||||
|
@ -442,6 +442,7 @@
|
|||||||
<string name="playback_speed_control">ప్లేబ్యాక్ స్పీడ్ నియంత్రణలు</string>
|
<string name="playback_speed_control">ప్లేబ్యాక్ స్పీడ్ నియంత్రణలు</string>
|
||||||
<string name="minimize_on_exit_none_description">ఏమిలేదు</string>
|
<string name="minimize_on_exit_none_description">ఏమిలేదు</string>
|
||||||
<string name="disable_media_tunneling_summary">మీరు బ్లాక్ స్క్రీన్ లేదా చలనచిత్రం ప్లేబ్యాక్లో అంతరాయాన్ని అనుభవిస్తే మీడియా టన్నెలింగ్ను నిలిపివేయండి</string>
|
<string name="disable_media_tunneling_summary">మీరు బ్లాక్ స్క్రీన్ లేదా చలనచిత్రం ప్లేబ్యాక్లో అంతరాయాన్ని అనుభవిస్తే మీడియా టన్నెలింగ్ను నిలిపివేయండి</string>
|
||||||
|
<string name="show_image_indicators_summary">చిత్రాల మూలాన్ని సూచించే విధంగా వాటి పైభాగంలో పికాసో రంగు రిబ్బన్లను చూపండి: నెట్వర్క్ కోసం ఎరుపు, డిస్క్ కోసం నీలం మరియు మెమరీ కోసం ఆకుపచ్చ</string>
|
||||||
<string name="show_error_snackbar">లోపం స్నాక్బార్ని చూపండి</string>
|
<string name="show_error_snackbar">లోపం స్నాక్బార్ని చూపండి</string>
|
||||||
<string name="app_update_unavailable_toast">మీరు NewPipe యొక్క తాజా సంస్కరణను అమలు చేస్తున్నారు</string>
|
<string name="app_update_unavailable_toast">మీరు NewPipe యొక్క తాజా సంస్కరణను అమలు చేస్తున్నారు</string>
|
||||||
<string name="app_update_available_notification_title">NewPipe నవీకరణ అందుబాటులో ఉంది!</string>
|
<string name="app_update_available_notification_title">NewPipe నవీకరణ అందుబాటులో ఉంది!</string>
|
||||||
@ -454,6 +455,7 @@
|
|||||||
<string name="low_quality_smaller">తక్కువ నాణ్యత (చిన్నది)</string>
|
<string name="low_quality_smaller">తక్కువ నాణ్యత (చిన్నది)</string>
|
||||||
<string name="dont_show">చూపించవద్దు</string>
|
<string name="dont_show">చూపించవద్దు</string>
|
||||||
<string name="disable_media_tunneling_title">మీడియా టన్నెలింగ్ని నిలిపివేయండి</string>
|
<string name="disable_media_tunneling_title">మీడియా టన్నెలింగ్ని నిలిపివేయండి</string>
|
||||||
|
<string name="show_image_indicators_title">చిత్ర సూచికలను చూపు</string>
|
||||||
<string name="check_new_streams">కొత్త స్ట్రీమ్ల కోసం తనిఖీని అమలు చేయండి</string>
|
<string name="check_new_streams">కొత్త స్ట్రీమ్ల కోసం తనిఖీని అమలు చేయండి</string>
|
||||||
<string name="create_error_notification">ఎర్రర్ నోటిఫికేషన్ను సృష్టించండి</string>
|
<string name="create_error_notification">ఎర్రర్ నోటిఫికేషన్ను సృష్టించండి</string>
|
||||||
<string name="import_title">దిగుమతి</string>
|
<string name="import_title">దిగుమతి</string>
|
||||||
|
@ -633,6 +633,8 @@
|
|||||||
<string name="comments_are_disabled">Yorumlar devre dışı</string>
|
<string name="comments_are_disabled">Yorumlar devre dışı</string>
|
||||||
<string name="detail_heart_img_view_description">Yaratıcısınca kalplendi</string>
|
<string name="detail_heart_img_view_description">Yaratıcısınca kalplendi</string>
|
||||||
<string name="mark_as_watched">İzlendi olarak işaretle</string>
|
<string name="mark_as_watched">İzlendi olarak işaretle</string>
|
||||||
|
<string name="show_image_indicators_summary">Resimlerin üzerinde kaynaklarını gösteren Picasso renkli şeritler göster: ağ için kırmızı, disk için mavi ve bellek için yeşil</string>
|
||||||
|
<string name="show_image_indicators_title">Resim göstergelerini göster</string>
|
||||||
<string name="remote_search_suggestions">Uzak arama önerileri</string>
|
<string name="remote_search_suggestions">Uzak arama önerileri</string>
|
||||||
<string name="local_search_suggestions">Yerel arama önerileri</string>
|
<string name="local_search_suggestions">Yerel arama önerileri</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
|
@ -646,6 +646,8 @@
|
|||||||
<string name="seekbar_preview_thumbnail_title">Мініатюра з попереднім переглядом на повзунку поступу</string>
|
<string name="seekbar_preview_thumbnail_title">Мініатюра з попереднім переглядом на повзунку поступу</string>
|
||||||
<string name="detail_heart_img_view_description">Вподобано автором</string>
|
<string name="detail_heart_img_view_description">Вподобано автором</string>
|
||||||
<string name="mark_as_watched">Позначити переглянутим</string>
|
<string name="mark_as_watched">Позначити переглянутим</string>
|
||||||
|
<string name="show_image_indicators_summary">Показувати кольорові стрічки Пікассо поверх зображень із зазначенням їх джерела: червоний для мережі, синій для диска та зелений для пам’яті</string>
|
||||||
|
<string name="show_image_indicators_title">Показати індикатори зображень</string>
|
||||||
<string name="remote_search_suggestions">Віддалені пропозиції пошуку</string>
|
<string name="remote_search_suggestions">Віддалені пропозиції пошуку</string>
|
||||||
<string name="local_search_suggestions">Локальні пошукові пропозиції</string>
|
<string name="local_search_suggestions">Локальні пошукові пропозиції</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
|
@ -624,6 +624,8 @@
|
|||||||
<string name="comments_are_disabled">Bình luận đã bị tắt</string>
|
<string name="comments_are_disabled">Bình luận đã bị tắt</string>
|
||||||
<string name="detail_heart_img_view_description">Đã được chủ kênh thả \"thính\"</string>
|
<string name="detail_heart_img_view_description">Đã được chủ kênh thả \"thính\"</string>
|
||||||
<string name="mark_as_watched">Đánh dấu là đã xem</string>
|
<string name="mark_as_watched">Đánh dấu là đã xem</string>
|
||||||
|
<string name="show_image_indicators_summary">Hiển thị các dải băng màu Picasso trên đầu các hình ảnh cho biết nguồn của chúng: màu đỏ cho mạng, màu lam cho đĩa và màu lục cho bộ nhớ</string>
|
||||||
|
<string name="show_image_indicators_title">Hiện dấu chỉ hình ảnh</string>
|
||||||
<string name="remote_search_suggestions">Đề xuất tìm kiếm trên mạng</string>
|
<string name="remote_search_suggestions">Đề xuất tìm kiếm trên mạng</string>
|
||||||
<string name="local_search_suggestions">Đề xuất tìm kiếm cục bộ</string>
|
<string name="local_search_suggestions">Đề xuất tìm kiếm cục bộ</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
|
@ -624,6 +624,8 @@
|
|||||||
<string name="high_quality_larger">高品质(较大)</string>
|
<string name="high_quality_larger">高品质(较大)</string>
|
||||||
<string name="detail_heart_img_view_description">被创作者喜爱</string>
|
<string name="detail_heart_img_view_description">被创作者喜爱</string>
|
||||||
<string name="mark_as_watched">标记为已观看</string>
|
<string name="mark_as_watched">标记为已观看</string>
|
||||||
|
<string name="show_image_indicators_summary">在图像顶部显示毕加索彩带,指示其来源:红色代表网络,蓝色代表磁盘,绿色代表内存</string>
|
||||||
|
<string name="show_image_indicators_title">显示图像指示器</string>
|
||||||
<string name="remote_search_suggestions">远程搜索建议</string>
|
<string name="remote_search_suggestions">远程搜索建议</string>
|
||||||
<string name="local_search_suggestions">本地搜索建议</string>
|
<string name="local_search_suggestions">本地搜索建议</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
|
@ -668,7 +668,9 @@
|
|||||||
<string name="feed_create_new_group_button_title">新</string>
|
<string name="feed_create_new_group_button_title">新</string>
|
||||||
<string name="feed_group_dialog_delete_message">你係咪要刪除呢個谷?</string>
|
<string name="feed_group_dialog_delete_message">你係咪要刪除呢個谷?</string>
|
||||||
<string name="feed_group_show_only_ungrouped_subscriptions">淨係顯示未成谷嘅訂閱</string>
|
<string name="feed_group_show_only_ungrouped_subscriptions">淨係顯示未成谷嘅訂閱</string>
|
||||||
|
<string name="show_image_indicators_summary">啲圖都要騷 Picasso 三色碼顯示源頭:紅碼係網絡上高落嚟,藍碼係儲存喺磁碟本地,綠碼係潛伏喺記憶體中</string>
|
||||||
<string name="show_original_time_ago_summary">服務原本嘅字會騷返喺串流項目上面</string>
|
<string name="show_original_time_ago_summary">服務原本嘅字會騷返喺串流項目上面</string>
|
||||||
|
<string name="show_image_indicators_title">影像要推三色碼</string>
|
||||||
<string name="disable_media_tunneling_summary">若果播片嘅時候窒下窒下或者黑畫面,就停用多媒體隧道啦。</string>
|
<string name="disable_media_tunneling_summary">若果播片嘅時候窒下窒下或者黑畫面,就停用多媒體隧道啦。</string>
|
||||||
<string name="import_youtube_instructions">點樣用 Google 匯出嚟匯入 YouTube 訂閱:
|
<string name="import_youtube_instructions">點樣用 Google 匯出嚟匯入 YouTube 訂閱:
|
||||||
\n
|
\n
|
||||||
|
@ -624,6 +624,8 @@
|
|||||||
<string name="seekbar_preview_thumbnail_title">拖動列縮圖預覽</string>
|
<string name="seekbar_preview_thumbnail_title">拖動列縮圖預覽</string>
|
||||||
<string name="detail_heart_img_view_description">被創作者加心號</string>
|
<string name="detail_heart_img_view_description">被創作者加心號</string>
|
||||||
<string name="mark_as_watched">標記為已觀看</string>
|
<string name="mark_as_watched">標記為已觀看</string>
|
||||||
|
<string name="show_image_indicators_summary">在圖片頂部顯示畢卡索彩色絲帶,指示其來源:紅色代表網路、藍色代表磁碟、綠色代表記憶體</string>
|
||||||
|
<string name="show_image_indicators_title">顯示圖片指示器</string>
|
||||||
<string name="remote_search_suggestions">遠端搜尋建議</string>
|
<string name="remote_search_suggestions">遠端搜尋建議</string>
|
||||||
<string name="local_search_suggestions">本機搜尋建議</string>
|
<string name="local_search_suggestions">本機搜尋建議</string>
|
||||||
<plurals name="deleted_downloads_toast">
|
<plurals name="deleted_downloads_toast">
|
||||||
|
@ -241,6 +241,7 @@
|
|||||||
<string name="show_memory_leaks_key">show_memory_leaks_key</string>
|
<string name="show_memory_leaks_key">show_memory_leaks_key</string>
|
||||||
<string name="allow_disposed_exceptions_key">allow_disposed_exceptions_key</string>
|
<string name="allow_disposed_exceptions_key">allow_disposed_exceptions_key</string>
|
||||||
<string name="show_original_time_ago_key">show_original_time_ago_key</string>
|
<string name="show_original_time_ago_key">show_original_time_ago_key</string>
|
||||||
|
<string name="show_image_indicators_key">show_image_indicators_key</string>
|
||||||
<string name="show_crash_the_player_key">show_crash_the_player_key</string>
|
<string name="show_crash_the_player_key">show_crash_the_player_key</string>
|
||||||
<string name="check_new_streams_key">check_new_streams</string>
|
<string name="check_new_streams_key">check_new_streams</string>
|
||||||
<string name="crash_the_app_key">crash_the_app_key</string>
|
<string name="crash_the_app_key">crash_the_app_key</string>
|
||||||
|
@ -486,6 +486,8 @@
|
|||||||
<string name="disable_media_tunneling_title">Disable media tunneling</string>
|
<string name="disable_media_tunneling_title">Disable media tunneling</string>
|
||||||
<string name="disable_media_tunneling_summary">Disable media tunneling if you experience a black screen or stuttering on video playback.</string>
|
<string name="disable_media_tunneling_summary">Disable media tunneling if you experience a black screen or stuttering on video playback.</string>
|
||||||
<string name="disable_media_tunneling_automatic_info">Media tunneling was disabled by default on your device because your device model is known to not support it.</string>
|
<string name="disable_media_tunneling_automatic_info">Media tunneling was disabled by default on your device because your device model is known to not support it.</string>
|
||||||
|
<string name="show_image_indicators_title">Show image indicators</string>
|
||||||
|
<string name="show_image_indicators_summary">Show Picasso colored ribbons on top of images indicating their source: red for network, blue for disk and green for memory</string>
|
||||||
<string name="show_crash_the_player_title">Show \"Crash the player\"</string>
|
<string name="show_crash_the_player_title">Show \"Crash the player\"</string>
|
||||||
<string name="show_crash_the_player_summary">Shows a crash option when using the player</string>
|
<string name="show_crash_the_player_summary">Shows a crash option when using the player</string>
|
||||||
<string name="check_new_streams">Run check for new streams</string>
|
<string name="check_new_streams">Run check for new streams</string>
|
||||||
|
@ -34,6 +34,13 @@
|
|||||||
app:singleLineTitle="false"
|
app:singleLineTitle="false"
|
||||||
app:iconSpaceReserved="false" />
|
app:iconSpaceReserved="false" />
|
||||||
|
|
||||||
|
<SwitchPreferenceCompat
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:key="@string/show_image_indicators_key"
|
||||||
|
android:summary="@string/show_image_indicators_summary"
|
||||||
|
android:title="@string/show_image_indicators_title"
|
||||||
|
app:iconSpaceReserved="false" />
|
||||||
|
|
||||||
<SwitchPreferenceCompat
|
<SwitchPreferenceCompat
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:key="@string/show_crash_the_player_key"
|
android:key="@string/show_crash_the_player_key"
|
||||||
|
Loading…
Reference in New Issue
Block a user