mirror of
https://github.com/TeamNewPipe/NewPipe
synced 2025-09-23 09:20:51 +02:00
Compare commits
157 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
3c306a0971 | ||
![]() |
c0d6c8aeb3 | ||
![]() |
b27b49e4f3 | ||
![]() |
7ed0dbcf1a | ||
![]() |
8a23de6b20 | ||
![]() |
6cc3089204 | ||
![]() |
093e95c078 | ||
![]() |
7c8ac04e35 | ||
![]() |
dc88f8b172 | ||
![]() |
c94f0ded27 | ||
![]() |
b553aa2159 | ||
![]() |
a7bd2666f0 | ||
![]() |
fe2fc60581 | ||
![]() |
ce59c05d5b | ||
![]() |
a4858bc702 | ||
![]() |
a2bb58a991 | ||
![]() |
f7b41227d2 | ||
![]() |
5b1a6831d5 | ||
![]() |
42b1bbe414 | ||
![]() |
db9f20a22f | ||
![]() |
cf67b592da | ||
![]() |
e867bfbc82 | ||
![]() |
9a671851df | ||
![]() |
4b92f78cc8 | ||
![]() |
c585982557 | ||
![]() |
6bf22e7ad0 | ||
![]() |
2f8dccf7f6 | ||
![]() |
027768d97d | ||
![]() |
085f63b8c5 | ||
![]() |
6f7c337e00 | ||
![]() |
16a968f3bb | ||
![]() |
d7e0167fed | ||
![]() |
41c4f515cf | ||
![]() |
d9a8218372 | ||
![]() |
dd9bd4da8b | ||
![]() |
cf98500b7f | ||
![]() |
2ce8facc05 | ||
![]() |
d1b117d07c | ||
![]() |
c0377c7ebf | ||
![]() |
a2490a5730 | ||
![]() |
177334ba62 | ||
![]() |
7bce588767 | ||
![]() |
4bb67c634f | ||
![]() |
3653afbcc4 | ||
![]() |
1f4a4ea09f | ||
![]() |
3d38add4b4 | ||
![]() |
124b7eefb5 | ||
![]() |
b52924048c | ||
![]() |
93393f5dff | ||
![]() |
275a75ebaa | ||
![]() |
3e4a7a19cc | ||
![]() |
734af457f3 | ||
![]() |
55bdb1f47a | ||
![]() |
adff0d199d | ||
![]() |
f95b3262a0 | ||
![]() |
794a14e76c | ||
![]() |
ba857b5ef7 | ||
![]() |
2aed04a8c2 | ||
![]() |
5f9e6b51da | ||
![]() |
e7b5c99ed6 | ||
![]() |
9c0b3d35be | ||
![]() |
a54bc96eab | ||
![]() |
a2a8e4b965 | ||
![]() |
81ad2c61d9 | ||
![]() |
32616493b3 | ||
![]() |
05183ffd0f | ||
![]() |
e72ddc9439 | ||
![]() |
32e3caecac | ||
![]() |
df43389183 | ||
![]() |
19b77809ec | ||
![]() |
be05b827f3 | ||
![]() |
5dfc6f822d | ||
![]() |
c3e004da03 | ||
![]() |
8bae73b6ea | ||
![]() |
d1e19d3b63 | ||
![]() |
ffca897ddf | ||
![]() |
4277b6e262 | ||
![]() |
506c4ce701 | ||
![]() |
d251e58984 | ||
![]() |
4a1213c081 | ||
![]() |
8b7609255c | ||
![]() |
ef78fe0653 | ||
![]() |
70b3ccb422 | ||
![]() |
81d6b367fe | ||
![]() |
0a78ae60be | ||
![]() |
a61830a860 | ||
![]() |
86bae9ddc9 | ||
![]() |
033780862a | ||
![]() |
6094d8a74e | ||
![]() |
356ca3d177 | ||
![]() |
d69806faa9 | ||
![]() |
ab67635dcb | ||
![]() |
cee3d49458 | ||
![]() |
5b53a7aef7 | ||
![]() |
9b29665cc0 | ||
![]() |
f447c87b45 | ||
![]() |
e3eea45d86 | ||
![]() |
f61a06ce0a | ||
![]() |
539842aa99 | ||
![]() |
5925f1d2aa | ||
![]() |
61eb150825 | ||
![]() |
cf95de4d27 | ||
![]() |
fdad7ec1ba | ||
![]() |
850efb4237 | ||
![]() |
853cb3887f | ||
![]() |
412f2c1664 | ||
![]() |
2810a69bd4 | ||
![]() |
5347f95f50 | ||
![]() |
6b469f0621 | ||
![]() |
0021562c93 | ||
![]() |
f2bd2b0a59 | ||
![]() |
647eb8bbf5 | ||
![]() |
816d13ae3f | ||
![]() |
578fea4a9c | ||
![]() |
1a660d9a4a | ||
![]() |
227ac6d9e3 | ||
![]() |
bb57407733 | ||
![]() |
13ddcce0a2 | ||
![]() |
53767a78d1 | ||
![]() |
5600e8a2ad | ||
![]() |
c6ed52c592 | ||
![]() |
3ad14e4adf | ||
![]() |
8a22bdea5d | ||
![]() |
6135a3c3e2 | ||
![]() |
1e3c979303 | ||
![]() |
d0228406b6 | ||
![]() |
507a2237b7 | ||
![]() |
c15c597d99 | ||
![]() |
7c26cd3270 | ||
![]() |
938af73059 | ||
![]() |
1c047366d2 | ||
![]() |
cb20f0cbb0 | ||
![]() |
468251c84e | ||
![]() |
ca86ae0c9a | ||
![]() |
59221b0b4e | ||
![]() |
d3e0640400 | ||
![]() |
bcb72321f5 | ||
![]() |
4060af715d | ||
![]() |
2ec0237e83 | ||
![]() |
c5593880f2 | ||
![]() |
3673cbce4f | ||
![]() |
1f6f7be4b2 | ||
![]() |
580cce3506 | ||
![]() |
36ba546fc6 | ||
![]() |
7f37799cbe | ||
![]() |
5570eeeff9 | ||
![]() |
2b186ce6e0 | ||
![]() |
72938fed69 | ||
![]() |
d54c806e03 | ||
![]() |
7eb3551485 | ||
![]() |
a628a36082 | ||
![]() |
0d3e04ff25 | ||
![]() |
0c78a3f7b0 | ||
![]() |
fb1f574c26 | ||
![]() |
7f15c18fca | ||
![]() |
7a8dab2d58 | ||
![]() |
6f3dfad550 |
69
.github/CONTRIBUTING.md
vendored
69
.github/CONTRIBUTING.md
vendored
@@ -1,65 +1,46 @@
|
||||
NewPipe contribution guidelines
|
||||
===============================
|
||||
|
||||
PLEASE READ THESE GUIDELINES CAREFULLY BEFORE ANY CONTRIBUTION!
|
||||
|
||||
## Crash reporting
|
||||
|
||||
Do not report crashes in the GitHub issue tracker. NewPipe has an automated crash report system that will ask you to
|
||||
send a report via e-mail when a crash occurs. This contains all the data we need for debugging, and allows you to even
|
||||
add a comment to it. You'll see exactly what is sent, the system is 100% transparent.
|
||||
Report crashes through the automated crash report system of NewPipe.
|
||||
This way all the data needed for debugging is included in your bugreport for GitHub.
|
||||
You'll see exactly what is sent, be able to add your comments, and then send it.
|
||||
|
||||
## Issue reporting/feature requests
|
||||
|
||||
* Search the [existing issues](https://github.com/TeamNewPipe/NewPipe/issues) first to make sure your issue/feature
|
||||
hasn't been reported/requested before.
|
||||
* Check whether your issue/feature is already fixed/implemented.
|
||||
* Check if the issue still exists in the latest release/beta version.
|
||||
* If you are an Android/Java developer, you are always welcome to fix an issue or implement a feature yourself. PRs welcome!
|
||||
* We use English for development. Issues in other languages will be closed and ignored.
|
||||
* Please only add *one* issue at a time. Do not put multiple issues into one thread.
|
||||
* Follow the template! Issues or feature requests not matching the template might be closed.
|
||||
* **Already reported**? Browse the [existing issues](https://github.com/TeamNewPipe/NewPipe/issues) to make sure your issue/feature hasn't been reported/requested.
|
||||
* **Already fixed**? Check whether your issue/feature is already fixed/implemented.
|
||||
* **Still relevant**? Check if the issue still exists in the latest release/beta version.
|
||||
* **Can you fix it**? If you are an Android/Java developer, you are always welcome to fix an issue or implement a feature yourself. PRs welcome! See [Code contribution](#code-contribution) for more info.
|
||||
* **Is it in English**? Issues in other languages will be ignored unless someone translates them.
|
||||
* **Is it one issue**? Multiple issues require multiple reports, that can be linked to track their statuses.
|
||||
* **The template**: Fill it out, everyone wins. Your issue has a chance of getting fixed.
|
||||
|
||||
## Bug Fixing
|
||||
* If you want to help NewPipe to become free of bugs (this is our utopic goal for NewPipe), you can send us an email to
|
||||
<a href="mailto:tnp@newpipe.schabi.org">tnp@newpipe.schabi.org</a> to let us know that you intend to help. We'll send you further instructions. You may, on request,
|
||||
register at our [Sentry](https://sentry.schabi.org) instance (see section "Crash reporting" for more information).
|
||||
|
||||
## Translation
|
||||
|
||||
* NewPipe is translated via [Weblate](https://hosted.weblate.org/projects/newpipe/strings/). You can log in there
|
||||
with your GitHub account.
|
||||
* If the language you want to translate is not on Weblate, you can add it: see [How to add a new language](https://github.com/TeamNewPipe/NewPipe/wiki/How-to-add-a-new-language-to-NewPipe) in the wiki.
|
||||
* NewPipe is translated via [Weblate](https://hosted.weblate.org/projects/newpipe/strings/). Log in there with your GitHub account, or register.
|
||||
* Add the language you want to translate if it is not there already: see [How to add a new language](https://github.com/TeamNewPipe/NewPipe/wiki/How-to-add-a-new-language-to-NewPipe) in the wiki.
|
||||
|
||||
## Code contribution
|
||||
|
||||
* If you want to add a feature or change one, please open an issue describing your change. This gives the team and community a chance to give feedback before you spend any time on something that could be done differently or not done at all. It also prevents two contributors from working on the same thing and one being disappointed when only one user's code can be added.
|
||||
* Stick to NewPipe's style conventions: follow [checkStyle](https://github.com/checkstyle/checkstyle). It will run each time you build the project.
|
||||
* Do not bring non-free software (e.g. binary blobs) into the project. Also, make sure you do not introduce Google
|
||||
* If you want to help out with an existing bug report or feature request, leave a comment on that issue saying you want to try your hand at it.
|
||||
* If there is no existing issue for what you want to work on, open a new one describing your changes. This gives the team and the community a chance to give feedback before you spend time on something that is already in development, should be done differently, or should be avoided completely.
|
||||
* Stick to NewPipe's style conventions of [checkStyle](https://github.com/checkstyle/checkstyle). It runs each time you build the project.
|
||||
* Do not bring non-free software (e.g. binary blobs) into the project. Make sure you do not introduce Google
|
||||
libraries.
|
||||
* Stick to [F-Droid contribution guidelines](https://f-droid.org/wiki/page/Inclusion_Policy).
|
||||
* Make changes on a separate branch with a meaningful name, not on the master neither dev branch. This is commonly known as *feature branch workflow*. You
|
||||
may then send your changes as a pull request (PR) on GitHub.
|
||||
* When submitting changes, you confirm that your code is licensed under the terms of the
|
||||
[GNU General Public License v3](https://www.gnu.org/licenses/gpl-3.0.html).
|
||||
* Please test (compile and run) your code before you submit changes! Ideally, provide test feedback in the PR
|
||||
description. Untested code will **not** be merged!
|
||||
* Make changes on a separate branch with a meaningful name, not on the _master_ branch or the _dev_ branch. This is commonly known as *feature branch workflow*. You may then send your changes as a pull request (PR) on GitHub.
|
||||
* Please test (compile and run) your code before submitting changes! Ideally, provide test feedback in the PR description. Untested code will **not** be merged!
|
||||
* Make sure your PR is up-to-date with the rest of the code. Often, a simple click on "Update branch" will do the job, but if not, you must rebase the dev branch manually and resolve the problems on your own. You can find help [on the wiki](https://github.com/TeamNewPipe/NewPipe/wiki/How-to-merge-a-PR). That makes the maintainers' jobs way easier.
|
||||
* Please show intention to maintain your features and code after you contribute a PR. Unmaintained code is a hassle for core developers. If you do not intend to maintain features you plan to contribute, please rethink your submission, or clearly state that in the PR description.
|
||||
* Respond if someone requests changes or otherwise raises issues about your PRs.
|
||||
* Send PRs that only cover one specific issue/solution/bug. Do not send PRs that are huge and consist of multiple independent solutions.
|
||||
* Try to figure out yourself why builds on our CI fail.
|
||||
* Make sure your PR is up-to-date with the rest of the code. Often, a simple click on "Update branch" will do the job,
|
||||
but if not, you are asked to rebase the dev branch manually and resolve the problems on your own. You can find help [on the wiki](https://github.com/TeamNewPipe/NewPipe/wiki/How-to-merge-a-PR). That will make the
|
||||
maintainers' jobs way easier.
|
||||
* Please show intention to maintain your features and code after you contributed it. Unmaintained code is a hassle for
|
||||
the core developers, and just adds work. If you do not intend to maintain features you contributed, please think again
|
||||
about submission, or clearly state that in the description of your PR.
|
||||
* Respond yourselves if someone requests changes or otherwise raises issues about your PRs.
|
||||
* Send PR that only cover one specific issue/solution/bug. Do not send PRs that are huge and consists of multiple
|
||||
independent solutions.
|
||||
|
||||
## Communication
|
||||
|
||||
* There is an IRC channel on Freenode which is regularly visited by the core team and other developers:
|
||||
[#newpipe](irc:irc.freenode.net/newpipe). [Click here for Webchat](https://webchat.freenode.net/?channels=newpipe)!
|
||||
* If you want to get in touch with the core team or one of our other contributors you can send an email to
|
||||
<a href="mailto:tnp@newpipe.schabi.org">tnp@newpipe.schabi.org</a>. Please do not send issue reports, they will be ignored and remain unanswered! Use the GitHub issue
|
||||
tracker described above!
|
||||
* Feel free to post suggestions, changes, ideas etc. on GitHub or IRC!
|
||||
* The [#newpipe](irc:irc.freenode.net/newpipe) channel on freenode has the core team and other developers in it. [Click here for webchat](https://webchat.freenode.net/?channels=newpipe)!
|
||||
* You can also use a Matrix account to join the Newpipe channel at [#freenode_#newpipe:matrix.org](https://matrix.to/#/#freenode_#newpipe:matrix.org).
|
||||
* Post suggestions, changes, ideas etc. on GitHub or IRC.
|
||||
|
@@ -20,7 +20,7 @@
|
||||
|
||||
<b>WARNING: THIS IS A BETA VERSION, THEREFORE YOU MAY ENCOUNTER BUGS. IF YOU DO, OPEN AN ISSUE VIA OUR GITHUB REPOSITORY.</b>
|
||||
|
||||
<b>PUTTING NEWPIPE OR ANY FORK OF IT INTO GOOGLE PLAYSTORE VIOLATES THEIR TERMS OF CONDITIONS.</b>
|
||||
<b>PUTTING NEWPIPE OR ANY FORK OF IT INTO THE GOOGLE PLAY STORE VIOLATES THEIR TERMS AND CONDITIONS.</b>
|
||||
|
||||
## Screenshots
|
||||
|
||||
@@ -87,7 +87,7 @@ When a change to the NewPipe code occurs (due to either adding features or bug f
|
||||
3. Download the APK from [Github Releases](https://github.com/TeamNewPipe/NewPipe/releases) and install it as soon as we publish a release.
|
||||
4. Update via F-droid. This is the slowest method of getting updates, as F-Droid must recognize changes, build the APK itself, sign it, then push the update to users.
|
||||
|
||||
We recommend method 2 for most users. APKs installed using method 2 or 3 are compatible with each other, but not with those installed using method 4. This is due to the same signing key (ours) being using for 2 and 3, but a different signing key (F-Droid's) being used for 4. Building a debug APK using method 1 excludes a key entirely. Signing keys help ensure that a user isn't tricked into installing a malicious update to an app.
|
||||
We recommend method 2 for most users. APKs installed using method 2 or 3 are compatible with each other, but not with those installed using method 4. This is due to the same signing key (ours) being used for 2 and 3, but a different signing key (F-Droid's) being used for 4. Building a debug APK using method 1 excludes a key entirely. Signing keys help ensure that a user isn't tricked into installing a malicious update to an app.
|
||||
|
||||
In the meanwhile, if you want to switch sources for some reason (e.g. NewPipe's core functionality was broken and F-Droid doesn't have the update yet), we recommend following this procedure:
|
||||
1. Back up your data via Settings > Content > Export Database so you keep your history, subscriptions, and playlists
|
||||
|
@@ -13,8 +13,8 @@ android {
|
||||
resValue "string", "app_name", "NewPipe"
|
||||
minSdkVersion 19
|
||||
targetSdkVersion 29
|
||||
versionCode 958
|
||||
versionName "0.20.4"
|
||||
versionCode 960
|
||||
versionName "0.20.6"
|
||||
|
||||
multiDexEnabled true
|
||||
|
||||
@@ -175,7 +175,7 @@ dependencies {
|
||||
|
||||
// NewPipe dependencies
|
||||
// You can use a local version by uncommenting a few lines in settings.gradle
|
||||
implementation 'com.github.TeamNewPipe:NewPipeExtractor:650f0920fea535e08728d895d7b21f19c740817c'
|
||||
implementation 'com.github.TeamNewPipe:NewPipeExtractor:b3835bd616ab28b861c83dcefd56e1754c6d20be'
|
||||
implementation "com.github.TeamNewPipe:nanojson:1d9e1aea9049fc9f85e68b43ba39fe7be1c1f751"
|
||||
|
||||
implementation "org.jsoup:jsoup:1.13.1"
|
||||
|
@@ -305,8 +305,7 @@
|
||||
<data android:host="peertube.cpy.re" />
|
||||
<data android:host="peertube.mastodon.host" />
|
||||
<data android:host="peertube.fr" />
|
||||
<data android:host="peertube.live" />
|
||||
<data android:host="peertube.video" />
|
||||
<data android:host="tilvids.com" />
|
||||
<data android:host="tube.privacytools.io" />
|
||||
<data android:host="video.ploud.fr" />
|
||||
<data android:host="video.lqdn.fr" />
|
||||
|
@@ -51,10 +51,10 @@ public final class CheckForNewAppVersion {
|
||||
private static final String NEWPIPE_API_URL = "https://newpipe.schabi.org/api/data.json";
|
||||
|
||||
/**
|
||||
* Method to get the apk's SHA1 key. See https://stackoverflow.com/questions/9293019/#22506133.
|
||||
* Method to get the APK's SHA1 key. See https://stackoverflow.com/questions/9293019/#22506133.
|
||||
*
|
||||
* @param application The application
|
||||
* @return String with the apk's SHA1 fingeprint in hexadecimal
|
||||
* @return String with the APK's SHA1 fingerprint in hexadecimal
|
||||
*/
|
||||
@NonNull
|
||||
private static String getCertificateSHA1Fingerprint(@NonNull final Application application) {
|
||||
|
@@ -7,6 +7,7 @@ import org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity
|
||||
import org.schabi.newpipe.database.stream.model.StreamEntity
|
||||
import org.schabi.newpipe.database.stream.model.StreamStateEntity
|
||||
import org.schabi.newpipe.extractor.stream.StreamInfoItem
|
||||
import kotlin.jvm.Throws
|
||||
|
||||
class PlaylistStreamEntry(
|
||||
@Embedded
|
||||
|
@@ -1,10 +1,29 @@
|
||||
package org.schabi.newpipe.ktx
|
||||
|
||||
import java.time.OffsetDateTime
|
||||
import java.time.ZoneId
|
||||
import java.time.ZoneOffset
|
||||
import java.time.temporal.ChronoField
|
||||
import java.util.Calendar
|
||||
import java.util.Date
|
||||
import java.util.GregorianCalendar
|
||||
import java.util.TimeZone
|
||||
|
||||
fun OffsetDateTime.toCalendar(zoneId: ZoneId = ZoneId.systemDefault()): Calendar {
|
||||
return GregorianCalendar.from(if (zoneId != offset) atZoneSameInstant(zoneId) else toZonedDateTime())
|
||||
// This method is a modified version of GregorianCalendar.from(ZonedDateTime).
|
||||
// Math.addExact() and Math.multiplyExact() are desugared even though lint displays a warning.
|
||||
@SuppressWarnings("NewApi")
|
||||
fun OffsetDateTime.toCalendar(): Calendar {
|
||||
val cal = GregorianCalendar(TimeZone.getTimeZone("UTC"))
|
||||
val offsetDateTimeUTC = withOffsetSameInstant(ZoneOffset.UTC)
|
||||
cal.gregorianChange = Date(Long.MIN_VALUE)
|
||||
cal.firstDayOfWeek = Calendar.MONDAY
|
||||
cal.minimalDaysInFirstWeek = 4
|
||||
try {
|
||||
cal.timeInMillis = Math.addExact(
|
||||
Math.multiplyExact(offsetDateTimeUTC.toEpochSecond(), 1000),
|
||||
offsetDateTimeUTC[ChronoField.MILLI_OF_SECOND].toLong()
|
||||
)
|
||||
} catch (ex: ArithmeticException) {
|
||||
throw IllegalArgumentException(ex)
|
||||
}
|
||||
return cal
|
||||
}
|
||||
|
@@ -9,7 +9,7 @@ public interface ImportExportEventListener {
|
||||
void onSizeReceived(int size);
|
||||
|
||||
/**
|
||||
* Called everytime an item has been parsed/resolved.
|
||||
* Called every time an item has been parsed/resolved.
|
||||
*
|
||||
* @param itemName the name of the subscription item
|
||||
*/
|
||||
|
@@ -684,7 +684,7 @@ public abstract class BasePlayer implements
|
||||
|
||||
public void onMuteUnmuteButtonClicked() {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "onMuteUnmuteButtonClicled() called");
|
||||
Log.d(TAG, "onMuteUnmuteButtonClicked() called");
|
||||
}
|
||||
simpleExoPlayer.setVolume(isMuted() ? 1 : 0);
|
||||
}
|
||||
|
@@ -618,7 +618,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
|
||||
progressLiveSync.setClickable(!player.isLiveEdge());
|
||||
}
|
||||
|
||||
// this will make shure progressCurrentTime has the same width as progressEndTime
|
||||
// this will make sure progressCurrentTime has the same width as progressEndTime
|
||||
final ViewGroup.LayoutParams endTimeParams = progressEndTime.getLayoutParams();
|
||||
final ViewGroup.LayoutParams currentTimeParams = progressCurrentTime.getLayoutParams();
|
||||
currentTimeParams.width = progressEndTime.getWidth();
|
||||
|
@@ -26,12 +26,12 @@ public class LoadController implements LoadControl {
|
||||
}
|
||||
|
||||
private LoadController(final int initialPlaybackBufferMs,
|
||||
final int minimumPlaybackbufferMs,
|
||||
final int minimumPlaybackBufferMs,
|
||||
final int optimalPlaybackBufferMs) {
|
||||
this.initialPlaybackBufferUs = initialPlaybackBufferMs * 1000;
|
||||
|
||||
final DefaultLoadControl.Builder builder = new DefaultLoadControl.Builder();
|
||||
builder.setBufferDurationsMs(minimumPlaybackbufferMs, optimalPlaybackBufferMs,
|
||||
builder.setBufferDurationsMs(minimumPlaybackBufferMs, optimalPlaybackBufferMs,
|
||||
initialPlaybackBufferMs, initialPlaybackBufferMs);
|
||||
internalLoadControl = builder.createDefaultLoadControl();
|
||||
}
|
||||
|
@@ -128,9 +128,9 @@ abstract class AbstractInfoPlayQueue<T extends ListInfo, U extends InfoItem> ext
|
||||
fetchReactor = null;
|
||||
}
|
||||
|
||||
private static List<PlayQueueItem> extractListItems(final List<StreamInfoItem> infos) {
|
||||
private static List<PlayQueueItem> extractListItems(final List<StreamInfoItem> infoItems) {
|
||||
final List<PlayQueueItem> result = new ArrayList<>();
|
||||
for (final InfoItem stream : infos) {
|
||||
for (final InfoItem stream : infoItems) {
|
||||
if (stream instanceof StreamInfoItem) {
|
||||
result.add(new PlayQueueItem((StreamInfoItem) stream));
|
||||
}
|
||||
|
@@ -5,7 +5,7 @@ import androidx.annotation.StringRes
|
||||
import kotlinx.android.parcel.Parcelize
|
||||
|
||||
@Parcelize
|
||||
class ErrorInfo private constructor(
|
||||
class ErrorInfo(
|
||||
val userAction: UserAction?,
|
||||
val serviceName: String,
|
||||
val request: String,
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -5,7 +5,7 @@ import android.content.Context;
|
||||
import org.schabi.newpipe.R;
|
||||
|
||||
/**
|
||||
* Created by Chrsitian Schabesberger on 28.09.17.
|
||||
* Created by Christian Schabesberger on 28.09.17.
|
||||
* KioskTranslator.java is part of NewPipe.
|
||||
* <p>
|
||||
* NewPipe is free software: you can redistribute it and/or modify
|
||||
|
@@ -141,7 +141,7 @@ public final class ListHelper {
|
||||
final SharedPreferences preferences
|
||||
= PreferenceManager.getDefaultSharedPreferences(context);
|
||||
|
||||
// Load the prefered resolution otherwise the best available
|
||||
// Load the preferred resolution otherwise the best available
|
||||
String resolution = preferences != null
|
||||
? preferences.getString(context.getString(key), context.getString(value))
|
||||
: context.getString(R.string.best_resolution_key);
|
||||
@@ -161,7 +161,7 @@ public final class ListHelper {
|
||||
*
|
||||
* @param defaultResolution the default resolution to look for
|
||||
* @param bestResolutionKey key of the best resolution
|
||||
* @param defaultFormat the default fomat to look for
|
||||
* @param defaultFormat the default format to look for
|
||||
* @param videoStreams list of the video streams to check
|
||||
* @return index of the default resolution&format
|
||||
*/
|
||||
@@ -351,7 +351,7 @@ public final class ListHelper {
|
||||
* @param targetResolution the resolution to look for
|
||||
* @param targetFormat the format to look for
|
||||
* @param videoStreams the available video streams
|
||||
* @return the index of the prefered video stream
|
||||
* @return the index of the preferred video stream
|
||||
*/
|
||||
static int getVideoStreamIndex(final String targetResolution, final MediaFormat targetFormat,
|
||||
final List<VideoStream> videoStreams) {
|
||||
@@ -413,7 +413,7 @@ public final class ListHelper {
|
||||
* @param context Android app context
|
||||
* @param defaultResolution the default resolution
|
||||
* @param videoStreams the list of video streams to check
|
||||
* @return the index of the prefered video stream
|
||||
* @return the index of the preferred video stream
|
||||
*/
|
||||
private static int getDefaultResolutionWithDefaultFormat(final Context context,
|
||||
final String defaultResolution,
|
||||
|
@@ -20,6 +20,7 @@ import org.ocpsoft.prettytime.units.Decade;
|
||||
import org.schabi.newpipe.R;
|
||||
import org.schabi.newpipe.extractor.ListExtractor;
|
||||
import org.schabi.newpipe.extractor.localization.ContentCountry;
|
||||
import org.schabi.newpipe.ktx.OffsetDateTimeKt;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
@@ -30,7 +31,6 @@ import java.time.format.DateTimeFormatter;
|
||||
import java.time.format.FormatStyle;
|
||||
import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
@@ -314,7 +314,7 @@ public final class Localization {
|
||||
}
|
||||
|
||||
public static String relativeTime(final OffsetDateTime offsetDateTime) {
|
||||
return relativeTime(GregorianCalendar.from(offsetDateTime.toZonedDateTime()));
|
||||
return relativeTime(OffsetDateTimeKt.toCalendar(offsetDateTime));
|
||||
}
|
||||
|
||||
public static String relativeTime(final Calendar calendarTime) {
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -21,7 +21,7 @@ import static us.shandian.giga.get.DownloadMission.ERROR_HTTP_FORBIDDEN;
|
||||
* Single-threaded fallback mode
|
||||
*/
|
||||
public class DownloadRunnableFallback extends Thread {
|
||||
private static final String TAG = "DownloadRunnableFallbac";
|
||||
private static final String TAG = "DownloadRunnableFallback";
|
||||
|
||||
private final DownloadMission mMission;
|
||||
|
||||
|
@@ -1,18 +1,18 @@
|
||||
package us.shandian.giga.get;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
public class FinishedMission extends Mission {
|
||||
|
||||
public FinishedMission() {
|
||||
}
|
||||
|
||||
public FinishedMission(@NonNull DownloadMission mission) {
|
||||
source = mission.source;
|
||||
length = mission.length;
|
||||
timestamp = mission.timestamp;
|
||||
kind = mission.kind;
|
||||
storage = mission.storage;
|
||||
}
|
||||
|
||||
}
|
||||
package us.shandian.giga.get;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
public class FinishedMission extends Mission {
|
||||
|
||||
public FinishedMission() {
|
||||
}
|
||||
|
||||
public FinishedMission(@NonNull DownloadMission mission) {
|
||||
source = mission.source;
|
||||
length = mission.length;
|
||||
timestamp = mission.timestamp;
|
||||
kind = mission.kind;
|
||||
storage = mission.storage;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,64 +1,64 @@
|
||||
package us.shandian.giga.get;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Calendar;
|
||||
|
||||
import us.shandian.giga.io.StoredFileHelper;
|
||||
|
||||
public abstract class Mission implements Serializable {
|
||||
private static final long serialVersionUID = 1L;// last bump: 27 march 2019
|
||||
|
||||
/**
|
||||
* Source url of the resource
|
||||
*/
|
||||
public String source;
|
||||
|
||||
/**
|
||||
* Length of the current resource
|
||||
*/
|
||||
public long length;
|
||||
|
||||
/**
|
||||
* creation timestamp (and maybe unique identifier)
|
||||
*/
|
||||
public long timestamp;
|
||||
|
||||
/**
|
||||
* pre-defined content type
|
||||
*/
|
||||
public char kind;
|
||||
|
||||
/**
|
||||
* The downloaded file
|
||||
*/
|
||||
public StoredFileHelper storage;
|
||||
|
||||
public long getTimestamp() {
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the downloaded file
|
||||
*
|
||||
* @return {@code true] if and only if the file is successfully deleted, otherwise, {@code false}
|
||||
*/
|
||||
public boolean delete() {
|
||||
if (storage != null) return storage.delete();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicate if this mission is deleted whatever is stored
|
||||
*/
|
||||
public transient boolean deleted = false;
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String toString() {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTimeInMillis(timestamp);
|
||||
return "[" + calendar.getTime().toString() + "] " + (storage.isInvalid() ? storage.getName() : storage.getUri());
|
||||
}
|
||||
}
|
||||
package us.shandian.giga.get;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Calendar;
|
||||
|
||||
import us.shandian.giga.io.StoredFileHelper;
|
||||
|
||||
public abstract class Mission implements Serializable {
|
||||
private static final long serialVersionUID = 1L;// last bump: 27 march 2019
|
||||
|
||||
/**
|
||||
* Source url of the resource
|
||||
*/
|
||||
public String source;
|
||||
|
||||
/**
|
||||
* Length of the current resource
|
||||
*/
|
||||
public long length;
|
||||
|
||||
/**
|
||||
* creation timestamp (and maybe unique identifier)
|
||||
*/
|
||||
public long timestamp;
|
||||
|
||||
/**
|
||||
* pre-defined content type
|
||||
*/
|
||||
public char kind;
|
||||
|
||||
/**
|
||||
* The downloaded file
|
||||
*/
|
||||
public StoredFileHelper storage;
|
||||
|
||||
public long getTimestamp() {
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the downloaded file
|
||||
*
|
||||
* @return {@code true] if and only if the file is successfully deleted, otherwise, {@code false}
|
||||
*/
|
||||
public boolean delete() {
|
||||
if (storage != null) return storage.delete();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicate if this mission is deleted whatever is stored
|
||||
*/
|
||||
public transient boolean deleted = false;
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String toString() {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTimeInMillis(timestamp);
|
||||
return "[" + calendar.getTime().toString() + "] " + (storage.isInvalid() ? storage.getName() : storage.getUri());
|
||||
}
|
||||
}
|
||||
|
@@ -1,11 +1,11 @@
|
||||
package us.shandian.giga.io;
|
||||
|
||||
public interface ProgressReport {
|
||||
|
||||
/**
|
||||
* Report the size of the new file
|
||||
*
|
||||
* @param progress the new size
|
||||
*/
|
||||
void report(long progress);
|
||||
package us.shandian.giga.io;
|
||||
|
||||
public interface ProgressReport {
|
||||
|
||||
/**
|
||||
* Report the size of the new file
|
||||
*
|
||||
* @param progress the new size
|
||||
*/
|
||||
void report(long progress);
|
||||
}
|
@@ -1,44 +1,44 @@
|
||||
package us.shandian.giga.postprocessing;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.schabi.newpipe.streams.OggFromWebMWriter;
|
||||
import org.schabi.newpipe.streams.io.SharpStream;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
class OggFromWebmDemuxer extends Postprocessing {
|
||||
|
||||
OggFromWebmDemuxer() {
|
||||
super(true, true, ALGORITHM_OGG_FROM_WEBM_DEMUXER);
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean test(SharpStream... sources) throws IOException {
|
||||
ByteBuffer buffer = ByteBuffer.allocate(4);
|
||||
sources[0].read(buffer.array());
|
||||
|
||||
// youtube uses WebM as container, but the file extension (format suffix) is "*.opus"
|
||||
// check if the file is a webm/mkv file before proceed
|
||||
|
||||
switch (buffer.getInt()) {
|
||||
case 0x1a45dfa3:
|
||||
return true;// webm/mkv
|
||||
case 0x4F676753:
|
||||
return false;// ogg
|
||||
}
|
||||
|
||||
throw new UnsupportedOperationException("file not recognized, failed to demux the audio stream");
|
||||
}
|
||||
|
||||
@Override
|
||||
int process(SharpStream out, @NonNull SharpStream... sources) throws IOException {
|
||||
OggFromWebMWriter demuxer = new OggFromWebMWriter(sources[0], out);
|
||||
demuxer.parseSource();
|
||||
demuxer.selectTrack(0);
|
||||
demuxer.build();
|
||||
|
||||
return OK_RESULT;
|
||||
}
|
||||
}
|
||||
package us.shandian.giga.postprocessing;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.schabi.newpipe.streams.OggFromWebMWriter;
|
||||
import org.schabi.newpipe.streams.io.SharpStream;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
class OggFromWebmDemuxer extends Postprocessing {
|
||||
|
||||
OggFromWebmDemuxer() {
|
||||
super(true, true, ALGORITHM_OGG_FROM_WEBM_DEMUXER);
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean test(SharpStream... sources) throws IOException {
|
||||
ByteBuffer buffer = ByteBuffer.allocate(4);
|
||||
sources[0].read(buffer.array());
|
||||
|
||||
// youtube uses WebM as container, but the file extension (format suffix) is "*.opus"
|
||||
// check if the file is a webm/mkv file before proceed
|
||||
|
||||
switch (buffer.getInt()) {
|
||||
case 0x1a45dfa3:
|
||||
return true;// webm/mkv
|
||||
case 0x4F676753:
|
||||
return false;// ogg
|
||||
}
|
||||
|
||||
throw new UnsupportedOperationException("file not recognized, failed to demux the audio stream");
|
||||
}
|
||||
|
||||
@Override
|
||||
int process(SharpStream out, @NonNull SharpStream... sources) throws IOException {
|
||||
OggFromWebMWriter demuxer = new OggFromWebMWriter(sources[0], out);
|
||||
demuxer.parseSource();
|
||||
demuxer.selectTrack(0);
|
||||
demuxer.build();
|
||||
|
||||
return OK_RESULT;
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,29 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="30dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginRight="8dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/item_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:text="relative header"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:textSize="16sp"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="2dp"
|
||||
android:background="@color/black_settings_accent_color" />
|
||||
|
||||
</LinearLayout>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="30dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginRight="8dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/item_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:text="relative header"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:textSize="16sp"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="2dp"
|
||||
android:background="@color/black_settings_accent_color" />
|
||||
|
||||
</LinearLayout>
|
||||
|
@@ -4,7 +4,7 @@
|
||||
<string name="cancel">إلغاء</string>
|
||||
<string name="choose_browser">اختر المتصفح</string>
|
||||
<string name="dark_theme_title">داكن</string>
|
||||
<string name="default_audio_format_title">صيغة الصوت الإفتراضية</string>
|
||||
<string name="default_audio_format_title">صيغة الصوت الافتراضية</string>
|
||||
<string name="default_resolution_title">الدقة الافتراضية</string>
|
||||
<string name="detail_dislikes_img_view_description">عدم الإعجاب</string>
|
||||
<string name="detail_likes_img_view_description">الإعجابات</string>
|
||||
@@ -22,7 +22,7 @@
|
||||
<string name="err_dir_create">"لا يمكن إنشاء مجلد للتنزيلات في '%1$s'"</string>
|
||||
<string name="info_dir_created">إنشاء دليل التحميل \'%1$s\'</string>
|
||||
<string name="install">تثبيت</string>
|
||||
<string name="kore_not_found">تطبيق Kore غير موجود. هل تريد تنصيبه؟</string>
|
||||
<string name="kore_not_found">تطبيق Kore غير موجود. هل تريد تثبيته؟</string>
|
||||
<string name="light_theme_title">فاتح</string>
|
||||
<string name="list_thumbnail_view_description">صور معاينة الفيديو</string>
|
||||
<string name="network_error">خطأ في الشبكة</string>
|
||||
@@ -87,13 +87,13 @@
|
||||
<string name="controls_popup_title">نافذة المنبثقة</string>
|
||||
<string name="autoplay_by_calling_app_summary">تشغيل مقطع الفيديو عند إستدعاء NewPipe من تطبيق آخر</string>
|
||||
<string name="default_popup_resolution_title">الدقة الافتراضية لنوافذ المنبثقة</string>
|
||||
<string name="show_higher_resolutions_title">عرض أعلى جودة</string>
|
||||
<string name="show_higher_resolutions_summary">بعض الأجهزة فقط تدعم تشغيل مقاطع الفيديو 2K/4K</string>
|
||||
<string name="default_video_format_title">تنسيق الفيديو الافتراضي</string>
|
||||
<string name="show_higher_resolutions_title">عرض دقّات أعلى</string>
|
||||
<string name="show_higher_resolutions_summary">فقط بعض الأجهزة تدعم تشغيل مقاطع فيديو 2K/4K</string>
|
||||
<string name="default_video_format_title">صيغة الفيديو الافتراضية</string>
|
||||
<string name="popup_remember_size_pos_title">تذكر خصائص النوافذ المنبثقة</string>
|
||||
<string name="popup_remember_size_pos_summary">تذكر آخر مكان و حجم للنافذة المنبثقة</string>
|
||||
<string name="player_gesture_controls_title">اعدادات إيماءة المشغل</string>
|
||||
<string name="player_gesture_controls_summary">استخدم الإيماءات للتحكم في سطوع وصوت المشغل</string>
|
||||
<string name="player_gesture_controls_summary">استخدم الإيماءات للتحكم بسطوع ومستوى صوت المشغل</string>
|
||||
<string name="show_search_suggestions_title">اقتراحات البحث</string>
|
||||
<string name="show_search_suggestions_summary">عرض الاقتراحات عند البحث</string>
|
||||
<string name="enable_search_history_title">سجل البحث</string>
|
||||
@@ -157,7 +157,7 @@
|
||||
<string name="no_subscribers">ليس هناك مشترِكون</string>
|
||||
<plurals name="subscribers">
|
||||
<item quantity="zero">%s مشترك</item>
|
||||
<item quantity="one">%s مشترك</item>
|
||||
<item quantity="one">%s مشتركين</item>
|
||||
<item quantity="two">%s مشتركين</item>
|
||||
<item quantity="few">%s مشتركين</item>
|
||||
<item quantity="many">%s مشتركين</item>
|
||||
@@ -233,8 +233,8 @@
|
||||
<string name="title_activity_recaptcha">تحدي الكابتشا</string>
|
||||
<string name="hold_to_append">ضغط مطول للإدراج الى قائمة الانتظار</string>
|
||||
<plurals name="views">
|
||||
<item quantity="zero">%s مشاهدة</item>
|
||||
<item quantity="one">%s مشاهد</item>
|
||||
<item quantity="zero">%s مشاهد</item>
|
||||
<item quantity="one">%s مشاهدة</item>
|
||||
<item quantity="two">%s مشاهدة</item>
|
||||
<item quantity="few">%s مشاهدة</item>
|
||||
<item quantity="many">%s مشاهدة</item>
|
||||
@@ -268,8 +268,8 @@
|
||||
<string name="no_player_found_toast">لم يتم العثور على مشغل بث (يمكنك تثبيت VLC لتشغيله).</string>
|
||||
<string name="import_data_title">استيراد قاعدة البيانات</string>
|
||||
<string name="export_data_title">تصدير قاعدة البيانات</string>
|
||||
<string name="import_data_summary">يتجاوز السجل والاشتراكات الحالية</string>
|
||||
<string name="export_data_summary">تصدير السجل، الإشتراكات وقوائم التشغيل</string>
|
||||
<string name="import_data_summary">يلغي السجل الحالي والاشتراكات وقوائم التشغيل والإعدادات (اختياريًا)</string>
|
||||
<string name="export_data_summary">تصدير قوائم تشغيل, الاشتراكات, والإعدادات</string>
|
||||
<string name="show_info">عرض المعلومات</string>
|
||||
<string name="controls_add_to_playlist_title">إضافة إلى</string>
|
||||
<string name="settings_category_debug_title">تحليل</string>
|
||||
@@ -327,7 +327,7 @@
|
||||
<string name="metadata_cache_wipe_summary">إزالة جميع بيانات صفحات الويب المخزنة مؤقتًا</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">تم محو ذاكرة التخزين المؤقت للبيانات الوصفية</string>
|
||||
<string name="auto_queue_title">وضع البث القادم تلقائيا في قائمة الإنتظار</string>
|
||||
<string name="auto_queue_summary">استمر في إنهاء قائمة انتظار التشغيل (غير-المتكررة) من خلال إلحاق تدفق ذي صلة</string>
|
||||
<string name="auto_queue_summary">استمر في إنهاء قائمة انتظار التشغيل (الغير المتكررة) من خلال إلحاق بث ذي صلة</string>
|
||||
<string name="set_as_playlist_thumbnail">إضافة صورة مصغرة إلى قائمة التشغيل</string>
|
||||
<string name="bookmark_playlist">تفضيل قائمة التشغيل</string>
|
||||
<string name="playlist_thumbnail_change_success">تم تغيير الصورة المصغرة لقائمة التشغيل.</string>
|
||||
@@ -413,11 +413,11 @@
|
||||
<string name="tab_choose">اختر علامة التبويب</string>
|
||||
<string name="volume_gesture_control_summary">استخدم إيماءات التحكم في صوت المشغل</string>
|
||||
<string name="brightness_gesture_control_title">التحكم بالإيماءات السطوع</string>
|
||||
<string name="brightness_gesture_control_summary">استخدام الإيماءات للتحكم في سطوع المشغل</string>
|
||||
<string name="brightness_gesture_control_summary">استخدام الإيماءات للتحكم بسطوع المشغل</string>
|
||||
<string name="settings_category_updates_title">التحديثات</string>
|
||||
<string name="file_deleted">تم حذف الملف</string>
|
||||
<string name="app_update_notification_channel_name">تتبيه تحديث التطبيق</string>
|
||||
<string name="volume_gesture_control_title">إيماءة التحكم بالصوت</string>
|
||||
<string name="volume_gesture_control_title">إيماء التحكم بالصوت</string>
|
||||
<string name="events">الأحداث</string>
|
||||
<string name="app_update_notification_channel_description">الإخطارات لإصدار NewPipe الجديد</string>
|
||||
<string name="download_to_sdcard_error_title">وحدة التخزين الخارجية غير متوفرة</string>
|
||||
@@ -675,16 +675,18 @@
|
||||
<string name="notification_action_2_title">زر الإجراء الثالث</string>
|
||||
<string name="notification_action_1_title">زر الإجراء الثاني</string>
|
||||
<string name="notification_action_0_title">زر الإجراء الأول</string>
|
||||
<string name="notification_scale_to_square_image_summary">قياس الصورة المصغرة للفيديو المعروض في الإشعار من 16: 9 إلى 1: 1 نسبة العرض إلى الارتفاع (قد يؤدي إلى تشوهات)</string>
|
||||
<string name="notification_scale_to_square_image_title">مقياس الصورة المصغرة إلى نسبة عرض إلى ارتفاع 1: 1</string>
|
||||
<string name="notification_scale_to_square_image_summary">قياس الصورة المصغرة للفيديو المعروض في الإشعار من 16:9 إلى 1:1 نسبة العرض إلى الارتفاع (قد يؤدي إلى تشوهات)</string>
|
||||
<string name="notification_scale_to_square_image_title">مقياس الصورة المصغرة إلى نسبة عرض إلى ارتفاع 1:1</string>
|
||||
<string name="clear_cookie_summary">امسح ملفات تعريف الارتباط التي يخزنها NewPipe عند حل reCAPTCHA</string>
|
||||
<string name="recaptcha_cookies_cleared">تم مسح ملفات تعريف الارتباط reCAPTCHA</string>
|
||||
<string name="clear_cookie_title">امسح ملفات تعريف الارتباط reCAPTCHA</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">يوفر YouTube \"وضع تقييد المحتوى\" الذي يخفي المحتوى المحتمل للكبار.</string>
|
||||
<string name="show_age_restricted_content_summary">عرض المحتوى الذي يُحتمل أن يكون غير مناسب للأطفال لأن له حدًا عمريًا (مثل 18+).</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">يوفر YouTube \"وضع تقييد المحتوى\" الذي يخفي المحتوى المحتمل للكبار</string>
|
||||
<string name="show_age_restricted_content_summary">عرض المحتوى الذي يُحتمل أن يكون غير مناسب للأطفال لأن له حدًا عمريًا (مثل 18+)</string>
|
||||
<string name="show_memory_leaks">إظهار تسرب الذاكرة</string>
|
||||
<string name="enqueued">قائمة الانتظار</string>
|
||||
<string name="enqueue_stream">قائمة الانتظار</string>
|
||||
<string name="notification_colorize_summary">اجعل أندرويد يخصص لون الإشعار وفقا للون الرئيسي في الصورة المصغرة (لاحظ أن هذا غير متوفر على جميع الأجهزة</string>
|
||||
<string name="notification_colorize_summary">اجعل أندرويد يخصص لون الإشعار وفقا للّون الرئيسي في الصورة المصغرة (لاحظ أن هذا غير متوفر على جميع الأجهزة)</string>
|
||||
<string name="notification_colorize_title">تلوين الاشعارات</string>
|
||||
<string name="show_thumbnail_summary">إظهار الصورة المصغرة على شاشة القفل كخلفية وإخطارات داخلية</string>
|
||||
<string name="show_thumbnail_title">إظهار الصورة المصغرة</string>
|
||||
</resources>
|
File diff suppressed because it is too large
Load Diff
@@ -303,8 +303,8 @@
|
||||
<string name="preferred_player_fetcher_notification_message">正在加载请求的内容</string>
|
||||
<string name="import_data_title">导入数据库</string>
|
||||
<string name="export_data_title">导出数据库</string>
|
||||
<string name="import_data_summary">覆盖当前历史记录和订阅</string>
|
||||
<string name="export_data_summary">导出历史记录、订阅和播放列表</string>
|
||||
<string name="import_data_summary">覆盖您的当前播放历史、订阅、播放列表和(可选)设置</string>
|
||||
<string name="export_data_summary">导出历史记录、订阅、播放列表和设置</string>
|
||||
<string name="export_complete_toast">导出成功</string>
|
||||
<string name="import_complete_toast">导入成功</string>
|
||||
<string name="no_valid_zip_file">没有有效的ZIP文件</string>
|
||||
@@ -634,8 +634,10 @@
|
||||
<string name="clear_cookie_summary">清理你在解决验证码时 NewPipe 存储的cookies</string>
|
||||
<string name="recaptcha_cookies_cleared">reCAPTCHA cookies 已被清理</string>
|
||||
<string name="clear_cookie_title">清理 reCAPTCHA cookies</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube提供了一个“受限模式”,会隐藏潜在的成人内容。</string>
|
||||
<string name="show_age_restricted_content_summary">展示可能不适合儿童观看的内容,因为它有年龄限制(比如18岁以上)。</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube提供了一个“受限模式”,会隐藏潜在的成人内容</string>
|
||||
<string name="show_age_restricted_content_summary">展示可能不适合儿童观看的内容,因为有年龄限制(比如18岁以上)</string>
|
||||
<string name="notification_colorize_summary">让安卓系统根据视频缩略图的主色彩自定义通知的颜色(注意,该特性并非在所有设备上都可用)</string>
|
||||
<string name="notification_colorize_title">对通知着色</string>
|
||||
<string name="show_thumbnail_summary">在锁定屏幕上显示缩略图为背景和内部通知</string>
|
||||
<string name="show_thumbnail_title">显示缩略图</string>
|
||||
</resources>
|
@@ -255,7 +255,7 @@
|
||||
<string name="toast_no_player">Прыкладанне для прайгравання гэтага файла не ўстаноўлена</string>
|
||||
<string name="title_activity_about">Аб NewPipe</string>
|
||||
<string name="action_settings">Налады</string>
|
||||
<string name="action_about">Аб дадатку</string>
|
||||
<string name="action_about">А прыладзе</string>
|
||||
<string name="title_licenses">Іншыя ліцэнзіі</string>
|
||||
<string name="copyright" formatted="true">© %1$s %2$s пад ліцэнзіяй %3$s</string>
|
||||
<string name="error_unable_to_load_license">Не атрымалася загрузіць ліцэнзію</string>
|
||||
@@ -314,7 +314,7 @@
|
||||
<string name="play_queue_remove">Выдаліць</string>
|
||||
<string name="play_queue_stream_detail">Падрабязнасці</string>
|
||||
<string name="play_queue_audio_settings">Налады аўдыё</string>
|
||||
<string name="hold_to_append">Зацісніце, каб дадаць у чаргу</string>
|
||||
<string name="hold_to_append">Утрымлівайце, каб дадаць у чаргу</string>
|
||||
<string name="start_here_on_main">Пачаць адсюль у плэеры</string>
|
||||
<string name="start_here_on_background">Пачаць адсюль у фоне</string>
|
||||
<string name="start_here_on_popup">Пачаць адсюль у акне</string>
|
||||
@@ -402,7 +402,7 @@
|
||||
<string name="volume_gesture_control_summary">Мяняць гучнасць плэера жэстам</string>
|
||||
<string name="brightness_gesture_control_title">Жэст яркасці</string>
|
||||
<string name="brightness_gesture_control_summary">Мяняць яркасць плэера жэстам</string>
|
||||
<string name="settings_category_updates_title">Абнаўлення</string>
|
||||
<string name="settings_category_updates_title">Абнаўленні</string>
|
||||
<string name="file_deleted">Файл выдалены</string>
|
||||
<string name="app_update_notification_channel_name">Апавяшчэнне аб абнаўленні</string>
|
||||
<string name="app_update_notification_channel_description">Апавяшчэння аб новай версіі NewPipe</string>
|
||||
@@ -476,7 +476,7 @@
|
||||
<string name="error_insufficient_storage">Скончылася вольнае месца на прыладзе</string>
|
||||
<string name="error_progress_lost">Прагрэс страчаны, так як файл быў выдалены</string>
|
||||
<string name="error_timeout">Час злучэння выйшла</string>
|
||||
<string name="confirm_prompt">Вы ўпэўненыя\?</string>
|
||||
<string name="confirm_prompt">Вы ўпэўнены\?</string>
|
||||
<string name="enable_queue_limit">Абмежаваць чаргу загрузкі</string>
|
||||
<string name="enable_queue_limit_desc">Толькі адна адначасовая загрузка</string>
|
||||
<string name="start_downloads">Пачаць загрузку</string>
|
||||
@@ -492,8 +492,68 @@
|
||||
<string name="clear_playback_states_summary">Выдаліць ўсе пазіцыі прайгравання</string>
|
||||
<string name="youtube_restricted_mode_enabled_title">Абмежаваны рэжым YouTube</string>
|
||||
<string name="peertube_instance_add_https_only">Падтрымліваюцца толькі адрасы URL HTTPS</string>
|
||||
<string name="peertube_instance_add_title">Дадаць інстанцыю</string>
|
||||
<string name="peertube_instance_url_title">Інстанцыі PeerTube</string>
|
||||
<string name="peertube_instance_add_title">Дадаць экзэмпляр</string>
|
||||
<string name="peertube_instance_url_title">Экзэмпляры PeerTube</string>
|
||||
<string name="download_choose_new_path">Змяніце папкі загрузкі, каб змены ўступілі ў сілу</string>
|
||||
<string name="search_showing_result_for">Вынікі для: %s</string>
|
||||
<string name="notification_scale_to_square_image_title">Мініяцюра відэа ў 1:1</string>
|
||||
<string name="notification_scale_to_square_image_summary">Мініяцюра відэа ў апавяшчэнні з 16:9 да 1:1 (магчымі скажэнні)</string>
|
||||
<string name="notification_action_3_title">Кнопка чацвёртага дзеяння</string>
|
||||
<string name="notification_action_2_title">Кнопка трэцяга дзеяння</string>
|
||||
<string name="notification_action_1_title">Кнопка другога дзеяння</string>
|
||||
<string name="notification_action_0_title">Кнопка першага дзеяння</string>
|
||||
<string name="feed_groups_header_title">Групы каналаў</string>
|
||||
<string name="systems_language">Як у сістэме</string>
|
||||
<string name="app_language_title">Мова прылады</string>
|
||||
<string name="choose_instance_prompt">Выберыце экзэмпляр</string>
|
||||
<string name="deleted_downloads">Выдалена %1$d загрузак</string>
|
||||
<string name="delete_downloaded_files">Выдаліць загружаныя файлы</string>
|
||||
<string name="show_original_time_ago_summary">Арыгінальныя тэксты з сэрвісаў будуць бачны ў ленце элементаў</string>
|
||||
<string name="clear_cookie_summary">Ачысціце cookie, якія NewPipe захоўвае пры рашэнні reCAPTCHA</string>
|
||||
<string name="peertube_instance_add_exists">Экзэмпляр ужо існуе</string>
|
||||
<string name="peertube_instance_add_fail">Немагчыма праверыць экзэмпляр</string>
|
||||
<string name="peertube_instance_add_help">Увесці URL экзэмпляра</string>
|
||||
<string name="peertube_instance_url_summary">Абярыце любімыя экзэмпляры PeerTube</string>
|
||||
<string name="clear_queue_confirmation_description">Актыўны плэер быў зменены</string>
|
||||
<string name="clear_queue_confirmation_summary">Змена плэера можа замяніць вашу чаргу</string>
|
||||
<string name="clear_queue_confirmation_title">Запытаць, перш чым ачысціць чаргу</string>
|
||||
<string name="never">Ніколі</string>
|
||||
<string name="wifi_only">Толькі па Wi-Fi</string>
|
||||
<string name="show_original_time_ago_title">Паказаць арыгінальны час на элементах</string>
|
||||
<string name="unmute">Уключыць гук</string>
|
||||
<string name="mute">Цішына</string>
|
||||
<string name="enqueue_stream">Дадаць у чаргу</string>
|
||||
<string name="enqueued">Даданае у чаргу</string>
|
||||
<string name="title_activity_play_queue">Чарга прайгравання</string>
|
||||
<string name="most_liked">Найбольш папулярнае</string>
|
||||
<string name="local">Лакальнае</string>
|
||||
<string name="recently_added">Нядаўна дададзенае</string>
|
||||
<string name="no_playlist_bookmarked_yet">Няма закладак у плейлісце</string>
|
||||
<string name="select_a_playlist">Абярыце плэйліст</string>
|
||||
<string name="default_kiosk_page_summary">Кіёск па змаўчанні</string>
|
||||
<string name="recaptcha_done_button">Так</string>
|
||||
<string name="subtitle_activity_recaptcha">Націсніце \"Так\" калі вырашана</string>
|
||||
<string name="infinite_videos">∞ відэа</string>
|
||||
<string name="more_than_100_videos">100+ відэа</string>
|
||||
<string name="error_report_open_issue_button_text">Багрэпарт на GitHub</string>
|
||||
<string name="copy_for_github">Скапіруйце адфарматаваны багрэпарт</string>
|
||||
<string name="permission_display_over_apps">Дайце дазвол на адлюстраванне паверх іншых праграм</string>
|
||||
<string name="help">Дапамога</string>
|
||||
<string name="delete_playback_states_alert">Выдаліць усе пазіцыі прайгравання\?</string>
|
||||
<string name="clear_playback_states_title">Выдаліць пазіцыі прайгравання</string>
|
||||
<string name="clear_cookie_title">Ачысціць reCAPTCHA cookies</string>
|
||||
<string name="recaptcha_cookies_cleared">reCAPTCHA cookies былі ачышчаны</string>
|
||||
<string name="artists">Выканаўцы</string>
|
||||
<string name="albums">Альбомы</string>
|
||||
<string name="songs">Песні</string>
|
||||
<string name="videos_string">Відэа</string>
|
||||
<string name="auto_queue_toggle">Аўтаматычная чарга</string>
|
||||
<string name="seek_duration_title">Працягласць перамоткі ўперад/назад</string>
|
||||
<string name="notification_colorize_title">Каляровыя апавяшчэнні</string>
|
||||
<string name="notification_action_nothing">Нічога</string>
|
||||
<string name="notification_action_buffering">Буферызацыя</string>
|
||||
<string name="notification_action_shuffle">Ператасаваць</string>
|
||||
<string name="notification_action_repeat">Паўтор</string>
|
||||
<string name="notification_action_4_title">Кнопка пятага дзеяння</string>
|
||||
<string name="settings_category_notification_title">Паведамленні</string>
|
||||
</resources>
|
@@ -258,8 +258,8 @@
|
||||
<string name="just_once">Pouze jednou</string>
|
||||
<string name="import_data_title">Importovat databázi</string>
|
||||
<string name="export_data_title">Exportovat databázi</string>
|
||||
<string name="import_data_summary">Přepíše vaši dosavadní historii a odběry</string>
|
||||
<string name="export_data_summary">Exportuje historii, odběry a playlisty</string>
|
||||
<string name="import_data_summary">Přepíše Vaši dosavadní historii, odběry, playlisty a (volitelně) nastavení</string>
|
||||
<string name="export_data_summary">Exportuje historii, odběry, playlisty a nastavení</string>
|
||||
<string name="external_player_unsupported_link_type">Externí přehrávače nepodporují tyto druhy odkazů</string>
|
||||
<string name="invalid_url_toast">Neplatná URL</string>
|
||||
<string name="video_streams_empty">Nenalezeny žádné video streamy</string>
|
||||
@@ -338,14 +338,14 @@
|
||||
<string name="previous_export">Předchozí export</string>
|
||||
<string name="subscriptions_import_unsuccessful">Odběry nelze importovat</string>
|
||||
<string name="subscriptions_export_unsuccessful">Odběry nelze exportovat</string>
|
||||
<string name="import_youtube_instructions">"Importovat YouTube odběry stáhnutím exportního souboru:
|
||||
<string name="import_youtube_instructions">Importovat YouTube odběry stáhnutím exportního souboru:
|
||||
\n
|
||||
\n1. Přejděte na tuto URL adresu: %1$s
|
||||
\n2. Na vyžádání se přihlašte
|
||||
\n3. Klikněte na \"Jsou zahrnuta všechna data z YouTube\" pak na \"Zrušit výběr všech\" a pak vyberte jen \"odběry\" a klikněte na OK
|
||||
\n4. Klikněte na \"Další krok\" a pak na \"Vytvořit export\"
|
||||
\n5. Vyčkejte než se objeví tlačítko \"Stáhnout\" a klikněte na něj
|
||||
\n6. Ze staženého zip archivu extrahujte .json soubor (nejčastěji na cestě \"Takeout/YouTube a YouTube Music/odběry/odběry.json\") a importujte jej."</string>
|
||||
\n5. Vyčkejte než se objeví tlačítko \"Stáhnout\" a klikněte na něj
|
||||
\n6. Ze staženého zip archivu extrahujte .json soubor (nejčastěji na cestě \"Takeout/YouTube a YouTube Music/odběry/odběry.json\") a importujte jej.</string>
|
||||
<string name="import_soundcloud_instructions">Importovat SoundCloud profil zadáním URL adresy nebo vašeho ID:
|
||||
\n
|
||||
\n1. Ve svém prohlížeči povolte \"režim pro PC\" (pro mobilní zařízení není stránka dostupná)
|
||||
@@ -653,8 +653,10 @@
|
||||
<string name="clear_cookie_summary">Vymazat cookies, které NewPipe uloží, po vyřešení reCAPTCHA</string>
|
||||
<string name="recaptcha_cookies_cleared">Cookies reCAPTCHA byly vymazány</string>
|
||||
<string name="clear_cookie_title">Vymazat cookies reCAPTCHA</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube poskytuje \"Omezený režim\", který skrývá potenciální obsahy pro dospělé.</string>
|
||||
<string name="show_age_restricted_content_summary">Zobrazit obsah, i když je patrně nevhodný pro děti, protože odkazuje na věkové omezení (např. 18+).</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube poskytuje \"Omezený režim\", který skrývá potenciální obsahy pro dospělé</string>
|
||||
<string name="show_age_restricted_content_summary">Zobrazit obsah, i když je patrně nevhodný pro děti, protože odkazuje na věkové omezení (např. 18+)</string>
|
||||
<string name="notification_colorize_summary">Nechte Android přizpůsobit barvu oznámení podle hlavní barvy v miniatuře (není k dispozici na všech zařízeních)</string>
|
||||
<string name="notification_colorize_title">Barevné notifikace</string>
|
||||
<string name="show_thumbnail_summary">Zobrazit miniaturu na zamknuté obrazovce jako pozadí a v oznámeních</string>
|
||||
<string name="show_thumbnail_title">Zobrazit miniaturu</string>
|
||||
</resources>
|
@@ -132,7 +132,7 @@
|
||||
<string name="use_external_video_player_summary">Entfernt Tonspur bei manchen Auflösungen</string>
|
||||
<string name="popup_remember_size_pos_summary">Letzte Größe und Position des Pop-ups merken</string>
|
||||
<string name="player_gesture_controls_title">Gestensteuerung</string>
|
||||
<string name="player_gesture_controls_summary">Helligkeit und Lautstärke mittels Gesten einstellen</string>
|
||||
<string name="player_gesture_controls_summary">Gesten verwenden, um die Helligkeit und Lautstärke einzustellen</string>
|
||||
<string name="show_search_suggestions_title">Suchvorschläge</string>
|
||||
<string name="show_search_suggestions_summary">Beim Suchen Vorschläge anzeigen</string>
|
||||
<string name="settings_category_popup_title">Pop-up</string>
|
||||
@@ -266,8 +266,8 @@
|
||||
<string name="preferred_player_fetcher_notification_message">Gewünschten Inhalt laden</string>
|
||||
<string name="import_data_title">Datenbank importieren</string>
|
||||
<string name="export_data_title">Datenbank exportieren</string>
|
||||
<string name="import_data_summary">Überschreibt deinen aktuellen Verlauf und deine Abonnements</string>
|
||||
<string name="export_data_summary">Verlauf, Abonnements und Wiedergabelisten exportieren</string>
|
||||
<string name="import_data_summary">Überschreibt deinen aktuellen Verlauf, Abonnements, Wiedergabelisten und (optionale) Einstellungen</string>
|
||||
<string name="export_data_summary">Export von Verlauf, Abonnements, Wiedergabelisten und Einstellungen</string>
|
||||
<string name="no_valid_zip_file">Keine gültige ZIP-Datei</string>
|
||||
<string name="could_not_import_all_files">Warnung: Nicht alle Dateien konnten importiert werden.</string>
|
||||
<string name="override_current_data">Dies wird deine aktuellen Einstellungen überschreiben.</string>
|
||||
@@ -402,9 +402,9 @@
|
||||
<string name="tab_new">Neuer Tab</string>
|
||||
<string name="tab_choose">Tab wählen</string>
|
||||
<string name="volume_gesture_control_title">Gestensteuerung für Lautstärke</string>
|
||||
<string name="volume_gesture_control_summary">Verwende Gesten um die Abspielerlautstärke einzustellen</string>
|
||||
<string name="volume_gesture_control_summary">Gesten verwenden, um die Lautstärke einzustellen</string>
|
||||
<string name="brightness_gesture_control_title">Gestensteuerung für Helligkeit</string>
|
||||
<string name="brightness_gesture_control_summary">Player-Helligkeit über Gesten steuern</string>
|
||||
<string name="brightness_gesture_control_summary">Gesten verwenden, um die Helligkeit einzustellen</string>
|
||||
<string name="settings_category_updates_title">Aktualisierungen</string>
|
||||
<string name="file_deleted">Datei gelöscht</string>
|
||||
<string name="app_update_notification_channel_name">App-Update-Benachrichtigung</string>
|
||||
@@ -638,12 +638,12 @@
|
||||
<string name="clear_queue_confirmation_title">Bestätige das Leeren der Warteschlange</string>
|
||||
<string name="clear_queue_confirmation_description">Die aktive Wiedergabeliste wird ersetzt werden</string>
|
||||
<string name="enqueued">Eingereiht</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube bietet einen „Eingeschränkten Modus“, der potenzielle Inhalte für Erwachsene ausblendet.</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube bietet einen „Eingeschränkten Modus“, der potenzielle Inhalte für Erwachsene ausblendet</string>
|
||||
<string name="show_memory_leaks">Speicherlecks anzeigen</string>
|
||||
<string name="clear_cookie_summary">Lösche Cookies, die NewPipe speichert, wenn du ein reCAPTCHA löst</string>
|
||||
<string name="recaptcha_cookies_cleared">reCAPTCHA-Cookies wurden gelöscht</string>
|
||||
<string name="clear_cookie_title">reCAPTCHA-Cookies löschen</string>
|
||||
<string name="show_age_restricted_content_summary">Zeige Inhalt, der möglicherweise unpassend für Kinder ist, da er eine Altersbeschränkung (wie z.B. 18+) hat.</string>
|
||||
<string name="show_age_restricted_content_summary">Zeige altersbeschränkte Inhalte (bspw. 18+), welche möglicherweise unpassend für Kinder sein könnten</string>
|
||||
<string name="enqueue_stream">Wiedergabe einreihen</string>
|
||||
<string name="notification_colorize_summary">Android kann die Farbe der Benachrichtigung entsprechend der Hauptfarbe in der Miniaturansicht anpassen (beachte, dass dies nicht auf allen Geräten verfügbar ist)</string>
|
||||
<string name="notification_colorize_title">Benachrichtigung farblich anpassen</string>
|
||||
|
@@ -633,8 +633,8 @@
|
||||
<string name="clear_cookie_summary">Εκκαθάριση των cookies που αποθηκεύει η εφαρμογή όταν λύνετε ένα reCAPTCHA</string>
|
||||
<string name="recaptcha_cookies_cleared">Τα reCAPTCHA cookies εκκαθαρίστηκαν</string>
|
||||
<string name="clear_cookie_title">Εκκαθάριση reCAPTCHA cookies</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">Το YouTube διαθέτει \"Περιορισμένη Λειτουργία\" η οποία κρύβει πιθανώς ακατάλληλο περιεχόμενο.</string>
|
||||
<string name="show_age_restricted_content_summary">Εμφάνιση πιθανώς ακατάλληλου περιεχομένου (18+).</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">Το YouTube διαθέτει \"Περιορισμένη Λειτουργία\" η οποία κρύβει πιθανώς ακατάλληλο περιεχόμενο</string>
|
||||
<string name="show_age_restricted_content_summary">Εμφάνιση πιθανώς ακατάλληλου περιεχομένου (18+)</string>
|
||||
<string name="peertube_instance_add_exists">Το instance υπάρχει ήδη</string>
|
||||
<string name="peertube_instance_add_fail">Αδυναμία πιστοποίησης του instance</string>
|
||||
<string name="peertube_instance_add_help">Προσθέστε την URL του instance</string>
|
||||
@@ -645,4 +645,6 @@
|
||||
<string name="peertube_instance_url_title">PeerTube instances</string>
|
||||
<string name="notification_colorize_title">Χρωματισμός ειδοποιήσεων</string>
|
||||
<string name="notification_colorize_summary">Επιτρέπει στο Android να τροποποιήσει το χρώμα της ειδοποίησης, σύμφωνα με το κύριο χρώμα του εικονιδίου (δεν διατίθεται σε όλες τις συσκευές)</string>
|
||||
<string name="show_thumbnail_summary">Εμφάνιση των εικονιδίων στην οθόνη κλειδώματος, ως φόντο και στις ειδοποιήσεις</string>
|
||||
<string name="show_thumbnail_title">Εμφάνιση</string>
|
||||
</resources>
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user