mirror of
https://github.com/revanced/revanced-patches.git
synced 2025-12-22 00:44:07 +01:00
Compare commits
33 Commits
v5.6.0-dev
...
v5.7.1-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b2665c916a | ||
|
|
4b81f7009b | ||
|
|
1a4c39a2ee | ||
|
|
99334d1e53 | ||
|
|
2850a6ed4e | ||
|
|
f28eb5105b | ||
|
|
69bed4d9fa | ||
|
|
a5f1efac27 | ||
|
|
b51be82cff | ||
|
|
b8635d0b88 | ||
|
|
78699c8bbf | ||
|
|
aeedec7fed | ||
|
|
32b614696b | ||
|
|
a0b63dfa23 | ||
|
|
f0f53cf72f | ||
|
|
cdb68209d1 | ||
|
|
7369f7b8d5 | ||
|
|
db521b940b | ||
|
|
25d7cc68ae | ||
|
|
9495064e6e | ||
|
|
64864c2cdb | ||
|
|
ad0ffb3328 | ||
|
|
06800324aa | ||
|
|
ec746cb05a | ||
|
|
67c5530ea6 | ||
|
|
cd08717783 | ||
|
|
7bac023ea5 | ||
|
|
1d0ec98bec | ||
|
|
3c603fac2d | ||
|
|
20a7ad4715 | ||
|
|
25a60e305e | ||
|
|
c7f42d9a3c | ||
|
|
670f100a29 |
118
CHANGELOG.md
118
CHANGELOG.md
@@ -1,3 +1,121 @@
|
|||||||
|
## [5.7.1-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.7.1-dev.1...v5.7.1-dev.2) (2024-12-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **YouTube - Theme:** Use dark theme color for status and navigation bar ([0240efe](https://github.com/ReVanced/revanced-patches/commit/0240efe33e5444625ca2b760c861c9046d3dc836))
|
||||||
|
|
||||||
|
## [5.7.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.7.0...v5.7.1-dev.1) (2024-12-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **YouTube - Spoof video streams:** Use Android VR authentication if using default audio language ([#4191](https://github.com/ReVanced/revanced-patches/issues/4191)) ([98773cc](https://github.com/ReVanced/revanced-patches/commit/98773cc7d46e5c9c7715b82c8006f1ccbcc5443c))
|
||||||
|
|
||||||
|
# [5.7.0](https://github.com/ReVanced/revanced-patches/compare/v5.6.0...v5.7.0) (2024-12-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **YouTube - Force original audio:** Use correct availability for settings UI ([a7eedcb](https://github.com/ReVanced/revanced-patches/commit/a7eedcb4cca6b7b12629c478c24c0899c80e3615))
|
||||||
|
* **YouTube - Spoof video stream:** Remove UI client type setting. Allow setting default audio language. ([#4184](https://github.com/ReVanced/revanced-patches/issues/4184)) ([99f3f29](https://github.com/ReVanced/revanced-patches/commit/99f3f29c649bf7693c05bbce2bb49bd53e05f050))
|
||||||
|
* **YouTube - Spoof video streams:** Remove iOS, add clients Android TV and Android Creator ([#4180](https://github.com/ReVanced/revanced-patches/issues/4180)) ([86abfb2](https://github.com/ReVanced/revanced-patches/commit/86abfb2b0d4675f0a1cb9ab244783075bfe89281))
|
||||||
|
* **YouTube:** Change fingerprints to support a wider range of target versions ([8a09174](https://github.com/ReVanced/revanced-patches/commit/8a09174def205a26ce49cb7815097e235069526a))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **YouTube:** Support version `19.47.53` ([#4182](https://github.com/ReVanced/revanced-patches/issues/4182)) ([2089e61](https://github.com/ReVanced/revanced-patches/commit/2089e613d36c45352db7d852aaee0087b1c3e1a4))
|
||||||
|
|
||||||
|
# [5.7.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.6.1-dev.4...v5.7.0-dev.1) (2024-12-21)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **YouTube:** Support version `19.47.53` ([#4182](https://github.com/ReVanced/revanced-patches/issues/4182)) ([2089e61](https://github.com/ReVanced/revanced-patches/commit/2089e613d36c45352db7d852aaee0087b1c3e1a4))
|
||||||
|
|
||||||
|
## [5.6.1-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.6.1-dev.3...v5.6.1-dev.4) (2024-12-21)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **YouTube - Spoof video stream:** Remove UI client type setting. Allow setting default audio language. ([#4184](https://github.com/ReVanced/revanced-patches/issues/4184)) ([99f3f29](https://github.com/ReVanced/revanced-patches/commit/99f3f29c649bf7693c05bbce2bb49bd53e05f050))
|
||||||
|
|
||||||
|
## [5.6.1-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.6.1-dev.2...v5.6.1-dev.3) (2024-12-21)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **YouTube - Force original audio:** Use correct availability for settings UI ([a7eedcb](https://github.com/ReVanced/revanced-patches/commit/a7eedcb4cca6b7b12629c478c24c0899c80e3615))
|
||||||
|
|
||||||
|
## [5.6.1-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.6.1-dev.1...v5.6.1-dev.2) (2024-12-21)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **YouTube - Spoof video streams:** Remove iOS, add clients Android TV and Android Creator ([#4180](https://github.com/ReVanced/revanced-patches/issues/4180)) ([86abfb2](https://github.com/ReVanced/revanced-patches/commit/86abfb2b0d4675f0a1cb9ab244783075bfe89281))
|
||||||
|
|
||||||
|
## [5.6.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.6.0...v5.6.1-dev.1) (2024-12-21)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **YouTube:** Change fingerprints to support a wider range of target versions ([8a09174](https://github.com/ReVanced/revanced-patches/commit/8a09174def205a26ce49cb7815097e235069526a))
|
||||||
|
|
||||||
|
# [5.6.0](https://github.com/ReVanced/revanced-patches/compare/v5.5.1...v5.6.0) (2024-12-20)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Twitter - Change link sharing domain:** Use correct extension package ([ad7fab6](https://github.com/ReVanced/revanced-patches/commit/ad7fab67319ba23f267d27da9b74266965fc4be3))
|
||||||
|
* **YouTube - Force original audio:** Use correct original audio stream if app language is not English ([0d20171](https://github.com/ReVanced/revanced-patches/commit/0d2017133efac230887b5c2a331d87159df8af11))
|
||||||
|
* **YouTube - Hide layout components:** Hide new kind of community post ([#4155](https://github.com/ReVanced/revanced-patches/issues/4155)) ([08f68cb](https://github.com/ReVanced/revanced-patches/commit/08f68cb5d33f2cfe656d2f93d159c69981f31418))
|
||||||
|
* **YouTube - Miniplayer:** Use estimated maximum on screen size for devices with low density screens ([#4150](https://github.com/ReVanced/revanced-patches/issues/4150)) ([2694158](https://github.com/ReVanced/revanced-patches/commit/2694158c3c9935ede21c96832533222f850068df))
|
||||||
|
* **YouTube - Open Shorts in regular player:** Do not show the miniplayer after opening a Short while a video is playing ([894e366](https://github.com/ReVanced/revanced-patches/commit/894e36665d17d5a3a5728961d424dffc55faa50b))
|
||||||
|
* **YouTube - SponsorBlock:** Show create new segment error messages using a dialog ([#4148](https://github.com/ReVanced/revanced-patches/issues/4148)) ([5870906](https://github.com/ReVanced/revanced-patches/commit/587090636dfff0b358b15026cf7d47c65a4296dc))
|
||||||
|
* **YouTube - Spoof video streams:** Change default spoofing to iOS, allow setting a default language with Android VR ([#4171](https://github.com/ReVanced/revanced-patches/issues/4171)) ([171b4e7](https://github.com/ReVanced/revanced-patches/commit/171b4e7e40066e38fba773b7a6525e9a038779ef))
|
||||||
|
* **YouTube - Spoof video streams:** Update iOS client version ([df3aeed](https://github.com/ReVanced/revanced-patches/commit/df3aeed3b173e408fad80197a89ec5d003a2b328))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **YouTube:** Add `Open Shorts in regular player` patch ([#4153](https://github.com/ReVanced/revanced-patches/issues/4153)) ([c7c5e5b](https://github.com/ReVanced/revanced-patches/commit/c7c5e5b2b9cf63d8225bb6bd5e735ddf945b6c29))
|
||||||
|
|
||||||
|
# [5.6.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.6.0-dev.5...v5.6.0-dev.6) (2024-12-20)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **YouTube - Spoof video streams:** Update iOS client version ([df3aeed](https://github.com/ReVanced/revanced-patches/commit/df3aeed3b173e408fad80197a89ec5d003a2b328))
|
||||||
|
|
||||||
|
# [5.6.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.6.0-dev.4...v5.6.0-dev.5) (2024-12-20)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **YouTube - Spoof video streams:** Change default spoofing to iOS, allow setting a default language with Android VR ([#4171](https://github.com/ReVanced/revanced-patches/issues/4171)) ([171b4e7](https://github.com/ReVanced/revanced-patches/commit/171b4e7e40066e38fba773b7a6525e9a038779ef))
|
||||||
|
|
||||||
|
# [5.6.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.6.0-dev.3...v5.6.0-dev.4) (2024-12-20)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **YouTube - Force original audio:** Use correct original audio stream if app language is not English ([0d20171](https://github.com/ReVanced/revanced-patches/commit/0d2017133efac230887b5c2a331d87159df8af11))
|
||||||
|
|
||||||
|
# [5.6.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.6.0-dev.2...v5.6.0-dev.3) (2024-12-20)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Twitter - Change link sharing domain:** Use correct extension package ([ad7fab6](https://github.com/ReVanced/revanced-patches/commit/ad7fab67319ba23f267d27da9b74266965fc4be3))
|
||||||
|
|
||||||
|
# [5.6.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.6.0-dev.1...v5.6.0-dev.2) (2024-12-19)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **YouTube - Open Shorts in regular player:** Do not show the miniplayer after opening a Short while a video is playing ([894e366](https://github.com/ReVanced/revanced-patches/commit/894e36665d17d5a3a5728961d424dffc55faa50b))
|
||||||
|
|
||||||
# [5.6.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.5.2-dev.2...v5.6.0-dev.1) (2024-12-19)
|
# [5.6.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.5.2-dev.2...v5.6.0-dev.1) (2024-12-19)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,10 +3,8 @@ package app.revanced.extension.shared.settings;
|
|||||||
import static java.lang.Boolean.FALSE;
|
import static java.lang.Boolean.FALSE;
|
||||||
import static java.lang.Boolean.TRUE;
|
import static java.lang.Boolean.TRUE;
|
||||||
import static app.revanced.extension.shared.settings.Setting.parent;
|
import static app.revanced.extension.shared.settings.Setting.parent;
|
||||||
import static app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.SpoofiOSAvailability;
|
|
||||||
|
|
||||||
import app.revanced.extension.shared.spoof.AudioStreamLanguage;
|
import app.revanced.extension.shared.spoof.AudioStreamLanguage;
|
||||||
import app.revanced.extension.shared.spoof.ClientType;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Settings shared across multiple apps.
|
* Settings shared across multiple apps.
|
||||||
@@ -22,9 +20,5 @@ public class BaseSettings {
|
|||||||
public static final IntegerSetting CHECK_ENVIRONMENT_WARNINGS_ISSUED = new IntegerSetting("revanced_check_environment_warnings_issued", 0, true, false);
|
public static final IntegerSetting CHECK_ENVIRONMENT_WARNINGS_ISSUED = new IntegerSetting("revanced_check_environment_warnings_issued", 0, true, false);
|
||||||
|
|
||||||
public static final BooleanSetting SPOOF_VIDEO_STREAMS = new BooleanSetting("revanced_spoof_video_streams", TRUE, true, "revanced_spoof_video_streams_user_dialog_message");
|
public static final BooleanSetting SPOOF_VIDEO_STREAMS = new BooleanSetting("revanced_spoof_video_streams", TRUE, true, "revanced_spoof_video_streams_user_dialog_message");
|
||||||
public static final EnumSetting<AudioStreamLanguage> SPOOF_VIDEO_STREAMS_LANGUAGE = new EnumSetting<>("revanced_spoof_video_streams_language", AudioStreamLanguage.DEFAULT, new SpoofiOSAvailability());
|
public static final EnumSetting<AudioStreamLanguage> SPOOF_VIDEO_STREAMS_LANGUAGE = new EnumSetting<>("revanced_spoof_video_streams_language", AudioStreamLanguage.DEFAULT, parent(SPOOF_VIDEO_STREAMS));
|
||||||
public static final BooleanSetting SPOOF_VIDEO_STREAMS_IOS_FORCE_AVC = new BooleanSetting("revanced_spoof_video_streams_ios_force_avc", FALSE, true,
|
|
||||||
"revanced_spoof_video_streams_ios_force_avc_user_dialog_message", new SpoofiOSAvailability());
|
|
||||||
public static final EnumSetting<ClientType> SPOOF_VIDEO_STREAMS_CLIENT_TYPE = new EnumSetting<>("revanced_spoof_video_streams_client", ClientType.ANDROID_VR, true, parent(SPOOF_VIDEO_STREAMS));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,48 +4,36 @@ import android.os.Build;
|
|||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import app.revanced.extension.shared.settings.BaseSettings;
|
|
||||||
|
|
||||||
public enum ClientType {
|
public enum ClientType {
|
||||||
// Specific purpose for age restricted, or private videos, because the iOS client is not logged in.
|
|
||||||
// https://dumps.tadiphone.dev/dumps/oculus/eureka
|
// https://dumps.tadiphone.dev/dumps/oculus/eureka
|
||||||
ANDROID_VR(28,
|
ANDROID_VR_NO_AUTH( // Must be first so a default audio language can be set.
|
||||||
|
28,
|
||||||
"ANDROID_VR",
|
"ANDROID_VR",
|
||||||
"Quest 3",
|
"Quest 3",
|
||||||
"12",
|
"12",
|
||||||
"com.google.android.apps.youtube.vr.oculus/1.56.21 (Linux; U; Android 12; GB) gzip",
|
"com.google.android.apps.youtube.vr.oculus/1.56.21 (Linux; U; Android 12; GB) gzip",
|
||||||
"32", // Android 12.1
|
"32", // Android 12.1
|
||||||
"1.56.21",
|
"1.56.21",
|
||||||
true,
|
|
||||||
false),
|
false),
|
||||||
// Specific for kids videos.
|
// Fall over to authenticated ('hl' is ignored and audio is same as language set in users Google account).
|
||||||
IOS(5,
|
ANDROID_VR(
|
||||||
"IOS",
|
ANDROID_VR_NO_AUTH.id,
|
||||||
forceAVC()
|
ANDROID_VR_NO_AUTH.clientName,
|
||||||
? "iPhone12,5" // 11 Pro Max (last device with iOS 13)
|
ANDROID_VR_NO_AUTH.deviceModel,
|
||||||
: "iPhone16,2", // 15 Pro Max
|
ANDROID_VR_NO_AUTH.osVersion,
|
||||||
// iOS 13 and earlier uses only AVC. 14+ adds VP9 and AV1.
|
ANDROID_VR_NO_AUTH.userAgent,
|
||||||
forceAVC()
|
ANDROID_VR_NO_AUTH.androidSdkVersion,
|
||||||
? "13.7.17H35" // Last release of iOS 13.
|
ANDROID_VR_NO_AUTH.clientVersion,
|
||||||
: "17.5.1.21F90",
|
true),
|
||||||
forceAVC()
|
ANDROID_UNPLUGGED(
|
||||||
? "com.google.ios.youtube/17.40.5 (iPhone; U; CPU iOS 13_7 like Mac OS X)"
|
29,
|
||||||
: "com.google.ios.youtube/19.47.7 (iPhone; U; CPU iOS 17_5_1 like Mac OS X)",
|
"ANDROID_UNPLUGGED",
|
||||||
null,
|
"Google TV Streamer",
|
||||||
// Version number should be a valid iOS release.
|
"14",
|
||||||
// https://www.ipa4fun.com/history/185230
|
"com.google.android.apps.youtube.unplugged/8.49.0 (Linux; U; Android 14; GB) gzip",
|
||||||
forceAVC()
|
"34",
|
||||||
// Some newer versions can also force AVC,
|
"8.49.0",
|
||||||
// but 17.40 is the last version that supports iOS 13.
|
true); // Requires login.
|
||||||
? "17.40.5"
|
|
||||||
: "19.47.7",
|
|
||||||
false,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
|
|
||||||
private static boolean forceAVC() {
|
|
||||||
return BaseSettings.SPOOF_VIDEO_STREAMS_IOS_FORCE_AVC.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* YouTube
|
* YouTube
|
||||||
@@ -87,11 +75,6 @@ public enum ClientType {
|
|||||||
*/
|
*/
|
||||||
public final boolean canLogin;
|
public final boolean canLogin;
|
||||||
|
|
||||||
/**
|
|
||||||
* If a language code should be used.
|
|
||||||
*/
|
|
||||||
public final boolean useLanguageCode;
|
|
||||||
|
|
||||||
ClientType(int id,
|
ClientType(int id,
|
||||||
String clientName,
|
String clientName,
|
||||||
String deviceModel,
|
String deviceModel,
|
||||||
@@ -99,8 +82,7 @@ public enum ClientType {
|
|||||||
String userAgent,
|
String userAgent,
|
||||||
@Nullable String androidSdkVersion,
|
@Nullable String androidSdkVersion,
|
||||||
String clientVersion,
|
String clientVersion,
|
||||||
boolean canLogin,
|
boolean canLogin) {
|
||||||
boolean useLanguageCode) {
|
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.clientName = clientName;
|
this.clientName = clientName;
|
||||||
this.deviceModel = deviceModel;
|
this.deviceModel = deviceModel;
|
||||||
@@ -109,6 +91,5 @@ public enum ClientType {
|
|||||||
this.androidSdkVersion = androidSdkVersion;
|
this.androidSdkVersion = androidSdkVersion;
|
||||||
this.clientVersion = clientVersion;
|
this.clientVersion = clientVersion;
|
||||||
this.canLogin = canLogin;
|
this.canLogin = canLogin;
|
||||||
this.useLanguageCode = useLanguageCode;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,15 +17,30 @@ import app.revanced.extension.shared.spoof.requests.StreamingDataRequest;
|
|||||||
public class SpoofVideoStreamsPatch {
|
public class SpoofVideoStreamsPatch {
|
||||||
private static final boolean SPOOF_STREAMING_DATA = BaseSettings.SPOOF_VIDEO_STREAMS.get();
|
private static final boolean SPOOF_STREAMING_DATA = BaseSettings.SPOOF_VIDEO_STREAMS.get();
|
||||||
|
|
||||||
private static final boolean FIX_HLS_CURRENT_TIME = SPOOF_STREAMING_DATA
|
|
||||||
&& BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ClientType.IOS;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Any unreachable ip address. Used to intentionally fail requests.
|
* Any unreachable ip address. Used to intentionally fail requests.
|
||||||
*/
|
*/
|
||||||
private static final String UNREACHABLE_HOST_URI_STRING = "https://127.0.0.0";
|
private static final String UNREACHABLE_HOST_URI_STRING = "https://127.0.0.0";
|
||||||
private static final Uri UNREACHABLE_HOST_URI = Uri.parse(UNREACHABLE_HOST_URI_STRING);
|
private static final Uri UNREACHABLE_HOST_URI = Uri.parse(UNREACHABLE_HOST_URI_STRING);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return If this patch was included during patching.
|
||||||
|
*/
|
||||||
|
private static boolean isPatchIncluded() {
|
||||||
|
return false; // Modified during patching.
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class NotSpoofingAndroidAvailability implements Setting.Availability {
|
||||||
|
@Override
|
||||||
|
public boolean isAvailable() {
|
||||||
|
if (SpoofVideoStreamsPatch.isPatchIncluded()) {
|
||||||
|
return !BaseSettings.SPOOF_VIDEO_STREAMS.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Injection point.
|
* Injection point.
|
||||||
* Blocks /get_watch requests by returning an unreachable URI.
|
* Blocks /get_watch requests by returning an unreachable URI.
|
||||||
@@ -168,25 +183,4 @@ public class SpoofVideoStreamsPatch {
|
|||||||
|
|
||||||
return postData;
|
return postData;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Injection point.
|
|
||||||
*
|
|
||||||
* Fixes iOS livestreams starting from the beginning.
|
|
||||||
*/
|
|
||||||
public static boolean fixHLSCurrentTime(boolean original) {
|
|
||||||
if (FIX_HLS_CURRENT_TIME) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return original;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final class SpoofiOSAvailability implements Setting.Availability {
|
|
||||||
@Override
|
|
||||||
public boolean isAvailable() {
|
|
||||||
return BaseSettings.SPOOF_VIDEO_STREAMS.get()
|
|
||||||
&& BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ClientType.IOS;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,9 +37,7 @@ final class PlayerRoutes {
|
|||||||
JSONObject context = new JSONObject();
|
JSONObject context = new JSONObject();
|
||||||
|
|
||||||
JSONObject client = new JSONObject();
|
JSONObject client = new JSONObject();
|
||||||
if (clientType.useLanguageCode) {
|
client.put("hl", BaseSettings.SPOOF_VIDEO_STREAMS_LANGUAGE.get().getIso639_1());
|
||||||
client.put("hl", BaseSettings.SPOOF_VIDEO_STREAMS_LANGUAGE.get().getIso639_1());
|
|
||||||
}
|
|
||||||
client.put("clientName", clientType.clientName);
|
client.put("clientName", clientType.clientName);
|
||||||
client.put("clientVersion", clientType.clientVersion);
|
client.put("clientVersion", clientType.clientVersion);
|
||||||
client.put("deviceModel", clientType.deviceModel);
|
client.put("deviceModel", clientType.deviceModel);
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import java.util.concurrent.TimeoutException;
|
|||||||
import app.revanced.extension.shared.Logger;
|
import app.revanced.extension.shared.Logger;
|
||||||
import app.revanced.extension.shared.Utils;
|
import app.revanced.extension.shared.Utils;
|
||||||
import app.revanced.extension.shared.settings.BaseSettings;
|
import app.revanced.extension.shared.settings.BaseSettings;
|
||||||
|
import app.revanced.extension.shared.spoof.AudioStreamLanguage;
|
||||||
import app.revanced.extension.shared.spoof.ClientType;
|
import app.revanced.extension.shared.spoof.ClientType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -35,21 +36,26 @@ import app.revanced.extension.shared.spoof.ClientType;
|
|||||||
*/
|
*/
|
||||||
public class StreamingDataRequest {
|
public class StreamingDataRequest {
|
||||||
|
|
||||||
private static final ClientType[] CLIENT_ORDER_TO_USE;
|
private static final ClientType[] CLIENT_ORDER_TO_USE = ClientType.values();
|
||||||
|
|
||||||
private static final String AUTHORIZATION_HEADER = "Authorization";
|
private static final String AUTHORIZATION_HEADER = "Authorization";
|
||||||
|
|
||||||
private static final String[] REQUEST_HEADER_KEYS = {
|
private static final String[] REQUEST_HEADER_KEYS = {
|
||||||
AUTHORIZATION_HEADER, // Available only to logged-in users.
|
AUTHORIZATION_HEADER, // Available only to logged-in users.
|
||||||
"X-GOOG-API-FORMAT-VERSION",
|
"X-GOOG-API-FORMAT-VERSION",
|
||||||
"X-Goog-Visitor-Id"
|
"X-Goog-Visitor-Id"
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TCP connection and HTTP read timeout.
|
* TCP connection and HTTP read timeout.
|
||||||
*/
|
*/
|
||||||
private static final int HTTP_TIMEOUT_MILLISECONDS = 10 * 1000;
|
private static final int HTTP_TIMEOUT_MILLISECONDS = 10 * 1000;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Any arbitrarily large value, but must be at least twice {@link #HTTP_TIMEOUT_MILLISECONDS}
|
* Any arbitrarily large value, but must be at least twice {@link #HTTP_TIMEOUT_MILLISECONDS}
|
||||||
*/
|
*/
|
||||||
private static final int MAX_MILLISECONDS_TO_WAIT_FOR_FETCH = 20 * 1000;
|
private static final int MAX_MILLISECONDS_TO_WAIT_FOR_FETCH = 20 * 1000;
|
||||||
|
|
||||||
private static final Map<String, StreamingDataRequest> cache = Collections.synchronizedMap(
|
private static final Map<String, StreamingDataRequest> cache = Collections.synchronizedMap(
|
||||||
new LinkedHashMap<>(100) {
|
new LinkedHashMap<>(100) {
|
||||||
/**
|
/**
|
||||||
@@ -67,22 +73,8 @@ public class StreamingDataRequest {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
static {
|
|
||||||
ClientType[] allClientTypes = ClientType.values();
|
|
||||||
ClientType preferredClient = BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get();
|
|
||||||
|
|
||||||
CLIENT_ORDER_TO_USE = new ClientType[allClientTypes.length];
|
|
||||||
CLIENT_ORDER_TO_USE[0] = preferredClient;
|
|
||||||
|
|
||||||
int i = 1;
|
|
||||||
for (ClientType c : allClientTypes) {
|
|
||||||
if (c != preferredClient) {
|
|
||||||
CLIENT_ORDER_TO_USE[i++] = c;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private final String videoId;
|
private final String videoId;
|
||||||
|
|
||||||
private final Future<ByteBuffer> future;
|
private final Future<ByteBuffer> future;
|
||||||
|
|
||||||
private StreamingDataRequest(String videoId, Map<String, String> playerHeaders) {
|
private StreamingDataRequest(String videoId, Map<String, String> playerHeaders) {
|
||||||
@@ -172,13 +164,21 @@ public class StreamingDataRequest {
|
|||||||
// Show an error if the last client type fails, or if the debug is enabled then show for all attempts.
|
// Show an error if the last client type fails, or if the debug is enabled then show for all attempts.
|
||||||
final boolean showErrorToast = (++i == CLIENT_ORDER_TO_USE.length) || debugEnabled;
|
final boolean showErrorToast = (++i == CLIENT_ORDER_TO_USE.length) || debugEnabled;
|
||||||
|
|
||||||
|
if (clientType == ClientType.ANDROID_VR_NO_AUTH
|
||||||
|
&& BaseSettings.SPOOF_VIDEO_STREAMS_LANGUAGE.get() == AudioStreamLanguage.DEFAULT) {
|
||||||
|
// Only use no auth Android VR if a non default audio language is selected.
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
HttpURLConnection connection = send(clientType, videoId, playerHeaders, showErrorToast);
|
HttpURLConnection connection = send(clientType, videoId, playerHeaders, showErrorToast);
|
||||||
if (connection != null) {
|
if (connection != null) {
|
||||||
try {
|
try {
|
||||||
// gzip encoding doesn't response with content length (-1),
|
// gzip encoding doesn't response with content length (-1),
|
||||||
// but empty response body does.
|
// but empty response body does.
|
||||||
if (connection.getContentLength() == 0) {
|
if (connection.getContentLength() == 0) {
|
||||||
Logger.printDebug(() -> "Received empty response for video: " + videoId);
|
if (BaseSettings.DEBUG.get()) {
|
||||||
|
Logger.printException(() -> "Ignoring empty client response: " + clientType);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
try (InputStream inputStream = new BufferedInputStream(connection.getInputStream());
|
try (InputStream inputStream = new BufferedInputStream(connection.getInputStream());
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
|
ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import app.revanced.extension.youtube.settings.Settings;
|
|||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class ForceOriginalAudioPatch {
|
public class ForceOriginalAudioPatch {
|
||||||
|
|
||||||
private static final String DEFAULT_AUDIO_TRACKS_IDENTIFIER = "original";
|
private static final String DEFAULT_AUDIO_TRACKS_SUFFIX = ".4";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Injection point.
|
* Injection point.
|
||||||
@@ -17,7 +17,7 @@ public class ForceOriginalAudioPatch {
|
|||||||
return isDefault;
|
return isDefault;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (audioTrackDisplayName.isEmpty()) {
|
if (audioTrackId.isEmpty()) {
|
||||||
// Older app targets can have empty audio tracks and these might be placeholders.
|
// Older app targets can have empty audio tracks and these might be placeholders.
|
||||||
// The real audio tracks are called after these.
|
// The real audio tracks are called after these.
|
||||||
return isDefault;
|
return isDefault;
|
||||||
@@ -26,7 +26,7 @@ public class ForceOriginalAudioPatch {
|
|||||||
Logger.printDebug(() -> "default: " + String.format("%-5s", isDefault) + " id: "
|
Logger.printDebug(() -> "default: " + String.format("%-5s", isDefault) + " id: "
|
||||||
+ String.format("%-8s", audioTrackId) + " name:" + audioTrackDisplayName);
|
+ String.format("%-8s", audioTrackId) + " name:" + audioTrackDisplayName);
|
||||||
|
|
||||||
final boolean isOriginal = audioTrackDisplayName.contains(DEFAULT_AUDIO_TRACKS_IDENTIFIER);
|
final boolean isOriginal = audioTrackId.endsWith(DEFAULT_AUDIO_TRACKS_SUFFIX);
|
||||||
if (isOriginal) {
|
if (isOriginal) {
|
||||||
Logger.printDebug(() -> "Using audio: " + audioTrackId);
|
Logger.printDebug(() -> "Using audio: " + audioTrackId);
|
||||||
}
|
}
|
||||||
@@ -34,8 +34,8 @@ public class ForceOriginalAudioPatch {
|
|||||||
return isOriginal;
|
return isOriginal;
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.printException(() -> "isDefaultAudioStream failure", ex);
|
Logger.printException(() -> "isDefaultAudioStream failure", ex);
|
||||||
}
|
|
||||||
|
|
||||||
return isDefault;
|
return isDefault;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -81,6 +81,7 @@ public class OpenShortsInRegularPlayerPatch {
|
|||||||
Intent.ACTION_VIEW,
|
Intent.ACTION_VIEW,
|
||||||
Uri.parse("https://youtube.com/watch?v=" + videoID)
|
Uri.parse("https://youtube.com/watch?v=" + videoID)
|
||||||
);
|
);
|
||||||
|
videoPlayerIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
videoPlayerIntent.setPackage(context.getPackageName());
|
videoPlayerIntent.setPackage(context.getPackageName());
|
||||||
|
|
||||||
context.startActivity(videoPlayerIntent);
|
context.startActivity(videoPlayerIntent);
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import static app.revanced.extension.shared.settings.Setting.migrateFromOldPrefe
|
|||||||
import static app.revanced.extension.shared.settings.Setting.migrateOldSettingToNew;
|
import static app.revanced.extension.shared.settings.Setting.migrateOldSettingToNew;
|
||||||
import static app.revanced.extension.shared.settings.Setting.parent;
|
import static app.revanced.extension.shared.settings.Setting.parent;
|
||||||
import static app.revanced.extension.shared.settings.Setting.parentsAny;
|
import static app.revanced.extension.shared.settings.Setting.parentsAny;
|
||||||
|
import static app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.NotSpoofingAndroidAvailability;
|
||||||
import static app.revanced.extension.youtube.patches.ChangeStartPagePatch.StartPage;
|
import static app.revanced.extension.youtube.patches.ChangeStartPagePatch.StartPage;
|
||||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHideExpandCloseAvailability;
|
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHideExpandCloseAvailability;
|
||||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHorizontalDragAvailability;
|
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHorizontalDragAvailability;
|
||||||
@@ -53,7 +54,7 @@ public class Settings extends BaseSettings {
|
|||||||
public static final StringSetting CUSTOM_PLAYBACK_SPEEDS = new StringSetting("revanced_custom_playback_speeds",
|
public static final StringSetting CUSTOM_PLAYBACK_SPEEDS = new StringSetting("revanced_custom_playback_speeds",
|
||||||
"0.25\n0.5\n0.75\n0.9\n0.95\n1.0\n1.05\n1.1\n1.25\n1.5\n1.75\n2.0\n3.0\n4.0\n5.0", true);
|
"0.25\n0.5\n0.75\n0.9\n0.95\n1.0\n1.05\n1.1\n1.25\n1.5\n1.75\n2.0\n3.0\n4.0\n5.0", true);
|
||||||
// Audio
|
// Audio
|
||||||
public static final BooleanSetting FORCE_ORIGINAL_AUDIO = new BooleanSetting("revanced_force_original_audio", FALSE);
|
public static final BooleanSetting FORCE_ORIGINAL_AUDIO = new BooleanSetting("revanced_force_original_audio", FALSE, new NotSpoofingAndroidAvailability());
|
||||||
|
|
||||||
// Ads
|
// Ads
|
||||||
public static final BooleanSetting HIDE_BUTTONED_ADS = new BooleanSetting("revanced_hide_buttoned_ads", TRUE);
|
public static final BooleanSetting HIDE_BUTTONED_ADS = new BooleanSetting("revanced_hide_buttoned_ads", TRUE);
|
||||||
|
|||||||
@@ -1,85 +0,0 @@
|
|||||||
package app.revanced.extension.youtube.settings.preference;
|
|
||||||
|
|
||||||
import static app.revanced.extension.shared.StringRef.str;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.preference.Preference;
|
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.util.AttributeSet;
|
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
|
|
||||||
import app.revanced.extension.shared.Logger;
|
|
||||||
import app.revanced.extension.shared.Utils;
|
|
||||||
import app.revanced.extension.shared.settings.BaseSettings;
|
|
||||||
import app.revanced.extension.shared.settings.Setting;
|
|
||||||
import app.revanced.extension.shared.spoof.ClientType;
|
|
||||||
|
|
||||||
@SuppressWarnings({"deprecation", "unused"})
|
|
||||||
public class SpoofStreamingDataSideEffectsPreference extends Preference {
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
private ClientType currentClientType;
|
|
||||||
|
|
||||||
private final SharedPreferences.OnSharedPreferenceChangeListener listener = (sharedPreferences, str) -> {
|
|
||||||
// Because this listener may run before the ReVanced settings fragment updates Settings,
|
|
||||||
// this could show the prior config and not the current.
|
|
||||||
//
|
|
||||||
// Push this call to the end of the main run queue,
|
|
||||||
// so all other listeners are done and Settings is up to date.
|
|
||||||
Utils.runOnMainThread(this::updateUI);
|
|
||||||
};
|
|
||||||
|
|
||||||
public SpoofStreamingDataSideEffectsPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
|
||||||
super(context, attrs, defStyleAttr, defStyleRes);
|
|
||||||
}
|
|
||||||
|
|
||||||
public SpoofStreamingDataSideEffectsPreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
|
||||||
super(context, attrs, defStyleAttr);
|
|
||||||
}
|
|
||||||
|
|
||||||
public SpoofStreamingDataSideEffectsPreference(Context context, AttributeSet attrs) {
|
|
||||||
super(context, attrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
public SpoofStreamingDataSideEffectsPreference(Context context) {
|
|
||||||
super(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addChangeListener() {
|
|
||||||
Setting.preferences.preferences.registerOnSharedPreferenceChangeListener(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void removeChangeListener() {
|
|
||||||
Setting.preferences.preferences.unregisterOnSharedPreferenceChangeListener(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onAttachedToHierarchy(PreferenceManager preferenceManager) {
|
|
||||||
super.onAttachedToHierarchy(preferenceManager);
|
|
||||||
updateUI();
|
|
||||||
addChangeListener();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPrepareForRemoval() {
|
|
||||||
super.onPrepareForRemoval();
|
|
||||||
removeChangeListener();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateUI() {
|
|
||||||
ClientType clientType = BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get();
|
|
||||||
if (currentClientType == clientType) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.printDebug(() -> "Updating spoof stream side effects preference");
|
|
||||||
setEnabled(BaseSettings.SPOOF_VIDEO_STREAMS.get());
|
|
||||||
|
|
||||||
String key = "revanced_spoof_video_streams_about_"
|
|
||||||
+ clientType.name().toLowerCase();
|
|
||||||
setTitle(str(key + "_title"));
|
|
||||||
setSummary(str(key + "_summary"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
|
|||||||
org.gradle.parallel = true
|
org.gradle.parallel = true
|
||||||
android.useAndroidX = true
|
android.useAndroidX = true
|
||||||
kotlin.code.style = official
|
kotlin.code.style = official
|
||||||
version = 5.6.0-dev.1
|
version = 5.7.1-dev.2
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package app.revanced.patches.shared.misc.spoof
|
package app.revanced.patches.shared.misc.spoof
|
||||||
|
|
||||||
import app.revanced.patcher.fingerprint
|
import app.revanced.patcher.fingerprint
|
||||||
import app.revanced.util.literal
|
|
||||||
import com.android.tools.smali.dexlib2.AccessFlags
|
import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
import com.android.tools.smali.dexlib2.Opcode
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
|
|
||||||
@@ -112,12 +111,11 @@ internal val buildMediaDataSourceFingerprint = fingerprint {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal const val HLS_CURRENT_TIME_FEATURE_FLAG = 45355374L
|
internal val patchIncludedExtensionMethodFingerprint = fingerprint {
|
||||||
|
accessFlags(AccessFlags.PRIVATE, AccessFlags.STATIC)
|
||||||
internal val hlsCurrentTimeFingerprint = fingerprint {
|
returns("Z")
|
||||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
parameters()
|
||||||
parameters("Z", "L")
|
custom { method, classDef ->
|
||||||
literal {
|
classDef.type == EXTENSION_CLASS_DESCRIPTOR && method.name == "isPatchIncluded"
|
||||||
HLS_CURRENT_TIME_FEATURE_FLAG
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMu
|
|||||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||||
import app.revanced.util.getReference
|
import app.revanced.util.getReference
|
||||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||||
import app.revanced.util.insertFeatureFlagBooleanOverride
|
import app.revanced.util.returnEarly
|
||||||
import com.android.tools.smali.dexlib2.AccessFlags
|
import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
import com.android.tools.smali.dexlib2.Opcode
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation
|
import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation
|
||||||
@@ -39,6 +39,12 @@ fun spoofVideoStreamsPatch(
|
|||||||
dependsOn(addResourcesPatch)
|
dependsOn(addResourcesPatch)
|
||||||
|
|
||||||
execute {
|
execute {
|
||||||
|
// region Enable extension helper method used by other patches
|
||||||
|
|
||||||
|
patchIncludedExtensionMethodFingerprint.method.returnEarly(true)
|
||||||
|
|
||||||
|
// endregion
|
||||||
|
|
||||||
// region Block /initplayback requests to fall back to /get_watch requests.
|
// region Block /initplayback requests to fall back to /get_watch requests.
|
||||||
|
|
||||||
val moveUriStringIndex = buildInitPlaybackRequestFingerprint.patternMatch!!.startIndex
|
val moveUriStringIndex = buildInitPlaybackRequestFingerprint.patternMatch!!.startIndex
|
||||||
@@ -202,15 +208,6 @@ fun spoofVideoStreamsPatch(
|
|||||||
}
|
}
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
// region Fix iOS livestream current time.
|
|
||||||
|
|
||||||
hlsCurrentTimeFingerprint.method.insertFeatureFlagBooleanOverride(
|
|
||||||
HLS_CURRENT_TIME_FEATURE_FLAG,
|
|
||||||
"$EXTENSION_CLASS_DESCRIPTOR->fixHLSCurrentTime(Z)Z"
|
|
||||||
)
|
|
||||||
|
|
||||||
// endregion
|
|
||||||
|
|
||||||
executeBlock()
|
executeBlock()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
|||||||
import app.revanced.patches.shared.misc.mapping.resourceMappings
|
import app.revanced.patches.shared.misc.mapping.resourceMappings
|
||||||
import app.revanced.patches.twitter.misc.extension.sharedExtensionPatch
|
import app.revanced.patches.twitter.misc.extension.sharedExtensionPatch
|
||||||
import app.revanced.util.indexOfFirstLiteralInstructionOrThrow
|
import app.revanced.util.indexOfFirstLiteralInstructionOrThrow
|
||||||
|
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c
|
|
||||||
|
|
||||||
internal var tweetShareLinkTemplateId = -1L
|
internal var tweetShareLinkTemplateId = -1L
|
||||||
private set
|
private set
|
||||||
@@ -25,15 +25,7 @@ internal val changeLinkSharingDomainResourcePatch = resourcePatch {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This method is used to build the link that is shared when the "Share via..." button is pressed.
|
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/twitter/patches/links/ChangeLinkSharingDomainPatch;"
|
||||||
private const val FORMAT_METHOD_RESOURCE_REFERENCE =
|
|
||||||
"Lapp/revanced/extension/twitter/patches/links/ChangeLinkSharingDomainPatch;->" +
|
|
||||||
"formatResourceLink([Ljava/lang/Object;)Ljava/lang/String;"
|
|
||||||
|
|
||||||
// This method is used to build the link that is shared when the "Copy link" button is pressed.
|
|
||||||
private const val FORMAT_METHOD_REFERENCE =
|
|
||||||
"Lapp/revanced/extension/twitter/patches/links/ChangeLinkSharingDomainPatch;->" +
|
|
||||||
"formatLink(JLjava/lang/String;)Ljava/lang/String;"
|
|
||||||
|
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
val changeLinkSharingDomainPatch = bytecodePatch(
|
val changeLinkSharingDomainPatch = bytecodePatch(
|
||||||
@@ -71,7 +63,7 @@ val changeLinkSharingDomainPatch = bytecodePatch(
|
|||||||
addInstructions(
|
addInstructions(
|
||||||
0,
|
0,
|
||||||
"""
|
"""
|
||||||
invoke-static { p0, p1, p2 }, $FORMAT_METHOD_REFERENCE
|
invoke-static { p0, p1, p2 }, $EXTENSION_CLASS_DESCRIPTOR->formatLink(JLjava/lang/String;)Ljava/lang/String;
|
||||||
move-result-object p0
|
move-result-object p0
|
||||||
return-object p0
|
return-object p0
|
||||||
""",
|
""",
|
||||||
@@ -84,12 +76,12 @@ val changeLinkSharingDomainPatch = bytecodePatch(
|
|||||||
|
|
||||||
// Format the link with the new domain name register (1 instruction below the const).
|
// Format the link with the new domain name register (1 instruction below the const).
|
||||||
val formatLinkCallIndex = templateIdConstIndex + 1
|
val formatLinkCallIndex = templateIdConstIndex + 1
|
||||||
val formatLinkCall = getInstruction<Instruction35c>(formatLinkCallIndex)
|
val register = getInstruction<FiveRegisterInstruction>(formatLinkCallIndex).registerE
|
||||||
|
|
||||||
// Replace the original method call with the new method call.
|
// Replace the original method call with the new method call.
|
||||||
replaceInstruction(
|
replaceInstruction(
|
||||||
formatLinkCallIndex,
|
formatLinkCallIndex,
|
||||||
"invoke-static { v${formatLinkCall.registerE} }, $FORMAT_METHOD_RESOURCE_REFERENCE",
|
"invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->formatResourceLink([Ljava/lang/Object;)Ljava/lang/String;",
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ val hideAdsPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ val hideGetPremiumPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ val videoAdsPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ val copyVideoUrlPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ val removeViewerDiscretionDialogPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -76,6 +76,7 @@ val downloadsPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ val disablePreciseSeekingGesturePatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ val enableSeekbarTappingPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ val enableSlideToSeekPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ val seekbarThumbnailsPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ val swipeControlsPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ val autoCaptionsPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ val customBrandingPatch = resourcePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ val changeHeaderPatch = resourcePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ val hideButtonsPatch = resourcePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ val navigationButtonsPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ val hidePlayerOverlayButtonsPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ val hideEndscreenCardsPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ val disableFullscreenAmbientModePatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -133,6 +133,7 @@ val hideLayoutComponentsPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ val hideInfoCardsPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ val hidePlayerFlyoutMenuPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ val disableRollingNumberAnimationPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ val hideSeekbarPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -190,6 +190,7 @@ val hideShortsComponentsPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ val disableSuggestedVideoEndScreenPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ val hideTimestampPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -170,6 +170,7 @@ val miniplayerPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ val playerPopupPanelsPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ val playerControlsBackgroundPatch = resourcePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ val openVideosFullscreenPatch = bytecodePatch(
|
|||||||
compatibleWith(
|
compatibleWith(
|
||||||
"com.google.android.youtube"(
|
"com.google.android.youtube"(
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ val customPlayerOverlayOpacityPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ val returnYouTubeDislikePatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ val wideSearchbarPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ val shortsAutoplayPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ val openShortsInRegularPlayerPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -119,6 +119,7 @@ val sponsorBlockPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ val spoofAppVersionPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ val changeStartPagePatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ val disableResumingShortsOnStartupPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ val enableTabletLayoutPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -163,22 +163,31 @@ val themePatch = bytecodePatch(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Fix the splash screen dark mode background color.
|
// Fix the splash screen dark mode background color.
|
||||||
// In earlier versions of the app this is white and makes no sense for dark mode.
|
// In 19.32+ the dark mode splash screen is white and fades to black.
|
||||||
// This is only required for 19.32 and greater, but is applied to all targets.
|
// Maybe it's a bug in YT, or maybe it intentionally. Who knows.
|
||||||
// Only dark mode needs this fix as light mode correctly uses the custom color.
|
|
||||||
document("res/values-night/styles.xml").use { document ->
|
document("res/values-night/styles.xml").use { document ->
|
||||||
// Create a night mode specific override for the splash screen background.
|
|
||||||
val style = document.createElement("style")
|
|
||||||
style.setAttribute("name", "Theme.YouTube.Home")
|
|
||||||
style.setAttribute("parent", "@style/Base.V23.Theme.YouTube.Home")
|
|
||||||
|
|
||||||
val windowItem = document.createElement("item")
|
|
||||||
windowItem.setAttribute("name", "android:windowBackground")
|
|
||||||
windowItem.textContent = "@color/$splashBackgroundColor"
|
|
||||||
style.appendChild(windowItem)
|
|
||||||
|
|
||||||
val resourcesNode = document.getElementsByTagName("resources").item(0) as Element
|
val resourcesNode = document.getElementsByTagName("resources").item(0) as Element
|
||||||
resourcesNode.appendChild(style)
|
val childNodes = resourcesNode.childNodes
|
||||||
|
|
||||||
|
for (i in 0 until childNodes.length) {
|
||||||
|
val node = childNodes.item(i) as? Element ?: continue
|
||||||
|
val nodeAttributeName = node.getAttribute("name")
|
||||||
|
if (nodeAttributeName.startsWith("Theme.YouTube.Launcher")) {
|
||||||
|
val nodeAttributeParent = node.getAttribute("parent")
|
||||||
|
|
||||||
|
val style = document.createElement("style")
|
||||||
|
style.setAttribute("name", "Theme.YouTube.Home")
|
||||||
|
style.setAttribute("parent", nodeAttributeParent)
|
||||||
|
|
||||||
|
val windowItem = document.createElement("item")
|
||||||
|
windowItem.setAttribute("name", "android:windowBackground")
|
||||||
|
windowItem.textContent = "@color/$splashBackgroundColor"
|
||||||
|
style.appendChild(windowItem)
|
||||||
|
|
||||||
|
resourcesNode.removeChild(node)
|
||||||
|
resourcesNode.appendChild(style)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -198,6 +207,7 @@ val themePatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ val alternativeThumbnailsPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ val bypassImageRegionRestrictionsPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ val announcementsPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ val autoRepeatPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ val backgroundPlaybackPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ val enableDebuggingPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ val spoofDeviceDimensionsPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ val checkWatchHistoryDomainNameResolutionPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -15,22 +15,16 @@ internal val onBackPressedFingerprint = fingerprint {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal val recyclerViewScrollingFingerprint = fingerprint {
|
internal val scrollPositionFingerprint = fingerprint {
|
||||||
accessFlags(AccessFlags.PRIVATE, AccessFlags.FINAL)
|
accessFlags(AccessFlags.PROTECTED, AccessFlags.FINAL)
|
||||||
returns("V")
|
returns("V")
|
||||||
parameters()
|
parameters("L")
|
||||||
opcodes(
|
opcodes(
|
||||||
Opcode.IGET_OBJECT,
|
Opcode.IF_NEZ,
|
||||||
Opcode.IGET_OBJECT,
|
Opcode.INVOKE_DIRECT,
|
||||||
Opcode.IF_EQZ,
|
Opcode.RETURN_VOID
|
||||||
Opcode.IGET_OBJECT,
|
|
||||||
Opcode.CHECK_CAST,
|
|
||||||
Opcode.INVOKE_VIRTUAL,
|
|
||||||
Opcode.MOVE_RESULT,
|
|
||||||
Opcode.IF_LEZ,
|
|
||||||
Opcode.IGET_OBJECT,
|
|
||||||
Opcode.CONST_4,
|
|
||||||
)
|
)
|
||||||
|
strings("scroll_position")
|
||||||
}
|
}
|
||||||
|
|
||||||
internal val recyclerViewTopScrollingFingerprint = fingerprint {
|
internal val recyclerViewTopScrollingFingerprint = fingerprint {
|
||||||
|
|||||||
@@ -1,54 +1,49 @@
|
|||||||
package app.revanced.patches.youtube.misc.fix.backtoexitgesture
|
package app.revanced.patches.youtube.misc.fix.backtoexitgesture
|
||||||
|
|
||||||
import app.revanced.patcher.Fingerprint
|
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||||
import app.revanced.patcher.patch.bytecodePatch
|
import app.revanced.patcher.patch.bytecodePatch
|
||||||
|
import app.revanced.util.getReference
|
||||||
|
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||||
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
|
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||||
|
|
||||||
|
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/patches/FixBackToExitGesturePatch;"
|
||||||
|
|
||||||
internal val fixBackToExitGesturePatch = bytecodePatch(
|
internal val fixBackToExitGesturePatch = bytecodePatch(
|
||||||
description = "Fixes the swipe back to exit gesture.",
|
description = "Fixes the swipe back to exit gesture.",
|
||||||
) {
|
) {
|
||||||
|
|
||||||
execute {
|
execute {
|
||||||
/**
|
recyclerViewTopScrollingFingerprint.match(recyclerViewTopScrollingParentFingerprint.originalClassDef)
|
||||||
* Inject a call to a method from the extension.
|
.let {
|
||||||
*
|
it.method.addInstruction(
|
||||||
* @param targetMethod The target method to call.
|
it.patternMatch!!.endIndex,
|
||||||
*/
|
"invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->onTopView()V"
|
||||||
fun Fingerprint.injectCall(targetMethod: ExtensionMethod) = method.addInstruction(
|
)
|
||||||
patternMatch!!.endIndex,
|
}
|
||||||
targetMethod.toString(),
|
|
||||||
)
|
|
||||||
|
|
||||||
mapOf(
|
scrollPositionFingerprint.let {
|
||||||
recyclerViewTopScrollingFingerprint.also {
|
navigate(it.originalMethod)
|
||||||
it.match(recyclerViewTopScrollingParentFingerprint.originalClassDef)
|
.to(it.patternMatch!!.startIndex + 1)
|
||||||
} to ExtensionMethod(
|
.stop().apply {
|
||||||
methodName = "onTopView",
|
val index = indexOfFirstInstructionOrThrow {
|
||||||
),
|
opcode == Opcode.INVOKE_VIRTUAL && getReference<MethodReference>()?.definingClass ==
|
||||||
recyclerViewScrollingFingerprint to ExtensionMethod(
|
"Landroid/support/v7/widget/RecyclerView;"
|
||||||
methodName = "onScrollingViews",
|
}
|
||||||
),
|
|
||||||
onBackPressedFingerprint to ExtensionMethod(
|
addInstruction(
|
||||||
"p0",
|
index,
|
||||||
"onBackPressed",
|
"invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->onScrollingViews()V"
|
||||||
"Landroid/app/Activity;",
|
)
|
||||||
),
|
}
|
||||||
).forEach { (fingerprint, target) -> fingerprint.injectCall(target) }
|
|
||||||
|
}
|
||||||
|
|
||||||
|
onBackPressedFingerprint.let {
|
||||||
|
it.method.addInstruction(
|
||||||
|
it.patternMatch!!.endIndex,
|
||||||
|
"invoke-static { p0 }, $EXTENSION_CLASS_DESCRIPTOR->onBackPressed(Landroid/app/Activity;)V"
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* A reference to a method from the extension for [fixBackToExitGesturePatch].
|
|
||||||
*
|
|
||||||
* @param register The method registers.
|
|
||||||
* @param methodName The method name.
|
|
||||||
* @param parameterTypes The parameters of the method.
|
|
||||||
*/
|
|
||||||
private class ExtensionMethod(
|
|
||||||
val register: String = "",
|
|
||||||
val methodName: String,
|
|
||||||
val parameterTypes: String = "",
|
|
||||||
) {
|
|
||||||
override fun toString() =
|
|
||||||
"invoke-static {$register}, Lapp/revanced/extension/youtube/patches/FixBackToExitGesturePatch;->$methodName($parameterTypes)V"
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ val gmsCoreSupportPatch = gmsCoreSupportPatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ val bypassURLRedirectsPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ val openLinksExternallyPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ val removeTrackingQueryParameterPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ val spoofVideoStreamsPatch = spoofVideoStreamsPatch({
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -36,20 +37,11 @@ val spoofVideoStreamsPatch = spoofVideoStreamsPatch({
|
|||||||
sorting = PreferenceScreenPreference.Sorting.UNSORTED,
|
sorting = PreferenceScreenPreference.Sorting.UNSORTED,
|
||||||
preferences = setOf(
|
preferences = setOf(
|
||||||
SwitchPreference("revanced_spoof_video_streams"),
|
SwitchPreference("revanced_spoof_video_streams"),
|
||||||
ListPreference(
|
|
||||||
"revanced_spoof_video_streams_client",
|
|
||||||
summaryKey = null,
|
|
||||||
),
|
|
||||||
ListPreference(
|
ListPreference(
|
||||||
"revanced_spoof_video_streams_language",
|
"revanced_spoof_video_streams_language",
|
||||||
summaryKey = null
|
summaryKey = null
|
||||||
),
|
),
|
||||||
SwitchPreference("revanced_spoof_video_streams_ios_force_avc"),
|
NonInteractivePreference("revanced_spoof_video_streams_about")
|
||||||
// Preference requires a title but the actual text is chosen at runtime.
|
|
||||||
NonInteractivePreference(
|
|
||||||
key = "revanced_spoof_video_streams_about_android_vr",
|
|
||||||
tag = "app.revanced.extension.youtube.settings.preference.SpoofStreamingDataSideEffectsPreference"
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ val zoomHapticsPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,8 @@ private const val EXTENSION_CLASS_DESCRIPTOR =
|
|||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
val forceOriginalAudioPatch = bytecodePatch(
|
val forceOriginalAudioPatch = bytecodePatch(
|
||||||
name = "Force original audio",
|
name = "Force original audio",
|
||||||
description = "Adds an option to always use the original audio track.",
|
description = "Adds an option to always use the original audio track. " +
|
||||||
|
"This patch does nothing if 'Spoof video streams' is enabled.",
|
||||||
) {
|
) {
|
||||||
dependsOn(
|
dependsOn(
|
||||||
sharedExtensionPatch,
|
sharedExtensionPatch,
|
||||||
@@ -49,6 +50,7 @@ val forceOriginalAudioPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ val rememberVideoQualityPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ val playbackSpeedPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ val restoreOldVideoQualityMenuPatch = bytecodePatch(
|
|||||||
"19.43.41",
|
"19.43.41",
|
||||||
"19.45.38",
|
"19.45.38",
|
||||||
"19.46.42",
|
"19.46.42",
|
||||||
|
"19.47.53",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -164,6 +164,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||||
|
|||||||
@@ -164,6 +164,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||||
|
|||||||
@@ -1049,6 +1049,12 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_disable_resuming_shorts_player_summary_on">لن يتم استئناف تشغيل مشغل Shorts عند بدء تشغيل التطبيق</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_on">لن يتم استئناف تشغيل مشغل Shorts عند بدء تشغيل التطبيق</string>
|
||||||
<string name="revanced_disable_resuming_shorts_player_summary_off">سيتم استئناف تشغيل مشغل Shorts عند بدء تشغيل التطبيق</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_off">سيتم استئناف تشغيل مشغل Shorts عند بدء تشغيل التطبيق</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
<string name="revanced_shorts_player_type_title">فتح مقاطع الـShorts باستخدام</string>
|
||||||
|
<string name="revanced_shorts_player_type_shorts">مشغل Shorts</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player">مشغل عادي</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player_fullscreen">شاشة كاملة - مشغل عادي</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
<string name="revanced_shorts_autoplay_title">التشغيل التلقائي لفيديوهات Shorts</string>
|
<string name="revanced_shorts_autoplay_title">التشغيل التلقائي لفيديوهات Shorts</string>
|
||||||
<string name="revanced_shorts_autoplay_summary_on">سيتم تشغيل فيديوهات Shorts تلقائيًا</string>
|
<string name="revanced_shorts_autoplay_summary_on">سيتم تشغيل فيديوهات Shorts تلقائيًا</string>
|
||||||
@@ -1280,20 +1286,12 @@ Second \"item\" text"</string>
|
|||||||
|
|
||||||
قد لا يعمل تشغيل الفيديو"</string>
|
قد لا يعمل تشغيل الفيديو"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">إيقاف تشغيل هذا الإعداد قد يسبب مشاكل في تشغيل الفيديو.</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">إيقاف تشغيل هذا الإعداد قد يسبب مشاكل في تشغيل الفيديو.</string>
|
||||||
<string name="revanced_spoof_video_streams_client_title">العميل الافتراضي</string>
|
<string name="revanced_spoof_video_streams_client_type_title">العميل الافتراضي</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">فرض AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_title">آثار جانبية وهمية</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">تم فرض ترميز الفيديو على AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_summary">"- قد لا يتم تشغيل مقاطع فيديو للأطفال
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">يتم تحديد ترميز الفيديو تلقائيًا</string>
|
- القائمة صوت المسار مفقودة
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"قد يؤدي تمكين هذا إلى تحسين عمر البطارية وإصلاح مشكلة تقطيع التشغيل.
|
- مستوى الصوت الثابت غير متاح
|
||||||
|
- خيار فرض الصوت الأصلي غير متاح"</string>
|
||||||
يتمتع تنسيق AVC بدقة قصوى تبلغ 1080P، برنامج ترميز الصوت Opus غير متوفر، وسيستخدم تشغيل الفيديو المزيد من بيانات الإنترنت مقارنةً بتنسيق VP9 أو AV1."</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_title">التأثيرات الجانبية لمحاكاة iOS</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• لا يمكن تشغيل مقاطع فيديو الأطفال الخاصة.
|
|
||||||
• تنتهي مقاطع الفيديو مبكرًا بمقدار 1 ثانية."</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_title">التأثيرات الجانبية لمحاكاة Android VR</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• قد لا يتم تشغيل فيديوهات الأطفال
|
|
||||||
• تبدأ البثوث المباشرة من البداية
|
|
||||||
• قد تنتهي الفيديوهات قبل النهاية بثانية واحدة"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_title">لغة البث الصوتي الافتراضية</string>
|
<string name="revanced_spoof_video_streams_language_title">لغة البث الصوتي الافتراضية</string>
|
||||||
<string name="revanced_spoof_video_streams_language_DEFAULT">لغة التطبيق</string>
|
<string name="revanced_spoof_video_streams_language_DEFAULT">لغة التطبيق</string>
|
||||||
<string name="revanced_spoof_video_streams_language_AR">العربية</string>
|
<string name="revanced_spoof_video_streams_language_AR">العربية</string>
|
||||||
|
|||||||
@@ -164,6 +164,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||||
|
|||||||
@@ -1049,6 +1049,12 @@ Sonradan söndürülərsə, UI səhvlərini qarşısını almaq üçün tətbiqi
|
|||||||
<string name="revanced_disable_resuming_shorts_player_summary_on">Tətbiq açılanda Shorts oynadıcı davam etməyəcək</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_on">Tətbiq açılanda Shorts oynadıcı davam etməyəcək</string>
|
||||||
<string name="revanced_disable_resuming_shorts_player_summary_off">Tətbiq açılanda Shorts oynadıcı davam edəcək</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_off">Tətbiq açılanda Shorts oynadıcı davam edəcək</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
<string name="revanced_shorts_player_type_title">Shorts ilə</string>
|
||||||
|
<string name="revanced_shorts_player_type_shorts">Shorts oynadıcı</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player">Adi oynatıcı</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player_fullscreen">Adi oynatıcı tam ekran</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
<string name="revanced_shorts_autoplay_title">Shorts-ları avto-oynatma</string>
|
<string name="revanced_shorts_autoplay_title">Shorts-ları avto-oynatma</string>
|
||||||
<string name="revanced_shorts_autoplay_summary_on">Shorts-lar avto-oynadılacaq</string>
|
<string name="revanced_shorts_autoplay_summary_on">Shorts-lar avto-oynadılacaq</string>
|
||||||
@@ -1281,20 +1287,12 @@ Bunu aktivləşdirmə daha yüksək video keyfiyyətləri əngəlin silə bilər
|
|||||||
|
|
||||||
Video oynatma işləməyə bilər"</string>
|
Video oynatma işləməyə bilər"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">Bu seçimi bağlamaq, video oynatma problemlərinə səbəb olar.</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">Bu seçimi bağlamaq, video oynatma problemlərinə səbəb olar.</string>
|
||||||
<string name="revanced_spoof_video_streams_client_title">İlkin qəbuledici</string>
|
<string name="revanced_spoof_video_streams_client_type_title">İlkin qəbuledici</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Məcburi AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_title">Yan effektlərin spoof edilməsi</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video kodlama AVC (H.264) -yə məcbur edilir</string>
|
<string name="revanced_spoof_video_streams_about_summary">"• Uşaq videoları işlənməyə bilər
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video kodlama birbaşa yoxlanılır</string>
|
• Səs izləri menyusunu itkindir
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Bunu fəallaşdırma, batareya ömrünü yaxşılaşdıra və oxutma ilişmələrini düzəldə bilər.
|
• Sabit səs mövcud deyil
|
||||||
|
• Orijinal səs məcburi olaraq mövcud deyil"</string>
|
||||||
AVC-nin maksimum dəqiqliyi 1080p-dir, Opus səs kodek əlçatan deyil və video oxutma, VP9 və ya AV1-dən daha çox internet datası istifadə edəcək."</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_title">iOS saxtakarlığı yan təsirləri</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_summary">"◦ Xüsusi uşaq videoları bəlkə də oynanılmaya bilər
|
|
||||||
◦ Videolar 1 saniyə tez bitir"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR saxtakarlığı yan təsirləri</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Uşaq videoları oxudulmaya bilər
|
|
||||||
• Canlı yayımlar başdan başlayır
|
|
||||||
• Videolar 1 saniyə tez bitir"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_title">İlkin səs yayımı dili</string>
|
<string name="revanced_spoof_video_streams_language_title">İlkin səs yayımı dili</string>
|
||||||
<string name="revanced_spoof_video_streams_language_DEFAULT">Tətbiq dili</string>
|
<string name="revanced_spoof_video_streams_language_DEFAULT">Tətbiq dili</string>
|
||||||
<string name="revanced_spoof_video_streams_language_AR">Ərəbcə</string>
|
<string name="revanced_spoof_video_streams_language_AR">Ərəbcə</string>
|
||||||
|
|||||||
@@ -668,8 +668,8 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_hide_shorts_use_template_button_summary_on">Кнопка выкарыстання шаблону схавана</string>
|
<string name="revanced_hide_shorts_use_template_button_summary_on">Кнопка выкарыстання шаблону схавана</string>
|
||||||
<string name="revanced_hide_shorts_use_template_button_summary_off">Кнопка выкарыстання шаблону паказана</string>
|
<string name="revanced_hide_shorts_use_template_button_summary_off">Кнопка выкарыстання шаблону паказана</string>
|
||||||
<string name="revanced_hide_shorts_upcoming_button_title">Схаваць кнопку будучых</string>
|
<string name="revanced_hide_shorts_upcoming_button_title">Схаваць кнопку будучых</string>
|
||||||
<string name="revanced_hide_shorts_upcoming_button_summary_on">Кнопка ⬆️Будущие ролики⬆️ скрыта</string>
|
<string name="revanced_hide_shorts_upcoming_button_summary_on">Кнопка Будущие ролики скрыта</string>
|
||||||
<string name="revanced_hide_shorts_upcoming_button_summary_off">Кнопка ⬆️Будущие ролики⬆️ отображается</string>
|
<string name="revanced_hide_shorts_upcoming_button_summary_off">Кнопка Будущие ролики отображается</string>
|
||||||
<string name="revanced_hide_shorts_green_screen_button_title">Скрыть кнопку с зелёным экраном Shorts</string>
|
<string name="revanced_hide_shorts_green_screen_button_title">Скрыть кнопку с зелёным экраном Shorts</string>
|
||||||
<string name="revanced_hide_shorts_green_screen_button_summary_on">Кнопка с зелёным экраном Shorts скрыта</string>
|
<string name="revanced_hide_shorts_green_screen_button_summary_on">Кнопка с зелёным экраном Shorts скрыта</string>
|
||||||
<string name="revanced_hide_shorts_green_screen_button_summary_off">Кнопка с зелёным экраном Shorts отображается</string>
|
<string name="revanced_hide_shorts_green_screen_button_summary_off">Кнопка с зелёным экраном Shorts отображается</string>
|
||||||
@@ -1051,6 +1051,12 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_disable_resuming_shorts_player_summary_on">Прайгравальнік Shorts не аднаўляецца пры запуску праграмы</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_on">Прайгравальнік Shorts не аднаўляецца пры запуску праграмы</string>
|
||||||
<string name="revanced_disable_resuming_shorts_player_summary_off">Прайгравальнік Shorts адновіцца пры запуску праграмы</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_off">Прайгравальнік Shorts адновіцца пры запуску праграмы</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
<string name="revanced_shorts_player_type_title">Адкрыць Shorts з</string>
|
||||||
|
<string name="revanced_shorts_player_type_shorts">Прайгравальнік Shorts</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player">Звычайны прайгравальнік</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player_fullscreen">Звычайны прайгравальнік на ўвесь экран</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
<string name="revanced_shorts_autoplay_title">Автовоспроизведение Shorts</string>
|
<string name="revanced_shorts_autoplay_title">Автовоспроизведение Shorts</string>
|
||||||
<string name="revanced_shorts_autoplay_summary_on">Shorts будут воспроизводиться автоматически</string>
|
<string name="revanced_shorts_autoplay_summary_on">Shorts будут воспроизводиться автоматически</string>
|
||||||
@@ -1282,20 +1288,12 @@ Second \"item\" text"</string>
|
|||||||
|
|
||||||
Прайграванне відэа можа не працаваць"</string>
|
Прайграванне відэа можа не працаваць"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">Адключэнне гэтай налады можа выклікаць праблемы з прайграваннем відэа.</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">Адключэнне гэтай налады можа выклікаць праблемы з прайграваннем відэа.</string>
|
||||||
<string name="revanced_spoof_video_streams_client_title">Клиент по умолчанию</string>
|
<string name="revanced_spoof_video_streams_client_type_title">Клиент по умолчанию</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Принудительно AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_title">Падробка пабочных эфектаў</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Видеокодек принудительно установлен в AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_summary">"• Дзіцячыя відэа могуць не прайгравацца
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Видеокодек определяется автоматически</string>
|
• Панэль гукавых дарожак адсутнічае
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Уключэнне гэтага можа палепшыць тэрмін службы батарэі і выправіць заіканне відэа.
|
• Стабільная гучнасць недаступная
|
||||||
|
• Прымусова арыгінальная аўдыёдарожка недаступная"</string>
|
||||||
AVC мае максімальную раздзяляльнасць 1080p, аўдыякадэкар Opus недаступны, і відэа будзе выкарыстоўваць больш Інтэрнэт-даных, чым VP9 або AV1."</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_title">Пабочныя эфекты падмены iOS</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• Прыватныя дзіцячыя відэа могуць не прайгравацца
|
|
||||||
• Відэа заканчваюцца на 1 секунду раней"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Побочные эффекты подмены Android VR</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Дзіцячыя відэа могуць не прайгравацца
|
|
||||||
• Трансляцыі ў прамым эфіры пачынаюцца з пачатку
|
|
||||||
• Відэа заканчваюцца на 1 секунду раней"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_title">Язык потока аудио по умолчанию</string>
|
<string name="revanced_spoof_video_streams_language_title">Язык потока аудио по умолчанию</string>
|
||||||
<string name="revanced_spoof_video_streams_language_DEFAULT">Язык приложения</string>
|
<string name="revanced_spoof_video_streams_language_DEFAULT">Язык приложения</string>
|
||||||
<string name="revanced_spoof_video_streams_language_AR">Арабский</string>
|
<string name="revanced_spoof_video_streams_language_AR">Арабский</string>
|
||||||
|
|||||||
@@ -1049,6 +1049,12 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_disable_resuming_shorts_player_summary_on">Shorts плейъра при стартиране на приложението е скрит</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_on">Shorts плейъра при стартиране на приложението е скрит</string>
|
||||||
<string name="revanced_disable_resuming_shorts_player_summary_off">Shorts плейъра при стартиране на приложението се показва</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_off">Shorts плейъра при стартиране на приложението се показва</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
<string name="revanced_shorts_player_type_title">Отворете Shorts с</string>
|
||||||
|
<string name="revanced_shorts_player_type_shorts">Играч на Shorts</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player">Обикновен плейър</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player_fullscreen">Обикновен плейър на цял екран</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
<string name="revanced_shorts_autoplay_title">Автоматично пускане Shorts</string>
|
<string name="revanced_shorts_autoplay_title">Автоматично пускане Shorts</string>
|
||||||
<string name="revanced_shorts_autoplay_summary_on">Shorts ще се пускат автоматично</string>
|
<string name="revanced_shorts_autoplay_summary_on">Shorts ще се пускат автоматично</string>
|
||||||
@@ -1280,20 +1286,12 @@ Second \"item\" text"</string>
|
|||||||
|
|
||||||
Възпроизвеждането на видеоклипове може да не работи"</string>
|
Възпроизвеждането на видеоклипове може да не работи"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">Деактивирането на тази настройка ще доведе до проблеми с възпроизвеждането на видео.</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">Деактивирането на тази настройка ще доведе до проблеми с възпроизвеждането на видео.</string>
|
||||||
<string name="revanced_spoof_video_streams_client_title">Клиент по подразбиране</string>
|
<string name="revanced_spoof_video_streams_client_type_title">Клиент по подразбиране</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Принудително AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_title">Фалшиви странични ефекти</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Видео кодек по подразбиране AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_summary">"• Детските видеоклипове може да не се възпроизвеждат
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Видео кодекът се определя автоматично</string>
|
• Липсва менюто за аудио запис
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Активирането на това може да подобри живота на батерията и да поправи заекването на възпроизвеждането.
|
• Не е наличен стабилен звук
|
||||||
|
• Принудително оригинално аудио не е налично"</string>
|
||||||
AVC има максимална разделителна способност от 1080p, аудио кодекът Opus не е наличен, а видеовъзпроизвеждането ще използва повече интернет данни от VP9 или AV1."</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_title">Cтранични ефекти от подмяната на iOS</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• Възможно е частните детски видеоклипове да не се възпроизвеждат
|
|
||||||
• Видеоклиповете завършват 1 секунда по-рано"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Странични ефекти от подправяне на Android VR</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Детските видеоклипове може да не се възпроизвеждат
|
|
||||||
• Предаванията на живо започват от началото
|
|
||||||
• Видеоклиповете завършват 1 секунда по-рано"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_title">Език по подразбиране на аудио потока</string>
|
<string name="revanced_spoof_video_streams_language_title">Език по подразбиране на аудио потока</string>
|
||||||
<string name="revanced_spoof_video_streams_language_DEFAULT">Език на приложението</string>
|
<string name="revanced_spoof_video_streams_language_DEFAULT">Език на приложението</string>
|
||||||
<string name="revanced_spoof_video_streams_language_AR">Арабски</string>
|
<string name="revanced_spoof_video_streams_language_AR">Арабски</string>
|
||||||
|
|||||||
@@ -1050,6 +1050,12 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
|||||||
<string name="revanced_disable_resuming_shorts_player_summary_on">অ্যাপের শুরুতে Shorts প্লেয়ার আবার চলবে না</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_on">অ্যাপের শুরুতে Shorts প্লেয়ার আবার চলবে না</string>
|
||||||
<string name="revanced_disable_resuming_shorts_player_summary_off">অ্যাপের শুরুতে Shorts প্লেয়ার আবার চলবে</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_off">অ্যাপের শুরুতে Shorts প্লেয়ার আবার চলবে</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
<string name="revanced_shorts_player_type_title">Shorts সঙ্গে খুলুন</string>
|
||||||
|
<string name="revanced_shorts_player_type_shorts">Shorts প্লেয়ার</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player">নিয়মিত প্লেয়ার</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player_fullscreen">নিয়মিত প্লেয়ার পূর্ণ পর্দা</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
<string name="revanced_shorts_autoplay_title">অটোপ্লে Shorts</string>
|
<string name="revanced_shorts_autoplay_title">অটোপ্লে Shorts</string>
|
||||||
<string name="revanced_shorts_autoplay_summary_on">Shorts অটোপ্লে হবে</string>
|
<string name="revanced_shorts_autoplay_summary_on">Shorts অটোপ্লে হবে</string>
|
||||||
@@ -1282,19 +1288,12 @@ DeArrow সম্পর্কে আরও জানতে এখানে ট
|
|||||||
|
|
||||||
ভিডিও প্লেব্যাক কাজ নাও করতে পারে"</string>
|
ভিডিও প্লেব্যাক কাজ নাও করতে পারে"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">এই সেটিংটি বন্ধ করার ফলে ভিডিও প্লেব্যাক ত্রুটি হতে পারে।</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">এই সেটিংটি বন্ধ করার ফলে ভিডিও প্লেব্যাক ত্রুটি হতে পারে।</string>
|
||||||
<string name="revanced_spoof_video_streams_client_title">ডিফল্ট ক্লায়েন্ট</string>
|
<string name="revanced_spoof_video_streams_client_type_title">ডিফল্ট ক্লায়েন্ট</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">AVC (H.264) ফোর্স করুন</string>
|
<string name="revanced_spoof_video_streams_about_title">স্পুফিং এর পার্শ্বপ্রতিক্রিয়া</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">ভিডিও কোডেক AVC (H.264) তে বাধ্য করা হয়েছে</string>
|
<string name="revanced_spoof_video_streams_about_summary">"• বাচ্চাদের ভিডিও প্লে নাও হতে পারে
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">ভিডিও কোডেক স্বয়ংক্রিয়ভাবে নির্ধারিত হচ্ছে</string>
|
• অডিও ট্র্যাক মেনু অনুপস্থিত
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"এটি সক্রিয় করা ব্যাটারি লাইফ উন্নত করতে পারে এবং প্লেব্যাক হোঁচট খাওয়া ঠিক করতে পারে।
|
• স্থিতিশীল ভলিউম উপলব্ধ নয়
|
||||||
|
• জোর করে মূল অডিও উপলব্ধ নয়৷"</string>
|
||||||
AVC-এর সর্বোচ্চ রেজোলিউশন 1080p, Opus অডিও কোডেক উপলব্ধ নয় এবং ভিডিও প্লেব্যাক VP9 বা AV1 এর তুলনায় আরও ইন্টারনেট ডেটা ব্যবহার করবে।"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_title">iOS স্পুফিং এর পার্শ্ব প্রতিক্রিয়া</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• বেসরকারি শিশু ভিডিও চলতে নাও পারে<br>• ভিডিওগুলি 1 সেকেন্ড আগে শেষ হয়"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR স্পুফিং এর পার্শ্ব প্রতিক্রিয়া</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• শিশু ভিডিওগুলি প্লে নাও হতে পারে
|
|
||||||
• লাইভস্ট্রিম শুরু থেকে শুরু হয়
|
|
||||||
• ভিডিও 1 সেকেন্ড আগে শেষ হয়"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_title">ডিফল্ট অডিও স্ট্রিম ভাষা</string>
|
<string name="revanced_spoof_video_streams_language_title">ডিফল্ট অডিও স্ট্রিম ভাষা</string>
|
||||||
<string name="revanced_spoof_video_streams_language_DEFAULT">অ্যাপ ভাষা</string>
|
<string name="revanced_spoof_video_streams_language_DEFAULT">অ্যাপ ভাষা</string>
|
||||||
<string name="revanced_spoof_video_streams_language_AR">আরবি</string>
|
<string name="revanced_spoof_video_streams_language_AR">আরবি</string>
|
||||||
|
|||||||
@@ -164,6 +164,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||||
|
|||||||
@@ -1049,6 +1049,12 @@ Si després es desactiva, es recomana esborrar les dades de l'aplicació per evi
|
|||||||
<string name="revanced_disable_resuming_shorts_player_summary_on">El reproductor de Shorts no es reprendrà a l\'inici de l\'aplicació</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_on">El reproductor de Shorts no es reprendrà a l\'inici de l\'aplicació</string>
|
||||||
<string name="revanced_disable_resuming_shorts_player_summary_off">El reproductor de Shorts es reprendrà a l\'inici de l\'aplicació</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_off">El reproductor de Shorts es reprendrà a l\'inici de l\'aplicació</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
<string name="revanced_shorts_player_type_title">Obre Youtube Shorts amb</string>
|
||||||
|
<string name="revanced_shorts_player_type_shorts">Reproductor de Shorts</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player">Reproductor normal</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player_fullscreen">Reproductor normal a pantalla completa</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
<string name="revanced_shorts_autoplay_title">Reprodueix automàticament els Shorts</string>
|
<string name="revanced_shorts_autoplay_title">Reprodueix automàticament els Shorts</string>
|
||||||
<string name="revanced_shorts_autoplay_summary_on">Els Shorts es reproduiran automàticament</string>
|
<string name="revanced_shorts_autoplay_summary_on">Els Shorts es reproduiran automàticament</string>
|
||||||
@@ -1281,20 +1287,12 @@ Si actives aquesta opció, es poden desbloquejar qualitats de vídeo més altes"
|
|||||||
|
|
||||||
La reproducció de vídeo pot no funcionar"</string>
|
La reproducció de vídeo pot no funcionar"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">Desactivar aquesta configuració pot causar problemes de reproducció de vídeo.</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">Desactivar aquesta configuració pot causar problemes de reproducció de vídeo.</string>
|
||||||
<string name="revanced_spoof_video_streams_client_title">Client predeterminat</string>
|
<string name="revanced_spoof_video_streams_client_type_title">Client predeterminat</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Força AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_title">Efectes secundaris de suplantació</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">El còdec de vídeo es força a AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_summary">"• És possible que els vídeos infantils no es reprodueixin
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">El còdec de vídeo es determina automàticament</string>
|
• Falta el menú de pista d'àudio
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Si actives aquesta opció, és possible que millori la durada de la bateria i es solucioni el tartamudeig de la reproducció.
|
• El volum estable no està disponible
|
||||||
|
• Força l'àudio original no està disponible"</string>
|
||||||
AVC té una resolució màxima de 1080p, el còdec d'àudio Opus no està disponible i la reproducció de vídeo utilitzarà més dades d'Internet que VP9 o AV1."</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_title">Efectes secundaris de la falsificació d\'iOS</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• Els vídeos privats per a nens potser no es reprodueixen
|
|
||||||
• Els vídeos finalitzen 1 segon abans"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Efecte secundaris de la suplantació d\'Android VR</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Els vídeos de nens poden no reproduir-se
|
|
||||||
• Les emissions en directe comencen des del principi
|
|
||||||
• Els vídeos acaben 1 segon abans"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_title">Idioma de la transmissió d\'àudio per defecte</string>
|
<string name="revanced_spoof_video_streams_language_title">Idioma de la transmissió d\'àudio per defecte</string>
|
||||||
<string name="revanced_spoof_video_streams_language_DEFAULT">Idioma de l\'aplicació</string>
|
<string name="revanced_spoof_video_streams_language_DEFAULT">Idioma de l\'aplicació</string>
|
||||||
<string name="revanced_spoof_video_streams_language_AR">Àrab</string>
|
<string name="revanced_spoof_video_streams_language_AR">Àrab</string>
|
||||||
|
|||||||
@@ -1049,6 +1049,12 @@ Pokud bude později vypnuta, doporučujeme vymazat data aplikace, aby se zabrán
|
|||||||
<string name="revanced_disable_resuming_shorts_player_summary_on">Přehrávač Shorts nebude obnoven při spuštění aplikace</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_on">Přehrávač Shorts nebude obnoven při spuštění aplikace</string>
|
||||||
<string name="revanced_disable_resuming_shorts_player_summary_off">Přehrávač Shorts se po spuštění aplikace znovu spustí</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_off">Přehrávač Shorts se po spuštění aplikace znovu spustí</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
<string name="revanced_shorts_player_type_title">Otevřít Shorts s</string>
|
||||||
|
<string name="revanced_shorts_player_type_shorts">Přehrávač Shorts</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player">Běžný přehrávač</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player_fullscreen">Normální přehrávač (celá obrazovka)</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
<string name="revanced_shorts_autoplay_title">Automatické přehrávání Shorts</string>
|
<string name="revanced_shorts_autoplay_title">Automatické přehrávání Shorts</string>
|
||||||
<string name="revanced_shorts_autoplay_summary_on">Shorts se budou automaticky přehrávat</string>
|
<string name="revanced_shorts_autoplay_summary_on">Shorts se budou automaticky přehrávat</string>
|
||||||
@@ -1280,20 +1286,12 @@ Povolením této funkce lze odemknout vyšší kvality videa"</string>
|
|||||||
|
|
||||||
Přehrávání videa nemusí fungovat"</string>
|
Přehrávání videa nemusí fungovat"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">Vypnutí tohoto nastavení může způsobit problémy s přehráváním videa.</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">Vypnutí tohoto nastavení může způsobit problémy s přehráváním videa.</string>
|
||||||
<string name="revanced_spoof_video_streams_client_title">Výchozí klient</string>
|
<string name="revanced_spoof_video_streams_client_type_title">Výchozí klient</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Vynutit AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_title">Napodobování vedlejších účinků</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video kodek je vynucen na AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_summary">"• Dětská videa se nemusí přehrávat
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video kodek je určen automaticky</string>
|
• Chybí nabídka zvukových stop
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Povolením této funkce se může zlepšit výdrž baterie a opravit zadrhávání přehrávání.
|
• Stabilní hlasitost není k dispozici
|
||||||
|
• Vynucení původního zvuku není k dispozici"</string>
|
||||||
AVC má maximální rozlišení 1080p, audio kodek Opus není dostupný a přehrávání videa bude používat více internetových dat než VP9 nebo AV1."</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_title">Vedlejší účinky napodobování iOS</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• Soukromá dětská videa se nemusí přehrávat
|
|
||||||
• Videa končí o 1 sekundu dříve"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Vedlejší účinky napodobování Android VR</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Videa pro děti se nemusí přehrát
|
|
||||||
• Livestreamy začínají od začátku
|
|
||||||
• Videa končí o 1 sekundu dříve"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_title">Výchozí jazyk zvukového streamu</string>
|
<string name="revanced_spoof_video_streams_language_title">Výchozí jazyk zvukového streamu</string>
|
||||||
<string name="revanced_spoof_video_streams_language_DEFAULT">Jazyk aplikace</string>
|
<string name="revanced_spoof_video_streams_language_DEFAULT">Jazyk aplikace</string>
|
||||||
<string name="revanced_spoof_video_streams_language_AR">Arabsky</string>
|
<string name="revanced_spoof_video_streams_language_AR">Arabsky</string>
|
||||||
|
|||||||
@@ -1050,6 +1050,12 @@ Hvis det senere slås fra, anbefales det at rydde app-dataene for at forhindre U
|
|||||||
<string name="revanced_disable_resuming_shorts_player_summary_on">Shorts-afspilleren genoptages ikke ved app-start</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_on">Shorts-afspilleren genoptages ikke ved app-start</string>
|
||||||
<string name="revanced_disable_resuming_shorts_player_summary_off">Kortspilleren vil genoptage ved app-opstart</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_off">Kortspilleren vil genoptage ved app-opstart</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
<string name="revanced_shorts_player_type_title">Åbne Shorts med</string>
|
||||||
|
<string name="revanced_shorts_player_type_shorts">Shorts-afspiller</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player">Standardafspiller</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player_fullscreen">Standardafspiller i fuld skærm</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
<string name="revanced_shorts_autoplay_title">Automatisk afspilning af Shorts</string>
|
<string name="revanced_shorts_autoplay_title">Automatisk afspilning af Shorts</string>
|
||||||
<string name="revanced_shorts_autoplay_summary_on">Shorts afspilles automatisk</string>
|
<string name="revanced_shorts_autoplay_summary_on">Shorts afspilles automatisk</string>
|
||||||
@@ -1281,20 +1287,12 @@ Aktivering af dette kan låse op for højere videokvalitet"</string>
|
|||||||
|
|
||||||
Videoafspilning virker muligvis ikke"</string>
|
Videoafspilning virker muligvis ikke"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">At slå denne indstilling fra kan forårsage problemer med videoafspilning.</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">At slå denne indstilling fra kan forårsage problemer med videoafspilning.</string>
|
||||||
<string name="revanced_spoof_video_streams_client_title">Standard klient</string>
|
<string name="revanced_spoof_video_streams_client_type_title">Standard klient</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Gennemtving AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_title">Overskrivning af bivirkninger</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video-codec er tvunget til AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_summary">"• Børnevideoer afspilles muligvis ikke
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video-codec bestemmes automatisk</string>
|
• Menuen for lydspor mangler
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Aktivering af dette kan forbedre batterilevetiden og løse afspilningshakkethed.
|
• Stabil lydstyrke er ikke tilgængelig
|
||||||
|
• Force original lyd er ikke tilgængelig"</string>
|
||||||
AVC har en maksimal opløsning på 1080p, Opus lydcodec er ikke tilgængelig, og videoafspilning bruger mere internetdata end VP9 eller AV1."</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_title">iOS forfalskning bivirkninger</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• Private børnevideoer kan muligvis ikke afspilles
|
|
||||||
• Videoer slutter 1 sekund før"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR spoofing bivirkninger</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Børnevideoer kan ikke afspilles
|
|
||||||
• Livestreams starter fra begyndelsen
|
|
||||||
• Videoer slutter 1 sekund tidligere"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_title">Standard lyd-stream sprog</string>
|
<string name="revanced_spoof_video_streams_language_title">Standard lyd-stream sprog</string>
|
||||||
<string name="revanced_spoof_video_streams_language_DEFAULT">App sprog</string>
|
<string name="revanced_spoof_video_streams_language_DEFAULT">App sprog</string>
|
||||||
<string name="revanced_spoof_video_streams_language_AR">Arabisk</string>
|
<string name="revanced_spoof_video_streams_language_AR">Arabisk</string>
|
||||||
|
|||||||
@@ -1044,6 +1044,12 @@ Wenn Sie die Funktion später deaktivieren, wird empfohlen, die App-Daten zu lö
|
|||||||
<string name="revanced_disable_resuming_shorts_player_summary_on">Der Shorts Player wird beim Start der App nicht fortgesetzt</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_on">Der Shorts Player wird beim Start der App nicht fortgesetzt</string>
|
||||||
<string name="revanced_disable_resuming_shorts_player_summary_off">Shorts-Player wird beim Start der App fortgesetzt</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_off">Shorts-Player wird beim Start der App fortgesetzt</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
<string name="revanced_shorts_player_type_title">Shorts mit</string>
|
||||||
|
<string name="revanced_shorts_player_type_shorts">Shorts Spieler</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player">Normaler Spieler</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player_fullscreen">Normaler Spieler im Vollbildmodus</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
<string name="revanced_shorts_autoplay_title">Shorts automatisch abspielen</string>
|
<string name="revanced_shorts_autoplay_title">Shorts automatisch abspielen</string>
|
||||||
<string name="revanced_shorts_autoplay_summary_on">Shorts werden autoplay</string>
|
<string name="revanced_shorts_autoplay_summary_on">Shorts werden autoplay</string>
|
||||||
@@ -1275,20 +1281,12 @@ Durch Aktivieren dieser Option können höhere Videoqualitäten freigeschaltet w
|
|||||||
|
|
||||||
Die Videowiedergabe funktioniert möglicherweise nicht"</string>
|
Die Videowiedergabe funktioniert möglicherweise nicht"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">Das Deaktivieren dieser Einstellung kann zu Videowiedergabeproblemen führen.</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">Das Deaktivieren dieser Einstellung kann zu Videowiedergabeproblemen führen.</string>
|
||||||
<string name="revanced_spoof_video_streams_client_title">Standard-Client</string>
|
<string name="revanced_spoof_video_streams_client_type_title">Standard-Client</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">AVC erzwingen (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_title">Spoofing-Nebenwirkungen</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video-Codec ist zu AVC gezwungen (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_summary">"• Kindervideos werden möglicherweise nicht abgespielt
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video-Codec wird automatisch bestimmt</string>
|
• Audiospurmenü fehlt
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Dadurch kann die Akkulaufzeit verbessert und Stottern bei der Wiedergabe behoben werden.
|
• Eine stabile Lautstärke ist nicht verfügbar
|
||||||
|
• „Originalton erzwingen“ ist nicht verfügbar"</string>
|
||||||
AVC hat eine maximale Auflösung von 1080p, der Opus-Audiocodec ist nicht verfügbar und die Videowiedergabe verbraucht mehr Internetdaten als VP9 oder AV1."</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_title">iOS Spoofing Nebeneffekte</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• Private Kindervideos werden möglicherweise nicht abgespielt
|
|
||||||
• Videos enden 1 Sekunde früher"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR Spoofing Nebeneffekte</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Kindervideos werden möglicherweise nicht abgespielt
|
|
||||||
• Livestreams starten von Anfang an
|
|
||||||
• Videos enden 1 Sekunde früher"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_title">Standard Audio Streamsprache</string>
|
<string name="revanced_spoof_video_streams_language_title">Standard Audio Streamsprache</string>
|
||||||
<string name="revanced_spoof_video_streams_language_DEFAULT">App-Sprache</string>
|
<string name="revanced_spoof_video_streams_language_DEFAULT">App-Sprache</string>
|
||||||
<string name="revanced_spoof_video_streams_language_AR">Arabisch</string>
|
<string name="revanced_spoof_video_streams_language_AR">Arabisch</string>
|
||||||
|
|||||||
@@ -197,7 +197,7 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_hide_info_panels_title">Πάνελ πληροφοριών</string>
|
<string name="revanced_hide_info_panels_title">Πάνελ πληροφοριών</string>
|
||||||
<string name="revanced_hide_info_panels_summary_on">Κρυμμένα</string>
|
<string name="revanced_hide_info_panels_summary_on">Κρυμμένα</string>
|
||||||
<string name="revanced_hide_info_panels_summary_off">Εμφανίζονται</string>
|
<string name="revanced_hide_info_panels_summary_off">Εμφανίζονται</string>
|
||||||
<string name="revanced_hide_medical_panels_title">Πάνελ Ιατρικών Πληροφοριών</string>
|
<string name="revanced_hide_medical_panels_title">Πάνελ ιατρικών πληροφοριών</string>
|
||||||
<string name="revanced_hide_medical_panels_summary_on">Κρυμμένα</string>
|
<string name="revanced_hide_medical_panels_summary_on">Κρυμμένα</string>
|
||||||
<string name="revanced_hide_medical_panels_summary_off">Εμφανίζονται</string>
|
<string name="revanced_hide_medical_panels_summary_off">Εμφανίζονται</string>
|
||||||
<string name="revanced_hide_channel_bar_title">Γραμμή καναλιού</string>
|
<string name="revanced_hide_channel_bar_title">Γραμμή καναλιού</string>
|
||||||
@@ -524,7 +524,7 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_disable_translucent_navigation_bar_light_title">Απενεργοποίηση διαφανούς γραμμής στο φωτεινό θέμα</string>
|
<string name="revanced_disable_translucent_navigation_bar_light_title">Απενεργοποίηση διαφανούς γραμμής στο φωτεινό θέμα</string>
|
||||||
<string name="revanced_disable_translucent_navigation_bar_light_summary_on">Η γραμμή πλοήγησης στο φωτεινό θέμα δεν είναι διαφανής</string>
|
<string name="revanced_disable_translucent_navigation_bar_light_summary_on">Η γραμμή πλοήγησης στο φωτεινό θέμα δεν είναι διαφανής</string>
|
||||||
<string name="revanced_disable_translucent_navigation_bar_light_summary_off">Η διαφάνεια της γραμμής πλοήγησης στο φωτεινό θέμα ορίζεται αυτόματα</string>
|
<string name="revanced_disable_translucent_navigation_bar_light_summary_off">Η διαφάνεια της γραμμής πλοήγησης στο φωτεινό θέμα ορίζεται αυτόματα</string>
|
||||||
<string name="revanced_disable_translucent_navigation_bar_dark_title">Απενεργοποίηση ημιδιαφανούς γραμμής στο σκούρο θέμα</string>
|
<string name="revanced_disable_translucent_navigation_bar_dark_title">Απενεργοποίηση διαφανούς γραμμής στο σκούρο θέμα</string>
|
||||||
<string name="revanced_disable_translucent_navigation_bar_dark_summary_on">Η γραμμή πλοήγησης στο σκούρο θέμα δεν είναι διαφανής</string>
|
<string name="revanced_disable_translucent_navigation_bar_dark_summary_on">Η γραμμή πλοήγησης στο σκούρο θέμα δεν είναι διαφανής</string>
|
||||||
<string name="revanced_disable_translucent_navigation_bar_dark_summary_off">Η διαφάνεια της γραμμής πλοήγησης στο σκούρο θέμα ορίζεται αυτόματα</string>
|
<string name="revanced_disable_translucent_navigation_bar_dark_summary_off">Η διαφάνεια της γραμμής πλοήγησης στο σκούρο θέμα ορίζεται αυτόματα</string>
|
||||||
</patch>
|
</patch>
|
||||||
@@ -812,7 +812,7 @@ Second \"item\" text"</string>
|
|||||||
|
|
||||||
Οι μικρογραφίες γραμμής αναζήτησης θα χρησιμοποιούν την ίδια ποιότητα με το τρέχον βίντεο.
|
Οι μικρογραφίες γραμμής αναζήτησης θα χρησιμοποιούν την ίδια ποιότητα με το τρέχον βίντεο.
|
||||||
|
|
||||||
Αυτή η δυνατότητα λειτουργεί καλύτερα με ποιότητα βίντεο 720p ή χαμηλότερη και όταν χρησιμοποιείται πολύ γρήγορη σύνδεση στο διαδίκτυο."</string>
|
Αυτή η δυνατότητα λειτουργεί καλύτερα με ποιότητα βίντεο 720p ή χαμηλότερη και όταν χρησιμοποιείται μια πολύ γρήγορη σύνδεση στο διαδίκτυο."</string>
|
||||||
<string name="revanced_restore_old_seekbar_thumbnails_title">Παλιές μικρογραφίες γραμμής προόδου</string>
|
<string name="revanced_restore_old_seekbar_thumbnails_title">Παλιές μικρογραφίες γραμμής προόδου</string>
|
||||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Οι μικρογραφίες προεπισκόπησης θα εμφανίζονται πάνω από τη γραμμή προόδου</string>
|
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Οι μικρογραφίες προεπισκόπησης θα εμφανίζονται πάνω από τη γραμμή προόδου</string>
|
||||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Οι μικρογραφίες προεπισκόπησης θα εμφανίζονται σε πλήρη οθόνη</string>
|
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Οι μικρογραφίες προεπισκόπησης θα εμφανίζονται σε πλήρη οθόνη</string>
|
||||||
@@ -1051,6 +1051,12 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_disable_resuming_shorts_player_summary_on">Η αναπαραγωγή Shorts δε θα συνεχίζεται κατά την εκκίνηση της εφαρμογής</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_on">Η αναπαραγωγή Shorts δε θα συνεχίζεται κατά την εκκίνηση της εφαρμογής</string>
|
||||||
<string name="revanced_disable_resuming_shorts_player_summary_off">Η αναπαραγωγή Shorts θα συνεχίζεται κατά την εκκίνηση της εφαρμογής</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_off">Η αναπαραγωγή Shorts θα συνεχίζεται κατά την εκκίνηση της εφαρμογής</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
<string name="revanced_shorts_player_type_title">Άνοιγμα Shorts με</string>
|
||||||
|
<string name="revanced_shorts_player_type_shorts">Οθόνη αναπαραγωγής Shorts</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player">Οθόνη αναπαραγωγής κανονικών βίντεο </string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player_fullscreen">Πλήρη οθόνη αναπαραγωγής κανονικών βίντεο </string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
<string name="revanced_shorts_autoplay_title">Αυτόματη αναπαραγωγή Shorts</string>
|
<string name="revanced_shorts_autoplay_title">Αυτόματη αναπαραγωγή Shorts</string>
|
||||||
<string name="revanced_shorts_autoplay_summary_on">Τα επόμενα Shorts θα αναπαράγονται αυτόματα</string>
|
<string name="revanced_shorts_autoplay_summary_on">Τα επόμενα Shorts θα αναπαράγονται αυτόματα</string>
|
||||||
@@ -1090,11 +1096,11 @@ Second \"item\" text"</string>
|
|||||||
|
|
||||||
Η ελαχιστοποιημένη οθόνη αναπαραγωγής μπορεί να μετακινηθεί σε οποιαδήποτε γωνία της οθόνης"</string>
|
Η ελαχιστοποιημένη οθόνη αναπαραγωγής μπορεί να μετακινηθεί σε οποιαδήποτε γωνία της οθόνης"</string>
|
||||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Η λειτουργία μεταφοράς και απόθεσης είναι απενεργοποιημένη</string>
|
<string name="revanced_miniplayer_drag_and_drop_summary_off">Η λειτουργία μεταφοράς και απόθεσης είναι απενεργοποιημένη</string>
|
||||||
<string name="revanced_miniplayer_horizontal_drag_title">Ενεργοποίηση οριζόντιας χειρονομίας απόρριψης</string>
|
<string name="revanced_miniplayer_horizontal_drag_title">Χειρονομία οριζόντιας σύρσης</string>
|
||||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Η χειρονομία οριζόντιας σύρσης είναι ενεργοποιημένη
|
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Η χειρονομία οριζόντιας σύρσης είναι ενεργοποιημένη
|
||||||
|
|
||||||
Η ελαχιστοποιημένη οθόνη μπορεί να συρθεί εκτός οθόνης προς τα αριστερά ή δεξιά"</string>
|
Η ελαχιστοποιημένη οθόνη μπορεί να συρθεί εκτός οθόνης προς τα αριστερά ή δεξιά"</string>
|
||||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Η οριζόντια χειρονομία είναι ανενεργή</string>
|
<string name="revanced_miniplayer_horizontal_drag_summary_off">Η χειρονομία οριζόντιας σύρσης είναι απενεργοποιημένη</string>
|
||||||
<string name="revanced_miniplayer_hide_expand_close_title">Κουμπί κλεισίματος</string>
|
<string name="revanced_miniplayer_hide_expand_close_title">Κουμπί κλεισίματος</string>
|
||||||
<string name="revanced_miniplayer_hide_expand_close_summary_on">Κρυμμένο</string>
|
<string name="revanced_miniplayer_hide_expand_close_summary_on">Κρυμμένο</string>
|
||||||
<string name="revanced_miniplayer_hide_expand_close_summary_off">Εμφανίζεται</string>
|
<string name="revanced_miniplayer_hide_expand_close_summary_off">Εμφανίζεται</string>
|
||||||
@@ -1103,7 +1109,7 @@ Second \"item\" text"</string>
|
|||||||
|
|
||||||
Σύρετε την ελαχιστοποιημένη οθόνη αναπαραγωγής για επέκταση ή κλείσιμο του βίντεο"</string>
|
Σύρετε την ελαχιστοποιημένη οθόνη αναπαραγωγής για επέκταση ή κλείσιμο του βίντεο"</string>
|
||||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">Εμφανίζονται</string>
|
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">Εμφανίζονται</string>
|
||||||
<string name="revanced_miniplayer_hide_subtext_title">Κείμενα στην οθόνη αναπαραγωγής</string>
|
<string name="revanced_miniplayer_hide_subtext_title">Κείμενα οθόνης αναπαραγωγής</string>
|
||||||
<string name="revanced_miniplayer_hide_subtext_summary_on">Κρυμμένα</string>
|
<string name="revanced_miniplayer_hide_subtext_summary_on">Κρυμμένα</string>
|
||||||
<string name="revanced_miniplayer_hide_subtext_summary_off">Εμφανίζονται</string>
|
<string name="revanced_miniplayer_hide_subtext_summary_off">Εμφανίζονται</string>
|
||||||
<string name="revanced_miniplayer_hide_rewind_forward_title">Κουμπιά παράλειψης και επιστροφής</string>
|
<string name="revanced_miniplayer_hide_rewind_forward_title">Κουμπιά παράλειψης και επιστροφής</string>
|
||||||
@@ -1112,7 +1118,7 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_miniplayer_width_dip_title">Αρχικό μέγεθος</string>
|
<string name="revanced_miniplayer_width_dip_title">Αρχικό μέγεθος</string>
|
||||||
<string name="revanced_miniplayer_width_dip_summary">Αρχικό μέγεθος οθόνης, σε pixel</string>
|
<string name="revanced_miniplayer_width_dip_summary">Αρχικό μέγεθος οθόνης, σε pixel</string>
|
||||||
<string name="revanced_miniplayer_width_dip_invalid_toast">Τα pixel πρέπει να είναι μεταξύ %1$s και %2$s</string>
|
<string name="revanced_miniplayer_width_dip_invalid_toast">Τα pixel πρέπει να είναι μεταξύ %1$s και %2$s</string>
|
||||||
<string name="revanced_miniplayer_opacity_title">Αδιαφάνεια επικάλυψης</string>
|
<string name="revanced_miniplayer_opacity_title">Αδιαφάνεια φόντου παρασκηνίου</string>
|
||||||
<string name="revanced_miniplayer_opacity_summary">Τιμή αδιαφάνειας μεταξύ 0-100, όπου το 0 είναι διαφανές</string>
|
<string name="revanced_miniplayer_opacity_summary">Τιμή αδιαφάνειας μεταξύ 0-100, όπου το 0 είναι διαφανές</string>
|
||||||
<string name="revanced_miniplayer_opacity_invalid_toast">Η αδιαφάνεια φόντου οθόνης αναπαραγωγής πρέπει να είναι μεταξύ 0-100</string>
|
<string name="revanced_miniplayer_opacity_invalid_toast">Η αδιαφάνεια φόντου οθόνης αναπαραγωγής πρέπει να είναι μεταξύ 0-100</string>
|
||||||
</patch>
|
</patch>
|
||||||
@@ -1280,20 +1286,12 @@ Second \"item\" text"</string>
|
|||||||
|
|
||||||
Η αναπαραγωγή βίντεο ενδέχεται να μην λειτουργεί"</string>
|
Η αναπαραγωγή βίντεο ενδέχεται να μην λειτουργεί"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">Η απενεργοποίηση αυτής της ρύθμισης ενδέχεται να προκαλέσει προβλήματα αναπαραγωγής βίντεο.</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">Η απενεργοποίηση αυτής της ρύθμισης ενδέχεται να προκαλέσει προβλήματα αναπαραγωγής βίντεο.</string>
|
||||||
<string name="revanced_spoof_video_streams_client_title">Προεπιλεγμένο πρόγραμμα πελάτη</string>
|
<string name="revanced_spoof_video_streams_client_type_title">Προεπιλεγμένο πρόγραμμα πελάτη</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Εξαναγκασμός AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_title">Παρενέργειες παραποίησης</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Ο κωδικοποιητής βίντεο έχει οριστεί υποχρεωτικά σε AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_summary">"• Τα βίντεο για παιδιά ενδέχεται να μην αναπαράγονται
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Ο κωδικοποιητής βίντεο ορίζεται αυτόματα</string>
|
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Η ενεργοποίηση αυτής της λειτουργίας μπορεί να βελτιώσει τη διάρκεια ζωής της μπαταρίας και να διορθώσει κολλήματα αναπαραγωγής.
|
|
||||||
|
|
||||||
Ο AVC ωστόσο έχει μέγιστη ανάλυση 1080p, ο κωδικοποιητής ήχου Opus δεν είναι διαθέσιμος και η αναπαραγωγή βίντεο θα χρησιμοποιεί περισσότερα δεδομένα internet από τον κωδικοποιητή VP9 ή τον AV1."</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_title">Παρενέργειες παραποίησης σε iOS</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• Τα ιδιωτικά βίντεο για παιδιά ενδέχεται να μην αναπαράγονται
|
|
||||||
• Τα βίντεο τελειώνουν 1 δευτερόλεπτο νωρίτερα"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Παρενέργειες παραποίησης σε Android VR</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Τα βίντεο για παιδιά ενδέχεται να μην αναπαράγονται
|
|
||||||
• Το μενού «Κομμάτι ήχου» λείπει
|
• Το μενού «Κομμάτι ήχου» λείπει
|
||||||
• Η λειτουργία «Σταθερή ένταση» δεν είναι διαθέσιμη"</string>
|
• Η λειτουργία «Σταθερή ένταση» δεν είναι διαθέσιμη
|
||||||
|
• Η λειτουργία εξαναγκασμού αρχικού ήχου δεν είναι διαθέσιμη"</string>
|
||||||
<string name="revanced_spoof_video_streams_language_title">Προεπιλεγμένη γλώσσα ροής ήχου</string>
|
<string name="revanced_spoof_video_streams_language_title">Προεπιλεγμένη γλώσσα ροής ήχου</string>
|
||||||
<string name="revanced_spoof_video_streams_language_DEFAULT">Γλώσσα εφαρμογής</string>
|
<string name="revanced_spoof_video_streams_language_DEFAULT">Γλώσσα εφαρμογής</string>
|
||||||
<string name="revanced_spoof_video_streams_language_AR">Αραβικά</string>
|
<string name="revanced_spoof_video_streams_language_AR">Αραβικά</string>
|
||||||
|
|||||||
@@ -1031,6 +1031,12 @@ Si se desactiva posteriormente, se recomienda borrar los datos de la aplicación
|
|||||||
<string name="revanced_disable_resuming_shorts_player_summary_on">El reproductor de Shorts no se reanudará al iniciar la aplicación</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_on">El reproductor de Shorts no se reanudará al iniciar la aplicación</string>
|
||||||
<string name="revanced_disable_resuming_shorts_player_summary_off">El reproductor de Shorts se reanudará al iniciar la aplicación</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_off">El reproductor de Shorts se reanudará al iniciar la aplicación</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
<string name="revanced_shorts_player_type_title">Abre Shorts con</string>
|
||||||
|
<string name="revanced_shorts_player_type_shorts">Reproductor de Shorts</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player">Reproductor normal</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player_fullscreen">Reproductor normal en pantalla completa</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
<string name="revanced_shorts_autoplay_title">Reproducción automática de Shorts</string>
|
<string name="revanced_shorts_autoplay_title">Reproducción automática de Shorts</string>
|
||||||
<string name="revanced_shorts_autoplay_summary_on">Los Shorts se reproducirán automáticamente</string>
|
<string name="revanced_shorts_autoplay_summary_on">Los Shorts se reproducirán automáticamente</string>
|
||||||
@@ -1262,20 +1268,12 @@ Habilitar esto puede desbloquear calidades de vídeo más altas"</string>
|
|||||||
|
|
||||||
Es posible que la reproducción de vídeo no funcione"</string>
|
Es posible que la reproducción de vídeo no funcione"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">Desactivar esta configuración puede causar problemas de reproducción de vídeo.</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">Desactivar esta configuración puede causar problemas de reproducción de vídeo.</string>
|
||||||
<string name="revanced_spoof_video_streams_client_title">Cliente por defecto</string>
|
<string name="revanced_spoof_video_streams_client_type_title">Cliente por defecto</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Forzar AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_title">Simulación de efectos secundarios</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Códec de vídeo se ve obligado a AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_summary">"• Es posible que los vídeos para niños no se reproduzcan
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">El códec de vídeo se determina automáticamente</string>
|
• Falta el menú de pistas de audio
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Habilitar esto podría mejorar la duración de la batería y solucionar los tartamudeos de la reproducción.
|
• El volumen estable no está disponible
|
||||||
|
• Forzar audio original no está disponible"</string>
|
||||||
AVC tiene una resolución máxima de 1080p, el códec de audio Opus no está disponible y la reproducción de vídeo utilizará más datos de internet que VP9 o AV1."</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_title">Efectos secundarios para la falsificación de iOS</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• Es posible que los videos privados para niños no se reproduzcan
|
|
||||||
• Los videos terminan 1 segundo antes"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Efectos secundarios para la falsificación de Android RV</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Es posible que los vídeos para niños no se reproduzcan
|
|
||||||
• Las transmisiones en vivo empiezan desde el principio
|
|
||||||
• Los vídeos terminan 1 segundo antes"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_title">Idioma de flujo de audio por defecto</string>
|
<string name="revanced_spoof_video_streams_language_title">Idioma de flujo de audio por defecto</string>
|
||||||
<string name="revanced_spoof_video_streams_language_DEFAULT">Idioma de la aplicación</string>
|
<string name="revanced_spoof_video_streams_language_DEFAULT">Idioma de la aplicación</string>
|
||||||
<string name="revanced_spoof_video_streams_language_AR">Árabe</string>
|
<string name="revanced_spoof_video_streams_language_AR">Árabe</string>
|
||||||
|
|||||||
@@ -1050,6 +1050,12 @@ Kui see hiljem välja lülitatakse, on soovitatav rakenduse andmed kustutada, et
|
|||||||
<string name="revanced_disable_resuming_shorts_player_summary_on">Shortsi esitaja ei jätka rakenduse käivitamisel</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_on">Shortsi esitaja ei jätka rakenduse käivitamisel</string>
|
||||||
<string name="revanced_disable_resuming_shorts_player_summary_off">Shortsi esitaja jätkub rakenduse käivitamisel</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_off">Shortsi esitaja jätkub rakenduse käivitamisel</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
<string name="revanced_shorts_player_type_title">Ava Shorts</string>
|
||||||
|
<string name="revanced_shorts_player_type_shorts">Shorts esitusprogramm</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player">Tavaline mängija</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player_fullscreen">Tavaline mängija täisekraanil</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
<string name="revanced_shorts_autoplay_title">Shortsi automaatne esitus</string>
|
<string name="revanced_shorts_autoplay_title">Shortsi automaatne esitus</string>
|
||||||
<string name="revanced_shorts_autoplay_summary_on">Shortsid esitatakse automaatselt</string>
|
<string name="revanced_shorts_autoplay_summary_on">Shortsid esitatakse automaatselt</string>
|
||||||
@@ -1282,20 +1288,12 @@ Selle lubamine võib avada kõrgema video kvaliteedi"</string>
|
|||||||
|
|
||||||
Video taasesitus ei pruugi toimida"</string>
|
Video taasesitus ei pruugi toimida"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">Selle seade keelamine võib põhjustada videote taasesituse probleeme.</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">Selle seade keelamine võib põhjustada videote taasesituse probleeme.</string>
|
||||||
<string name="revanced_spoof_video_streams_client_title">Vaikimisi klient</string>
|
<string name="revanced_spoof_video_streams_client_type_title">Vaikimisi klient</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Sunni AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_title">Võltsitud kõrvalmõjud</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Videokodek on sunnitud AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_summary">"• Lastevideod ei pruugi esitada
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Videokodek määratakse automaatselt</string>
|
• Heliriba menüü puudub
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Selle lubamine võib parandada aku kestvust ja parandada video taasesituse peatumise probleemi.
|
• Stabiilset helitugevust ei ole saadaval
|
||||||
|
• Sunnitud originaalheli ei ole saadaval"</string>
|
||||||
AVC-l on maksimaalne resolutsioon 1080p, Opus-heli kodeerijat pole saadaval ja video taasesitus kasutab rohkem interneti andmeid kui VP9 või AV1."</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_title">iOS-i võltsimise kõrvalmõjud</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• Privaatseid lastevideoid ei pruugita esitada
|
|
||||||
• Videod lõpevad 1 sekund varem"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR spoofing-i kõrvalmõjud</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Lastevideod ei pruugi mängida
|
|
||||||
• Otseülekanded algavad algusest
|
|
||||||
• Videod lõpevad 1 sekundit enne aega"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_title">Vaikimisi helivoolu keel</string>
|
<string name="revanced_spoof_video_streams_language_title">Vaikimisi helivoolu keel</string>
|
||||||
<string name="revanced_spoof_video_streams_language_DEFAULT">Rakenduse keel</string>
|
<string name="revanced_spoof_video_streams_language_DEFAULT">Rakenduse keel</string>
|
||||||
<string name="revanced_spoof_video_streams_language_AR">Araabia keel</string>
|
<string name="revanced_spoof_video_streams_language_AR">Araabia keel</string>
|
||||||
|
|||||||
@@ -164,6 +164,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||||
|
|||||||
@@ -164,6 +164,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||||
|
|||||||
@@ -1050,6 +1050,12 @@ Jos tämä ominaisuus kytketään myöhemmin pois, on suositeltavaa tyhjentää
|
|||||||
<string name="revanced_disable_resuming_shorts_player_summary_on">Shorts-soitin ei jatku sovelluksen käynnistyessä</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_on">Shorts-soitin ei jatku sovelluksen käynnistyessä</string>
|
||||||
<string name="revanced_disable_resuming_shorts_player_summary_off">Shorts-soitin jatkuu sovelluksen käynnistyessä</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_off">Shorts-soitin jatkuu sovelluksen käynnistyessä</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
<string name="revanced_shorts_player_type_title">Avaa Shorts, kun</string>
|
||||||
|
<string name="revanced_shorts_player_type_shorts">Shorts-soitin</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player">Tavallinen toistin</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player_fullscreen">Tavallinen toistin, koko näyttö</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
<string name="revanced_shorts_autoplay_title">Shortsien automaattinen toisto</string>
|
<string name="revanced_shorts_autoplay_title">Shortsien automaattinen toisto</string>
|
||||||
<string name="revanced_shorts_autoplay_summary_on">Shortsit toistetaan automaattisesti</string>
|
<string name="revanced_shorts_autoplay_summary_on">Shortsit toistetaan automaattisesti</string>
|
||||||
@@ -1281,20 +1287,12 @@ Tämä voi avata korkealaatuisemmat videot"</string>
|
|||||||
|
|
||||||
Videon toisto ei välttämättä toimi"</string>
|
Videon toisto ei välttämättä toimi"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">Tämän asetuksen poistaminen käytöstä voi aiheuttaa ongelmia videotoistossa.</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">Tämän asetuksen poistaminen käytöstä voi aiheuttaa ongelmia videotoistossa.</string>
|
||||||
<string name="revanced_spoof_video_streams_client_title">Oletusasiakasohjelma</string>
|
<string name="revanced_spoof_video_streams_client_type_title">Oletusasiakasohjelma</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Pakota AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_title">Sivuvaikutusten huijaaminen</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Videon koodekki pakotetaan AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_summary">"• Lapsille tarkoitetut videot eivät ehkä toistu
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Videokoodekki määritetään automaattisesti</string>
|
• Ääniraita-valikko puuttuu
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Tämän ottaminen käyttöön voi parantaa akun kestoa ja korjata toiston nykimistä.
|
• Vakioäänenvoimakkuus ei ole käytettävissä
|
||||||
|
• Pakota alkuperäinen ääni ei ole käytettävissä"</string>
|
||||||
AVC:llä on enimmäisresoluutio 1080p, Opus-äänikoodekkia ei ole käytettävissä ja videoiden toisto kuluttaa enemmän internet-dataa kuin VP9 tai AV1."</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_title">iOS-naamioinnin haittavaikutukset</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• Yksityisiä lasten videoita ei ehkä toisteta
|
|
||||||
• Videot päättyvät 1 sekunnin etuajassa"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR -naamioinnin haittavaikutukset</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Lasten videot eivät välttämättä toistu
|
|
||||||
• Suoratoistot alkavat alusta
|
|
||||||
• Videot päättyvät 1 sekuntia aikaisemmin"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_title">Äänivirran oletuskieli</string>
|
<string name="revanced_spoof_video_streams_language_title">Äänivirran oletuskieli</string>
|
||||||
<string name="revanced_spoof_video_streams_language_DEFAULT">Sovelluksen kieli</string>
|
<string name="revanced_spoof_video_streams_language_DEFAULT">Sovelluksen kieli</string>
|
||||||
<string name="revanced_spoof_video_streams_language_AR">Arabia</string>
|
<string name="revanced_spoof_video_streams_language_AR">Arabia</string>
|
||||||
|
|||||||
@@ -1050,6 +1050,12 @@ Kung mamaya ay patayin, inirerekumenda na i-clear ang data ng app upang maiwasan
|
|||||||
<string name="revanced_disable_resuming_shorts_player_summary_on">Hindi magpapatuloy ang Shorts player sa pagsisimula ng app</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_on">Hindi magpapatuloy ang Shorts player sa pagsisimula ng app</string>
|
||||||
<string name="revanced_disable_resuming_shorts_player_summary_off">Magpapatuloy ang manlalaro ng shorts sa pagsisimula ng app</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_off">Magpapatuloy ang manlalaro ng shorts sa pagsisimula ng app</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
<string name="revanced_shorts_player_type_title">Buksan ang Shorts gamit ang</string>
|
||||||
|
<string name="revanced_shorts_player_type_shorts">Shorts player</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player">Regular player</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player_fullscreen">Regular player fullscreen</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
<string name="revanced_shorts_autoplay_title">Awtomatikong pag-play ng Shorts</string>
|
<string name="revanced_shorts_autoplay_title">Awtomatikong pag-play ng Shorts</string>
|
||||||
<string name="revanced_shorts_autoplay_summary_on">Awtomatikong magpa-play ang mga Shorts</string>
|
<string name="revanced_shorts_autoplay_summary_on">Awtomatikong magpa-play ang mga Shorts</string>
|
||||||
@@ -1282,21 +1288,12 @@ Ang pagpapagana nito ay maaaring magbukas ng mas mataas na kalidad ng video"</st
|
|||||||
|
|
||||||
Ang paglalaro ng video ay maaaring hindi gumana"</string>
|
Ang paglalaro ng video ay maaaring hindi gumana"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">Ang pag-off sa setting na ito ay maaaring magdulot ng mga isyu sa pag-playback ng video.</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">Ang pag-off sa setting na ito ay maaaring magdulot ng mga isyu sa pag-playback ng video.</string>
|
||||||
<string name="revanced_spoof_video_streams_client_title">Default client</string>
|
<string name="revanced_spoof_video_streams_client_type_title">Default na kliyente</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Pilitin ang AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_title">**Spoofing** ng mga side effect</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Ang video codec ay napipilitang maging AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_summary">"• Ang mga video sa Bata ay maaaring hindi magpatugtog
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Awtomatikong natutukoy ang video codec</string>
|
• Nawawala ang menu ng track ng audio
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Ang pagpapagana nito ay maaaring mapabuti ang buhay ng baterya at ayusin ang pag-stutter ng paglalaro.
|
• Hindi magagamit ang matatag na volume
|
||||||
|
• Hindi magagamit ang pilitin ang orihinal na audio"</string>
|
||||||
Ang AVC ay may maximum na resolution na 1080p, ang Opus audio codec ay hindi magagamit, at ang paglalaro ng video ay gagamit ng mas maraming data sa internet kaysa sa VP9 o AV1."</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_title">Mga Epekto sa Gilid ng Pag-spoof ng iOS</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_summary">"
|
|
||||||
• Maaaring hindi ma-play ang mga pribadong video ng mga bata
|
|
||||||
• Nagtatapos ang mga video ng 1 segundo nang mas maaga"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Mga epekto sa gilid ng pag-spoof ng Android VR</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Ang mga video ng mga bata ay maaaring hindi maglaro
|
|
||||||
• Ang mga livestream ay magsisimula mula sa simula
|
|
||||||
• Ang mga video ay magtatapos ng 1 segundo nang maaga"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_title">Default na wika ng audio stream</string>
|
<string name="revanced_spoof_video_streams_language_title">Default na wika ng audio stream</string>
|
||||||
<string name="revanced_spoof_video_streams_language_DEFAULT">Wika ng app</string>
|
<string name="revanced_spoof_video_streams_language_DEFAULT">Wika ng app</string>
|
||||||
<string name="revanced_spoof_video_streams_language_AR">Arabe</string>
|
<string name="revanced_spoof_video_streams_language_AR">Arabe</string>
|
||||||
|
|||||||
@@ -1050,6 +1050,12 @@ Si cette option est désactivée par la suite, il est recommandé de vider les d
|
|||||||
<string name="revanced_disable_resuming_shorts_player_summary_on">Le lecteur de Shorts ne se relancera pas au démarrage de l\'application</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_on">Le lecteur de Shorts ne se relancera pas au démarrage de l\'application</string>
|
||||||
<string name="revanced_disable_resuming_shorts_player_summary_off">Le lecteur court reprendra au démarrage de l\'application</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_off">Le lecteur court reprendra au démarrage de l\'application</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
<string name="revanced_shorts_player_type_title">Ouvrir Shorts avec</string>
|
||||||
|
<string name="revanced_shorts_player_type_shorts">Lecteur Shorts</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player">Lecteur classique</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player_fullscreen">Lecteur classique en plein écran</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
<string name="revanced_shorts_autoplay_title">Jouer les Shorts</string>
|
<string name="revanced_shorts_autoplay_title">Jouer les Shorts</string>
|
||||||
<string name="revanced_shorts_autoplay_summary_on">Les Shorts joueront automatiquement</string>
|
<string name="revanced_shorts_autoplay_summary_on">Les Shorts joueront automatiquement</string>
|
||||||
@@ -1281,20 +1287,12 @@ L'activation de cette option peut déverrouiller des qualités vidéo plus élev
|
|||||||
|
|
||||||
La lecture vidéo peut ne pas fonctionner"</string>
|
La lecture vidéo peut ne pas fonctionner"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">Désactiver ce paramètre peut causer des problèmes de lecture vidéo.</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">Désactiver ce paramètre peut causer des problèmes de lecture vidéo.</string>
|
||||||
<string name="revanced_spoof_video_streams_client_title">Client par défaut</string>
|
<string name="revanced_spoof_video_streams_client_type_title">Client par défaut</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Forcer AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_title">Effets inconnus de la falsification</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Le codec vidéo est forcé à AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_summary">"• Les vidéos pour enfants risquent de ne pas être lues
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Le codec vidéo est déterminé automatiquement</string>
|
• Le menu de la piste audio est manquant
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"L'activation de cette option peut améliorer l'autonomie de la batterie et corriger les saccades de lecture.
|
• Le volume stable n'est pas disponible
|
||||||
|
• Forcer l'audio d'origine n'est pas disponible"</string>
|
||||||
AVC a une résolution maximale de 1080p, le codec audio Opus n'est pas disponible et la lecture vidéo utilisera plus de données Internet que VP9 ou AV1."</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_title">Effets secondaires d\'usurpation iOS</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• Les vidéos privées pour enfants ne peuvent pas être lues
|
|
||||||
• Les vidéos se terminent 1 seconde plus tôt"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Effets secondaires de l\'usurpation VR Android</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Les vidéos pour enfants peuvent ne pas être lues
|
|
||||||
• Les diffusions en direct commencent depuis le début
|
|
||||||
• Les vidéos se terminent 1 seconde plus tôt"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_title">Langue du flux audio par défaut</string>
|
<string name="revanced_spoof_video_streams_language_title">Langue du flux audio par défaut</string>
|
||||||
<string name="revanced_spoof_video_streams_language_DEFAULT">Langue de l\'application</string>
|
<string name="revanced_spoof_video_streams_language_DEFAULT">Langue de l\'application</string>
|
||||||
<string name="revanced_spoof_video_streams_language_AR">Arabe</string>
|
<string name="revanced_spoof_video_streams_language_AR">Arabe</string>
|
||||||
|
|||||||
@@ -1050,6 +1050,12 @@ Má dhiúltaítear é níos déanaí, moltar sonraí an aip a ghlanadh chun buga
|
|||||||
<string name="revanced_disable_resuming_shorts_player_summary_on">Ní thosóidh an t-imreoir Shorts ar thosú an aip</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_on">Ní thosóidh an t-imreoir Shorts ar thosú an aip</string>
|
||||||
<string name="revanced_disable_resuming_shorts_player_summary_off">Athosóidh an t-imreoir Shorts ar thosú an aip</string>
|
<string name="revanced_disable_resuming_shorts_player_summary_off">Athosóidh an t-imreoir Shorts ar thosú an aip</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
<string name="revanced_shorts_player_type_title">Oscail Shorts le</string>
|
||||||
|
<string name="revanced_shorts_player_type_shorts">Shorts seinnteoir</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player">Imreoir Rialaigh</string>
|
||||||
|
<string name="revanced_shorts_player_type_regular_player_fullscreen">Imreoir Rialaigh lán-scáileán</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
<string name="revanced_shorts_autoplay_title">Shorts Autoplay</string>
|
<string name="revanced_shorts_autoplay_title">Shorts Autoplay</string>
|
||||||
<string name="revanced_shorts_autoplay_summary_on">Seinnfidh Shorts go huathoibríoch</string>
|
<string name="revanced_shorts_autoplay_summary_on">Seinnfidh Shorts go huathoibríoch</string>
|
||||||
@@ -1282,20 +1288,12 @@ Is féidir le seo caighdeáin físeáin níos airde a dhíghlasáil"</string>
|
|||||||
|
|
||||||
D'fhéadfadh nach n-oibreoidh athsheinm físeáin"</string>
|
D'fhéadfadh nach n-oibreoidh athsheinm físeáin"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">Seans go mbeidh fadhbanna athsheinm físe ag baint leis an socrú seo a mhúchadh.</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">Seans go mbeidh fadhbanna athsheinm físe ag baint leis an socrú seo a mhúchadh.</string>
|
||||||
<string name="revanced_spoof_video_streams_client_title">Cliant réamhshocraithe</string>
|
<string name="revanced_spoof_video_streams_client_type_title">Cliant réamhshocraithe</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Fórsa AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_title">Éifeachtaí taobheffects</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Tá códú físeáin á fhorchur ar AVC (H.264)</string>
|
<string name="revanced_spoof_video_streams_about_summary">"• Is féidir nach imreoidh físeáin leanaí
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Cinneadh go huathoibríoch an códú físeáin</string>
|
• Tá roghchlár rian fuaime ar iarraidh
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"D'fhéadfadh go mbainfeadh feabhas ar shaol ceallraí agus go ndéanfadh sé stuttering athsheinm a dheisiú trí é seo a chumasú.
|
• Níl sraithfhuaim shocair ar fáil
|
||||||
|
• Níl éiteach an fhuaime bhunaidh ar fáil"</string>
|
||||||
Tá uasmhéid réiteach 1080p ag AVC, níl an cód fuaime Opus ar fáil, agus úsáidfidh athsheinm físeáin níos mó sonraí idirlín ná VP9 nó AV1."</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_title">Fo-iarsmaí spoofing iOS</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• Ní fhéadfaidh físeáin phríobháideacha leanaí a imirt
|
|
||||||
• Críochnaíonn físeáin 1 soicind go luath"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Fo-iarsmaí spoofing Android VR</string>
|
|
||||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• D'fhéadfadh nach n-imreoidh físeáin pháistí
|
|
||||||
• Tosóidh shruth beo ón tús
|
|
||||||
• Críochnóidh físeáin 1 soicind go luath"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_title">Teanga réamhshocraithe sruth fuaime</string>
|
<string name="revanced_spoof_video_streams_language_title">Teanga réamhshocraithe sruth fuaime</string>
|
||||||
<string name="revanced_spoof_video_streams_language_DEFAULT">Teanga na feidhmchláir</string>
|
<string name="revanced_spoof_video_streams_language_DEFAULT">Teanga na feidhmchláir</string>
|
||||||
<string name="revanced_spoof_video_streams_language_AR">Araibis</string>
|
<string name="revanced_spoof_video_streams_language_AR">Araibis</string>
|
||||||
|
|||||||
@@ -164,6 +164,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||||
|
|||||||
@@ -164,6 +164,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user