Compare commits
115 Commits
lineage-17
...
lineage-20
Author | SHA1 | Date | |
---|---|---|---|
|
5811a037b0 | ||
|
4f0652d53e | ||
|
e046bb8794 | ||
|
ed1368ebb0 | ||
|
c927dd9e78 | ||
|
02236a21de | ||
|
e0bc30b3ac | ||
|
4a9f7a891b | ||
|
663e87c082 | ||
|
957300e2ba | ||
|
4541e2f417 | ||
|
42e935c4dc | ||
|
41a4fee0e7 | ||
|
51a89498c6 | ||
|
9dd46a087e | ||
|
c253d23673 | ||
|
c4d03af403 | ||
|
c0b27434ff | ||
|
958bce953d | ||
|
6373659841 | ||
|
0b1821c9dc | ||
|
a804504378 | ||
|
7f43b5b628 | ||
|
3f365d5feb | ||
|
64261f1321 | ||
|
5c17826dcd | ||
|
919a15e270 | ||
|
5a212ca159 | ||
|
5ff552fa43 | ||
|
185b5de51d | ||
|
613fbacdbf | ||
|
c3093cb4cc | ||
|
bf1646fa93 | ||
|
755560bbcd | ||
|
ae11300ff0 | ||
|
3852db1751 | ||
|
1ec0b8d1de | ||
|
0b5e925013 | ||
|
cdcb51197b | ||
|
e32b81fb3a | ||
|
9ddb4f10e0 | ||
|
85347e77d1 | ||
|
bfbc440118 | ||
|
e83f74ace7 | ||
|
304b45b3eb | ||
|
468ff36885 | ||
|
dfe9efc180 | ||
|
79845a7f0b | ||
|
baf2238f5b | ||
|
59c5c5ff21 | ||
|
cb6281e7f0 | ||
|
9ff0a26243 | ||
|
8c2d4337b8 | ||
|
257a80e351 | ||
|
c25d43a9ca | ||
|
580c7ec218 | ||
|
b5dca5271f | ||
|
c6d2a1694a | ||
|
418d464d14 | ||
|
55a4e6eb97 | ||
|
16cb5c2f25 | ||
|
bbf2442ad4 | ||
|
6fe0ac8682 | ||
|
1ffe1a80ae | ||
|
9ad96eca85 | ||
|
27f04e5b78 | ||
|
75497ee48b | ||
|
9edea6468c | ||
|
d54176ccf7 | ||
|
f27d50d640 | ||
|
811d050272 | ||
|
d2557b8c6c | ||
|
964eb5a68e | ||
|
297668b3ef | ||
|
9f814a9a32 | ||
|
755254e1e5 | ||
|
7843198d27 | ||
|
1f4d0571db | ||
|
4626490513 | ||
|
7f584e9c08 | ||
|
706e2d0498 | ||
|
61e71f0db0 | ||
|
c8ae33d9ba | ||
|
ad604c69e4 | ||
|
aed99e306c | ||
|
772843f3ce | ||
|
81dc120f09 | ||
|
a96d54f236 | ||
|
6e5bbdaae1 | ||
|
a5492459f9 | ||
|
a36be60f98 | ||
|
7cfeb81a45 | ||
|
5a9c7479e7 | ||
|
29ca6e5f3f | ||
|
ffe5b527f6 | ||
|
9689a6b8bb | ||
|
a3c6c19a5f | ||
|
96626c2fde | ||
|
1f8b7d56b0 | ||
|
e3b26100c5 | ||
|
1de5ff5239 | ||
|
4f8f00148a | ||
|
bb09c53d83 | ||
|
618ecad81a | ||
|
e944ca0661 | ||
|
d1273f214e | ||
|
759d5510c8 | ||
|
35abddd093 | ||
|
9cdc2f497b | ||
|
d94231abea | ||
|
9290c48307 | ||
|
e4822ff569 | ||
|
416401aa2c | ||
|
eabab0e94e | ||
|
1fa036ce68 |
8
.gitignore
vendored
8
.gitignore
vendored
@@ -1,13 +1,13 @@
|
||||
*.iml
|
||||
.gradle
|
||||
/local.properties
|
||||
.idea
|
||||
/.idea
|
||||
.DS_Store
|
||||
/build
|
||||
/captures
|
||||
/gradle
|
||||
/gradlew
|
||||
/gradlew.bat
|
||||
/system_libs/*.jar
|
||||
/keystore.properties
|
||||
.externalNativeBuild
|
||||
.cxx
|
||||
*.jks
|
||||
local.properties
|
||||
|
32
.reuse/dep5
Normal file
32
.reuse/dep5
Normal file
@@ -0,0 +1,32 @@
|
||||
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: Updater
|
||||
Upstream-Contact: The LineageOS Project
|
||||
Source: https://github.com/LineageOS/android_packages_apps_Updater
|
||||
|
||||
Files: .gitignore
|
||||
Copyright: 2023 The LineageOS Project
|
||||
License: Apache-2.0
|
||||
|
||||
Files: app/.gitignore
|
||||
Copyright: 2017 The LineageOS Project
|
||||
License: Apache-2.0
|
||||
|
||||
Files: gradle/wrapper/*
|
||||
Copyright: 2007-2023 Gradle, Inc.
|
||||
License: Apache-2.0
|
||||
|
||||
Files: gradlew*
|
||||
Copyright: 2007-2023 Gradle, Inc.
|
||||
License: Apache-2.0
|
||||
|
||||
Files: README.md
|
||||
Copyright: 2018 The LineageOS Project
|
||||
License: Apache-2.0
|
||||
|
||||
Files: keystore.properties.sample
|
||||
Copyright: 2017 The LineageOS Project
|
||||
License: Apache-2.0
|
||||
|
||||
Files: .idea/* *.gradle *.properties
|
||||
Copyright: 2023 The LineageOS Project
|
||||
License: Apache-2.0
|
45
Android.mk
45
Android.mk
@@ -1,45 +0,0 @@
|
||||
LOCAL_PATH:= $(call my-dir)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
|
||||
LOCAL_SRC_FILES := $(call all-java-files-under, src)
|
||||
|
||||
LOCAL_USE_AAPT2 := true
|
||||
|
||||
LOCAL_STATIC_ANDROID_LIBRARIES := \
|
||||
com.google.android.material_material \
|
||||
androidx.core_core \
|
||||
androidx.appcompat_appcompat \
|
||||
androidx.cardview_cardview \
|
||||
androidx.preference_preference \
|
||||
androidx.recyclerview_recyclerview \
|
||||
|
||||
LOCAL_RESOURCE_DIR := \
|
||||
$(LOCAL_PATH)/res
|
||||
|
||||
LOCAL_PACKAGE_NAME := Updater
|
||||
LOCAL_PRIVATE_PLATFORM_APIS := true
|
||||
LOCAL_PRIVILEGED_MODULE := true
|
||||
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
|
||||
|
||||
include $(BUILD_PACKAGE)
|
||||
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := UpdaterStudio
|
||||
LOCAL_MODULE_CLASS := FAKE
|
||||
LOCAL_MODULE_SUFFIX := -timestamp
|
||||
updater_system_deps := $(call java-lib-deps,framework)
|
||||
updater_system_libs_path := $(abspath $(LOCAL_PATH))/system_libs
|
||||
|
||||
include $(BUILD_SYSTEM)/base_rules.mk
|
||||
|
||||
$(LOCAL_BUILT_MODULE): $(updater_system_deps)
|
||||
$(hide) mkdir -p $(updater_system_libs_path)
|
||||
$(hide) rm -rf $(updater_system_libs_path)/*.jar
|
||||
$(hide) cp $(updater_system_deps) $(updater_system_libs_path)/framework.jar
|
||||
$(hide) echo "Fake: $@"
|
||||
$(hide) mkdir -p $(dir $@)
|
||||
$(hide) touch $@
|
73
LICENSES/Apache-2.0.txt
Normal file
73
LICENSES/Apache-2.0.txt
Normal file
@@ -0,0 +1,73 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
1
app/.gitignore
vendored
Normal file
1
app/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/build
|
58
app/Android.bp
Normal file
58
app/Android.bp
Normal file
@@ -0,0 +1,58 @@
|
||||
//
|
||||
// Copyright (C) 2022-2023 The LineageOS Project
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
android_app {
|
||||
name: "Updater",
|
||||
|
||||
// Include SettingsLib and its dependencies
|
||||
defaults: ["SettingsLibDefaults"],
|
||||
|
||||
srcs: ["src/main/java/**/*.java"],
|
||||
resource_dirs: ["src/main/res"],
|
||||
manifest: "src/main/AndroidManifest.xml",
|
||||
|
||||
platform_apis: true,
|
||||
privileged: true,
|
||||
certificate: "platform",
|
||||
system_ext_specific: true,
|
||||
|
||||
static_libs: [
|
||||
// DO NOT EDIT THIS SECTION MANUALLY
|
||||
"androidx.core_core-ktx",
|
||||
"androidx.appcompat_appcompat",
|
||||
"androidx.cardview_cardview",
|
||||
"androidx.lifecycle_lifecycle-viewmodel-ktx",
|
||||
"androidx.localbroadcastmanager_localbroadcastmanager",
|
||||
"androidx.preference_preference",
|
||||
"androidx.recyclerview_recyclerview",
|
||||
"com.google.android.material_material",
|
||||
],
|
||||
|
||||
optimize: {
|
||||
proguard_flags_files: ["proguard.flags"],
|
||||
},
|
||||
|
||||
required: [
|
||||
"privapp_whitelist_org.lineageos.updater",
|
||||
"default-permissions_org.lineageos.updater"
|
||||
],
|
||||
}
|
||||
|
||||
prebuilt_etc {
|
||||
name: "privapp_whitelist_org.lineageos.updater",
|
||||
system_ext_specific: true,
|
||||
sub_dir: "permissions",
|
||||
src: "privapp_whitelist_org.lineageos.updater.xml",
|
||||
filename_from_src: true,
|
||||
}
|
||||
|
||||
prebuilt_etc {
|
||||
name: "default-permissions_org.lineageos.updater",
|
||||
system_ext_specific: true,
|
||||
sub_dir: "default-permissions",
|
||||
src: "default-permissions_org.lineageos.updater.xml",
|
||||
filename_from_src: true,
|
||||
}
|
112
app/build.gradle.kts
Normal file
112
app/build.gradle.kts
Normal file
@@ -0,0 +1,112 @@
|
||||
import java.util.Properties
|
||||
import org.lineageos.generatebp.GenerateBpPlugin
|
||||
import org.lineageos.generatebp.GenerateBpPluginExtension
|
||||
import org.lineageos.generatebp.models.Module
|
||||
|
||||
plugins {
|
||||
id("com.android.application")
|
||||
id("kotlin-android")
|
||||
}
|
||||
|
||||
apply {
|
||||
plugin<GenerateBpPlugin>()
|
||||
}
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
maven("https://raw.githubusercontent.com/lineage-next/gradle-generatebp/v1.2/.m2")
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath("org.lineageos:gradle-generatebp:+")
|
||||
}
|
||||
}
|
||||
|
||||
val keystorePropertiesFile = rootProject.file("keystore.properties")
|
||||
val keystoreProperties = Properties().apply {
|
||||
if (keystorePropertiesFile.exists()) {
|
||||
load(keystorePropertiesFile.inputStream())
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdk = 33
|
||||
|
||||
defaultConfig {
|
||||
applicationId = "org.lineageos.updater"
|
||||
minSdk = 30
|
||||
targetSdk = 33
|
||||
versionCode = 1
|
||||
versionName = "1.0"
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
getByName("release") {
|
||||
// Includes the default ProGuard rules files.
|
||||
setProguardFiles(
|
||||
listOf(
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-rules.pro"
|
||||
)
|
||||
)
|
||||
}
|
||||
getByName("debug") {
|
||||
// Append .dev to package name so we won't conflict with AOSP build.
|
||||
applicationIdSuffix = ".dev"
|
||||
}
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
targetCompatibility = JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = "1.8"
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
create("release") {
|
||||
(keystoreProperties["keyAlias"] as String?)?.let {
|
||||
keyAlias = it
|
||||
}
|
||||
(keystoreProperties["keyPassword"] as String?)?.let {
|
||||
keyPassword = it
|
||||
}
|
||||
(keystoreProperties["storeFile"] as String?)?.let {
|
||||
storeFile = file(it)
|
||||
}
|
||||
(keystoreProperties["storePassword"] as String?)?.let {
|
||||
storePassword = it
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compileOnly(fileTree(mapOf("dir" to "../system_libs", "include" to listOf("*.jar"))))
|
||||
|
||||
implementation("androidx.core:core-ktx:1.9.0")
|
||||
implementation("androidx.appcompat:appcompat:1.6.1")
|
||||
implementation("androidx.cardview:cardview:1.0.0")
|
||||
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1")
|
||||
implementation("androidx.localbroadcastmanager:localbroadcastmanager:1.1.0")
|
||||
implementation("androidx.preference:preference:1.2.0")
|
||||
implementation("androidx.recyclerview:recyclerview:1.2.1")
|
||||
implementation("com.google.android.material:material:1.9.0-alpha01")
|
||||
}
|
||||
|
||||
configure<GenerateBpPluginExtension> {
|
||||
targetSdk.set(android.defaultConfig.targetSdk!!)
|
||||
availableInAOSP.set { module: Module ->
|
||||
when {
|
||||
module.group.startsWith("androidx") -> true
|
||||
module.group.startsWith("org.jetbrains") -> true
|
||||
module.group == "com.google.android.material" -> true
|
||||
module.group == "com.google.errorprone" -> true
|
||||
module.group == "com.google.guava" -> true
|
||||
module.group == "junit" -> true
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
}
|
11
app/default-permissions_org.lineageos.updater.xml
Normal file
11
app/default-permissions_org.lineageos.updater.xml
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2022 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<exceptions>
|
||||
<exception package="org.lineageos.updater">
|
||||
<!-- Notifications -->
|
||||
<permission name="android.permission.POST_NOTIFICATIONS" fixed="false"/>
|
||||
</exception>
|
||||
</exceptions>
|
13
app/privapp_whitelist_org.lineageos.updater.xml
Normal file
13
app/privapp_whitelist_org.lineageos.updater.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2020 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<permissions>
|
||||
<privapp-permissions package="org.lineageos.updater">
|
||||
<permission name="android.permission.ACCESS_CACHE_FILESYSTEM"/>
|
||||
<permission name="android.permission.REBOOT"/>
|
||||
<permission name="android.permission.RECOVERY"/>
|
||||
<permission name="android.permission.START_ACTIVITIES_FROM_BACKGROUND"/>
|
||||
</privapp-permissions>
|
||||
</permissions>
|
4
app/proguard.flags
Normal file
4
app/proguard.flags
Normal file
@@ -0,0 +1,4 @@
|
||||
# SPDX-FileCopyrightText: 2017-2019 The LineageOS Project
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
-keep class org.lineageos.updater.ui.FlingBehavior { *; }
|
@@ -1,3 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2022 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.lineageos.updater"
|
||||
android:versionCode="1">
|
||||
@@ -6,23 +11,27 @@
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
<uses-permission android:name="android.permission.REBOOT" />
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
<uses-permission android:name="android.permission.RECOVERY" />
|
||||
<uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
|
||||
<application
|
||||
android:allowBackup="false"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:requestLegacyExternalStorage="true"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme">
|
||||
android:theme="@style/AppTheme"
|
||||
android:usesCleartextTraffic="false">
|
||||
|
||||
<activity
|
||||
android:name=".UpdatesActivity"
|
||||
android:excludeFromRecents="true"
|
||||
android:label="@string/display_name"
|
||||
android:exported="true"
|
||||
android:theme="@style/AppTheme.NoActionBar"
|
||||
android:launchMode="singleTop">
|
||||
<intent-filter android:priority="1">
|
||||
@@ -48,7 +57,7 @@
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<receiver android:name=".UpdatesCheckReceiver">
|
||||
<receiver android:name=".UpdatesCheckReceiver" android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.BOOT_COMPLETED"/>
|
||||
</intent-filter>
|
@@ -1,25 +1,15 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The LineageOS Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* SPDX-FileCopyrightText: 2017-2022 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater;
|
||||
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.app.Service;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.IBinder;
|
||||
import android.os.SystemClock;
|
||||
import android.util.Log;
|
||||
@@ -40,10 +30,9 @@ public class ExportUpdateService extends Service {
|
||||
private static final int NOTIFICATION_ID = 16;
|
||||
|
||||
public static final String ACTION_START_EXPORTING = "start_exporting";
|
||||
public static final String ACTION_STOP_EXPORTING = "stop_exporting";
|
||||
|
||||
public static final String EXTRA_SOURCE_FILE = "source_file";
|
||||
public static final String EXTRA_DEST_FILE = "dest_file";
|
||||
public static final String EXTRA_DEST_URI = "dest_uri";
|
||||
|
||||
private static final String EXPORT_NOTIFICATION_CHANNEL =
|
||||
"export_notification_channel";
|
||||
@@ -51,7 +40,6 @@ public class ExportUpdateService extends Service {
|
||||
private volatile boolean mIsExporting = false;
|
||||
|
||||
private Thread mExportThread;
|
||||
private ExportRunnable mExportRunnable;
|
||||
|
||||
@Override
|
||||
public IBinder onBind(Intent intent) {
|
||||
@@ -68,20 +56,9 @@ public class ExportUpdateService extends Service {
|
||||
}
|
||||
mIsExporting = true;
|
||||
File source = (File) intent.getSerializableExtra(EXTRA_SOURCE_FILE);
|
||||
File destination = (File) intent.getSerializableExtra(EXTRA_DEST_FILE);
|
||||
Uri destination = intent.getParcelableExtra(EXTRA_DEST_URI);
|
||||
startExporting(source, destination);
|
||||
} else if (ACTION_STOP_EXPORTING.equals(intent.getAction())) {
|
||||
if (mIsExporting) {
|
||||
mExportThread.interrupt();
|
||||
stopForeground(true);
|
||||
try {
|
||||
mExportThread.join();
|
||||
} catch (InterruptedException e) {
|
||||
Log.e(TAG, "Error while waiting for thread");
|
||||
}
|
||||
mExportRunnable.cleanUp();
|
||||
mIsExporting = false;
|
||||
}
|
||||
Toast.makeText(this, R.string.toast_export_started, Toast.LENGTH_SHORT).show();
|
||||
} else {
|
||||
Log.e(TAG, "No action specified");
|
||||
}
|
||||
@@ -94,15 +71,17 @@ public class ExportUpdateService extends Service {
|
||||
}
|
||||
|
||||
private class ExportRunnable implements Runnable {
|
||||
private File mSource;
|
||||
private File mDestination;
|
||||
private FileUtils.ProgressCallBack mProgressCallBack;
|
||||
private Runnable mRunnableComplete;
|
||||
private Runnable mRunnableFailed;
|
||||
private final ContentResolver mContentResolver;
|
||||
private final File mSource;
|
||||
private final Uri mDestination;
|
||||
private final FileUtils.ProgressCallBack mProgressCallBack;
|
||||
private final Runnable mRunnableComplete;
|
||||
private final Runnable mRunnableFailed;
|
||||
|
||||
private ExportRunnable(File source, File destination,
|
||||
FileUtils.ProgressCallBack progressCallBack,
|
||||
Runnable runnableComplete, Runnable runnableFailed) {
|
||||
private ExportRunnable(ContentResolver cr, File source, Uri destination,
|
||||
FileUtils.ProgressCallBack progressCallBack,
|
||||
Runnable runnableComplete, Runnable runnableFailed) {
|
||||
mContentResolver = cr;
|
||||
mSource = source;
|
||||
mDestination = destination;
|
||||
mProgressCallBack = progressCallBack;
|
||||
@@ -113,7 +92,7 @@ public class ExportUpdateService extends Service {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
FileUtils.copyFile(mSource, mDestination, mProgressCallBack);
|
||||
FileUtils.copyFile(mContentResolver, mSource, mDestination, mProgressCallBack);
|
||||
mIsExporting = false;
|
||||
if (!mExportThread.isInterrupted()) {
|
||||
Log.d(TAG, "Completed");
|
||||
@@ -129,15 +108,11 @@ public class ExportUpdateService extends Service {
|
||||
stopSelf();
|
||||
}
|
||||
}
|
||||
|
||||
private void cleanUp() {
|
||||
mDestination.delete();
|
||||
}
|
||||
}
|
||||
|
||||
private void startExporting(File source, File destination) {
|
||||
NotificationManager notificationManager =
|
||||
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
|
||||
private void startExporting(File source, Uri destination) {
|
||||
final String fileName = FileUtils.queryName(getContentResolver(), destination);
|
||||
NotificationManager notificationManager = getSystemService(NotificationManager.class);
|
||||
NotificationChannel notificationChannel = new NotificationChannel(
|
||||
EXPORT_NOTIFICATION_CHANNEL,
|
||||
getString(R.string.export_channel_title),
|
||||
@@ -149,12 +124,9 @@ public class ExportUpdateService extends Service {
|
||||
NotificationCompat.BigTextStyle notificationStyle = new NotificationCompat.BigTextStyle();
|
||||
notificationBuilder.setContentTitle(getString(R.string.dialog_export_title));
|
||||
notificationStyle.setBigContentTitle(getString(R.string.dialog_export_title));
|
||||
notificationStyle.bigText(destination.getName());
|
||||
notificationStyle.bigText(fileName);
|
||||
notificationBuilder.setStyle(notificationStyle);
|
||||
notificationBuilder.setSmallIcon(R.drawable.ic_system_update);
|
||||
notificationBuilder.addAction(android.R.drawable.ic_media_pause,
|
||||
getString(android.R.string.cancel),
|
||||
getStopPendingIntent());
|
||||
|
||||
FileUtils.ProgressCallBack progressCallBack = new FileUtils.ProgressCallBack() {
|
||||
private long mLastUpdate = -1;
|
||||
@@ -183,8 +155,7 @@ public class ExportUpdateService extends Service {
|
||||
notificationBuilder.setContentTitle(
|
||||
getString(R.string.notification_export_success));
|
||||
notificationBuilder.setProgress(0, 0, false);
|
||||
notificationBuilder.setContentText(destination.getName());
|
||||
notificationBuilder.mActions.clear();
|
||||
notificationBuilder.setContentText(fileName);
|
||||
notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());
|
||||
stopForeground(STOP_FOREGROUND_DETACH);
|
||||
};
|
||||
@@ -197,20 +168,13 @@ public class ExportUpdateService extends Service {
|
||||
getString(R.string.notification_export_fail));
|
||||
notificationBuilder.setProgress(0, 0, false);
|
||||
notificationBuilder.setContentText(null);
|
||||
notificationBuilder.mActions.clear();
|
||||
notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());
|
||||
stopForeground(STOP_FOREGROUND_DETACH);
|
||||
};
|
||||
|
||||
mExportRunnable = new ExportRunnable(source, destination, progressCallBack,
|
||||
runnableComplete, runnableFailed);
|
||||
mExportThread = new Thread(mExportRunnable);
|
||||
ExportRunnable exportRunnable = new ExportRunnable(getContentResolver(), source,
|
||||
destination, progressCallBack, runnableComplete, runnableFailed);
|
||||
mExportThread = new Thread(exportRunnable);
|
||||
mExportThread.start();
|
||||
}
|
||||
|
||||
private PendingIntent getStopPendingIntent() {
|
||||
final Intent intent = new Intent(this, ExportUpdateService.class);
|
||||
intent.setAction(ACTION_STOP_EXPORTING);
|
||||
return PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
}
|
||||
}
|
238
app/src/main/java/org/lineageos/updater/UpdateImporter.java
Normal file
238
app/src/main/java/org/lineageos/updater/UpdateImporter.java
Normal file
@@ -0,0 +1,238 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2017-2022 The LineageOS Project
|
||||
* SPDX-FileCopyrightText: 2020-2022 SHIFT GmbH
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.ParcelFileDescriptor;
|
||||
import android.util.Log;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.lineageos.updater.controller.UpdaterController;
|
||||
import org.lineageos.updater.controller.UpdaterService;
|
||||
import org.lineageos.updater.misc.StringGenerator;
|
||||
import org.lineageos.updater.misc.Utils;
|
||||
import org.lineageos.updater.model.Update;
|
||||
import org.lineageos.updater.model.UpdateInfo;
|
||||
import org.lineageos.updater.model.UpdateStatus;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.text.DateFormat;
|
||||
import java.util.Enumeration;
|
||||
import java.util.List;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
public class UpdateImporter {
|
||||
private static final int REQUEST_PICK = 9061;
|
||||
private static final String TAG = "UpdateImporter";
|
||||
private static final String MIME_ZIP = "application/zip";
|
||||
private static final String FILE_NAME = "localUpdate.zip";
|
||||
private static final String METADATA_PATH = "META-INF/com/android/metadata";
|
||||
private static final String METADATA_TIMESTAMP_KEY = "post-timestamp=";
|
||||
|
||||
private final Activity activity;
|
||||
private final Callbacks callbacks;
|
||||
|
||||
private Thread workingThread;
|
||||
|
||||
public UpdateImporter(Activity activity, Callbacks callbacks) {
|
||||
this.activity = activity;
|
||||
this.callbacks = callbacks;
|
||||
}
|
||||
|
||||
public void stopImport() {
|
||||
if (workingThread != null && workingThread.isAlive()) {
|
||||
workingThread.interrupt();
|
||||
workingThread = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void openImportPicker() {
|
||||
final Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT)
|
||||
.addCategory(Intent.CATEGORY_OPENABLE)
|
||||
.setType(MIME_ZIP);
|
||||
activity.startActivityForResult(intent, REQUEST_PICK);
|
||||
}
|
||||
|
||||
public boolean onResult(int requestCode, int resultCode, Intent data) {
|
||||
if (resultCode != Activity.RESULT_OK || requestCode != REQUEST_PICK) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return onPicked(data.getData());
|
||||
}
|
||||
|
||||
@SuppressWarnings("ResultOfMethodCallIgnored")
|
||||
private boolean onPicked(Uri uri) {
|
||||
callbacks.onImportStarted();
|
||||
|
||||
workingThread = new Thread(() -> {
|
||||
File importedFile = null;
|
||||
try {
|
||||
importedFile = importFile(uri);
|
||||
verifyPackage(importedFile);
|
||||
|
||||
final Update update = buildLocalUpdate(importedFile);
|
||||
addUpdate(update);
|
||||
activity.runOnUiThread(() -> callbacks.onImportCompleted(update));
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Failed to import update package", e);
|
||||
// Do not store invalid update
|
||||
if (importedFile != null) {
|
||||
importedFile.delete();
|
||||
}
|
||||
|
||||
activity.runOnUiThread(() -> callbacks.onImportCompleted(null));
|
||||
}
|
||||
});
|
||||
workingThread.start();
|
||||
return true;
|
||||
}
|
||||
|
||||
@SuppressLint("SetWorldReadable")
|
||||
@SuppressWarnings("ResultOfMethodCallIgnored")
|
||||
private File importFile(Uri uri) throws IOException {
|
||||
final ParcelFileDescriptor parcelDescriptor = activity.getContentResolver()
|
||||
.openFileDescriptor(uri, "r");
|
||||
if (parcelDescriptor == null) {
|
||||
throw new IOException("Failed to obtain fileDescriptor");
|
||||
}
|
||||
|
||||
final FileInputStream iStream = new FileInputStream(parcelDescriptor
|
||||
.getFileDescriptor());
|
||||
final File downloadDir = Utils.getDownloadPath(activity);
|
||||
final File outFile = new File(downloadDir, FILE_NAME);
|
||||
if (outFile.exists()) {
|
||||
outFile.delete();
|
||||
}
|
||||
final FileOutputStream oStream = new FileOutputStream(outFile);
|
||||
|
||||
int read;
|
||||
final byte[] buffer = new byte[4096];
|
||||
while ((read = iStream.read(buffer)) > 0) {
|
||||
oStream.write(buffer, 0, read);
|
||||
}
|
||||
oStream.flush();
|
||||
oStream.close();
|
||||
iStream.close();
|
||||
parcelDescriptor.close();
|
||||
|
||||
outFile.setReadable(true, false);
|
||||
|
||||
return outFile;
|
||||
}
|
||||
|
||||
private Update buildLocalUpdate(File file) {
|
||||
final long timeStamp = getTimeStamp(file);
|
||||
final String buildDate = StringGenerator.getDateLocalizedUTC(
|
||||
activity, DateFormat.MEDIUM, timeStamp);
|
||||
final String name = activity.getString(R.string.local_update_name);
|
||||
final Update update = new Update();
|
||||
update.setAvailableOnline(false);
|
||||
update.setName(name);
|
||||
update.setFile(file);
|
||||
update.setFileSize(file.length());
|
||||
update.setDownloadId(Update.LOCAL_ID);
|
||||
update.setTimestamp(timeStamp);
|
||||
update.setStatus(UpdateStatus.VERIFIED);
|
||||
update.setPersistentStatus(UpdateStatus.Persistent.VERIFIED);
|
||||
update.setVersion(String.format("%s (%s)", name, buildDate));
|
||||
return update;
|
||||
}
|
||||
|
||||
@SuppressWarnings("ResultOfMethodCallIgnored")
|
||||
private void verifyPackage(File file) throws Exception {
|
||||
try {
|
||||
android.os.RecoverySystem.verifyPackage(file, null, null);
|
||||
} catch (Exception e) {
|
||||
if (file.exists()) {
|
||||
file.delete();
|
||||
throw new Exception("Verification failed, file has been deleted");
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void addUpdate(Update update) {
|
||||
UpdaterController controller = UpdaterController.getInstance(activity);
|
||||
controller.addUpdate(update, false);
|
||||
}
|
||||
|
||||
private long getTimeStamp(File file) {
|
||||
try {
|
||||
final String metadataContent = readZippedFile(file, METADATA_PATH);
|
||||
final String[] lines = metadataContent.split("\n");
|
||||
for (String line : lines) {
|
||||
if (!line.startsWith(METADATA_TIMESTAMP_KEY)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
final String timeStampStr = line.replace(METADATA_TIMESTAMP_KEY, "");
|
||||
return Long.parseLong(timeStampStr);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "Failed to read date from local update zip package", e);
|
||||
} catch (NumberFormatException e) {
|
||||
Log.e(TAG, "Failed to parse timestamp number from zip metadata file", e);
|
||||
}
|
||||
|
||||
Log.e(TAG, "Couldn't find timestamp in zip file, falling back to $now");
|
||||
return System.currentTimeMillis();
|
||||
}
|
||||
|
||||
private String readZippedFile(File file, String path) throws IOException {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
InputStream iStream = null;
|
||||
|
||||
try (final ZipFile zip = new ZipFile(file)) {
|
||||
final Enumeration<? extends ZipEntry> iterator = zip.entries();
|
||||
while (iterator.hasMoreElements()) {
|
||||
final ZipEntry entry = iterator.nextElement();
|
||||
if (!METADATA_PATH.equals(entry.getName())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
iStream = zip.getInputStream(entry);
|
||||
break;
|
||||
}
|
||||
|
||||
if (iStream == null) {
|
||||
throw new FileNotFoundException("Couldn't find " + path + " in " + file.getName());
|
||||
}
|
||||
|
||||
final byte[] buffer = new byte[1024];
|
||||
int read;
|
||||
while ((read = iStream.read(buffer)) > 0) {
|
||||
sb.append(new String(buffer, 0, read, StandardCharsets.UTF_8));
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "Failed to read file from zip package", e);
|
||||
throw e;
|
||||
} finally {
|
||||
if (iStream != null) {
|
||||
iStream.close();
|
||||
}
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public interface Callbacks {
|
||||
void onImportStarted();
|
||||
|
||||
void onImportCompleted(Update update);
|
||||
}
|
||||
}
|
@@ -1,17 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The LineageOS Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* SPDX-FileCopyrightText: 2017-2022 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater;
|
||||
|
||||
@@ -31,6 +20,7 @@ import androidx.preference.PreferenceManager;
|
||||
import org.lineageos.updater.misc.BuildInfoUtils;
|
||||
import org.lineageos.updater.misc.Constants;
|
||||
import org.lineageos.updater.misc.StringGenerator;
|
||||
import org.lineageos.updater.misc.Utils;
|
||||
|
||||
import java.text.DateFormat;
|
||||
|
||||
@@ -61,11 +51,11 @@ public class UpdaterReceiver extends BroadcastReceiver {
|
||||
String buildDate = StringGenerator.getDateLocalizedUTC(context,
|
||||
DateFormat.MEDIUM, preferences.getLong(Constants.PREF_INSTALL_NEW_TIMESTAMP, 0));
|
||||
String buildInfo = context.getString(R.string.list_build_version_date,
|
||||
BuildInfoUtils.getBuildVersion(), buildDate);
|
||||
Utils.getDisplayVersion(BuildInfoUtils.getBuildVersion()), buildDate);
|
||||
|
||||
Intent notificationIntent = new Intent(context, UpdatesActivity.class);
|
||||
PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
|
||||
|
||||
NotificationChannel notificationChannel = new NotificationChannel(
|
||||
INSTALL_ERROR_NOTIFICATION_CHANNEL,
|
||||
@@ -79,8 +69,7 @@ public class UpdaterReceiver extends BroadcastReceiver {
|
||||
.setStyle(new NotificationCompat.BigTextStyle().bigText(buildInfo))
|
||||
.setContentText(buildInfo);
|
||||
|
||||
NotificationManager nm = (NotificationManager) context.getSystemService(
|
||||
Context.NOTIFICATION_SERVICE);
|
||||
NotificationManager nm = context.getSystemService(NotificationManager.class);
|
||||
nm.createNotificationChannel(notificationChannel);
|
||||
nm.notify(0, builder.build());
|
||||
}
|
||||
@@ -88,7 +77,7 @@ public class UpdaterReceiver extends BroadcastReceiver {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (ACTION_INSTALL_REBOOT.equals(intent.getAction())) {
|
||||
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
|
||||
PowerManager pm = context.getSystemService(PowerManager.class);
|
||||
pm.reboot(null);
|
||||
} else if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
|
||||
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
|
@@ -1,25 +1,19 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The LineageOS Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* SPDX-FileCopyrightText: 2017-2023 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.app.ProgressDialog;
|
||||
import android.app.UiModeManager;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.ServiceConnection;
|
||||
import android.content.SharedPreferences;
|
||||
import android.icu.text.DateFormat;
|
||||
@@ -27,20 +21,30 @@ import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.IBinder;
|
||||
import android.os.SystemProperties;
|
||||
import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.animation.Animation;
|
||||
import android.view.animation.LinearInterpolator;
|
||||
import android.view.animation.RotateAnimation;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Switch;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.widget.SwitchCompat;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||
import androidx.preference.PreferenceManager;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
@@ -59,6 +63,7 @@ import org.lineageos.updater.misc.BuildInfoUtils;
|
||||
import org.lineageos.updater.misc.Constants;
|
||||
import org.lineageos.updater.misc.StringGenerator;
|
||||
import org.lineageos.updater.misc.Utils;
|
||||
import org.lineageos.updater.model.Update;
|
||||
import org.lineageos.updater.model.UpdateInfo;
|
||||
|
||||
import java.io.File;
|
||||
@@ -67,7 +72,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public class UpdatesActivity extends UpdatesListActivity {
|
||||
public class UpdatesActivity extends UpdatesListActivity implements UpdateImporter.Callbacks {
|
||||
|
||||
private static final String TAG = "UpdatesActivity";
|
||||
private UpdaterService mUpdaterService;
|
||||
@@ -78,12 +83,36 @@ public class UpdatesActivity extends UpdatesListActivity {
|
||||
private View mRefreshIconView;
|
||||
private RotateAnimation mRefreshAnimation;
|
||||
|
||||
private boolean mIsTV;
|
||||
|
||||
private UpdateInfo mToBeExported = null;
|
||||
private final ActivityResultLauncher<Intent> mExportUpdate = registerForActivityResult(
|
||||
new ActivityResultContracts.StartActivityForResult(),
|
||||
result -> {
|
||||
if (result.getResultCode() == Activity.RESULT_OK) {
|
||||
Intent intent = result.getData();
|
||||
if (intent != null) {
|
||||
Uri uri = intent.getData();
|
||||
exportUpdate(uri);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
private UpdateImporter mUpdateImporter;
|
||||
@SuppressWarnings("deprecation")
|
||||
private ProgressDialog importDialog;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_updates);
|
||||
|
||||
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
|
||||
mUpdateImporter = new UpdateImporter(this, this);
|
||||
|
||||
UiModeManager uiModeManager = getSystemService(UiModeManager.class);
|
||||
mIsTV = uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION;
|
||||
|
||||
RecyclerView recyclerView = findViewById(R.id.recycler_view);
|
||||
mAdapter = new UpdatesListAdapter(this);
|
||||
recyclerView.setAdapter(mAdapter);
|
||||
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
|
||||
@@ -99,7 +128,7 @@ public class UpdatesActivity extends UpdatesListActivity {
|
||||
if (UpdaterController.ACTION_UPDATE_STATUS.equals(intent.getAction())) {
|
||||
String downloadId = intent.getStringExtra(UpdaterController.EXTRA_DOWNLOAD_ID);
|
||||
handleDownloadStatusChange(downloadId);
|
||||
mAdapter.notifyDataSetChanged();
|
||||
mAdapter.notifyItemChanged(downloadId);
|
||||
} else if (UpdaterController.ACTION_DOWNLOAD_PROGRESS.equals(intent.getAction()) ||
|
||||
UpdaterController.ACTION_INSTALL_PROGRESS.equals(intent.getAction())) {
|
||||
String downloadId = intent.getStringExtra(UpdaterController.EXTRA_DOWNLOAD_ID);
|
||||
@@ -111,54 +140,81 @@ public class UpdatesActivity extends UpdatesListActivity {
|
||||
}
|
||||
};
|
||||
|
||||
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
|
||||
setSupportActionBar(toolbar);
|
||||
getSupportActionBar().setDisplayShowTitleEnabled(false);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
if (!mIsTV) {
|
||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||
setSupportActionBar(toolbar);
|
||||
ActionBar actionBar = getSupportActionBar();
|
||||
if (actionBar != null) {
|
||||
actionBar.setDisplayShowTitleEnabled(false);
|
||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||
final int statusBarHeight;
|
||||
TypedValue tv = new TypedValue();
|
||||
if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
|
||||
statusBarHeight = TypedValue.complexToDimensionPixelSize(
|
||||
tv.data, getResources().getDisplayMetrics());
|
||||
} else {
|
||||
statusBarHeight = 0;
|
||||
}
|
||||
RelativeLayout headerContainer = findViewById(R.id.header_container);
|
||||
recyclerView.setOnApplyWindowInsetsListener((view, insets) -> {
|
||||
int top = insets.getInsets(WindowInsetsCompat.Type.statusBars()).top;
|
||||
CollapsingToolbarLayout.LayoutParams lp =
|
||||
(CollapsingToolbarLayout.LayoutParams)
|
||||
headerContainer.getLayoutParams();
|
||||
lp.topMargin = top + statusBarHeight;
|
||||
headerContainer.setLayoutParams(lp);
|
||||
return insets;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
TextView headerTitle = (TextView) findViewById(R.id.header_title);
|
||||
TextView headerTitle = findViewById(R.id.header_title);
|
||||
headerTitle.setText(getString(R.string.header_title_text,
|
||||
BuildInfoUtils.getBuildVersion()));
|
||||
Utils.getDisplayVersion(BuildInfoUtils.getBuildVersion())));
|
||||
|
||||
updateLastCheckedString();
|
||||
|
||||
TextView headerBuildVersion = (TextView) findViewById(R.id.header_build_version);
|
||||
TextView headerBuildVersion = findViewById(R.id.header_build_version);
|
||||
headerBuildVersion.setText(
|
||||
getString(R.string.header_android_version, Build.VERSION.RELEASE));
|
||||
|
||||
TextView headerBuildDate = (TextView) findViewById(R.id.header_build_date);
|
||||
TextView headerBuildDate = findViewById(R.id.header_build_date);
|
||||
headerBuildDate.setText(StringGenerator.getDateLocalizedUTC(this,
|
||||
DateFormat.LONG, BuildInfoUtils.getBuildDateTimestamp()));
|
||||
|
||||
// Switch between header title and appbar title minimizing overlaps
|
||||
final CollapsingToolbarLayout collapsingToolbar =
|
||||
(CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
|
||||
final AppBarLayout appBar = (AppBarLayout) findViewById(R.id.app_bar);
|
||||
appBar.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
|
||||
boolean mIsShown = false;
|
||||
if (!mIsTV) {
|
||||
// Switch between header title and appbar title minimizing overlaps
|
||||
final CollapsingToolbarLayout collapsingToolbar = findViewById(R.id.collapsing_toolbar);
|
||||
final AppBarLayout appBar = findViewById(R.id.app_bar);
|
||||
appBar.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
|
||||
boolean mIsShown = false;
|
||||
|
||||
@Override
|
||||
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
|
||||
int scrollRange = appBarLayout.getTotalScrollRange();
|
||||
if (!mIsShown && scrollRange + verticalOffset < 10) {
|
||||
collapsingToolbar.setTitle(getString(R.string.display_name));
|
||||
mIsShown = true;
|
||||
} else if (mIsShown && scrollRange + verticalOffset > 100) {
|
||||
collapsingToolbar.setTitle(null);
|
||||
mIsShown = false;
|
||||
@Override
|
||||
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
|
||||
int scrollRange = appBarLayout.getTotalScrollRange();
|
||||
if (!mIsShown && scrollRange + verticalOffset < 10) {
|
||||
collapsingToolbar.setTitle(getString(R.string.display_name));
|
||||
mIsShown = true;
|
||||
} else if (mIsShown && scrollRange + verticalOffset > 100) {
|
||||
collapsingToolbar.setTitle(null);
|
||||
mIsShown = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
mRefreshAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f,
|
||||
Animation.RELATIVE_TO_SELF, 0.5f);
|
||||
mRefreshAnimation.setInterpolator(new LinearInterpolator());
|
||||
mRefreshAnimation.setDuration(1000);
|
||||
|
||||
if (!Utils.hasTouchscreen(this)) {
|
||||
// This can't be collapsed without a touchscreen
|
||||
appBar.setExpanded(false);
|
||||
}
|
||||
});
|
||||
|
||||
if (!Utils.hasTouchscreen(this)) {
|
||||
// This can't be collapsed without a touchscreen
|
||||
appBar.setExpanded(false);
|
||||
} else {
|
||||
findViewById(R.id.refresh).setOnClickListener(v -> downloadUpdatesList(true));
|
||||
findViewById(R.id.preferences).setOnClickListener(v -> showPreferencesDialog());
|
||||
}
|
||||
|
||||
mRefreshAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f,
|
||||
Animation.RELATIVE_TO_SELF, 0.5f);
|
||||
mRefreshAnimation.setInterpolator(new LinearInterpolator());
|
||||
mRefreshAnimation.setDuration(1000);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -176,6 +232,17 @@ public class UpdatesActivity extends UpdatesListActivity {
|
||||
LocalBroadcastManager.getInstance(this).registerReceiver(mBroadcastReceiver, intentFilter);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
if (importDialog != null) {
|
||||
importDialog.dismiss();
|
||||
importDialog = null;
|
||||
mUpdateImporter.stopImport();
|
||||
}
|
||||
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
LocalBroadcastManager.getInstance(this).unregisterReceiver(mBroadcastReceiver);
|
||||
@@ -193,21 +260,21 @@ public class UpdatesActivity extends UpdatesListActivity {
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.menu_refresh: {
|
||||
downloadUpdatesList(true);
|
||||
return true;
|
||||
}
|
||||
case R.id.menu_preferences: {
|
||||
showPreferencesDialog();
|
||||
return true;
|
||||
}
|
||||
case R.id.menu_show_changelog: {
|
||||
Intent openUrl = new Intent(Intent.ACTION_VIEW,
|
||||
Uri.parse(Utils.getChangelogURL(this)));
|
||||
startActivity(openUrl);
|
||||
return true;
|
||||
}
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == R.id.menu_refresh) {
|
||||
downloadUpdatesList(true);
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_preferences) {
|
||||
showPreferencesDialog();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_show_changelog) {
|
||||
Intent openUrl = new Intent(Intent.ACTION_VIEW,
|
||||
Uri.parse(Utils.getChangelogURL(this)));
|
||||
startActivity(openUrl);
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_local_update) {
|
||||
mUpdateImporter.openImportPicker();
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
@@ -218,8 +285,60 @@ public class UpdatesActivity extends UpdatesListActivity {
|
||||
return true;
|
||||
}
|
||||
|
||||
private ServiceConnection mConnection = new ServiceConnection() {
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
||||
if (!mUpdateImporter.onResult(requestCode, resultCode, data)) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("deprecation")
|
||||
public void onImportStarted() {
|
||||
if (importDialog != null && importDialog.isShowing()) {
|
||||
importDialog.dismiss();
|
||||
}
|
||||
|
||||
importDialog = ProgressDialog.show(this, getString(R.string.local_update_import),
|
||||
getString(R.string.local_update_import_progress), true, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onImportCompleted(Update update) {
|
||||
if (importDialog != null) {
|
||||
importDialog.dismiss();
|
||||
importDialog = null;
|
||||
}
|
||||
|
||||
if (update == null) {
|
||||
new AlertDialog.Builder(this)
|
||||
.setTitle(R.string.local_update_import)
|
||||
.setMessage(R.string.local_update_import_failure)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.show();
|
||||
return;
|
||||
}
|
||||
|
||||
mAdapter.notifyDataSetChanged();
|
||||
|
||||
final Runnable deleteUpdate = () -> UpdaterController.getInstance(this)
|
||||
.deleteUpdate(update.getDownloadId());
|
||||
|
||||
new AlertDialog.Builder(this)
|
||||
.setTitle(R.string.local_update_import)
|
||||
.setMessage(getString(R.string.local_update_import_success, update.getVersion()))
|
||||
.setPositiveButton(R.string.local_update_import_install, (dialog, which) -> {
|
||||
mAdapter.addItem(update.getDownloadId());
|
||||
// Update UI
|
||||
getUpdatesList();
|
||||
Utils.triggerUpdate(this, update.getDownloadId());
|
||||
})
|
||||
.setNegativeButton(android.R.string.cancel, (dialog, which) -> deleteUpdate.run())
|
||||
.setOnCancelListener((dialog) -> deleteUpdate.run())
|
||||
.show();
|
||||
}
|
||||
|
||||
private final ServiceConnection mConnection = new ServiceConnection() {
|
||||
@Override
|
||||
public void onServiceConnected(ComponentName className,
|
||||
IBinder service) {
|
||||
@@ -301,6 +420,7 @@ public class UpdatesActivity extends UpdatesListActivity {
|
||||
}
|
||||
// In case we set a one-shot check because of a previous failure
|
||||
UpdatesCheckReceiver.cancelUpdatesCheck(this);
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
jsonNew.renameTo(json);
|
||||
} catch (IOException | JSONException e) {
|
||||
Log.e(TAG, "Could not read json", e);
|
||||
@@ -327,12 +447,11 @@ public class UpdatesActivity extends UpdatesListActivity {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResponse(int statusCode, String url,
|
||||
DownloadClient.Headers headers) {
|
||||
public void onResponse(DownloadClient.Headers headers) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(File destination) {
|
||||
public void onSuccess() {
|
||||
runOnUiThread(() -> {
|
||||
Log.d(TAG, "List downloaded");
|
||||
processNewJson(jsonFile, jsonFileTmp, manualRefresh);
|
||||
@@ -365,11 +484,15 @@ public class UpdatesActivity extends UpdatesListActivity {
|
||||
String lastCheckString = getString(R.string.header_last_updates_check,
|
||||
StringGenerator.getDateLocalized(this, DateFormat.LONG, lastCheck),
|
||||
StringGenerator.getTimeLocalized(this, lastCheck));
|
||||
TextView headerLastCheck = (TextView) findViewById(R.id.header_last_check);
|
||||
TextView headerLastCheck = findViewById(R.id.header_last_check);
|
||||
headerLastCheck.setText(lastCheckString);
|
||||
}
|
||||
|
||||
private void handleDownloadStatusChange(String downloadId) {
|
||||
if (Update.LOCAL_ID.equals(downloadId)) {
|
||||
return;
|
||||
}
|
||||
|
||||
UpdateInfo update = mUpdaterService.getUpdaterController().getUpdate(downloadId);
|
||||
switch (update.getStatus()) {
|
||||
case PAUSED_ERROR:
|
||||
@@ -384,36 +507,73 @@ public class UpdatesActivity extends UpdatesListActivity {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exportUpdate(UpdateInfo update) {
|
||||
mToBeExported = update;
|
||||
|
||||
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
|
||||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||
intent.setType("application/zip");
|
||||
intent.putExtra(Intent.EXTRA_TITLE, update.getName());
|
||||
|
||||
mExportUpdate.launch(intent);
|
||||
}
|
||||
|
||||
private void exportUpdate(Uri uri) {
|
||||
Intent intent = new Intent(this, ExportUpdateService.class);
|
||||
intent.setAction(ExportUpdateService.ACTION_START_EXPORTING);
|
||||
intent.putExtra(ExportUpdateService.EXTRA_SOURCE_FILE, mToBeExported.getFile());
|
||||
intent.putExtra(ExportUpdateService.EXTRA_DEST_URI, uri);
|
||||
startService(intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showSnackbar(int stringId, int duration) {
|
||||
Snackbar.make(findViewById(R.id.main_container), stringId, duration).show();
|
||||
}
|
||||
|
||||
private void refreshAnimationStart() {
|
||||
if (mRefreshIconView == null) {
|
||||
mRefreshIconView = findViewById(R.id.menu_refresh);
|
||||
}
|
||||
if (mRefreshIconView != null) {
|
||||
mRefreshAnimation.setRepeatCount(Animation.INFINITE);
|
||||
mRefreshIconView.startAnimation(mRefreshAnimation);
|
||||
mRefreshIconView.setEnabled(false);
|
||||
if (!mIsTV) {
|
||||
if (mRefreshIconView == null) {
|
||||
mRefreshIconView = findViewById(R.id.menu_refresh);
|
||||
}
|
||||
if (mRefreshIconView != null) {
|
||||
mRefreshAnimation.setRepeatCount(Animation.INFINITE);
|
||||
mRefreshIconView.startAnimation(mRefreshAnimation);
|
||||
mRefreshIconView.setEnabled(false);
|
||||
}
|
||||
} else {
|
||||
findViewById(R.id.recycler_view).setVisibility(View.GONE);
|
||||
findViewById(R.id.no_new_updates_view).setVisibility(View.GONE);
|
||||
findViewById(R.id.refresh_progress).setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
private void refreshAnimationStop() {
|
||||
if (mRefreshIconView != null) {
|
||||
mRefreshAnimation.setRepeatCount(0);
|
||||
mRefreshIconView.setEnabled(true);
|
||||
if (!mIsTV) {
|
||||
if (mRefreshIconView != null) {
|
||||
mRefreshAnimation.setRepeatCount(0);
|
||||
mRefreshIconView.setEnabled(true);
|
||||
}
|
||||
} else {
|
||||
findViewById(R.id.refresh_progress).setVisibility(View.GONE);
|
||||
if (mAdapter.getItemCount() > 0) {
|
||||
findViewById(R.id.recycler_view).setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
findViewById(R.id.no_new_updates_view).setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
private void showPreferencesDialog() {
|
||||
View view = LayoutInflater.from(this).inflate(R.layout.preferences_dialog, null);
|
||||
Spinner autoCheckInterval =
|
||||
view.findViewById(R.id.preferences_auto_updates_check_interval);
|
||||
Switch autoDelete = view.findViewById(R.id.preferences_auto_delete_updates);
|
||||
Switch dataWarning = view.findViewById(R.id.preferences_mobile_data_warning);
|
||||
Switch abPerfMode = view.findViewById(R.id.preferences_ab_perf_mode);
|
||||
Spinner autoCheckInterval = view.findViewById(R.id.preferences_auto_updates_check_interval);
|
||||
SwitchCompat autoDelete = view.findViewById(R.id.preferences_auto_delete_updates);
|
||||
SwitchCompat meteredNetworkWarning = view.findViewById(
|
||||
R.id.preferences_metered_network_warning);
|
||||
SwitchCompat abPerfMode = view.findViewById(R.id.preferences_ab_perf_mode);
|
||||
SwitchCompat updateRecovery = view.findViewById(R.id.preferences_update_recovery);
|
||||
|
||||
if (!Utils.isABDevice()) {
|
||||
abPerfMode.setVisibility(View.GONE);
|
||||
@@ -422,9 +582,38 @@ public class UpdatesActivity extends UpdatesListActivity {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
autoCheckInterval.setSelection(Utils.getUpdateCheckSetting(this));
|
||||
autoDelete.setChecked(prefs.getBoolean(Constants.PREF_AUTO_DELETE_UPDATES, false));
|
||||
dataWarning.setChecked(prefs.getBoolean(Constants.PREF_MOBILE_DATA_WARNING, true));
|
||||
meteredNetworkWarning.setChecked(prefs.getBoolean(Constants.PREF_METERED_NETWORK_WARNING,
|
||||
prefs.getBoolean(Constants.PREF_MOBILE_DATA_WARNING, true)));
|
||||
abPerfMode.setChecked(prefs.getBoolean(Constants.PREF_AB_PERF_MODE, false));
|
||||
|
||||
if (getResources().getBoolean(R.bool.config_hideRecoveryUpdate)) {
|
||||
// Hide the update feature if explicitly requested.
|
||||
// Might be the case of A-only devices using prebuilt vendor images.
|
||||
updateRecovery.setVisibility(View.GONE);
|
||||
} else if (Utils.isRecoveryUpdateExecPresent()) {
|
||||
updateRecovery.setChecked(
|
||||
SystemProperties.getBoolean(Constants.UPDATE_RECOVERY_PROPERTY, false));
|
||||
} else {
|
||||
// There is no recovery updater script in the device, so the feature is considered
|
||||
// forcefully enabled, just to avoid users to be confused and complain that
|
||||
// recovery gets overwritten. That's the case of A/B and recovery-in-boot devices.
|
||||
updateRecovery.setChecked(true);
|
||||
updateRecovery.setOnTouchListener(new View.OnTouchListener() {
|
||||
private Toast forcedUpdateToast = null;
|
||||
|
||||
@Override
|
||||
public boolean onTouch(View v, MotionEvent event) {
|
||||
if (forcedUpdateToast != null) {
|
||||
forcedUpdateToast.cancel();
|
||||
}
|
||||
forcedUpdateToast = Toast.makeText(getApplicationContext(),
|
||||
getString(R.string.toast_forced_update_recovery), Toast.LENGTH_SHORT);
|
||||
forcedUpdateToast.show();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
new AlertDialog.Builder(this)
|
||||
.setTitle(R.string.menu_preferences)
|
||||
.setView(view)
|
||||
@@ -432,12 +621,10 @@ public class UpdatesActivity extends UpdatesListActivity {
|
||||
prefs.edit()
|
||||
.putInt(Constants.PREF_AUTO_UPDATES_CHECK_INTERVAL,
|
||||
autoCheckInterval.getSelectedItemPosition())
|
||||
.putBoolean(Constants.PREF_AUTO_DELETE_UPDATES,
|
||||
autoDelete.isChecked())
|
||||
.putBoolean(Constants.PREF_MOBILE_DATA_WARNING,
|
||||
dataWarning.isChecked())
|
||||
.putBoolean(Constants.PREF_AB_PERF_MODE,
|
||||
abPerfMode.isChecked())
|
||||
.putBoolean(Constants.PREF_AUTO_DELETE_UPDATES, autoDelete.isChecked())
|
||||
.putBoolean(Constants.PREF_METERED_NETWORK_WARNING,
|
||||
meteredNetworkWarning.isChecked())
|
||||
.putBoolean(Constants.PREF_AB_PERF_MODE, abPerfMode.isChecked())
|
||||
.apply();
|
||||
|
||||
if (Utils.isUpdateCheckEnabled(this)) {
|
||||
@@ -447,8 +634,15 @@ public class UpdatesActivity extends UpdatesListActivity {
|
||||
UpdatesCheckReceiver.cancelUpdatesCheck(this);
|
||||
}
|
||||
|
||||
boolean enableABPerfMode = abPerfMode.isChecked();
|
||||
mUpdaterService.getUpdaterController().setPerformanceMode(enableABPerfMode);
|
||||
if (Utils.isABDevice()) {
|
||||
boolean enableABPerfMode = abPerfMode.isChecked();
|
||||
mUpdaterService.getUpdaterController().setPerformanceMode(enableABPerfMode);
|
||||
}
|
||||
if (Utils.isRecoveryUpdateExecPresent()) {
|
||||
boolean enableRecoveryUpdate = updateRecovery.isChecked();
|
||||
SystemProperties.set(Constants.UPDATE_RECOVERY_PROPERTY,
|
||||
String.valueOf(enableRecoveryUpdate));
|
||||
}
|
||||
})
|
||||
.show();
|
||||
}
|
@@ -1,17 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The LineageOS Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* SPDX-FileCopyrightText: 2017-2022 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater;
|
||||
|
||||
@@ -24,10 +13,10 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.SystemClock;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.core.app.NotificationCompat;
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.lineageos.updater.download.DownloadClient;
|
||||
@@ -84,17 +73,17 @@ public class UpdatesCheckReceiver extends BroadcastReceiver {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResponse(int statusCode, String url,
|
||||
DownloadClient.Headers headers) {
|
||||
public void onResponse(DownloadClient.Headers headers) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(File destination) {
|
||||
public void onSuccess() {
|
||||
try {
|
||||
if (json.exists() && Utils.checkForNewUpdates(json, jsonNew)) {
|
||||
showNotification(context);
|
||||
updateRepeatingUpdatesCheck(context);
|
||||
}
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
jsonNew.renameTo(json);
|
||||
long currentMillis = System.currentTimeMillis();
|
||||
preferences.edit()
|
||||
@@ -123,8 +112,8 @@ public class UpdatesCheckReceiver extends BroadcastReceiver {
|
||||
}
|
||||
|
||||
private static void showNotification(Context context) {
|
||||
NotificationManager notificationManager =
|
||||
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
NotificationManager notificationManager = context.getSystemService(
|
||||
NotificationManager.class);
|
||||
NotificationChannel notificationChannel = new NotificationChannel(
|
||||
NEW_UPDATES_NOTIFICATION_CHANNEL,
|
||||
context.getString(R.string.new_updates_channel_title),
|
||||
@@ -134,7 +123,7 @@ public class UpdatesCheckReceiver extends BroadcastReceiver {
|
||||
notificationBuilder.setSmallIcon(R.drawable.ic_system_update);
|
||||
Intent notificationIntent = new Intent(context, UpdatesActivity.class);
|
||||
PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
|
||||
notificationBuilder.setContentIntent(intent);
|
||||
notificationBuilder.setContentTitle(context.getString(R.string.new_updates_found_title));
|
||||
notificationBuilder.setAutoCancel(true);
|
||||
@@ -145,7 +134,7 @@ public class UpdatesCheckReceiver extends BroadcastReceiver {
|
||||
private static PendingIntent getRepeatingUpdatesCheckIntent(Context context) {
|
||||
Intent intent = new Intent(context, UpdatesCheckReceiver.class);
|
||||
intent.setAction(DAILY_CHECK_ACTION);
|
||||
return PendingIntent.getBroadcast(context, 0, intent, 0);
|
||||
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE);
|
||||
}
|
||||
|
||||
public static void updateRepeatingUpdatesCheck(Context context) {
|
||||
@@ -159,7 +148,7 @@ public class UpdatesCheckReceiver extends BroadcastReceiver {
|
||||
}
|
||||
|
||||
PendingIntent updateCheckIntent = getRepeatingUpdatesCheckIntent(context);
|
||||
AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
|
||||
AlarmManager alarmMgr = context.getSystemService(AlarmManager.class);
|
||||
alarmMgr.setRepeating(AlarmManager.RTC, System.currentTimeMillis() +
|
||||
Utils.getUpdateCheckInterval(context), Utils.getUpdateCheckInterval(context),
|
||||
updateCheckIntent);
|
||||
@@ -170,20 +159,20 @@ public class UpdatesCheckReceiver extends BroadcastReceiver {
|
||||
}
|
||||
|
||||
public static void cancelRepeatingUpdatesCheck(Context context) {
|
||||
AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
|
||||
AlarmManager alarmMgr = context.getSystemService(AlarmManager.class);
|
||||
alarmMgr.cancel(getRepeatingUpdatesCheckIntent(context));
|
||||
}
|
||||
|
||||
private static PendingIntent getUpdatesCheckIntent(Context context) {
|
||||
Intent intent = new Intent(context, UpdatesCheckReceiver.class);
|
||||
intent.setAction(ONESHOT_CHECK_ACTION);
|
||||
return PendingIntent.getBroadcast(context, 0, intent, 0);
|
||||
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE);
|
||||
}
|
||||
|
||||
public static void scheduleUpdatesCheck(Context context) {
|
||||
long millisToNextCheck = AlarmManager.INTERVAL_HOUR * 2;
|
||||
PendingIntent updateCheckIntent = getUpdatesCheckIntent(context);
|
||||
AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
|
||||
AlarmManager alarmMgr = context.getSystemService(AlarmManager.class);
|
||||
alarmMgr.set(AlarmManager.ELAPSED_REALTIME,
|
||||
SystemClock.elapsedRealtime() + millisToNextCheck,
|
||||
updateCheckIntent);
|
||||
@@ -193,7 +182,7 @@ public class UpdatesCheckReceiver extends BroadcastReceiver {
|
||||
}
|
||||
|
||||
public static void cancelUpdatesCheck(Context context) {
|
||||
AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
|
||||
AlarmManager alarmMgr = context.getSystemService(AlarmManager.class);
|
||||
alarmMgr.cancel(getUpdatesCheckIntent(context));
|
||||
Log.d(TAG, "Cancelling pending one-shot check");
|
||||
}
|
@@ -1,17 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The LineageOS Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* SPDX-FileCopyrightText: 2017-2022 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater;
|
||||
|
||||
@@ -75,9 +64,14 @@ public class UpdatesDbHelper extends SQLiteOpenHelper {
|
||||
onUpgrade(db, oldVersion, newVersion);
|
||||
}
|
||||
|
||||
public long addUpdate(Update update) {
|
||||
public void addUpdateWithOnConflict(Update update, int conflictAlgorithm) {
|
||||
SQLiteDatabase db = getWritableDatabase();
|
||||
ContentValues values = new ContentValues();
|
||||
fillContentValues(update, values);
|
||||
db.insertWithOnConflict(UpdateEntry.TABLE_NAME, null, values, conflictAlgorithm);
|
||||
}
|
||||
|
||||
private static void fillContentValues(Update update, ContentValues values) {
|
||||
values.put(UpdateEntry.COLUMN_NAME_STATUS, update.getPersistentStatus());
|
||||
values.put(UpdateEntry.COLUMN_NAME_PATH, update.getFile().getAbsolutePath());
|
||||
values.put(UpdateEntry.COLUMN_NAME_DOWNLOAD_ID, update.getDownloadId());
|
||||
@@ -85,68 +79,27 @@ public class UpdatesDbHelper extends SQLiteOpenHelper {
|
||||
values.put(UpdateEntry.COLUMN_NAME_TYPE, update.getType());
|
||||
values.put(UpdateEntry.COLUMN_NAME_VERSION, update.getVersion());
|
||||
values.put(UpdateEntry.COLUMN_NAME_SIZE, update.getFileSize());
|
||||
return db.insert(UpdateEntry.TABLE_NAME, null, values);
|
||||
}
|
||||
|
||||
public long addUpdateWithOnConflict(Update update, int conflictAlgorithm) {
|
||||
SQLiteDatabase db = getWritableDatabase();
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(UpdateEntry.COLUMN_NAME_STATUS, update.getPersistentStatus());
|
||||
values.put(UpdateEntry.COLUMN_NAME_PATH, update.getFile().getAbsolutePath());
|
||||
values.put(UpdateEntry.COLUMN_NAME_DOWNLOAD_ID, update.getDownloadId());
|
||||
values.put(UpdateEntry.COLUMN_NAME_TIMESTAMP, update.getTimestamp());
|
||||
values.put(UpdateEntry.COLUMN_NAME_TYPE, update.getType());
|
||||
values.put(UpdateEntry.COLUMN_NAME_VERSION, update.getVersion());
|
||||
values.put(UpdateEntry.COLUMN_NAME_SIZE, update.getFileSize());
|
||||
return db.insertWithOnConflict(UpdateEntry.TABLE_NAME, null, values, conflictAlgorithm);
|
||||
}
|
||||
|
||||
public boolean removeUpdate(String downloadId) {
|
||||
public void removeUpdate(String downloadId) {
|
||||
SQLiteDatabase db = getWritableDatabase();
|
||||
String selection = UpdateEntry.COLUMN_NAME_DOWNLOAD_ID + " = ?";
|
||||
String[] selectionArgs = {downloadId};
|
||||
return db.delete(UpdateEntry.TABLE_NAME, selection, selectionArgs) != 0;
|
||||
db.delete(UpdateEntry.TABLE_NAME, selection, selectionArgs);
|
||||
}
|
||||
|
||||
public boolean removeUpdate(long rowId) {
|
||||
SQLiteDatabase db = getWritableDatabase();
|
||||
String selection = UpdateEntry._ID + " = " + rowId;
|
||||
return db.delete(UpdateEntry.TABLE_NAME, selection, null) != 0;
|
||||
}
|
||||
|
||||
public boolean changeUpdateStatus(Update update) {
|
||||
public void changeUpdateStatus(Update update) {
|
||||
String selection = UpdateEntry.COLUMN_NAME_DOWNLOAD_ID + " = ?";
|
||||
String[] selectionArgs = {update.getDownloadId()};
|
||||
return changeUpdateStatus(selection, selectionArgs, update.getPersistentStatus());
|
||||
changeUpdateStatus(selection, selectionArgs, update.getPersistentStatus());
|
||||
}
|
||||
|
||||
public boolean changeUpdateStatus(long rowId, int status) {
|
||||
String selection = UpdateEntry._ID + " = " + rowId;
|
||||
return changeUpdateStatus(selection, null, status);
|
||||
}
|
||||
|
||||
private boolean changeUpdateStatus(String selection, String[] selectionArgs,
|
||||
int status) {
|
||||
private void changeUpdateStatus(String selection, String[] selectionArgs,
|
||||
int status) {
|
||||
SQLiteDatabase db = getWritableDatabase();
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(UpdateEntry.COLUMN_NAME_STATUS, status);
|
||||
return db.update(UpdateEntry.TABLE_NAME, values, selection, selectionArgs) != 0;
|
||||
}
|
||||
|
||||
public Update getUpdate(long rowId) {
|
||||
String selection = UpdateEntry._ID + " = " + rowId;
|
||||
return getUpdate(selection, null);
|
||||
}
|
||||
|
||||
public Update getUpdate(String downloadId) {
|
||||
String selection = UpdateEntry.COLUMN_NAME_DOWNLOAD_ID + " = ?";
|
||||
String[] selectionArgs = {downloadId};
|
||||
return getUpdate(selection, selectionArgs);
|
||||
}
|
||||
|
||||
private Update getUpdate(String selection, String[] selectionArgs) {
|
||||
List<Update> updates = getUpdates(selection, selectionArgs);
|
||||
return updates != null ? updates.get(0) : null;
|
||||
db.update(UpdateEntry.TABLE_NAME, values, selection, selectionArgs);
|
||||
}
|
||||
|
||||
public List<Update> getUpdates() {
|
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2017 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import org.lineageos.updater.model.UpdateInfo;
|
||||
|
||||
public abstract class UpdatesListActivity extends AppCompatActivity {
|
||||
public abstract void exportUpdate(UpdateInfo update);
|
||||
public abstract void showSnackbar(int stringId, int duration);
|
||||
}
|
@@ -1,28 +1,17 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The LineageOS Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater;
|
||||
|
||||
import android.content.Context;
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Resources;
|
||||
import android.net.Uri;
|
||||
import android.os.BatteryManager;
|
||||
import android.os.PowerManager;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.text.SpannableString;
|
||||
import android.text.format.Formatter;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
@@ -35,14 +24,20 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.view.ContextThemeWrapper;
|
||||
import androidx.appcompat.view.menu.MenuBuilder;
|
||||
import androidx.appcompat.view.menu.MenuPopupHelper;
|
||||
import androidx.appcompat.widget.PopupMenu;
|
||||
import androidx.preference.PreferenceManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
@@ -51,28 +46,36 @@ import org.lineageos.updater.controller.UpdaterController;
|
||||
import org.lineageos.updater.controller.UpdaterService;
|
||||
import org.lineageos.updater.misc.BuildInfoUtils;
|
||||
import org.lineageos.updater.misc.Constants;
|
||||
import org.lineageos.updater.misc.PermissionsUtils;
|
||||
import org.lineageos.updater.misc.StringGenerator;
|
||||
import org.lineageos.updater.misc.Utils;
|
||||
import org.lineageos.updater.model.UpdateInfo;
|
||||
import org.lineageos.updater.model.UpdateStatus;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.text.DateFormat;
|
||||
import java.text.NumberFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.ViewHolder> {
|
||||
|
||||
private static final String TAG = "UpdateListAdapter";
|
||||
|
||||
private static final int BATTERY_PLUGGED_ANY = BatteryManager.BATTERY_PLUGGED_AC
|
||||
| BatteryManager.BATTERY_PLUGGED_USB
|
||||
| BatteryManager.BATTERY_PLUGGED_WIRELESS;
|
||||
|
||||
private final float mAlphaDisabledValue;
|
||||
|
||||
private List<String> mDownloadIds;
|
||||
private String mSelectedDownload;
|
||||
private UpdaterController mUpdaterController;
|
||||
private UpdatesListActivity mActivity;
|
||||
private final UpdatesListActivity mActivity;
|
||||
|
||||
private AlertDialog infoDialog;
|
||||
|
||||
private enum Action {
|
||||
DOWNLOAD,
|
||||
@@ -86,25 +89,31 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
|
||||
}
|
||||
|
||||
public static class ViewHolder extends RecyclerView.ViewHolder {
|
||||
private Button mAction;
|
||||
private final Button mAction;
|
||||
private final ImageButton mMenu;
|
||||
|
||||
private TextView mBuildDate;
|
||||
private TextView mBuildVersion;
|
||||
private TextView mBuildSize;
|
||||
private final TextView mBuildDate;
|
||||
private final TextView mBuildVersion;
|
||||
private final TextView mBuildSize;
|
||||
|
||||
private ProgressBar mProgressBar;
|
||||
private TextView mProgressText;
|
||||
private final LinearLayout mProgress;
|
||||
private final ProgressBar mProgressBar;
|
||||
private final TextView mProgressText;
|
||||
private final TextView mPercentage;
|
||||
|
||||
public ViewHolder(final View view) {
|
||||
super(view);
|
||||
mAction = (Button) view.findViewById(R.id.update_action);
|
||||
mAction = view.findViewById(R.id.update_action);
|
||||
mMenu = view.findViewById(R.id.update_menu);
|
||||
|
||||
mBuildDate = (TextView) view.findViewById(R.id.build_date);
|
||||
mBuildVersion = (TextView) view.findViewById(R.id.build_version);
|
||||
mBuildSize = (TextView) view.findViewById(R.id.build_size);
|
||||
mBuildDate = view.findViewById(R.id.build_date);
|
||||
mBuildVersion = view.findViewById(R.id.build_version);
|
||||
mBuildSize = view.findViewById(R.id.build_size);
|
||||
|
||||
mProgressBar = (ProgressBar) view.findViewById(R.id.progress_bar);
|
||||
mProgressText = (TextView) view.findViewById(R.id.progress_text);
|
||||
mProgress = view.findViewById(R.id.progress);
|
||||
mProgressBar = view.findViewById(R.id.progress_bar);
|
||||
mProgressText = view.findViewById(R.id.progress_text);
|
||||
mPercentage = view.findViewById(R.id.progress_percent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,6 +125,7 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
|
||||
mAlphaDisabledValue = tv.getFloat();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
|
||||
View view = LayoutInflater.from(viewGroup.getContext())
|
||||
@@ -123,6 +133,15 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
|
||||
return new ViewHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewDetachedFromWindow(@NonNull ViewHolder holder) {
|
||||
super.onViewDetachedFromWindow(holder);
|
||||
|
||||
if (infoDialog != null) {
|
||||
infoDialog.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
public void setUpdaterController(UpdaterController updaterController) {
|
||||
mUpdaterController = updaterController;
|
||||
notifyDataSetChanged();
|
||||
@@ -134,20 +153,20 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
|
||||
final String downloadId = update.getDownloadId();
|
||||
if (mUpdaterController.isDownloading(downloadId)) {
|
||||
canDelete = true;
|
||||
String downloaded = StringGenerator.bytesToMegabytes(mActivity,
|
||||
String downloaded = Formatter.formatShortFileSize(mActivity,
|
||||
update.getFile().length());
|
||||
String total = Formatter.formatShortFileSize(mActivity, update.getFileSize());
|
||||
String percentage = NumberFormat.getPercentInstance().format(
|
||||
update.getProgress() / 100.f);
|
||||
viewHolder.mPercentage.setText(percentage);
|
||||
long eta = update.getEta();
|
||||
if (eta > 0) {
|
||||
CharSequence etaString = StringGenerator.formatETA(mActivity, eta * 1000);
|
||||
viewHolder.mProgressText.setText(mActivity.getString(
|
||||
R.string.list_download_progress_eta_new, downloaded, total, etaString,
|
||||
percentage));
|
||||
R.string.list_download_progress_eta_newer, downloaded, total, etaString));
|
||||
} else {
|
||||
viewHolder.mProgressText.setText(mActivity.getString(
|
||||
R.string.list_download_progress_new, downloaded, total, percentage));
|
||||
R.string.list_download_progress_newer, downloaded, total));
|
||||
}
|
||||
setButtonAction(viewHolder.mAction, Action.PAUSE, downloadId, true);
|
||||
viewHolder.mProgressBar.setIndeterminate(update.getStatus() == UpdateStatus.STARTING);
|
||||
@@ -159,6 +178,9 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
|
||||
update.getFinalizing() ?
|
||||
R.string.finalizing_package :
|
||||
R.string.preparing_ota_first_boot);
|
||||
String percentage = NumberFormat.getPercentInstance().format(
|
||||
update.getInstallProgress() / 100.f);
|
||||
viewHolder.mPercentage.setText(percentage);
|
||||
viewHolder.mProgressBar.setIndeterminate(false);
|
||||
viewHolder.mProgressBar.setProgress(update.getInstallProgress());
|
||||
} else if (mUpdaterController.isVerifyingUpdate(downloadId)) {
|
||||
@@ -168,20 +190,20 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
|
||||
} else {
|
||||
canDelete = true;
|
||||
setButtonAction(viewHolder.mAction, Action.RESUME, downloadId, !isBusy());
|
||||
String downloaded = StringGenerator.bytesToMegabytes(mActivity,
|
||||
String downloaded = Formatter.formatShortFileSize(mActivity,
|
||||
update.getFile().length());
|
||||
String total = Formatter.formatShortFileSize(mActivity, update.getFileSize());
|
||||
String percentage = NumberFormat.getPercentInstance().format(
|
||||
update.getProgress() / 100.f);
|
||||
viewHolder.mProgressText.setText(mActivity.getString(R.string.list_download_progress_new,
|
||||
downloaded, total, percentage));
|
||||
viewHolder.mPercentage.setText(percentage);
|
||||
viewHolder.mProgressText.setText(mActivity.getString(
|
||||
R.string.list_download_progress_newer, downloaded, total));
|
||||
viewHolder.mProgressBar.setIndeterminate(false);
|
||||
viewHolder.mProgressBar.setProgress(update.getProgress());
|
||||
}
|
||||
|
||||
viewHolder.itemView.setOnLongClickListener(getLongClickListener(update, canDelete,
|
||||
viewHolder.mBuildDate));
|
||||
viewHolder.mProgressBar.setVisibility(View.VISIBLE);
|
||||
viewHolder.mMenu.setOnClickListener(getClickListener(update, canDelete, viewHolder.mMenu));
|
||||
viewHolder.mProgress.setVisibility(View.VISIBLE);
|
||||
viewHolder.mProgressText.setVisibility(View.VISIBLE);
|
||||
viewHolder.mBuildSize.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
@@ -189,34 +211,30 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
|
||||
private void handleNotActiveStatus(ViewHolder viewHolder, UpdateInfo update) {
|
||||
final String downloadId = update.getDownloadId();
|
||||
if (mUpdaterController.isWaitingForReboot(downloadId)) {
|
||||
viewHolder.itemView.setOnLongClickListener(
|
||||
getLongClickListener(update, false, viewHolder.mBuildDate));
|
||||
viewHolder.mMenu.setOnClickListener(getClickListener(update, false, viewHolder.mMenu));
|
||||
setButtonAction(viewHolder.mAction, Action.REBOOT, downloadId, true);
|
||||
} else if (update.getPersistentStatus() == UpdateStatus.Persistent.VERIFIED) {
|
||||
viewHolder.itemView.setOnLongClickListener(
|
||||
getLongClickListener(update, true, viewHolder.mBuildDate));
|
||||
viewHolder.mMenu.setOnClickListener(getClickListener(update, true, viewHolder.mMenu));
|
||||
setButtonAction(viewHolder.mAction,
|
||||
Utils.canInstall(update) ? Action.INSTALL : Action.DELETE,
|
||||
downloadId, !isBusy());
|
||||
} else if (!Utils.canInstall(update)) {
|
||||
viewHolder.itemView.setOnLongClickListener(
|
||||
getLongClickListener(update, false, viewHolder.mBuildDate));
|
||||
viewHolder.mMenu.setOnClickListener(getClickListener(update, false, viewHolder.mMenu));
|
||||
setButtonAction(viewHolder.mAction, Action.INFO, downloadId, !isBusy());
|
||||
} else {
|
||||
viewHolder.itemView.setOnLongClickListener(
|
||||
getLongClickListener(update, false, viewHolder.mBuildDate));
|
||||
viewHolder.mMenu.setOnClickListener(getClickListener(update, false, viewHolder.mMenu));
|
||||
setButtonAction(viewHolder.mAction, Action.DOWNLOAD, downloadId, !isBusy());
|
||||
}
|
||||
String fileSize = Formatter.formatShortFileSize(mActivity, update.getFileSize());
|
||||
viewHolder.mBuildSize.setText(fileSize);
|
||||
|
||||
viewHolder.mProgressBar.setVisibility(View.INVISIBLE);
|
||||
viewHolder.mProgress.setVisibility(View.INVISIBLE);
|
||||
viewHolder.mProgressText.setVisibility(View.INVISIBLE);
|
||||
viewHolder.mBuildSize.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(final ViewHolder viewHolder, int i) {
|
||||
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {
|
||||
if (mDownloadIds == null) {
|
||||
viewHolder.mAction.setEnabled(false);
|
||||
return;
|
||||
@@ -251,7 +269,7 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
|
||||
String buildDate = StringGenerator.getDateLocalizedUTC(mActivity,
|
||||
DateFormat.LONG, update.getTimestamp());
|
||||
String buildVersion = mActivity.getString(R.string.list_build_version,
|
||||
update.getVersion());
|
||||
Utils.getDisplayVersion(update.getVersion()));
|
||||
viewHolder.mBuildDate.setText(buildDate);
|
||||
viewHolder.mBuildVersion.setText(buildVersion);
|
||||
viewHolder.mBuildVersion.setCompoundDrawables(null, null, null, null);
|
||||
@@ -272,6 +290,14 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
|
||||
mDownloadIds = downloadIds;
|
||||
}
|
||||
|
||||
public void addItem(String downloadId) {
|
||||
if (mDownloadIds == null) {
|
||||
mDownloadIds = new ArrayList<>();
|
||||
}
|
||||
mDownloadIds.add(0, downloadId);
|
||||
notifyItemInserted(0);
|
||||
}
|
||||
|
||||
public void notifyItemChanged(String downloadId) {
|
||||
if (mDownloadIds == null) {
|
||||
return;
|
||||
@@ -291,25 +317,25 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
|
||||
|
||||
private void startDownloadWithWarning(final String downloadId) {
|
||||
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mActivity);
|
||||
boolean warn = preferences.getBoolean(Constants.PREF_MOBILE_DATA_WARNING, true);
|
||||
if (Utils.isOnWifiOrEthernet(mActivity) || !warn) {
|
||||
boolean warn = preferences.getBoolean(Constants.PREF_METERED_NETWORK_WARNING, true);
|
||||
if (!(Utils.isNetworkMetered(mActivity) && warn)) {
|
||||
mUpdaterController.startDownload(downloadId);
|
||||
return;
|
||||
}
|
||||
|
||||
View checkboxView = LayoutInflater.from(mActivity).inflate(R.layout.checkbox_view, null);
|
||||
CheckBox checkbox = (CheckBox) checkboxView.findViewById(R.id.checkbox);
|
||||
checkbox.setText(R.string.checkbox_mobile_data_warning);
|
||||
CheckBox checkbox = checkboxView.findViewById(R.id.checkbox);
|
||||
checkbox.setText(R.string.checkbox_metered_network_warning);
|
||||
|
||||
new AlertDialog.Builder(mActivity)
|
||||
.setTitle(R.string.update_on_mobile_data_title)
|
||||
.setMessage(R.string.update_on_mobile_data_message)
|
||||
.setTitle(R.string.update_over_metered_network_title)
|
||||
.setMessage(R.string.update_over_metered_network_message)
|
||||
.setView(checkboxView)
|
||||
.setPositiveButton(R.string.action_download,
|
||||
(dialog, which) -> {
|
||||
if (checkbox.isChecked()) {
|
||||
preferences.edit()
|
||||
.putBoolean(Constants.PREF_MOBILE_DATA_WARNING, false)
|
||||
.putBoolean(Constants.PREF_METERED_NETWORK_WARNING, false)
|
||||
.apply();
|
||||
mActivity.supportInvalidateOptionsMenu();
|
||||
}
|
||||
@@ -357,7 +383,10 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
|
||||
final boolean canInstall = Utils.canInstall(update);
|
||||
clickListener = enabled ? view -> {
|
||||
if (canInstall) {
|
||||
getInstallDialog(downloadId).show();
|
||||
AlertDialog.Builder installDialog = getInstallDialog(downloadId);
|
||||
if (installDialog != null) {
|
||||
installDialog.show();
|
||||
}
|
||||
} else {
|
||||
mActivity.showSnackbar(R.string.snack_update_not_installable,
|
||||
Snackbar.LENGTH_LONG);
|
||||
@@ -387,8 +416,7 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
|
||||
button.setText(R.string.reboot);
|
||||
button.setEnabled(enabled);
|
||||
clickListener = enabled ? view -> {
|
||||
PowerManager pm =
|
||||
(PowerManager) mActivity.getSystemService(Context.POWER_SERVICE);
|
||||
PowerManager pm = mActivity.getSystemService(PowerManager.class);
|
||||
pm.reboot(null);
|
||||
} : null;
|
||||
}
|
||||
@@ -423,12 +451,9 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
|
||||
.setNegativeButton(android.R.string.cancel, null);
|
||||
}
|
||||
|
||||
private View.OnLongClickListener getLongClickListener(final UpdateInfo update,
|
||||
private View.OnClickListener getClickListener(final UpdateInfo update,
|
||||
final boolean canDelete, View anchor) {
|
||||
return view -> {
|
||||
startActionMode(update, canDelete, anchor);
|
||||
return true;
|
||||
};
|
||||
return view -> startActionMode(update, canDelete, anchor);
|
||||
}
|
||||
|
||||
private AlertDialog.Builder getInstallDialog(final String downloadId) {
|
||||
@@ -442,6 +467,12 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
|
||||
.setMessage(message)
|
||||
.setPositiveButton(android.R.string.ok, null);
|
||||
}
|
||||
if (isScratchMounted()) {
|
||||
return new AlertDialog.Builder(mActivity)
|
||||
.setTitle(R.string.dialog_scratch_mounted_title)
|
||||
.setMessage(R.string.dialog_scratch_mounted_message)
|
||||
.setPositiveButton(android.R.string.ok, null);
|
||||
}
|
||||
UpdateInfo update = mUpdaterController.getUpdate(downloadId);
|
||||
int resId;
|
||||
try {
|
||||
@@ -458,13 +489,16 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
|
||||
String buildDate = StringGenerator.getDateLocalizedUTC(mActivity,
|
||||
DateFormat.MEDIUM, update.getTimestamp());
|
||||
String buildInfoText = mActivity.getString(R.string.list_build_version_date,
|
||||
BuildInfoUtils.getBuildVersion(), buildDate);
|
||||
update.getVersion(), buildDate);
|
||||
return new AlertDialog.Builder(mActivity)
|
||||
.setTitle(R.string.apply_update_dialog_title)
|
||||
.setMessage(mActivity.getString(resId, buildInfoText,
|
||||
mActivity.getString(android.R.string.ok)))
|
||||
.setPositiveButton(android.R.string.ok,
|
||||
(dialog, which) -> Utils.triggerUpdate(mActivity, downloadId))
|
||||
(dialog, which) -> {
|
||||
Utils.triggerUpdate(mActivity, downloadId);
|
||||
maybeShowInfoDialog();
|
||||
})
|
||||
.setNegativeButton(android.R.string.cancel, null);
|
||||
}
|
||||
|
||||
@@ -480,6 +514,21 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
|
||||
.setNegativeButton(android.R.string.cancel, null);
|
||||
}
|
||||
|
||||
private void maybeShowInfoDialog() {
|
||||
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mActivity);
|
||||
boolean alreadySeen = preferences.getBoolean(Constants.HAS_SEEN_INFO_DIALOG, false);
|
||||
if (alreadySeen) {
|
||||
return;
|
||||
}
|
||||
new AlertDialog.Builder(mActivity)
|
||||
.setTitle(R.string.info_dialog_title)
|
||||
.setMessage(R.string.info_dialog_message)
|
||||
.setPositiveButton(R.string.info_dialog_ok, (dialog, which) -> preferences.edit()
|
||||
.putBoolean(Constants.HAS_SEEN_INFO_DIALOG, true)
|
||||
.apply())
|
||||
.show();
|
||||
}
|
||||
|
||||
private void startActionMode(final UpdateInfo update, final boolean canDelete, View anchor) {
|
||||
mSelectedDownload = update.getDownloadId();
|
||||
notifyItemChanged(update.getDownloadId());
|
||||
@@ -490,31 +539,32 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
|
||||
R.attr.actionOverflowMenuStyle, 0);
|
||||
popupMenu.inflate(R.menu.menu_action_mode);
|
||||
|
||||
boolean shouldShowDelete = canDelete;
|
||||
boolean isVerified = update.getPersistentStatus() == UpdateStatus.Persistent.VERIFIED;
|
||||
if (isVerified && !Utils.canInstall(update) && !update.getAvailableOnline()) {
|
||||
shouldShowDelete = false;
|
||||
}
|
||||
MenuBuilder menu = (MenuBuilder) popupMenu.getMenu();
|
||||
menu.findItem(R.id.menu_delete_action).setVisible(canDelete);
|
||||
menu.findItem(R.id.menu_delete_action).setVisible(shouldShowDelete);
|
||||
menu.findItem(R.id.menu_copy_url).setVisible(update.getAvailableOnline());
|
||||
menu.findItem(R.id.menu_export_update).setVisible(
|
||||
update.getPersistentStatus() == UpdateStatus.Persistent.VERIFIED);
|
||||
menu.findItem(R.id.menu_export_update).setVisible(isVerified);
|
||||
|
||||
popupMenu.setOnMenuItemClickListener(item -> {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.menu_delete_action:
|
||||
getDeleteDialog(update.getDownloadId()).show();
|
||||
return true;
|
||||
case R.id.menu_copy_url:
|
||||
Utils.addToClipboard(mActivity,
|
||||
mActivity.getString(R.string.label_download_url),
|
||||
update.getDownloadUrl(),
|
||||
mActivity.getString(R.string.toast_download_url_copied));
|
||||
return true;
|
||||
case R.id.menu_export_update:
|
||||
// TODO: start exporting once the permission has been granted
|
||||
boolean hasPermission = PermissionsUtils.checkAndRequestStoragePermission(
|
||||
mActivity, 0);
|
||||
if (hasPermission) {
|
||||
exportUpdate(update);
|
||||
}
|
||||
return true;
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == R.id.menu_delete_action) {
|
||||
getDeleteDialog(update.getDownloadId()).show();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_copy_url) {
|
||||
Utils.addToClipboard(mActivity,
|
||||
mActivity.getString(R.string.label_download_url),
|
||||
update.getDownloadUrl(),
|
||||
mActivity.getString(R.string.toast_download_url_copied));
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_export_update) {
|
||||
if (mActivity != null) {
|
||||
mActivity.exportUpdate(update);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
@@ -523,31 +573,24 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
|
||||
helper.show();
|
||||
}
|
||||
|
||||
private void exportUpdate(UpdateInfo update) {
|
||||
File dest = new File(Utils.getExportPath(mActivity), update.getName());
|
||||
if (dest.exists()) {
|
||||
dest = Utils.appendSequentialNumber(dest);
|
||||
}
|
||||
Intent intent = new Intent(mActivity, ExportUpdateService.class);
|
||||
intent.setAction(ExportUpdateService.ACTION_START_EXPORTING);
|
||||
intent.putExtra(ExportUpdateService.EXTRA_SOURCE_FILE, update.getFile());
|
||||
intent.putExtra(ExportUpdateService.EXTRA_DEST_FILE, dest);
|
||||
mActivity.startService(intent);
|
||||
}
|
||||
|
||||
private void showInfoDialog() {
|
||||
String messageString = String.format(StringGenerator.getCurrentLocale(mActivity),
|
||||
mActivity.getString(R.string.blocked_update_dialog_message),
|
||||
Utils.getUpgradeBlockedURL(mActivity));
|
||||
SpannableString message = new SpannableString(messageString);
|
||||
Linkify.addLinks(message, Linkify.WEB_URLS);
|
||||
AlertDialog dialog = new AlertDialog.Builder(mActivity)
|
||||
if (infoDialog != null) {
|
||||
infoDialog.dismiss();
|
||||
}
|
||||
infoDialog = new AlertDialog.Builder(mActivity)
|
||||
.setTitle(R.string.blocked_update_dialog_title)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.setMessage(message)
|
||||
.show();
|
||||
TextView textView = (TextView) dialog.findViewById(android.R.id.message);
|
||||
textView.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
TextView textView = infoDialog.findViewById(android.R.id.message);
|
||||
if (textView != null) {
|
||||
textView.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isBatteryLevelOk() {
|
||||
@@ -559,9 +602,24 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
|
||||
int percent = Math.round(100.f * intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 100) /
|
||||
intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100));
|
||||
int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
|
||||
int required = (plugged & BatteryManager.BATTERY_PLUGGED_ANY) != 0 ?
|
||||
int required = (plugged & BATTERY_PLUGGED_ANY) != 0 ?
|
||||
mActivity.getResources().getInteger(R.integer.battery_ok_percentage_charging) :
|
||||
mActivity.getResources().getInteger(R.integer.battery_ok_percentage_discharging);
|
||||
return percent >= required;
|
||||
}
|
||||
|
||||
private static boolean isScratchMounted() {
|
||||
File file = new File("/proc/mounts");
|
||||
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
|
||||
String line;
|
||||
while ((line = br.readLine()) != null) {
|
||||
if (line.split(" ")[1].equals("/mnt/scratch")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
@@ -1,22 +1,12 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The LineageOS Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater.controller;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.ServiceSpecificException;
|
||||
import android.os.UpdateEngine;
|
||||
import android.os.UpdateEngineCallback;
|
||||
import android.text.TextUtils;
|
||||
@@ -52,7 +42,7 @@ class ABUpdateInstaller {
|
||||
private final Context mContext;
|
||||
private String mDownloadId;
|
||||
|
||||
private UpdateEngine mUpdateEngine;
|
||||
private final UpdateEngine mUpdateEngine;
|
||||
private boolean mBound;
|
||||
|
||||
private boolean mFinalizing;
|
||||
@@ -89,13 +79,6 @@ class ABUpdateInstaller {
|
||||
update.setInstallProgress(0);
|
||||
update.setStatus(UpdateStatus.INSTALLED);
|
||||
mUpdaterController.notifyUpdateChange(mDownloadId);
|
||||
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(
|
||||
mContext);
|
||||
boolean deleteUpdate = pref.getBoolean(Constants.PREF_AUTO_DELETE_UPDATES,
|
||||
false);
|
||||
if (deleteUpdate) {
|
||||
mUpdaterController.deleteUpdate(mDownloadId);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -137,11 +120,6 @@ class ABUpdateInstaller {
|
||||
return pref.getString(ABUpdateInstaller.PREF_INSTALLING_SUSPENDED_AB_ID, null) != null;
|
||||
}
|
||||
|
||||
static synchronized boolean isInstallingUpdateSuspended(Context context, String downloadId) {
|
||||
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
return downloadId.equals(pref.getString(ABUpdateInstaller.PREF_INSTALLING_SUSPENDED_AB_ID, null));
|
||||
}
|
||||
|
||||
static synchronized boolean isWaitingForReboot(Context context, String downloadId) {
|
||||
String waitingId = PreferenceManager.getDefaultSharedPreferences(context)
|
||||
.getString(Constants.PREF_NEEDS_REBOOT_ID, null);
|
||||
@@ -162,21 +140,25 @@ class ABUpdateInstaller {
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
public boolean install(String downloadId) {
|
||||
public void install(String downloadId) {
|
||||
if (isInstallingUpdate(mContext)) {
|
||||
Log.e(TAG, "Already installing an update");
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
|
||||
mDownloadId = downloadId;
|
||||
|
||||
File file = mUpdaterController.getActualUpdate(mDownloadId).getFile();
|
||||
install(file, downloadId);
|
||||
}
|
||||
|
||||
public void install(File file, String downloadId) {
|
||||
if (!file.exists()) {
|
||||
Log.e(TAG, "The given update doesn't exist");
|
||||
mUpdaterController.getActualUpdate(downloadId)
|
||||
.setStatus(UpdateStatus.INSTALLATION_FAILED);
|
||||
mUpdaterController.notifyUpdateChange(downloadId);
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
|
||||
long offset;
|
||||
@@ -201,7 +183,7 @@ class ABUpdateInstaller {
|
||||
mUpdaterController.getActualUpdate(mDownloadId)
|
||||
.setStatus(UpdateStatus.INSTALLATION_FAILED);
|
||||
mUpdaterController.notifyUpdateChange(mDownloadId);
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mBound) {
|
||||
@@ -211,7 +193,7 @@ class ABUpdateInstaller {
|
||||
mUpdaterController.getActualUpdate(downloadId)
|
||||
.setStatus(UpdateStatus.INSTALLATION_FAILED);
|
||||
mUpdaterController.notifyUpdateChange(downloadId);
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -220,7 +202,17 @@ class ABUpdateInstaller {
|
||||
mUpdateEngine.setPerformanceMode(enableABPerfMode);
|
||||
|
||||
String zipFileUri = "file://" + file.getAbsolutePath();
|
||||
mUpdateEngine.applyPayload(zipFileUri, offset, 0, headerKeyValuePairs);
|
||||
try {
|
||||
mUpdateEngine.applyPayload(zipFileUri, offset, 0, headerKeyValuePairs);
|
||||
} catch (ServiceSpecificException e) {
|
||||
if (e.errorCode == 66 /* kUpdateAlreadyInstalled */) {
|
||||
installationDone(true);
|
||||
mUpdaterController.getActualUpdate(mDownloadId).setStatus(UpdateStatus.INSTALLED);
|
||||
mUpdaterController.notifyUpdateChange(mDownloadId);
|
||||
return;
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
|
||||
mUpdaterController.getActualUpdate(mDownloadId).setStatus(UpdateStatus.INSTALLING);
|
||||
mUpdaterController.notifyUpdateChange(mDownloadId);
|
||||
@@ -229,17 +221,16 @@ class ABUpdateInstaller {
|
||||
.putString(PREF_INSTALLING_AB_ID, mDownloadId)
|
||||
.apply();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean reconnect() {
|
||||
public void reconnect() {
|
||||
if (!isInstallingUpdate(mContext)) {
|
||||
Log.e(TAG, "reconnect: Not installing any update");
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (mBound) {
|
||||
return true;
|
||||
return;
|
||||
}
|
||||
|
||||
mDownloadId = PreferenceManager.getDefaultSharedPreferences(mContext)
|
||||
@@ -249,30 +240,28 @@ class ABUpdateInstaller {
|
||||
mBound = mUpdateEngine.bind(mUpdateEngineCallback);
|
||||
if (!mBound) {
|
||||
Log.e(TAG, "Could not bind");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void installationDone(boolean needsReboot) {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
|
||||
String id = needsReboot ? prefs.getString(PREF_INSTALLING_AB_ID, null) : null;
|
||||
String id = needsReboot ? mDownloadId : null;
|
||||
PreferenceManager.getDefaultSharedPreferences(mContext).edit()
|
||||
.putString(Constants.PREF_NEEDS_REBOOT_ID, id)
|
||||
.remove(PREF_INSTALLING_AB_ID)
|
||||
.apply();
|
||||
}
|
||||
|
||||
public boolean cancel() {
|
||||
public void cancel() {
|
||||
if (!isInstallingUpdate(mContext)) {
|
||||
Log.e(TAG, "cancel: Not installing any update");
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mBound) {
|
||||
Log.e(TAG, "Not connected to update engine");
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
|
||||
mUpdateEngine.cancel();
|
||||
@@ -282,22 +271,21 @@ class ABUpdateInstaller {
|
||||
.setStatus(UpdateStatus.INSTALLATION_CANCELLED);
|
||||
mUpdaterController.notifyUpdateChange(mDownloadId);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void setPerformanceMode(boolean enable) {
|
||||
mUpdateEngine.setPerformanceMode(enable);
|
||||
}
|
||||
|
||||
public boolean suspend() {
|
||||
public void suspend() {
|
||||
if (!isInstallingUpdate(mContext)) {
|
||||
Log.e(TAG, "cancel: Not installing any update");
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mBound) {
|
||||
Log.e(TAG, "Not connected to update engine");
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
|
||||
mUpdateEngine.suspend();
|
||||
@@ -310,18 +298,17 @@ class ABUpdateInstaller {
|
||||
.putString(PREF_INSTALLING_SUSPENDED_AB_ID, mDownloadId)
|
||||
.apply();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean resume() {
|
||||
public void resume() {
|
||||
if (!isInstallingUpdateSuspended(mContext)) {
|
||||
Log.e(TAG, "cancel: No update is suspended");
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mBound) {
|
||||
Log.e(TAG, "Not connected to update engine");
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
|
||||
mUpdateEngine.resume();
|
||||
@@ -336,6 +323,5 @@ class ABUpdateInstaller {
|
||||
.remove(PREF_INSTALLING_SUSPENDED_AB_ID)
|
||||
.apply();
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@@ -1,17 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The LineageOS Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* SPDX-FileCopyrightText: 2017-2022 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater.controller;
|
||||
|
||||
@@ -31,6 +20,10 @@ import org.lineageos.updater.model.UpdateStatus;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.attribute.PosixFilePermission;
|
||||
import java.nio.file.Files;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
class UpdateInstaller {
|
||||
|
||||
@@ -113,7 +106,7 @@ class UpdateInstaller {
|
||||
Runnable copyUpdateRunnable = new Runnable() {
|
||||
private long mLastUpdate = -1;
|
||||
|
||||
FileUtils.ProgressCallBack mProgressCallBack = new FileUtils.ProgressCallBack() {
|
||||
final FileUtils.ProgressCallBack mProgressCallBack = new FileUtils.ProgressCallBack() {
|
||||
@Override
|
||||
public void update(int progress) {
|
||||
long now = SystemClock.elapsedRealtime();
|
||||
@@ -131,18 +124,29 @@ class UpdateInstaller {
|
||||
try {
|
||||
mCanCancel = true;
|
||||
FileUtils.copyFile(update.getFile(), uncryptFile, mProgressCallBack);
|
||||
try {
|
||||
Set<PosixFilePermission> perms = new HashSet<>();
|
||||
perms.add(PosixFilePermission.OWNER_READ);
|
||||
perms.add(PosixFilePermission.OWNER_WRITE);
|
||||
perms.add(PosixFilePermission.OTHERS_READ);
|
||||
perms.add(PosixFilePermission.GROUP_READ);
|
||||
Files.setPosixFilePermissions(uncryptFile.toPath(), perms);
|
||||
} catch (IOException exception) {}
|
||||
|
||||
mCanCancel = false;
|
||||
if (mPrepareUpdateThread.isInterrupted()) {
|
||||
mUpdaterController.getActualUpdate(update.getDownloadId())
|
||||
.setStatus(UpdateStatus.INSTALLATION_CANCELLED);
|
||||
mUpdaterController.getActualUpdate(update.getDownloadId())
|
||||
.setInstallProgress(0);
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
uncryptFile.delete();
|
||||
} else {
|
||||
installPackage(uncryptFile, update.getDownloadId());
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "Could not copy update", e);
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
uncryptFile.delete();
|
||||
mUpdaterController.getActualUpdate(update.getDownloadId())
|
||||
.setStatus(UpdateStatus.INSTALLATION_FAILED);
|
@@ -1,20 +1,10 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The LineageOS Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* SPDX-FileCopyrightText: 2017-2022 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater.controller;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
@@ -63,13 +53,9 @@ public class UpdaterController {
|
||||
private final File mDownloadRoot;
|
||||
|
||||
private int mActiveDownloads = 0;
|
||||
private Set<String> mVerifyingUpdates = new HashSet<>();
|
||||
private final Set<String> mVerifyingUpdates = new HashSet<>();
|
||||
|
||||
public static synchronized UpdaterController getInstance() {
|
||||
return sUpdaterController;
|
||||
}
|
||||
|
||||
protected static synchronized UpdaterController getInstance(Context context) {
|
||||
public static synchronized UpdaterController getInstance(Context context) {
|
||||
if (sUpdaterController == null) {
|
||||
sUpdaterController = new UpdaterController(context);
|
||||
}
|
||||
@@ -80,8 +66,8 @@ public class UpdaterController {
|
||||
mBroadcastManager = LocalBroadcastManager.getInstance(context);
|
||||
mUpdatesDbHelper = new UpdatesDbHelper(context);
|
||||
mDownloadRoot = Utils.getDownloadPath(context);
|
||||
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
|
||||
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Updater");
|
||||
PowerManager powerManager = context.getSystemService(PowerManager.class);
|
||||
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Updater:wakelock");
|
||||
mWakeLock.setReferenceCounted(false);
|
||||
mContext = context.getApplicationContext();
|
||||
|
||||
@@ -92,7 +78,7 @@ public class UpdaterController {
|
||||
}
|
||||
}
|
||||
|
||||
private class DownloadEntry {
|
||||
private static class DownloadEntry {
|
||||
final Update mUpdate;
|
||||
DownloadClient mDownloadClient;
|
||||
private DownloadEntry(Update update) {
|
||||
@@ -100,7 +86,7 @@ public class UpdaterController {
|
||||
}
|
||||
}
|
||||
|
||||
private Map<String, DownloadEntry> mDownloads = new HashMap<>();
|
||||
private final Map<String, DownloadEntry> mDownloads = new HashMap<>();
|
||||
|
||||
void notifyUpdateChange(String downloadId) {
|
||||
Intent intent = new Intent();
|
||||
@@ -156,8 +142,12 @@ public class UpdaterController {
|
||||
return new DownloadClient.DownloadCallback() {
|
||||
|
||||
@Override
|
||||
public void onResponse(int statusCode, String url, DownloadClient.Headers headers) {
|
||||
final Update update = mDownloads.get(downloadId).mUpdate;
|
||||
public void onResponse(DownloadClient.Headers headers) {
|
||||
final DownloadEntry entry = mDownloads.get(downloadId);
|
||||
if (entry == null) {
|
||||
return;
|
||||
}
|
||||
final Update update = entry.mUpdate;
|
||||
String contentLength = headers.get("Content-Length");
|
||||
if (contentLength != null) {
|
||||
try {
|
||||
@@ -177,27 +167,33 @@ public class UpdaterController {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(File destination) {
|
||||
public void onSuccess() {
|
||||
Log.d(TAG, "Download complete");
|
||||
Update update = mDownloads.get(downloadId).mUpdate;
|
||||
update.setStatus(UpdateStatus.VERIFYING);
|
||||
removeDownloadClient(mDownloads.get(downloadId));
|
||||
verifyUpdateAsync(downloadId);
|
||||
notifyUpdateChange(downloadId);
|
||||
tryReleaseWakelock();
|
||||
DownloadEntry entry = mDownloads.get(downloadId);
|
||||
if (entry != null) {
|
||||
Update update = entry.mUpdate;
|
||||
update.setStatus(UpdateStatus.VERIFYING);
|
||||
removeDownloadClient(entry);
|
||||
verifyUpdateAsync(downloadId);
|
||||
notifyUpdateChange(downloadId);
|
||||
tryReleaseWakelock();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(boolean cancelled) {
|
||||
Update update = mDownloads.get(downloadId).mUpdate;
|
||||
if (cancelled) {
|
||||
Log.d(TAG, "Download cancelled");
|
||||
// Already notified
|
||||
} else {
|
||||
Log.e(TAG, "Download failed");
|
||||
removeDownloadClient(mDownloads.get(downloadId));
|
||||
update.setStatus(UpdateStatus.PAUSED_ERROR);
|
||||
notifyUpdateChange(downloadId);
|
||||
DownloadEntry entry = mDownloads.get(downloadId);
|
||||
if (entry != null) {
|
||||
Update update = entry.mUpdate;
|
||||
Log.e(TAG, "Download failed");
|
||||
removeDownloadClient(entry);
|
||||
update.setStatus(UpdateStatus.PAUSED_ERROR);
|
||||
notifyUpdateChange(downloadId);
|
||||
}
|
||||
}
|
||||
tryReleaseWakelock();
|
||||
}
|
||||
@@ -210,9 +206,12 @@ public class UpdaterController {
|
||||
private int mProgress = 0;
|
||||
|
||||
@Override
|
||||
public void update(long bytesRead, long contentLength, long speed, long eta,
|
||||
boolean done) {
|
||||
Update update = mDownloads.get(downloadId).mUpdate;
|
||||
public void update(long bytesRead, long contentLength, long speed, long eta) {
|
||||
DownloadEntry entry = mDownloads.get(downloadId);
|
||||
if (entry == null) {
|
||||
return;
|
||||
}
|
||||
Update update = entry.mUpdate;
|
||||
if (contentLength <= 0) {
|
||||
if (update.getFileSize() <= 0) {
|
||||
return;
|
||||
@@ -224,7 +223,7 @@ public class UpdaterController {
|
||||
return;
|
||||
}
|
||||
final long now = SystemClock.elapsedRealtime();
|
||||
int progress = Math.round(bytesRead * 100 / contentLength);
|
||||
int progress = Math.round(bytesRead * 100f / contentLength);
|
||||
if (progress != mProgress || mLastUpdate - now > MAX_REPORT_INTERVAL_MS) {
|
||||
mProgress = progress;
|
||||
mLastUpdate = now;
|
||||
@@ -237,24 +236,29 @@ public class UpdaterController {
|
||||
};
|
||||
}
|
||||
|
||||
@SuppressLint("SetWorldReadable")
|
||||
private void verifyUpdateAsync(final String downloadId) {
|
||||
mVerifyingUpdates.add(downloadId);
|
||||
new Thread(() -> {
|
||||
Update update = mDownloads.get(downloadId).mUpdate;
|
||||
File file = update.getFile();
|
||||
if (file.exists() && verifyPackage(file)) {
|
||||
file.setReadable(true, false);
|
||||
update.setPersistentStatus(UpdateStatus.Persistent.VERIFIED);
|
||||
mUpdatesDbHelper.changeUpdateStatus(update);
|
||||
update.setStatus(UpdateStatus.VERIFIED);
|
||||
} else {
|
||||
update.setPersistentStatus(UpdateStatus.Persistent.UNKNOWN);
|
||||
mUpdatesDbHelper.removeUpdate(downloadId);
|
||||
update.setProgress(0);
|
||||
update.setStatus(UpdateStatus.VERIFICATION_FAILED);
|
||||
DownloadEntry entry = mDownloads.get(downloadId);
|
||||
if (entry != null) {
|
||||
Update update = entry.mUpdate;
|
||||
File file = update.getFile();
|
||||
if (file.exists() && verifyPackage(file)) {
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
file.setReadable(true, false);
|
||||
update.setPersistentStatus(UpdateStatus.Persistent.VERIFIED);
|
||||
mUpdatesDbHelper.changeUpdateStatus(update);
|
||||
update.setStatus(UpdateStatus.VERIFIED);
|
||||
} else {
|
||||
update.setPersistentStatus(UpdateStatus.Persistent.UNKNOWN);
|
||||
mUpdatesDbHelper.removeUpdate(downloadId);
|
||||
update.setProgress(0);
|
||||
update.setStatus(UpdateStatus.VERIFICATION_FAILED);
|
||||
}
|
||||
mVerifyingUpdates.remove(downloadId);
|
||||
notifyUpdateChange(downloadId);
|
||||
}
|
||||
mVerifyingUpdates.remove(downloadId);
|
||||
notifyUpdateChange(downloadId);
|
||||
}).start();
|
||||
}
|
||||
|
||||
@@ -266,6 +270,7 @@ public class UpdaterController {
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Verification failed", e);
|
||||
if (file.exists()) {
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
file.delete();
|
||||
} else {
|
||||
// The download was probably stopped. Exit silently
|
||||
@@ -285,7 +290,7 @@ public class UpdaterController {
|
||||
} else if (update.getFileSize() > 0) {
|
||||
update.setStatus(UpdateStatus.PAUSED);
|
||||
int progress = Math.round(
|
||||
update.getFile().length() * 100 / update.getFileSize());
|
||||
update.getFile().length() * 100f / update.getFileSize());
|
||||
update.setProgress(progress);
|
||||
}
|
||||
break;
|
||||
@@ -293,15 +298,6 @@ public class UpdaterController {
|
||||
return true;
|
||||
}
|
||||
|
||||
public void setUpdatesNotAvailableOnline(List<String> downloadIds) {
|
||||
for (String downloadId : downloadIds) {
|
||||
DownloadEntry update = mDownloads.get(downloadId);
|
||||
if (update != null) {
|
||||
update.mUpdate.setAvailableOnline(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setUpdatesAvailableOnline(List<String> downloadIds, boolean purgeList) {
|
||||
List<String> toRemove = new ArrayList<>();
|
||||
for (DownloadEntry entry : mDownloads.values()) {
|
||||
@@ -323,13 +319,16 @@ public class UpdaterController {
|
||||
return addUpdate(update, true);
|
||||
}
|
||||
|
||||
private boolean addUpdate(final UpdateInfo updateInfo, boolean availableOnline) {
|
||||
public boolean addUpdate(final UpdateInfo updateInfo, boolean availableOnline) {
|
||||
Log.d(TAG, "Adding download: " + updateInfo.getDownloadId());
|
||||
if (mDownloads.containsKey(updateInfo.getDownloadId())) {
|
||||
Log.d(TAG, "Download (" + updateInfo.getDownloadId() + ") already added");
|
||||
Update updateAdded = mDownloads.get(updateInfo.getDownloadId()).mUpdate;
|
||||
updateAdded.setAvailableOnline(availableOnline && updateAdded.getAvailableOnline());
|
||||
updateAdded.setDownloadUrl(updateInfo.getDownloadUrl());
|
||||
DownloadEntry entry = mDownloads.get(updateInfo.getDownloadId());
|
||||
if (entry != null) {
|
||||
Update updateAdded = entry.mUpdate;
|
||||
updateAdded.setAvailableOnline(availableOnline && updateAdded.getAvailableOnline());
|
||||
updateAdded.setDownloadUrl(updateInfo.getDownloadUrl());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
Update update = new Update(updateInfo);
|
||||
@@ -344,12 +343,18 @@ public class UpdaterController {
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean startDownload(String downloadId) {
|
||||
@SuppressLint("WakelockTimeout")
|
||||
public void startDownload(String downloadId) {
|
||||
Log.d(TAG, "Starting " + downloadId);
|
||||
if (!mDownloads.containsKey(downloadId) || isDownloading(downloadId)) {
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
Update update = mDownloads.get(downloadId).mUpdate;
|
||||
DownloadEntry entry = mDownloads.get(downloadId);
|
||||
if (entry == null) {
|
||||
Log.e(TAG, "Could not get download entry");
|
||||
return;
|
||||
}
|
||||
Update update = entry.mUpdate;
|
||||
File destination = new File(mDownloadRoot, update.getName());
|
||||
if (destination.exists()) {
|
||||
destination = Utils.appendSequentialNumber(destination);
|
||||
@@ -369,28 +374,33 @@ public class UpdaterController {
|
||||
Log.e(TAG, "Could not build download client");
|
||||
update.setStatus(UpdateStatus.PAUSED_ERROR);
|
||||
notifyUpdateChange(downloadId);
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
addDownloadClient(mDownloads.get(downloadId), downloadClient);
|
||||
addDownloadClient(entry, downloadClient);
|
||||
update.setStatus(UpdateStatus.STARTING);
|
||||
notifyUpdateChange(downloadId);
|
||||
downloadClient.start();
|
||||
mWakeLock.acquire();
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean resumeDownload(String downloadId) {
|
||||
@SuppressLint("WakelockTimeout")
|
||||
public void resumeDownload(String downloadId) {
|
||||
Log.d(TAG, "Resuming " + downloadId);
|
||||
if (!mDownloads.containsKey(downloadId) || isDownloading(downloadId)) {
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
Update update = mDownloads.get(downloadId).mUpdate;
|
||||
DownloadEntry entry = mDownloads.get(downloadId);
|
||||
if (entry == null) {
|
||||
Log.e(TAG, "Could not get download entry");
|
||||
return;
|
||||
}
|
||||
Update update = entry.mUpdate;
|
||||
File file = update.getFile();
|
||||
if (file == null || !file.exists()) {
|
||||
Log.e(TAG, "The destination file of " + downloadId + " doesn't exist, can't resume");
|
||||
update.setStatus(UpdateStatus.PAUSED_ERROR);
|
||||
notifyUpdateChange(downloadId);
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
if (file.exists() && update.getFileSize() > 0 && file.length() >= update.getFileSize()) {
|
||||
Log.d(TAG, "File already downloaded, starting verification");
|
||||
@@ -411,31 +421,31 @@ public class UpdaterController {
|
||||
Log.e(TAG, "Could not build download client");
|
||||
update.setStatus(UpdateStatus.PAUSED_ERROR);
|
||||
notifyUpdateChange(downloadId);
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
addDownloadClient(mDownloads.get(downloadId), downloadClient);
|
||||
addDownloadClient(entry, downloadClient);
|
||||
update.setStatus(UpdateStatus.STARTING);
|
||||
notifyUpdateChange(downloadId);
|
||||
downloadClient.resume();
|
||||
mWakeLock.acquire();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean pauseDownload(String downloadId) {
|
||||
public void pauseDownload(String downloadId) {
|
||||
Log.d(TAG, "Pausing " + downloadId);
|
||||
if (!isDownloading(downloadId)) {
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
|
||||
DownloadEntry entry = mDownloads.get(downloadId);
|
||||
entry.mDownloadClient.cancel();
|
||||
removeDownloadClient(entry);
|
||||
entry.mUpdate.setStatus(UpdateStatus.PAUSED);
|
||||
entry.mUpdate.setEta(0);
|
||||
entry.mUpdate.setSpeed(0);
|
||||
notifyUpdateChange(downloadId);
|
||||
return true;
|
||||
if (entry != null) {
|
||||
entry.mDownloadClient.cancel();
|
||||
removeDownloadClient(entry);
|
||||
entry.mUpdate.setStatus(UpdateStatus.PAUSED);
|
||||
entry.mUpdate.setEta(0);
|
||||
entry.mUpdate.setSpeed(0);
|
||||
notifyUpdateChange(downloadId);
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteUpdateAsync(final Update update) {
|
||||
@@ -448,30 +458,28 @@ public class UpdaterController {
|
||||
}).start();
|
||||
}
|
||||
|
||||
public boolean deleteUpdate(String downloadId) {
|
||||
Log.d(TAG, "Cancelling " + downloadId);
|
||||
public void deleteUpdate(String downloadId) {
|
||||
Log.d(TAG, "Deleting update: " + downloadId);
|
||||
if (!mDownloads.containsKey(downloadId) || isDownloading(downloadId)) {
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
Update update = mDownloads.get(downloadId).mUpdate;
|
||||
update.setStatus(UpdateStatus.DELETED);
|
||||
update.setProgress(0);
|
||||
update.setPersistentStatus(UpdateStatus.Persistent.UNKNOWN);
|
||||
deleteUpdateAsync(update);
|
||||
DownloadEntry entry = mDownloads.get(downloadId);
|
||||
if (entry != null) {
|
||||
Update update = entry.mUpdate;
|
||||
update.setStatus(UpdateStatus.DELETED);
|
||||
update.setProgress(0);
|
||||
update.setPersistentStatus(UpdateStatus.Persistent.UNKNOWN);
|
||||
deleteUpdateAsync(update);
|
||||
|
||||
if (!update.getAvailableOnline()) {
|
||||
Log.d(TAG, "Download no longer available online, removing");
|
||||
mDownloads.remove(downloadId);
|
||||
notifyUpdateDelete(downloadId);
|
||||
} else {
|
||||
notifyUpdateChange(downloadId);
|
||||
final boolean isLocalUpdate = Update.LOCAL_ID.equals(downloadId);
|
||||
if (!isLocalUpdate && !update.getAvailableOnline()) {
|
||||
Log.d(TAG, "Download no longer available online, removing");
|
||||
mDownloads.remove(downloadId);
|
||||
notifyUpdateDelete(downloadId);
|
||||
} else {
|
||||
notifyUpdateChange(downloadId);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public Set<String> getIds() {
|
||||
return mDownloads.keySet();
|
||||
}
|
||||
|
||||
public List<UpdateInfo> getUpdates() {
|
||||
@@ -493,6 +501,7 @@ public class UpdaterController {
|
||||
}
|
||||
|
||||
public boolean isDownloading(String downloadId) {
|
||||
//noinspection ConstantConditions
|
||||
return mDownloads.containsKey(downloadId) &&
|
||||
mDownloads.get(downloadId).mDownloadClient != null;
|
||||
}
|
@@ -1,17 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The LineageOS Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* SPDX-FileCopyrightText: 2017-2022 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater.controller;
|
||||
|
||||
@@ -23,6 +12,7 @@ import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Binder;
|
||||
import android.os.Bundle;
|
||||
import android.os.IBinder;
|
||||
@@ -31,16 +21,20 @@ import android.util.Log;
|
||||
|
||||
import androidx.core.app.NotificationCompat;
|
||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import org.lineageos.updater.R;
|
||||
import org.lineageos.updater.UpdaterReceiver;
|
||||
import org.lineageos.updater.UpdatesActivity;
|
||||
import org.lineageos.updater.misc.BuildInfoUtils;
|
||||
import org.lineageos.updater.misc.Constants;
|
||||
import org.lineageos.updater.misc.StringGenerator;
|
||||
import org.lineageos.updater.misc.Utils;
|
||||
import org.lineageos.updater.model.Update;
|
||||
import org.lineageos.updater.model.UpdateInfo;
|
||||
import org.lineageos.updater.model.UpdateStatus;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.text.DateFormat;
|
||||
import java.text.NumberFormat;
|
||||
@@ -82,7 +76,7 @@ public class UpdaterService extends Service {
|
||||
|
||||
mUpdaterController = UpdaterController.getInstance(this);
|
||||
|
||||
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
|
||||
mNotificationManager = getSystemService(NotificationManager.class);
|
||||
NotificationChannel notificationChannel = new NotificationChannel(
|
||||
ONGOING_NOTIFICATION_CHANNEL,
|
||||
getString(R.string.ongoing_channel_title),
|
||||
@@ -97,7 +91,7 @@ public class UpdaterService extends Service {
|
||||
|
||||
Intent notificationIntent = new Intent(this, UpdatesActivity.class);
|
||||
PendingIntent intent = PendingIntent.getActivity(this, 0, notificationIntent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
|
||||
mNotificationBuilder.setContentIntent(intent);
|
||||
|
||||
mBroadcastReceiver = new BroadcastReceiver() {
|
||||
@@ -119,11 +113,15 @@ public class UpdaterService extends Service {
|
||||
setNotificationTitle(update);
|
||||
handleInstallProgress(update);
|
||||
} else if (UpdaterController.ACTION_UPDATE_REMOVED.equals(intent.getAction())) {
|
||||
final boolean isLocalUpdate = Update.LOCAL_ID.equals(downloadId);
|
||||
Bundle extras = mNotificationBuilder.getExtras();
|
||||
if (extras != null && downloadId.equals(
|
||||
if (extras != null && !isLocalUpdate && downloadId.equals(
|
||||
extras.getString(UpdaterController.EXTRA_DOWNLOAD_ID))) {
|
||||
mNotificationBuilder.setExtras(null);
|
||||
mNotificationManager.cancel(NOTIFICATION_ID);
|
||||
UpdateInfo update = mUpdaterController.getUpdate(downloadId);
|
||||
if (update.getStatus() != UpdateStatus.INSTALLED) {
|
||||
mNotificationManager.cancel(NOTIFICATION_ID);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -400,6 +398,15 @@ public class UpdaterService extends Service {
|
||||
mNotificationBuilder.setOngoing(false);
|
||||
mNotificationBuilder.setAutoCancel(true);
|
||||
mNotificationManager.notify(NOTIFICATION_ID, mNotificationBuilder.build());
|
||||
|
||||
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
boolean deleteUpdate = pref.getBoolean(Constants.PREF_AUTO_DELETE_UPDATES, false);
|
||||
boolean isLocal = Update.LOCAL_ID.equals(update.getDownloadId());
|
||||
// Always delete local updates
|
||||
if (deleteUpdate || isLocal) {
|
||||
mUpdaterController.deleteUpdate(update.getDownloadId());
|
||||
}
|
||||
|
||||
tryStopSelf();
|
||||
break;
|
||||
}
|
||||
@@ -479,7 +486,7 @@ public class UpdaterService extends Service {
|
||||
String buildDate = StringGenerator.getDateLocalizedUTC(this,
|
||||
DateFormat.MEDIUM, update.getTimestamp());
|
||||
String buildInfo = getString(R.string.list_build_version_date,
|
||||
BuildInfoUtils.getBuildVersion(), buildDate);
|
||||
update.getVersion(), buildDate);
|
||||
mNotificationStyle.setBigContentTitle(buildInfo);
|
||||
mNotificationBuilder.setContentTitle(buildInfo);
|
||||
}
|
||||
@@ -489,7 +496,8 @@ public class UpdaterService extends Service {
|
||||
intent.setAction(ACTION_DOWNLOAD_CONTROL);
|
||||
intent.putExtra(EXTRA_DOWNLOAD_ID, downloadId);
|
||||
intent.putExtra(EXTRA_DOWNLOAD_CONTROL, DOWNLOAD_RESUME);
|
||||
return PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
return PendingIntent.getService(this, 0, intent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
|
||||
}
|
||||
|
||||
private PendingIntent getPausePendingIntent(String downloadId) {
|
||||
@@ -497,26 +505,28 @@ public class UpdaterService extends Service {
|
||||
intent.setAction(ACTION_DOWNLOAD_CONTROL);
|
||||
intent.putExtra(EXTRA_DOWNLOAD_ID, downloadId);
|
||||
intent.putExtra(EXTRA_DOWNLOAD_CONTROL, DOWNLOAD_PAUSE);
|
||||
return PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
return PendingIntent.getService(this, 0, intent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
|
||||
}
|
||||
|
||||
private PendingIntent getRebootPendingIntent() {
|
||||
final Intent intent = new Intent(this, UpdaterReceiver.class);
|
||||
intent.setAction(UpdaterReceiver.ACTION_INSTALL_REBOOT);
|
||||
return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
return PendingIntent.getBroadcast(this, 0, intent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
|
||||
}
|
||||
|
||||
private PendingIntent getSuspendInstallationPendingIntent() {
|
||||
final Intent intent = new Intent(this, UpdaterService.class);
|
||||
intent.setAction(ACTION_INSTALL_SUSPEND);
|
||||
return PendingIntent.getService(this, 0, intent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
|
||||
}
|
||||
|
||||
private PendingIntent getResumeInstallationPendingIntent() {
|
||||
final Intent intent = new Intent(this, UpdaterService.class);
|
||||
intent.setAction(ACTION_INSTALL_RESUME);
|
||||
return PendingIntent.getService(this, 0, intent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
|
||||
}
|
||||
}
|
@@ -1,43 +1,28 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The LineageOS Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* SPDX-FileCopyrightText: 2017-2022 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater.download;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface DownloadClient {
|
||||
|
||||
interface DownloadCallback {
|
||||
void onResponse(int statusCode, String url, Headers headers);
|
||||
void onResponse(Headers headers);
|
||||
|
||||
void onSuccess(File destination);
|
||||
void onSuccess();
|
||||
|
||||
void onFailure(boolean cancelled);
|
||||
}
|
||||
|
||||
interface ProgressListener {
|
||||
void update(long bytesRead, long contentLength, long speed, long eta, boolean done);
|
||||
void update(long bytesRead, long contentLength, long speed, long eta);
|
||||
}
|
||||
|
||||
interface Headers {
|
||||
String get(String name);
|
||||
|
||||
Map<String, List<String>> getAll();
|
||||
}
|
||||
|
||||
/**
|
@@ -1,17 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The LineageOS Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* SPDX-FileCopyrightText: 2017-2022 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater.download;
|
||||
|
||||
@@ -51,10 +40,6 @@ public class HttpURLConnectionClient implements DownloadClient {
|
||||
return mClient.getHeaderField(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, List<String>> getAll() {
|
||||
return mClient.getHeaderFields();
|
||||
}
|
||||
}
|
||||
|
||||
HttpURLConnectionClient(String url, File destination,
|
||||
@@ -144,8 +129,20 @@ public class HttpURLConnectionClient implements DownloadClient {
|
||||
mResume = resume;
|
||||
}
|
||||
|
||||
private void calculateSpeed() {
|
||||
private void calculateSpeed(boolean justResumed) {
|
||||
final long millis = SystemClock.elapsedRealtime();
|
||||
if (justResumed) {
|
||||
// If we don't start over with these after resumption, we get huge numbers for
|
||||
// ETA since the delta will grow, resulting in a very low speed
|
||||
mLastMillis = millis;
|
||||
mSpeed = -1; // we don't want the moving avg with values from who knows when
|
||||
|
||||
// need to do this as well, otherwise the second time we call calculateSpeed(),
|
||||
// the difference (mTotalBytesRead - mCurSampleBytes) will be larger than expected,
|
||||
// resulting in a higher speed calculation
|
||||
mCurSampleBytes = mTotalBytesRead;
|
||||
return;
|
||||
}
|
||||
final long delta = millis - mLastMillis;
|
||||
if (delta > 500) {
|
||||
final long curSpeed = ((mTotalBytesRead - mCurSampleBytes) * 1000) / delta;
|
||||
@@ -179,8 +176,8 @@ public class HttpURLConnectionClient implements DownloadClient {
|
||||
String protocol = mClient.getURL().getProtocol();
|
||||
|
||||
class DuplicateLink {
|
||||
private String mUrl;
|
||||
private int mPriority;
|
||||
private final String mUrl;
|
||||
private final int mPriority;
|
||||
private DuplicateLink(String url, int priority) {
|
||||
mUrl = url;
|
||||
mPriority = priority;
|
||||
@@ -233,9 +230,11 @@ public class HttpURLConnectionClient implements DownloadClient {
|
||||
} catch (IOException e) {
|
||||
if (duplicates != null && !duplicates.isEmpty()) {
|
||||
DuplicateLink link = duplicates.poll();
|
||||
duplicates.remove(link);
|
||||
newUrl = link.mUrl;
|
||||
Log.e(TAG, "Using duplicate link " + link.mUrl, e);
|
||||
if (link != null) {
|
||||
duplicates.remove(link);
|
||||
newUrl = link.mUrl;
|
||||
Log.e(TAG, "Using duplicate link " + link.mUrl, e);
|
||||
}
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
@@ -245,6 +244,7 @@ public class HttpURLConnectionClient implements DownloadClient {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
boolean justResumed = false;
|
||||
try {
|
||||
mClient.setInstanceFollowRedirects(!mUseDuplicateLinks);
|
||||
mClient.connect();
|
||||
@@ -255,9 +255,10 @@ public class HttpURLConnectionClient implements DownloadClient {
|
||||
responseCode = mClient.getResponseCode();
|
||||
}
|
||||
|
||||
mCallback.onResponse(responseCode, mClient.getURL().toString(), new Headers());
|
||||
mCallback.onResponse(new Headers());
|
||||
|
||||
if (mResume && isPartialContentCode(responseCode)) {
|
||||
justResumed = true;
|
||||
mTotalBytesRead = mDestination.length();
|
||||
Log.d(TAG, "The server fulfilled the partial content request");
|
||||
} else if (mResume || !isSuccessCode(responseCode)) {
|
||||
@@ -276,15 +277,15 @@ public class HttpURLConnectionClient implements DownloadClient {
|
||||
while (!isInterrupted() && (count = inputStream.read(b)) > 0) {
|
||||
outputStream.write(b, 0, count);
|
||||
mTotalBytesRead += count;
|
||||
calculateSpeed();
|
||||
calculateSpeed(justResumed);
|
||||
calculateEta();
|
||||
justResumed = false; // otherwise we will never get speed and ETA again
|
||||
if (mProgressListener != null) {
|
||||
mProgressListener.update(mTotalBytesRead, mTotalBytes, mSpeed, mEta,
|
||||
false);
|
||||
mProgressListener.update(mTotalBytesRead, mTotalBytes, mSpeed, mEta);
|
||||
}
|
||||
}
|
||||
if (mProgressListener != null) {
|
||||
mProgressListener.update(mTotalBytesRead, mTotalBytes, mSpeed, mEta, true);
|
||||
mProgressListener.update(mTotalBytesRead, mTotalBytes, mSpeed, mEta);
|
||||
}
|
||||
|
||||
outputStream.flush();
|
||||
@@ -292,7 +293,7 @@ public class HttpURLConnectionClient implements DownloadClient {
|
||||
if (isInterrupted()) {
|
||||
mCallback.onFailure(true);
|
||||
} else {
|
||||
mCallback.onSuccess(mDestination);
|
||||
mCallback.onSuccess();
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2017 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater.misc;
|
||||
|
||||
import android.os.SystemProperties;
|
||||
|
||||
public final class BuildInfoUtils {
|
||||
|
||||
private BuildInfoUtils() {
|
||||
}
|
||||
|
||||
public static long getBuildDateTimestamp() {
|
||||
return SystemProperties.getLong(Constants.PROP_BUILD_DATE, 0);
|
||||
}
|
||||
|
||||
public static String getBuildVersion() {
|
||||
return SystemProperties.get(Constants.PROP_BUILD_VERSION);
|
||||
}
|
||||
}
|
@@ -1,17 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The LineageOS Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* SPDX-FileCopyrightText: 2017-2023 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater.misc;
|
||||
|
||||
@@ -32,6 +21,7 @@ public final class Constants {
|
||||
public static final String PREF_AUTO_UPDATES_CHECK_INTERVAL = "auto_updates_check_interval";
|
||||
public static final String PREF_AUTO_DELETE_UPDATES = "auto_delete_updates";
|
||||
public static final String PREF_AB_PERF_MODE = "ab_perf_mode";
|
||||
public static final String PREF_METERED_NETWORK_WARNING = "pref_metered_network_warning";
|
||||
public static final String PREF_MOBILE_DATA_WARNING = "pref_mobile_data_warning";
|
||||
public static final String PREF_NEEDS_REBOOT_ID = "needs_reboot_id";
|
||||
|
||||
@@ -52,4 +42,9 @@ public final class Constants {
|
||||
public static final String PREF_INSTALL_PACKAGE_PATH = "install_package_path";
|
||||
public static final String PREF_INSTALL_AGAIN = "install_again";
|
||||
public static final String PREF_INSTALL_NOTIFIED = "install_notified";
|
||||
|
||||
public static final String UPDATE_RECOVERY_EXEC = "/vendor/bin/install-recovery.sh";
|
||||
public static final String UPDATE_RECOVERY_PROPERTY = "persist.vendor.recovery_update";
|
||||
|
||||
public static final String HAS_SEEN_INFO_DIALOG = "has_seen_info_dialog";
|
||||
}
|
@@ -1,22 +1,18 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The LineageOS Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* SPDX-FileCopyrightText: 2017-2022 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater.misc;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
import android.os.ParcelFileDescriptor;
|
||||
import android.provider.OpenableColumns;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
@@ -34,9 +30,9 @@ public class FileUtils {
|
||||
}
|
||||
|
||||
private static class CallbackByteChannel implements ReadableByteChannel {
|
||||
private ProgressCallBack mCallback;
|
||||
private long mSize;
|
||||
private ReadableByteChannel mReadableByteChannel;
|
||||
private final ProgressCallBack mCallback;
|
||||
private final long mSize;
|
||||
private final ReadableByteChannel mReadableByteChannel;
|
||||
private long mSizeRead;
|
||||
private int mProgress;
|
||||
|
||||
@@ -86,13 +82,39 @@ public class FileUtils {
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "Could not copy file", e);
|
||||
if (destFile.exists()) {
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
destFile.delete();
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
public static void copyFile(File sourceFile, File destFile) throws IOException {
|
||||
copyFile(sourceFile, destFile, null);
|
||||
public static void copyFile(ContentResolver cr, File sourceFile, Uri destUri,
|
||||
ProgressCallBack progressCallBack) throws IOException {
|
||||
try (FileChannel sourceChannel = new FileInputStream(sourceFile).getChannel();
|
||||
ParcelFileDescriptor pfd = cr.openFileDescriptor(destUri, "w");
|
||||
FileChannel destChannel = new FileOutputStream(pfd.getFileDescriptor()).getChannel()) {
|
||||
if (progressCallBack != null) {
|
||||
ReadableByteChannel readableByteChannel = new CallbackByteChannel(sourceChannel,
|
||||
sourceFile.length(), progressCallBack);
|
||||
destChannel.transferFrom(readableByteChannel, 0, sourceChannel.size());
|
||||
} else {
|
||||
destChannel.transferFrom(sourceChannel, 0, sourceChannel.size());
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "Could not copy file", e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
public static String queryName(@NonNull ContentResolver resolver, Uri uri) {
|
||||
try (Cursor returnCursor = resolver.query(uri, null, null, null, null)) {
|
||||
returnCursor.moveToFirst();
|
||||
int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
|
||||
return returnCursor.getString(nameIndex);
|
||||
} catch (Exception e) {
|
||||
// ignore
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,17 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The LineageOS Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* SPDX-FileCopyrightText: 2017-2022 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater.misc;
|
||||
|
||||
@@ -36,13 +25,6 @@ public final class StringGenerator {
|
||||
return f.format(date);
|
||||
}
|
||||
|
||||
public static String getTimeLocalizedUTC(Context context, long unixTimestamp) {
|
||||
DateFormat f = DateFormat.getTimeInstance(DateFormat.SHORT, getCurrentLocale(context));
|
||||
f.setTimeZone(TimeZone.getTimeZone("UTC"));
|
||||
Date date = new Date(unixTimestamp * 1000);
|
||||
return f.format(date);
|
||||
}
|
||||
|
||||
public static String getDateLocalized(Context context, int dateFormat, long unixTimestamp) {
|
||||
DateFormat f = DateFormat.getDateInstance(dateFormat, getCurrentLocale(context));
|
||||
Date date = new Date(unixTimestamp * 1000);
|
||||
@@ -56,17 +38,6 @@ public final class StringGenerator {
|
||||
return f.format(date);
|
||||
}
|
||||
|
||||
public static String getDateTimeLocalized(Context context, long unixTimestamp) {
|
||||
DateFormat f = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT,
|
||||
getCurrentLocale(context));
|
||||
Date date = new Date(unixTimestamp * 1000);
|
||||
return f.format(date);
|
||||
}
|
||||
|
||||
public static String bytesToMegabytes(Context context, long bytes) {
|
||||
return String.format(getCurrentLocale(context), "%.0f", bytes / 1024.f / 1024.f);
|
||||
}
|
||||
|
||||
public static String formatETA(Context context, long millis) {
|
||||
final long SECOND_IN_MILLIS = 1000;
|
||||
final long MINUTE_IN_MILLIS = SECOND_IN_MILLIS * 60;
|
@@ -1,17 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The LineageOS Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* SPDX-FileCopyrightText: 2017-2023 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater.misc;
|
||||
|
||||
@@ -23,14 +12,15 @@ import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.NetworkInfo;
|
||||
import android.os.Environment;
|
||||
import android.net.Network;
|
||||
import android.net.NetworkCapabilities;
|
||||
import android.os.SystemProperties;
|
||||
import android.os.storage.StorageManager;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
@@ -66,7 +56,7 @@ public class Utils {
|
||||
}
|
||||
|
||||
public static File getExportPath(Context context) {
|
||||
File dir = new File(Environment.getExternalStorageDirectory(),
|
||||
File dir = new File(context.getExternalFilesDir(null),
|
||||
context.getString(R.string.export_path));
|
||||
if (!dir.isDirectory()) {
|
||||
if (dir.exists() || !dir.mkdirs()) {
|
||||
@@ -122,14 +112,14 @@ public class Utils {
|
||||
throws IOException, JSONException {
|
||||
List<UpdateInfo> updates = new ArrayList<>();
|
||||
|
||||
String json = "";
|
||||
StringBuilder json = new StringBuilder();
|
||||
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
|
||||
for (String line; (line = br.readLine()) != null;) {
|
||||
json += line;
|
||||
json.append(line);
|
||||
}
|
||||
}
|
||||
|
||||
JSONObject obj = new JSONObject(json);
|
||||
JSONObject obj = new JSONObject(json.toString());
|
||||
JSONArray updatesList = obj.getJSONArray("response");
|
||||
for (int i = 0; i < updatesList.length(); i++) {
|
||||
if (updatesList.isNull(i)) {
|
||||
@@ -186,18 +176,24 @@ public class Utils {
|
||||
}
|
||||
|
||||
public static boolean isNetworkAvailable(Context context) {
|
||||
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(
|
||||
Context.CONNECTIVITY_SERVICE);
|
||||
NetworkInfo info = cm.getActiveNetworkInfo();
|
||||
return !(info == null || !info.isConnected() || !info.isAvailable());
|
||||
ConnectivityManager cm = context.getSystemService(ConnectivityManager.class);
|
||||
Network activeNetwork = cm.getActiveNetwork();
|
||||
NetworkCapabilities networkCapabilities = cm.getNetworkCapabilities(activeNetwork);
|
||||
if (networkCapabilities != null &&
|
||||
networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) &&
|
||||
networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {
|
||||
return networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
|
||||
|| networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)
|
||||
|| networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_USB)
|
||||
|| networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)
|
||||
|| networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isOnWifiOrEthernet(Context context) {
|
||||
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(
|
||||
Context.CONNECTIVITY_SERVICE);
|
||||
NetworkInfo info = cm.getActiveNetworkInfo();
|
||||
return (info != null && (info.getType() == ConnectivityManager.TYPE_ETHERNET
|
||||
|| info.getType() == ConnectivityManager.TYPE_WIFI));
|
||||
public static boolean isNetworkMetered(Context context) {
|
||||
ConnectivityManager cm = context.getSystemService(ConnectivityManager.class);
|
||||
return cm.isActiveNetworkMetered();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -206,8 +202,6 @@ public class Utils {
|
||||
* @param oldJson old update list
|
||||
* @param newJson new update list
|
||||
* @return true if newJson has at least a compatible update not available in oldJson
|
||||
* @throws IOException
|
||||
* @throws JSONException
|
||||
*/
|
||||
public static boolean checkForNewUpdates(File oldJson, File newJson)
|
||||
throws IOException, JSONException {
|
||||
@@ -264,6 +258,7 @@ public class Utils {
|
||||
return;
|
||||
}
|
||||
for (File file : uncryptFiles) {
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
file.delete();
|
||||
}
|
||||
}
|
||||
@@ -273,7 +268,6 @@ public class Utils {
|
||||
* the user can't access and that might have stale files. This can happen if
|
||||
* the data of the application are wiped.
|
||||
*
|
||||
* @param context
|
||||
*/
|
||||
public static void cleanupDownloadsDir(Context context) {
|
||||
File downloadPath = getDownloadPath(context);
|
||||
@@ -290,6 +284,7 @@ public class Utils {
|
||||
lastUpdatePath != null) {
|
||||
File lastUpdate = new File(lastUpdatePath);
|
||||
if (lastUpdate.exists()) {
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
lastUpdate.delete();
|
||||
// Remove the pref not to delete the file if re-downloaded
|
||||
preferences.edit().remove(Constants.PREF_INSTALL_PACKAGE_PATH).apply();
|
||||
@@ -319,6 +314,7 @@ public class Utils {
|
||||
for (File file : files) {
|
||||
if (!knownPaths.contains(file.getAbsolutePath())) {
|
||||
Log.d(TAG, "Deleting " + file.getAbsolutePath());
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
file.delete();
|
||||
}
|
||||
}
|
||||
@@ -367,7 +363,8 @@ public class Utils {
|
||||
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN);
|
||||
}
|
||||
|
||||
public static void addToClipboard(Context context, String label, String text, String toastMessage) {
|
||||
public static void addToClipboard(Context context, String label, String text,
|
||||
String toastMessage) {
|
||||
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(
|
||||
Context.CLIPBOARD_SERVICE);
|
||||
ClipData clip = ClipData.newPlainText(label, text);
|
||||
@@ -401,4 +398,19 @@ public class Utils {
|
||||
return AlarmManager.INTERVAL_DAY * 30;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isRecoveryUpdateExecPresent() {
|
||||
return new File(Constants.UPDATE_RECOVERY_EXEC).exists();
|
||||
}
|
||||
|
||||
public static String getDisplayVersion(String version) {
|
||||
float floatVersion = 0;
|
||||
try {
|
||||
floatVersion = Float.parseFloat(version);
|
||||
} catch (NumberFormatException ignored) {
|
||||
// ignore
|
||||
}
|
||||
// Lineage 20 and up should only be integer values (we don't have minor versions anymore)
|
||||
return (floatVersion >= 20) ? String.valueOf((int)floatVersion) : version;
|
||||
}
|
||||
}
|
@@ -1,23 +1,13 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The LineageOS Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* SPDX-FileCopyrightText: 2017 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater.model;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class Update extends UpdateBase implements UpdateInfo {
|
||||
public static final String LOCAL_ID = "local";
|
||||
|
||||
private UpdateStatus mStatus = UpdateStatus.UNKNOWN;
|
||||
private int mPersistentStatus = UpdateStatus.Persistent.UNKNOWN;
|
||||
@@ -32,10 +22,6 @@ public class Update extends UpdateBase implements UpdateInfo {
|
||||
public Update() {
|
||||
}
|
||||
|
||||
public Update(UpdateBaseInfo update) {
|
||||
super(update);
|
||||
}
|
||||
|
||||
public Update(UpdateInfo update) {
|
||||
super(update);
|
||||
mStatus = update.getStatus();
|
@@ -1,17 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The LineageOS Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* SPDX-FileCopyrightText: 2017 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater.model;
|
||||
|
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2017 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater.model;
|
||||
|
||||
public interface UpdateBaseInfo {
|
||||
String getName();
|
||||
|
||||
String getDownloadId();
|
||||
|
||||
long getTimestamp();
|
||||
|
||||
String getType();
|
||||
|
||||
String getVersion();
|
||||
|
||||
String getDownloadUrl();
|
||||
|
||||
long getFileSize();
|
||||
}
|
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2017 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater.model;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public interface UpdateInfo extends UpdateBaseInfo {
|
||||
UpdateStatus getStatus();
|
||||
|
||||
int getPersistentStatus();
|
||||
|
||||
File getFile();
|
||||
|
||||
long getFileSize();
|
||||
|
||||
int getProgress();
|
||||
|
||||
long getEta();
|
||||
|
||||
long getSpeed();
|
||||
|
||||
int getInstallProgress();
|
||||
|
||||
boolean getAvailableOnline();
|
||||
|
||||
boolean getFinalizing();
|
||||
}
|
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2017 The LineageOS Project
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.lineageos.updater.model;
|
||||
|
||||
public enum UpdateStatus {
|
||||
UNKNOWN,
|
||||
STARTING,
|
||||
DOWNLOADING,
|
||||
PAUSED,
|
||||
PAUSED_ERROR,
|
||||
DELETED,
|
||||
VERIFYING,
|
||||
VERIFIED,
|
||||
VERIFICATION_FAILED,
|
||||
INSTALLING,
|
||||
INSTALLED,
|
||||
INSTALLATION_FAILED,
|
||||
INSTALLATION_CANCELLED,
|
||||
INSTALLATION_SUSPENDED;
|
||||
|
||||
public static final class Persistent {
|
||||
public static final int UNKNOWN = 0;
|
||||
public static final int INCOMPLETE = 1;
|
||||
public static final int VERIFIED = 2;
|
||||
}
|
||||
}
|
12
app/src/main/res/drawable/dialog_background.xml
Normal file
12
app/src/main/res/drawable/dialog_background.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2015 The Android Open Source Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<inset xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:inset="16dp">
|
||||
<shape android:shape="rectangle">
|
||||
<corners android:radius="16dp"/>
|
||||
<solid android:color="?android:attr/colorBackgroundFloating"/>
|
||||
</shape>
|
||||
</inset>
|
23
app/src/main/res/drawable/ic_launcher_background.xml
Normal file
23
app/src/main/res/drawable/ic_launcher_background.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2022 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path
|
||||
android:pathData="M0,0h108v108h-108z"
|
||||
android:fillColor="#167C80"/>
|
||||
<path
|
||||
android:pathData="M58,58C58,60.209 56.209,62 54,62C51.791,62 50,60.209 50,58C50,58 51.791,58 54,58C56.209,58 58,58 58,58Z"
|
||||
android:fillColor="#85BABC"/>
|
||||
<path
|
||||
android:pathData="M62,46C62,50.418 58.418,54 54,54C49.582,54 46,50.418 46,46C46,46 49.582,46 54,46C58.418,46 62,46 62,46Z"
|
||||
android:fillColor="#CAE1E2"/>
|
||||
<path
|
||||
android:pathData="M54,30m-12,0a12,12 0,1 1,24 0a12,12 0,1 1,-24 0"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
34
app/src/main/res/drawable/ic_launcher_foreground.xml
Normal file
34
app/src/main/res/drawable/ic_launcher_foreground.xml
Normal file
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2022 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<group>
|
||||
<clip-path
|
||||
android:pathData="M0,0h108v108h-108z"/>
|
||||
<path
|
||||
android:pathData="M108,0H0V108H108V0ZM42,30C39.791,30 38,31.791 38,34V74C38,76.209 39.791,78 42,78H66C68.209,78 70,76.209 70,74V34C70,31.791 68.209,30 66,30H42Z"
|
||||
android:fillColor="#2A3232"
|
||||
android:fillType="evenOdd"/>
|
||||
<path
|
||||
android:pathData="M28.54,28.54m-72,0a72,72 0,1 1,144 0a72,72 0,1 1,-144 0"
|
||||
android:fillAlpha="0.6">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:gradientRadius="72"
|
||||
android:centerX="28.54"
|
||||
android:centerY="28.54"
|
||||
android:type="radial">
|
||||
<item android:offset="0" android:color="#19FFFFFF"/>
|
||||
<item android:offset="1" android:color="#00FFFFFF"/>
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
</group>
|
||||
</vector>
|
15
app/src/main/res/drawable/ic_menu_preferences.xml
Normal file
15
app/src/main/res/drawable/ic_menu_preferences.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2021 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
|
||||
<path
|
||||
android:fillColor="@color/inverted"
|
||||
android:pathData="M12,15.5A3.5,3.5 0 0,1 8.5,12A3.5,3.5 0 0,1 12,8.5A3.5,3.5 0 0,1 15.5,12A3.5,3.5 0 0,1 12,15.5M19.43,12.97C19.47,12.65 19.5,12.33 19.5,12C19.5,11.67 19.47,11.34 19.43,11L21.54,9.37C21.73,9.22 21.78,8.95 21.66,8.73L19.66,5.27C19.54,5.05 19.27,4.96 19.05,5.05L16.56,6.05C16.04,5.66 15.5,5.32 14.87,5.07L14.5,2.42C14.46,2.18 14.25,2 14,2H10C9.75,2 9.54,2.18 9.5,2.42L9.13,5.07C8.5,5.32 7.96,5.66 7.44,6.05L4.95,5.05C4.73,4.96 4.46,5.05 4.34,5.27L2.34,8.73C2.21,8.95 2.27,9.22 2.46,9.37L4.57,11C4.53,11.34 4.5,11.67 4.5,12C4.5,12.33 4.53,12.65 4.57,12.97L2.46,14.63C2.27,14.78 2.21,15.05 2.34,15.27L4.34,18.73C4.46,18.95 4.73,19.03 4.95,18.95L7.44,17.94C7.96,18.34 8.5,18.68 9.13,18.93L9.5,21.58C9.54,21.82 9.75,22 10,22H14C14.25,22 14.46,21.82 14.5,21.58L14.87,18.93C15.5,18.67 16.04,18.34 16.56,17.94L19.05,18.95C19.27,19.03 19.54,18.95 19.66,18.73L21.66,15.27C21.78,15.05 21.73,14.78 21.54,14.63L19.43,12.97Z" />
|
||||
</vector>
|
@@ -1,4 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2018 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
@@ -1,3 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2018 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
15
app/src/main/res/drawable/ic_system_update.xml
Normal file
15
app/src/main/res/drawable/ic_system_update.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2018 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M7,1C5.8954,1 5,1.8954 5,3V21C5,22.1046 5.8954,23 7,23H17C18.1046,23 19,22.1046 19,21V3C19,1.8954 18.1046,1 17,1H16H8H7ZM8,1L12,1L16,1C16,3.2091 14.2091,5 12,5C9.7909,5 8,3.2091 8,1ZM12,10C13.6569,10 15,8.6568 15,7L12,7L9,7C9,8.6568 10.3431,10 12,10ZM14,12C14,13.1046 13.1046,14 12,14C10.8954,14 10,13.1046 10,12L12,12L14,12Z"
|
||||
android:fillColor="#000000"
|
||||
android:fillType="evenOdd"/>
|
||||
</vector>
|
136
app/src/main/res/layout-television/activity_updates.xml
Normal file
136
app/src/main/res/layout-television/activity_updates.xml
Normal file
@@ -0,0 +1,136 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2021-2023 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:orientation="horizontal"
|
||||
android:id="@+id/main_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fitsSystemWindows="true"
|
||||
android:padding="16dp"
|
||||
android:weightSum="2"
|
||||
android:baselineAligned="false">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/header_container"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:paddingEnd="16dp"
|
||||
android:paddingStart="16dp"
|
||||
android:layout_gravity="start">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/header_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif-light"
|
||||
android:paddingBottom="16dp"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:textSize="56sp"
|
||||
tools:text="LineageOS\n20" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/header_build_version"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:textSize="14sp"
|
||||
tools:text="Android 13"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/header_build_date"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:textSize="14sp"
|
||||
tools:text="1970-01-01"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/header_last_check"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:textSize="14sp"
|
||||
tools:text="Last checked: 1970-01-01"/>
|
||||
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:weightSum="2"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/refresh"
|
||||
android:drawableStart="@drawable/ic_menu_refresh"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/menu_refresh"
|
||||
style="@style/Widget.AppCompat.Button.Borderless.Colored"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/preferences"
|
||||
android:drawableStart="@drawable/ic_menu_preferences"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/menu_preferences"
|
||||
style="@style/Widget.AppCompat.Button.Borderless.Colored"/>
|
||||
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:paddingEnd="16dp"
|
||||
android:paddingStart="16dp"
|
||||
android:layout_gravity="end">
|
||||
|
||||
<androidx.core.widget.NestedScrollView
|
||||
android:id="@+id/no_new_updates_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:padding="46dp">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:text="@string/list_no_updates"
|
||||
android:textColor="?android:textColorSecondary" />
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/recycler_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="12dp"
|
||||
android:clipToPadding="false"
|
||||
android:paddingBottom="5dp"
|
||||
android:scrollbars="vertical"
|
||||
android:layout_gravity="end"
|
||||
tools:listitem="@layout/update_item_view"/>
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/refresh_progress"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:visibility="gone"/>
|
||||
|
||||
</RelativeLayout>
|
||||
</LinearLayout>
|
@@ -1,4 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2021-2023 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<androidx.cardview.widget.CardView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
@@ -8,14 +12,19 @@
|
||||
android:focusable="true"
|
||||
android:foreground="?attr/selectableItemBackground"
|
||||
android:nextFocusRight="@+id/update_action"
|
||||
app:cardCornerRadius="0dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
app:cardBackgroundColor="@color/tv_card_background"
|
||||
app:cardCornerRadius="16dp"
|
||||
app:contentPadding="16dp">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal"
|
||||
android:weightSum="1">
|
||||
android:weightSum="1"
|
||||
android:baselineAligned="false">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
@@ -47,25 +56,40 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/progress_bar"
|
||||
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="4sp"
|
||||
android:id="@+id/progress"
|
||||
android:visibility="invisible"
|
||||
tools:progress="65"
|
||||
tools:visibility="visible" />
|
||||
tools:visibility="visible">
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/progress_bar"
|
||||
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="4sp"
|
||||
tools:progress="65" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/progress_percent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingEnd="8dp"
|
||||
tools:text="65%" />
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/progress_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/progress_bar"
|
||||
android:layout_below="@id/progress"
|
||||
android:ellipsize="marquee"
|
||||
android:singleLine="true"
|
||||
android:visibility="invisible"
|
||||
tools:text="162 of 300 MB (3 minutes left) • 65%"
|
||||
tools:text="162 of 1.1GB (3 minutes left)"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<TextView
|
||||
@@ -79,12 +103,25 @@
|
||||
</RelativeLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<Button
|
||||
android:id="@id/update_action"
|
||||
style="@style/Widget.AppCompat.Button.Borderless.Colored"
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="8dp"
|
||||
tools:text="Pause" />
|
||||
android:orientation="vertical">
|
||||
<ImageButton
|
||||
android:id="@+id/update_menu"
|
||||
style="?android:attr/actionOverflowButtonStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="end"
|
||||
android:padding="8dp"
|
||||
android:contentDescription="@null" />
|
||||
<Button
|
||||
android:id="@id/update_action"
|
||||
style="@style/Widget.AppCompat.Button.Borderless.Colored"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="8dp"
|
||||
tools:text="Pause" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</androidx.cardview.widget.CardView>
|
@@ -1,7 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2023 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/main_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
@@ -12,19 +17,33 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fitsSystemWindows="true"
|
||||
app:layout_behavior="org.lineageos.updater.ui.FlingBehavior">
|
||||
android:outlineAmbientShadowColor="@android:color/transparent"
|
||||
android:outlineSpotShadowColor="@android:color/transparent"
|
||||
android:background="?android:attr/colorPrimary"
|
||||
android:theme="@style/Theme.CollapsingToolbar.Settings">
|
||||
|
||||
<com.google.android.material.appbar.CollapsingToolbarLayout
|
||||
android:id="@+id/collapsing_toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:theme="@style/AppTheme.AppBarOverlay"
|
||||
app:collapsedTitleTextAppearance="@style/TextAppearanceInverted"
|
||||
app:contentScrim="?attr/colorPrimary"
|
||||
app:expandedTitleTextAppearance="@style/TextAppearanceTransparent"
|
||||
app:layout_scrollFlags="scroll|exitUntilCollapsed">
|
||||
android:layout_height="wrap_content"
|
||||
android:clipToPadding="false"
|
||||
app:forceApplySystemWindowInsetTop="true"
|
||||
app:extraMultilineHeightEnabled="true"
|
||||
app:contentScrim="@color/toolbar_collapsed"
|
||||
app:maxLines="3"
|
||||
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
|
||||
app:scrimAnimationDuration="50"
|
||||
app:scrimVisibleHeightTrigger="@dimen/settingslib_scrim_visible_height_trigger"
|
||||
app:statusBarScrim="@null"
|
||||
app:titleCollapseMode="fade"
|
||||
app:collapsedTitleTextAppearance="@style/CollapsingToolbarTitle.Collapsed"
|
||||
app:expandedTitleTextAppearance="@style/CollapsingToolbarTitle.Expanded"
|
||||
app:expandedTitleMarginStart="@dimen/expanded_title_margin_start"
|
||||
app:expandedTitleMarginEnd="@dimen/expanded_title_margin_end"
|
||||
app:toolbarId="@id/action_bar">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/header_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="86dp"
|
||||
@@ -40,7 +59,8 @@
|
||||
android:fontFamily="sans-serif-light"
|
||||
android:paddingBottom="16dp"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:textSize="56sp" />
|
||||
android:textSize="56sp"
|
||||
tools:text="LineageOS\n20"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/header_build_version"
|
||||
@@ -48,7 +68,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/header_title"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:textSize="12sp" />
|
||||
android:textSize="12sp"
|
||||
tools:text="Android 13"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/header_build_date"
|
||||
@@ -56,23 +77,27 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/header_build_version"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:textSize="12sp" />
|
||||
android:textSize="12sp"
|
||||
tools:text="1970-01-01"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/header_last_check"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/header_build_date"
|
||||
android:layout_marginTop="8dp"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:textSize="12sp" />
|
||||
android:textSize="12sp"
|
||||
tools:text="Last checked: 1970-01-01"/>
|
||||
</RelativeLayout>
|
||||
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
app:layout_collapseMode="pin" />
|
||||
android:theme="?android:attr/actionBarTheme"
|
||||
android:transitionName="shared_element_view"
|
||||
app:layout_collapseMode="pin"/>
|
||||
</com.google.android.material.appbar.CollapsingToolbarLayout>
|
||||
</com.google.android.material.appbar.AppBarLayout>
|
||||
|
||||
@@ -98,5 +123,6 @@
|
||||
android:clipToPadding="false"
|
||||
android:paddingBottom="5dp"
|
||||
android:scrollbars="vertical"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior"
|
||||
tools:listitem="@layout/update_item_view" />
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
@@ -1,3 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<FrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
@@ -1,4 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2018-2022 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
@@ -29,7 +33,7 @@
|
||||
android:entries="@array/menu_auto_updates_check_interval_entries" />
|
||||
</LinearLayout>
|
||||
|
||||
<Switch
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:id="@+id/preferences_auto_delete_updates"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -37,19 +41,27 @@
|
||||
android:text="@string/menu_auto_delete_updates"
|
||||
android:textSize="16sp" />
|
||||
|
||||
<Switch
|
||||
android:id="@+id/preferences_mobile_data_warning"
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:id="@+id/preferences_metered_network_warning"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:text="@string/menu_mobile_data_warning"
|
||||
android:text="@string/menu_metered_network_warning"
|
||||
android:textSize="16sp" />
|
||||
|
||||
<Switch
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:id="@+id/preferences_ab_perf_mode"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:text="@string/menu_ab_perf_mode"
|
||||
android:textSize="16sp" />
|
||||
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:id="@+id/preferences_update_recovery"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:text="@string/menu_update_recovery"
|
||||
android:textSize="16sp" />
|
||||
</LinearLayout>
|
127
app/src/main/res/layout/update_item_view.xml
Normal file
127
app/src/main/res/layout/update_item_view.xml
Normal file
@@ -0,0 +1,127 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2023 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<androidx.cardview.widget.CardView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:focusable="true"
|
||||
android:foreground="?attr/selectableItemBackground"
|
||||
android:nextFocusRight="@+id/update_action"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
app:cardCornerRadius="16dp"
|
||||
app:contentPadding="16dp">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal"
|
||||
android:weightSum="1"
|
||||
android:baselineAligned="false">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/build_version"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:alpha="0.87"
|
||||
android:drawablePadding="8dp"
|
||||
android:maxLines="1"
|
||||
android:paddingBottom="8sp"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:textSize="16sp"
|
||||
tools:text="LineageOS 20" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/build_date"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxLines="1"
|
||||
android:textSize="14sp"
|
||||
tools:text="18 June 2023" />
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/progress"
|
||||
android:visibility="invisible"
|
||||
tools:visibility="visible">
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/progress_bar"
|
||||
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="4sp"
|
||||
tools:progress="65" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/progress_percent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingEnd="8dp"
|
||||
tools:text="65%" />
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/progress_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/progress"
|
||||
android:ellipsize="marquee"
|
||||
android:singleLine="true"
|
||||
android:visibility="invisible"
|
||||
tools:text="162 of 1.1 GB (3 minutes left)"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/build_size"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="8sp"
|
||||
android:singleLine="true"
|
||||
tools:text="1.1 GB"
|
||||
tools:visibility="invisible" />
|
||||
</RelativeLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
<ImageButton
|
||||
android:id="@+id/update_menu"
|
||||
style="?android:attr/actionOverflowButtonStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="end"
|
||||
android:padding="8dp"
|
||||
android:contentDescription="@null" />
|
||||
<Button
|
||||
android:id="@id/update_action"
|
||||
style="@style/Widget.AppCompat.Button.Borderless.Colored"
|
||||
android:background="?android:selectableItemBackgroundBorderless"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="8dp"
|
||||
tools:text="Pause" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</androidx.cardview.widget.CardView>
|
@@ -1,6 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2022 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:id="@+id/menu_export_update"
|
||||
android:title="@string/menu_export_update" />
|
@@ -1,4 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2020 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
@@ -6,6 +10,10 @@
|
||||
android:icon="@drawable/ic_menu_refresh"
|
||||
android:title="@string/menu_refresh"
|
||||
app:showAsAction="ifRoom" />
|
||||
<item
|
||||
android:id="@+id/menu_local_update"
|
||||
android:title="@string/local_update_import"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/menu_preferences"
|
||||
android:title="@string/menu_preferences"
|
9
app/src/main/res/mipmap-anydpi/ic_launcher.xml
Normal file
9
app/src/main/res/mipmap-anydpi/ic_launcher.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2022 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">المُحدث</string>
|
||||
@@ -54,6 +42,8 @@
|
||||
<string name="menu_export_update">تصدير التحديث</string>
|
||||
<string name="menu_show_changelog">إظهار التغييرات</string>
|
||||
<string name="menu_ab_perf_mode">إعطاء الأولوية لعملية التحديث</string>
|
||||
<string name="menu_update_recovery">تحديث وضع الاسترداد</string>
|
||||
<string name="toast_forced_update_recovery">من المستحيل تعطيل تحديثات Lineage Recovery على هذا الجهاز</string>
|
||||
<string name="snack_updates_found">تم العثور على تحديثات جديدة</string>
|
||||
<string name="snack_no_updates_found">لا توجد تحديثات جديدة</string>
|
||||
<string name="snack_updates_check_failed">فشل التحقق من وجود تحديث. برجاء التحقق من اتصالك بالإنترنت وإعادة المحاولة لاحقًا.</string>
|
||||
@@ -66,8 +56,8 @@
|
||||
<string name="header_last_updates_check">آخر تحقق: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> من <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> من <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> من <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">جارٍ التحقق من التحديث</string>
|
||||
<string name="list_no_updates">لا توجد تحديثات جديدة. للبحث عن تحديثات جديدة يدويًا، استخدم الزر تحديث.</string>
|
||||
<string name="action_download">تنزيل</string>
|
||||
@@ -80,8 +70,8 @@
|
||||
<string name="confirm_delete_dialog_title">حذف الملف</string>
|
||||
<string name="confirm_delete_dialog_message">حذف ملف التحديث المحدد؟</string>
|
||||
<string name="apply_update_dialog_title">تطبيق التحديث</string>
|
||||
<string name="apply_update_dialog_message">أنت على وشك الترقية إلى <xliff:g id="update_name">%1$s</xliff:g>.\n\nإذا قمت بالضغط على <xliff:g id="ok">%2$s</xliff:g>، سيقوم الجهاز بإعادة تشغيل نفسه في وضع الاستعادة لتثبيت التحديث.\n\nملاحظة: هذه الميزة تتطلب مسترد متوافق أو سيلزم تثبيت التحديثات يدويًا.</string>
|
||||
<string name="apply_update_dialog_message_ab">أنت على وشك الترقية إلى <xliff:g id="update_name">%1$s</xliff:g>.\n\nعند الضغط على <xliff:g id="ok">%2$s</xliff:g>، وسوف يبدأ الجهاز بالتثبيت في الخلفية.\n\nحتى الانتهاء، وسوف يتم مطالبتك بإعادة التشغيل.</string>
|
||||
<string name="apply_update_dialog_message">أنت على وشك تثبيت <xliff:g id="update_name">%1$s</xliff:g>.\n\nإذا قمت بالضغط على <xliff:g id="ok">%2$s</xliff:g>، سيعاد تشغيل الجهاز بنفسه في وضع الاستعادة لتثبيت التحديث.\n\nملاحظة: هذه الميزة تتطلب مسترد متوافق أو سيلزم تثبيت التحديثات يدويًا.</string>
|
||||
<string name="apply_update_dialog_message_ab">أنت على وشك تثبيت <xliff:g id="update_name">%1$s</xliff:g>.\n\nعند الضغط على <xliff:g id="ok">%2$s</xliff:g>، وسوف يبدأ الجهاز بالتثبيت في الخلفية.\n\nعندما ينتهي، ستُطالب بإعادة التشغيل.</string>
|
||||
<string name="cancel_installation_dialog_message">إلغاء التثبيت؟</string>
|
||||
<string name="label_download_url">عنوان التنزيل</string>
|
||||
<string name="toast_download_url_copied">تم نسخ الرابط</string>
|
||||
@@ -89,6 +79,7 @@
|
||||
<string name="notification_export_success">تم تصدير التحديث</string>
|
||||
<string name="notification_export_fail">خطأ في التصدير</string>
|
||||
<string name="toast_already_exporting">جاري تصدير تحديث بالفعل</string>
|
||||
<string name="toast_export_started">بدأ التصدير</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="zero"><xliff:g id="count">%d</xliff:g> ثانية متبقية</item>
|
||||
<item quantity="one"><xliff:g id="count">%d</xliff:g> ثانية متبقية</item>
|
||||
@@ -113,14 +104,17 @@
|
||||
<item quantity="many"><xliff:g id="count">%d</xliff:g> ساعات متبقية</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> ساعات متبقية</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">تنبيه</string>
|
||||
<string name="update_on_mobile_data_message">أنت على وشك أن تقوم بتنزيل حزمة تحديث باستخدام البيانات مما سيتسبب في استخدام عالي للبيانات. هل تريد المتابعة؟</string>
|
||||
<string name="checkbox_mobile_data_warning">لا تظهر هذا مجدداً</string>
|
||||
<string name="menu_mobile_data_warning">تحذير البيانات</string>
|
||||
<string name="update_over_metered_network_title">تنبيه</string>
|
||||
<string name="update_over_metered_network_message">أنت على وشك تنزيل حُزْمَة التحديث عبر شبكة مقيدة التي من المحتمل أن تسبب استخداما عاليا للبيانات. هل ترغب في المتابعة؟</string>
|
||||
<string name="checkbox_metered_network_warning">لا تظهر هذا مجدداً</string>
|
||||
<string name="menu_metered_network_warning">تحذير شبكة مقننة</string>
|
||||
<string name="blocked_update_dialog_title">التحديث محظور</string>
|
||||
<string name="blocked_update_dialog_message">لا يمكن تثبيت التحديث باستخدام تطبيق المُحدث. برجاء قراءة <xliff:g id="info_url">%1$s </xliff:g> للحصول على مزيد من المعلومات.</string>
|
||||
<string name="export_channel_title">اكتمال التصدير</string>
|
||||
<string name="new_updates_channel_title">تحديثات جديدة</string>
|
||||
<string name="ongoing_channel_title">التنزيلات الحالية</string>
|
||||
<string name="update_failed_channel_title">فشل التحديث</string>
|
||||
<string name="info_dialog_title">هل كنت تعلم؟ </string>
|
||||
<string name="info_dialog_message">تحديثات LineageOS هي حزم تثبيت كاملة. وهذا يعني أنه يمكنك دائماً تثبيت أحدث إصدار فقط، حتى إذا كنت قد تخطيت بعض الإصدارات السابقة!</string>
|
||||
<string name="info_dialog_ok">شكرًا على المعلومة!</string>
|
||||
</resources>
|
9
app/src/main/res/values-as/strings.xml
Normal file
9
app/src/main/res/values-as/strings.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="menu_update_recovery">পুনৰুদ্ধাৰ আপডেট কৰক</string>
|
||||
<string name="toast_forced_update_recovery">এই ডিভাইচত Lineage পুনৰুদ্ধাৰ আপডেটসমূহ নিষ্ক্ৰিয় কৰাটো অসম্ভৱ।</string>
|
||||
</resources>
|
120
app/src/main/res/values-ast-rES/strings.xml
Normal file
120
app/src/main/res/values-ast-rES/strings.xml
Normal file
@@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Anovador</string>
|
||||
<string name="display_name">Anovador</string>
|
||||
<string name="verification_failed_notification">La verificación falló</string>
|
||||
<string name="verifying_download_notification">Verificando l\'anovamientu</string>
|
||||
<string name="downloading_notification">En descarga</string>
|
||||
<string name="download_paused_notification">La descarga ta en posa</string>
|
||||
<string name="download_paused_error_notification">Error de la descarga</string>
|
||||
<string name="download_completed_notification">Completóse la descarga</string>
|
||||
<string name="download_starting_notification">Aniciando la descarga</string>
|
||||
<string name="update_failed_notification">L\'anovamientu falló</string>
|
||||
<string name="installation_suspended_notification">Suspendióse la instalación</string>
|
||||
<string name="new_updates_found_title">Hai anovamientos</string>
|
||||
<string name="text_download_speed">%1$s, %2$s/s</string>
|
||||
<string name="pause_button">Posar</string>
|
||||
<string name="resume_button">Siguir</string>
|
||||
<string name="suspend_button">Suspender</string>
|
||||
<string name="installing_update">Instalando\'l paquete d\'anovamientu</string>
|
||||
<string name="installing_update_error">Error de la instalación</string>
|
||||
<string name="installing_update_finished">Instalóse l\'anovamientu</string>
|
||||
<string name="finalizing_package">Finando la instalación del paquete</string>
|
||||
<string name="preparing_ota_first_boot">Tresnando\'l primer arrinque</string>
|
||||
<string name="dialog_prepare_zip_message">Tresnáu preliminar del anovamientu</string>
|
||||
<string name="dialog_battery_low_title">Queda poca batería</string>
|
||||
<string name="dialog_battery_low_message_pct">El nivel de batería ye perbaxu, tien d\'haber polo menos un <xliff:g id="percent_discharging">%1$d</xliff:g>%% de batería pa siguir, <xliff:g id="percent_charging">%2$d</xliff:g>%% si ta en carga.</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[ Executa los comandos siguientes y volvi probar l\'anovamientu:\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot
|
||||
]]></string>
|
||||
<string name="dialog_scratch_mounted_title">Nun se pue instalar l\'anovamientu con OverlayFS montáu</string>
|
||||
<string name="reboot">Reaniciar</string>
|
||||
<string name="menu_refresh">Anovar</string>
|
||||
<string name="menu_preferences">Preferencies</string>
|
||||
<string name="menu_auto_updates_check">Busca d\'anovamientos</string>
|
||||
<string name="menu_auto_updates_check_interval_daily">Diaria</string>
|
||||
<string name="menu_auto_updates_check_interval_weekly">Selmanal</string>
|
||||
<string name="menu_auto_updates_check_interval_monthly">Mensual</string>
|
||||
<string name="menu_auto_updates_check_interval_never">Enxamás</string>
|
||||
<string name="menu_auto_delete_updates">Desaniciar los anovamientos al instalalos</string>
|
||||
<string name="menu_delete_update">Desaniciar</string>
|
||||
<string name="menu_copy_url">Copiar la URL</string>
|
||||
<string name="menu_export_update">Esportar l\'anovamientu</string>
|
||||
<string name="menu_show_changelog">Amosar el rexistru de cambeos</string>
|
||||
<string name="menu_ab_perf_mode">Priorizar el procesu d\'anovamientu</string>
|
||||
<string name="menu_update_recovery">Anovar el recovery</string>
|
||||
<string name="toast_forced_update_recovery">Ye imposible desactivar los anovamientos del recovery de Lineage nesti preséu.</string>
|
||||
<string name="snack_updates_found">Atopáronse anovamientos</string>
|
||||
<string name="snack_no_updates_found">Nun s\'atopó nengún anovamientu</string>
|
||||
<string name="snack_updates_check_failed">La comprobación d\'anovamientos falló. Comprueba la conexón a internet y volvi tentalo.</string>
|
||||
<string name="snack_download_failed">La descarga falló. Comprueba la conexón a internet y volvi tentalo.</string>
|
||||
<string name="snack_download_verification_failed">La comprobación d\'anovamientos falló</string>
|
||||
<string name="snack_download_verified">Completóse la descarga.</string>
|
||||
<string name="snack_update_not_installable">Esti anovamientu nun se pue instalar sobre la versión actual.</string>
|
||||
<string name="header_title_text">LineageOS\n%1$s</string>
|
||||
<string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string>
|
||||
<string name="header_last_updates_check">Última comprobación: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Verificando l\'anovamientu</string>
|
||||
<string name="list_no_updates">Nun s\'atopó nengún anovamientu. Pa comprobar manualmente si los hai, usa\'l botón «Anovar».</string>
|
||||
<string name="action_download">Baxar</string>
|
||||
<string name="action_pause">Posar</string>
|
||||
<string name="action_resume">Siguir</string>
|
||||
<string name="action_install">Instalar</string>
|
||||
<string name="action_info">Información</string>
|
||||
<string name="action_delete">Desaniciar</string>
|
||||
<string name="action_cancel">Encaboxar</string>
|
||||
<string name="confirm_delete_dialog_title">Desaniciu d\'un ficheru</string>
|
||||
<string name="confirm_delete_dialog_message">¿Quies desaniciar l\'anovamientu seleicionáu?</string>
|
||||
<string name="apply_update_dialog_title">Instalación d\'un anovamientu</string>
|
||||
<string name="apply_update_dialog_message">Tas a piques d\'instalar «<xliff:g id="update_name">%1$s</xliff:g>».\n\nSi primes «<xliff:g id="ok">%2$s</xliff:g>», el preséu va reaniciase y entrar nel mou de recuperación pa instalar l\'anovamientu.\n\nNota: esta función rique un recovery compatible o los anovamientos tienen que s\'instalar manualmente.</string>
|
||||
<string name="apply_update_dialog_message_ab">Tas a piques d\'instalar «<xliff:g id="update_name">%1$s</xliff:g>».\n\nSi primes «<xliff:g id="ok">%2$s</xliff:g>», el preséu va comenzar la instalación en segundu planu.\n\nNamás acabar, el propiu preséu va suxerite que lu reanicies.</string>
|
||||
<string name="cancel_installation_dialog_message">¿Quies encaboxar la instalación?</string>
|
||||
<string name="label_download_url">URL de la descarga</string>
|
||||
<string name="toast_download_url_copied">Copióse la URL</string>
|
||||
<string name="dialog_export_title">Esportando l\'anovamientu</string>
|
||||
<string name="notification_export_success">Esportóse l\'anovamientu</string>
|
||||
<string name="notification_export_fail">Error de la esportación</string>
|
||||
<string name="toast_already_exporting">Yá ta esportándose un anovamientu</string>
|
||||
<string name="toast_export_started">Anicióse la esportación</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">Queda 1 segundu</item>
|
||||
<item quantity="other">Queden <xliff:g id="count">%d</xliff:g> segundos</item>
|
||||
</plurals>
|
||||
<plurals name="eta_minutes">
|
||||
<item quantity="one">Queda 1 minutu</item>
|
||||
<item quantity="other">Queden <xliff:g id="count">%d</xliff:g> minutos</item>
|
||||
</plurals>
|
||||
<plurals name="eta_hours">
|
||||
<item quantity="one">Queda 1 hora</item>
|
||||
<item quantity="other">Queden <xliff:g id="count">%d</xliff:g> hores</item>
|
||||
</plurals>
|
||||
<string name="update_over_metered_network_title">Alvertencia</string>
|
||||
<string name="update_over_metered_network_message">Tas a piques de baxar un paquete d\'anovamientu pente una rede midida, lo que probablemente vaiga xenerar un usu altu de datos. ¿Quies siguir?</string>
|
||||
<string name="checkbox_metered_network_warning">Nun volver amosar</string>
|
||||
<string name="menu_metered_network_warning">Alvertir al tar nuna rede midida</string>
|
||||
<string name="blocked_update_dialog_title">Bloquióse l\'anovamientu</string>
|
||||
<string name="blocked_update_dialog_message">Esti anovamientu nun se pue instalar con «Anovador». Llei <xliff:g id="info_url">%1$s</xliff:g> pa consiguir más información.</string>
|
||||
<string name="export_channel_title">Esportación completada</string>
|
||||
<string name="new_updates_channel_title">Hai anovamientos</string>
|
||||
<string name="ongoing_channel_title">Descargues en cursu</string>
|
||||
<string name="update_failed_channel_title">Anovamientu fallíu</string>
|
||||
<string name="info_dialog_title">¿Sabíeslo?</string>
|
||||
<string name="info_dialog_message">Los anovamientos de LineageOS son paquetes d\'instalación completos. Esto significa que siempre pues instalar l\'últimu anovamientu, ¡magar que saltares dalgún intermediu!</string>
|
||||
<string name="info_dialog_ok">¡Gracies!</string>
|
||||
<string name="local_update_import">Anovamientu llocal</string>
|
||||
<string name="local_update_import_progress">Importando l\'anovamientu llocal\u2026</string>
|
||||
<string name="local_update_import_success">Importóse «%1$s». ¿Quies instalar l\'anovamientu?</string>
|
||||
<string name="local_update_import_failure">Hebo un fallu al importar l\'anovamientu llocal</string>
|
||||
<string name="local_update_import_install">Instalar</string>
|
||||
<string name="local_update_name">Anovamientu llocal</string>
|
||||
</resources>
|
120
app/src/main/res/values-az/strings.xml
Normal file
120
app/src/main/res/values-az/strings.xml
Normal file
@@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Güncəlləyici</string>
|
||||
<string name="display_name">Güncəlləyici</string>
|
||||
<string name="verification_failed_notification">Doğrulama uğursuz oldu</string>
|
||||
<string name="verifying_download_notification">Güncəlləmə doğrulanır</string>
|
||||
<string name="downloading_notification">Endirilir</string>
|
||||
<string name="download_paused_notification">Endirməyə fasilə verildi</string>
|
||||
<string name="download_paused_error_notification">Endirmə xətası</string>
|
||||
<string name="download_completed_notification">Endirmə tamamlandı</string>
|
||||
<string name="download_starting_notification">Endirmə başladılır</string>
|
||||
<string name="update_failed_notification">Güncəlləmə uğursuz oldu</string>
|
||||
<string name="installation_suspended_notification">Quraşdırma dayandırıldı</string>
|
||||
<string name="new_updates_found_title">Yeni güncəlləmələr</string>
|
||||
<string name="text_download_speed">%1$s, %2$s/s</string>
|
||||
<string name="pause_button">Fasilə ver</string>
|
||||
<string name="resume_button">Davam etdir</string>
|
||||
<string name="suspend_button">Dayandır</string>
|
||||
<string name="installing_update">Güncəlləmə paketi quraşdırılır</string>
|
||||
<string name="installing_update_error">Quraşdırma xətası</string>
|
||||
<string name="installing_update_finished">Güncəlləmə quraşdırıldı</string>
|
||||
<string name="finalizing_package">Paket quraşdırma tamamlanır</string>
|
||||
<string name="preparing_ota_first_boot">İlk yükləmə üçün hazırlanır</string>
|
||||
<string name="dialog_prepare_zip_message">Güncəlləməyə ilkin hazırlıq</string>
|
||||
<string name="dialog_battery_low_title">Zəif batareya</string>
|
||||
<string name="dialog_battery_low_message_pct">Batareya səviyyəsi çox aşağıdır, davam etmək üçün ən az <xliff:g id="percent_discharging">%1$d</xliff:g>%% olmalıdır, <xliff:g id="percent_charging">%2$d</xliff:g>%% dolur.</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[ Lütfən aşağıdakı əmrləri işə salın və yenidən güncəlləməyə çalışın:\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot
|
||||
]]></string>
|
||||
<string name="dialog_scratch_mounted_title">OverlayFS taxılı ikən güncəlləmə quraşdırıla bilmir</string>
|
||||
<string name="reboot">Yenidən başlat</string>
|
||||
<string name="menu_refresh">Təzələ</string>
|
||||
<string name="menu_preferences">Tərcihlər</string>
|
||||
<string name="menu_auto_updates_check">Avto-güncəlləmə yoxlanışı</string>
|
||||
<string name="menu_auto_updates_check_interval_daily">Gündə bir dəfə</string>
|
||||
<string name="menu_auto_updates_check_interval_weekly">Həftədə bir dəfə</string>
|
||||
<string name="menu_auto_updates_check_interval_monthly">Ayda bir dəfə</string>
|
||||
<string name="menu_auto_updates_check_interval_never">Heç vaxt</string>
|
||||
<string name="menu_auto_delete_updates">Quraşdırılanda güncəlləmələri sil</string>
|
||||
<string name="menu_delete_update">Sil</string>
|
||||
<string name="menu_copy_url">URL-ni Kopyala</string>
|
||||
<string name="menu_export_update">Güncəlləməni xaricə köçür</string>
|
||||
<string name="menu_show_changelog">Dəyişiklik jurnalını göstər</string>
|
||||
<string name="menu_ab_perf_mode">Üstünlüyü güncəlləmə prosesinə ver</string>
|
||||
<string name="menu_update_recovery">Geri qaytarma rejimini güncəllə</string>
|
||||
<string name="toast_forced_update_recovery">Bu cihazda Lineage Geri qaytarma güncəlləmələrini sıradan çıxartmaq mümkün deyil.</string>
|
||||
<string name="snack_updates_found">Yeni güncəlləmə tapıldı</string>
|
||||
<string name="snack_no_updates_found">Yeni güncəlləmə tapılmadı</string>
|
||||
<string name="snack_updates_check_failed">Güncəlləmə yoxlanışı uğursuz oldu. Lütfən internet bağlantınızı yoxlayıb daha sonra yenidən sınayın.</string>
|
||||
<string name="snack_download_failed">Endirmə uğursuz oldu. Lütfən internet bağlantınızı yoxlayıb yenidən sınayın.</string>
|
||||
<string name="snack_download_verification_failed">Güncəlləmə doğrulaması uğursuz oldu.</string>
|
||||
<string name="snack_download_verified">Endirmə tamamlandı.</string>
|
||||
<string name="snack_update_not_installable">Bu güncəlləmə hazırkı quruluşun üzərinə quraşdırıla bilməz.</string>
|
||||
<string name="header_title_text">LineageOS\n%1$s</string>
|
||||
<string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string>
|
||||
<string name="header_last_updates_check">Son yoxlama: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Güncəlləmə doğrulanır</string>
|
||||
<string name="list_no_updates">Yeni güncəlləmə tapılmadı. Yeni güncəlləmələri əllə yoxlamaq üçün Təzələ düyməsini istifadə edin.</string>
|
||||
<string name="action_download">Endir</string>
|
||||
<string name="action_pause">Fasilə ver</string>
|
||||
<string name="action_resume">Davam etdir</string>
|
||||
<string name="action_install">Quraşdır</string>
|
||||
<string name="action_info">Məlumat</string>
|
||||
<string name="action_delete">Sil</string>
|
||||
<string name="action_cancel">İmtina</string>
|
||||
<string name="confirm_delete_dialog_title">Faylı sil</string>
|
||||
<string name="confirm_delete_dialog_message">Seçilmiş güncəlləmə faylı silinsin?</string>
|
||||
<string name="apply_update_dialog_title">Güncəlləməni tətbiq et</string>
|
||||
<string name="apply_update_dialog_message"><xliff:g id="update_name">%1$s</xliff:g> quraşdırırsınız.\n\n<xliff:g id="ok">%2$s</xliff:g> bassanız, cihaz güncəlləməni quraşdırmaq üçün geri qaytarma rejimində yenidən başlayacaq.\n\nQeyd: Bu özəlliyin uyumlu bir Geri qaytarma mühitinə ehtiyacı var və ya güncəlləmələr əllə quraşdırılmalıdır.</string>
|
||||
<string name="apply_update_dialog_message_ab"><xliff:g id="update_name">%1$s</xliff:g> quraşdırırsınız.\n\n<xliff:g id="ok">%2$s</xliff:g> düyməsinə bassanız, cihaz arxaplanda quraşdırılmağa başlıyacaq.\n\nƏməliyyat bitəndə, yenidən başladılmalıdır.</string>
|
||||
<string name="cancel_installation_dialog_message">Quraşdırmadan imtina edilsin?</string>
|
||||
<string name="label_download_url">Endirmə bağlantısı</string>
|
||||
<string name="toast_download_url_copied">Bağlantı kopyalandı</string>
|
||||
<string name="dialog_export_title">Güncəlləmə xaricə köçürülür</string>
|
||||
<string name="notification_export_success">Güncəlləmə xaricə köçürüldü</string>
|
||||
<string name="notification_export_fail">Köçürmə xətası</string>
|
||||
<string name="toast_already_exporting">Artıq bir güncəlləmə xaricə köçürülür</string>
|
||||
<string name="toast_export_started">Xaricə köçürmə başladı</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">1 saniyə qaldı</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> saniyə qaldı</item>
|
||||
</plurals>
|
||||
<plurals name="eta_minutes">
|
||||
<item quantity="one">1 dəqiqə qaldı</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> dəqiqə qaldı</item>
|
||||
</plurals>
|
||||
<plurals name="eta_hours">
|
||||
<item quantity="one">1 saat qaldı</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> saat qaldı</item>
|
||||
</plurals>
|
||||
<string name="update_over_metered_network_title">Xəbərdarlıq</string>
|
||||
<string name="update_over_metered_network_message">Ölçülən bir şəbəkə üzərindən böyük ehtimalla yüksək data istifadəsinə səbəb olacaq bir güncəlləmə paketi endirmək üzrəsiniz. Davam etmək istəyirsiniz?</string>
|
||||
<string name="checkbox_metered_network_warning">Təkrar göstərmə</string>
|
||||
<string name="menu_metered_network_warning">Ölçülən şəbəkə xəbərdarlığı</string>
|
||||
<string name="blocked_update_dialog_title">Güncəlləmə əngəlləndi</string>
|
||||
<string name="blocked_update_dialog_message">Bu güncəlləmə, tətbiq güncəlləyici istifadə edilərək quraşdırıla bilməz. Ətraflı məlumat üçün lütfən <xliff:g id="info_url">%1$s</xliff:g> ünvanını oxuyun.</string>
|
||||
<string name="export_channel_title">Köçürmə tamamlandı</string>
|
||||
<string name="new_updates_channel_title">Yeni güncəlləmələr</string>
|
||||
<string name="ongoing_channel_title">Davam edən endirmələr</string>
|
||||
<string name="update_failed_channel_title">Güncəlləmə uğursuz oldu</string>
|
||||
<string name="info_dialog_title">Bilirdiniz?</string>
|
||||
<string name="info_dialog_message">LineageOS güncəlləmələri tam quraşdırma paketləridir. Yəni, güncəlləməni ötürsəniz belə, hər zaman yalnız son güncəlləməni quraşdıra bilərsiniz!</string>
|
||||
<string name="info_dialog_ok">Məlumat üçün təşəkkürlər!</string>
|
||||
<string name="local_update_import">Yerli güncəlləmə</string>
|
||||
<string name="local_update_import_progress">Yerli güncəlləmə daxilə köçürülür\u2026</string>
|
||||
<string name="local_update_import_success">%1$s daxilə köçürüldü. Quraşdırmaq istəyirsiniz?</string>
|
||||
<string name="local_update_import_failure">Yerli güncəlləmə daxilə köçürülmədi</string>
|
||||
<string name="local_update_import_install">Quraşdır</string>
|
||||
<string name="local_update_name">Yerli güncəlləmə</string>
|
||||
</resources>
|
49
app/src/main/res/values-be/strings.xml
Normal file
49
app/src/main/res/values-be/strings.xml
Normal file
@@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="download_paused_error_notification">Памылка спампоўвання</string>
|
||||
<string name="installation_suspended_notification">Усталяванне прыпынена</string>
|
||||
<string name="new_updates_found_title">Новыя абнаўленні</string>
|
||||
<string name="text_download_speed">%1$s, %2$s/с</string>
|
||||
<string name="installing_update">Усталяванне пакета з абнаўленнем</string>
|
||||
<string name="installing_update_error">Памылка ўсталявання</string>
|
||||
<string name="preparing_ota_first_boot">Падрыхтоўка да першага запуску</string>
|
||||
<string name="dialog_prepare_zip_message">Падрыхтоўка абнаўлення</string>
|
||||
<string name="reboot">Перазапуск</string>
|
||||
<string name="menu_refresh">Абнавiць</string>
|
||||
<string name="menu_auto_updates_check">Аўтаматычная праверка абнаўленняў</string>
|
||||
<string name="menu_auto_updates_check_interval_monthly">Штомесяц</string>
|
||||
<string name="menu_auto_updates_check_interval_never">Ніколі</string>
|
||||
<string name="menu_auto_delete_updates">Выдаліць файлы абнаўлення пасля ўсталявання</string>
|
||||
<string name="menu_delete_update">Выдаліць</string>
|
||||
<string name="menu_copy_url">Скапіяваць URL-адрас</string>
|
||||
<string name="menu_export_update">Экспартаванне абнаўлення</string>
|
||||
<string name="menu_ab_perf_mode">Прыярытэт працэсу абнаўлення</string>
|
||||
<string name="snack_no_updates_found">Абнаўленні не знойдзены</string>
|
||||
<string name="header_title_text">LineageOS\n%1$s</string>
|
||||
<string name="header_last_updates_check">Апошняя праверка: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_no_updates">Новыя абнаўленні не знойдзены. Каб праверыць абнаўленні ўручную, націсніце кнопку Абнавіць.</string>
|
||||
<string name="action_download">Спампаваць</string>
|
||||
<string name="action_install">Усталяваць</string>
|
||||
<string name="action_info">Інфармацыя</string>
|
||||
<string name="action_delete">Выдаліць</string>
|
||||
<string name="confirm_delete_dialog_title">Выдаліць файл</string>
|
||||
<string name="confirm_delete_dialog_message">Выдаліць выбраны файл абнаўлення?</string>
|
||||
<string name="apply_update_dialog_title">Ужыць абнаўленне</string>
|
||||
<string name="label_download_url">URL-адрасы спамповак</string>
|
||||
<string name="dialog_export_title">Экспартаванне абнаўлення</string>
|
||||
<string name="toast_export_started">Пачалося экспартаванне</string>
|
||||
<string name="checkbox_metered_network_warning">Больш не паказваць</string>
|
||||
<string name="new_updates_channel_title">Новыя абнаўленні</string>
|
||||
<string name="ongoing_channel_title">Бягучыя спампоўкі</string>
|
||||
<string name="info_dialog_title">Ці ведалі вы што?</string>
|
||||
<string name="local_update_import">Лакальнае абнаўленне</string>
|
||||
<string name="local_update_import_failure">Не ўдалося імпартаваць лакальнае абнаўленне</string>
|
||||
<string name="local_update_import_install">Усталяваць</string>
|
||||
<string name="local_update_name">Лакальнае абнаўленне</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Актуализатор</string>
|
||||
@@ -54,6 +42,8 @@
|
||||
<string name="menu_export_update">Експортиране на актуализация</string>
|
||||
<string name="menu_show_changelog">Покажи промените</string>
|
||||
<string name="menu_ab_perf_mode">Приоритет на процеса на актуализиране</string>
|
||||
<string name="menu_update_recovery">Актуализиране на recovery</string>
|
||||
<string name="toast_forced_update_recovery">Невъзможно е да деактивирате актуализациите на Lineage Recovery на това устройство.</string>
|
||||
<string name="snack_updates_found">Намерена е нова актуализация</string>
|
||||
<string name="snack_no_updates_found">Няма нови актуализации</string>
|
||||
<string name="snack_updates_check_failed">Проверката за актуализации се провали. Моля проверете връзката с интернет и опитайте отново по-късно.</string>
|
||||
@@ -66,8 +56,6 @@
|
||||
<string name="header_last_updates_check">Последна проверка: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> от <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_verifying_update">Проверка на актуализацията</string>
|
||||
<string name="list_no_updates">Не са намерени нови актуализации. За да проверите ръчно за нови актуализации, използвайте бутона за обновяване.</string>
|
||||
<string name="action_download">Изтегли</string>
|
||||
@@ -80,8 +68,6 @@
|
||||
<string name="confirm_delete_dialog_title">Изтриване на файл</string>
|
||||
<string name="confirm_delete_dialog_message">Да бъде ли изтрит файлът на избраната актуализация?</string>
|
||||
<string name="apply_update_dialog_title">Приложи актуализацията</string>
|
||||
<string name="apply_update_dialog_message">На път сте да актуализирате до версия <xliff:g id="update_name">%1$s</xliff:g>.\n\nако натиснете <xliff:g id="ok">%2$s</xliff:g>, устройството ще се рестартира в режим на възстановяване, за да инсталира актуализацията. \ n \ nЗабележка: Тази функция изисква съвместимо Recovery или актуализации трябва да бъдат инсталирани ръчно.</string>
|
||||
<string name="apply_update_dialog_message_ab">На път сте да актуализирате до версия <xliff:g id="update_name">%1$s</xliff:g>.\n\nАко натиснете <xliff:g id="ok">%2$s</xliff:g>, устройството ще започне инсталирането във фонов режим.\n\nКогато завърши, ще бъдете подканени да рестартирате.</string>
|
||||
<string name="cancel_installation_dialog_message">Анулиране на инсталирането?</string>
|
||||
<string name="label_download_url">Изтеглете URL</string>
|
||||
<string name="toast_download_url_copied">URL Копиран</string>
|
||||
@@ -101,10 +87,8 @@
|
||||
<item quantity="one">остава 1 час</item>
|
||||
<item quantity="other">остават <xliff:g id="count">%d</xliff:g> часа</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Внимание</string>
|
||||
<string name="update_on_mobile_data_message">На път сте да изтеглите пакет за актуализиране, използвайки мобилни данни, което вероятно ще доведе до високо използване на данните. Искате ли да продължите?</string>
|
||||
<string name="checkbox_mobile_data_warning">Не показвай отново</string>
|
||||
<string name="menu_mobile_data_warning">Предупреждение за мобилни данни</string>
|
||||
<string name="update_over_metered_network_title">Внимание</string>
|
||||
<string name="checkbox_metered_network_warning">Не показвай отново</string>
|
||||
<string name="blocked_update_dialog_title">Актуализацията е блокирана</string>
|
||||
<string name="blocked_update_dialog_message">Тази актуализация не може да бъде инсталирана посредством приложението за актуализации. Моля прочетете <xliff:g id="info_url">%1$s</xliff:g> за повече информация.</string>
|
||||
<string name="export_channel_title">Експортирането приключи</string>
|
34
app/src/main/res/values-bn/strings.xml
Normal file
34
app/src/main/res/values-bn/strings.xml
Normal file
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">আধুনিকীকরণকারী</string>
|
||||
<string name="display_name">আধুনিকীকরণকারী</string>
|
||||
<string name="verification_failed_notification">যাচাইকরণ ব্যর্থ হয়েছে</string>
|
||||
<string name="text_download_speed">%1$s, %2$s/s</string>
|
||||
<string name="pause_button">বিরাম</string>
|
||||
<string name="menu_update_recovery">রিকভারি আপডেট করুন</string>
|
||||
<string name="toast_forced_update_recovery">এই ডিভাইসে লিনিয়েজ রিকভারি এর আপডেট বন্ধ করা সম্ভব নয়</string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> এর <xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) এর <xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g></string>
|
||||
<string name="apply_update_dialog_message">আপনি এখন <xliff:g id="update_name">%1$s</xliff:g> ইনস্টল করতে যাচ্ছেন। আপনি যদি <xliff:g id="ok">%2$s</xliff:g> বোতামে টিপ দেন, তাহলে ডিভাইসটি আপডেট করার জন্য রিকভারি মোডে চলে যাবে।\n\n এই কাজটি সম্পাদনের জন্য আপডেট সমর্থন করে এমন একটি রিকভারি লাগবে। তা না হলে আপডেটটি আপনার মেনুয়ালি ইনস্টল করতে হবে।</string>
|
||||
<string name="apply_update_dialog_message_ab">আপনি এখন <xliff:g id="update_name">%1$s</xliff:g> ইনস্টল করতে যাচ্ছেন।\n\nআপনি যদি <xliff:g id="ok">%2$s</xliff:g> বোতামে টিপ দেন, তাহলে ডিভাইসটি ব্যাকগ্রাউন্ড এ ইনস্টল করতে থাকবে।\n\nআপডেটটি ইনস্টল করা শেষ হলে আপনাকে রিস্টার্ট করতে বলা হবে।</string>
|
||||
<string name="toast_export_started">রপ্তানি করা শুরু হয়েছে</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">১ সেকেন্ড বাকি</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> সেকেন্ড বাকি</item>
|
||||
</plurals>
|
||||
<plurals name="eta_minutes">
|
||||
<item quantity="one">১ মিনিট বাকি</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> মিনিট বাকি</item>
|
||||
</plurals>
|
||||
<plurals name="eta_hours">
|
||||
<item quantity="one">১ ঘণ্টা বাকি</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> ঘণ্টা বাকি</item>
|
||||
</plurals>
|
||||
<string name="info_dialog_title">আপনি কি জানতেন?</string>
|
||||
<string name="info_dialog_message">লিনিএজ ওএস এর আপডেট প্যাকেজে সকল ফাইল দেওয়া থাকে। অর্থাৎ আপনি মাঝের আপডেটগুলো ইনস্টল না করে শুধুমাত্র লেটেস্ট আপডেট ইনস্টল করতে পারবেন।</string>
|
||||
<string name="info_dialog_ok">তথ্যটির জন্য ধন্যবাদ</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="dialog_battery_low_title">Slaba baterija</string>
|
||||
@@ -37,5 +25,6 @@
|
||||
<item quantity="few"><xliff:g id="count">%d</xliff:g> sata preostalo</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> sati preostalo</item>
|
||||
</plurals>
|
||||
<string name="export_channel_title">Izvoz završen</string>
|
||||
<string name="ongoing_channel_title">Preuzimanja u toku</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Actualitzador</string>
|
||||
@@ -40,6 +28,12 @@
|
||||
<string name="dialog_prepare_zip_message">Preparació preliminar de l\'actualització</string>
|
||||
<string name="dialog_battery_low_title">Bateria baixa</string>
|
||||
<string name="dialog_battery_low_message_pct">El nivell de la bateria és massa baix, necessiteu com a mínim <xliff:g id="percent_discharging">%1$d</xliff:g>%% de bateria per continuar, <xliff:g id="percent_charging">%2$d</xliff:g>%% si el dispositiu s\'està carregant.</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[ Executeu les ordres següents i torneu a provar l\'actualització:\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot
|
||||
]]></string>
|
||||
<string name="dialog_scratch_mounted_title">No es pot instal·lar l\'actualització amb l\'OverlayFS muntat</string>
|
||||
<string name="reboot">Reinicia</string>
|
||||
<string name="menu_refresh">Recarrega</string>
|
||||
<string name="menu_preferences">Preferències</string>
|
||||
@@ -54,6 +48,8 @@
|
||||
<string name="menu_export_update">Exporta l\'actualització</string>
|
||||
<string name="menu_show_changelog">Mostra el registre de canvis</string>
|
||||
<string name="menu_ab_perf_mode">Prioritza el procés d\'actualització</string>
|
||||
<string name="menu_update_recovery">Actualitza el recuperador</string>
|
||||
<string name="toast_forced_update_recovery">No és possible desactivar les actualitzacions del recuperador del Lineage en aquest dispositiu.</string>
|
||||
<string name="snack_updates_found">No s\'han trobat noves actualitzacions</string>
|
||||
<string name="snack_no_updates_found">No s\'han trobat noves actualitzacions</string>
|
||||
<string name="snack_updates_check_failed">Ha fallat la comprovació d\'actualització. Verifiqueu la connexió a Internet i tomeu-ho a provar més tard.</string>
|
||||
@@ -66,8 +62,8 @@
|
||||
<string name="header_last_updates_check">Darrera comprovació: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">S\'està verificant l\'actualització</string>
|
||||
<string name="list_no_updates">No s\'han trobat noves actualitzacions. Per comprovar manualment si hi ha noves actualitzacions, utilitzeu el botó Refresca.</string>
|
||||
<string name="action_download">Baixa</string>
|
||||
@@ -80,8 +76,8 @@
|
||||
<string name="confirm_delete_dialog_title">Esborra el fitxer</string>
|
||||
<string name="confirm_delete_dialog_message">Vols esborrar el fitxer d\'actualització seleccionat?</string>
|
||||
<string name="apply_update_dialog_title">Aplica l\'actualització</string>
|
||||
<string name="apply_update_dialog_message">Estàs a punt d\'actualitzar a <xliff:g id="update_name">%1$s</xliff:g>.\n\nSi prems <xliff:g id="ok">%2$s</xliff:g>, el dispositiu es reiniciarà en mode recuperació per instal·lar l\'actualització.\n\nNota: Aquesta funció requereix un «Recovery» compatible o les actualitzacions s\'hauran d\'instal·lar manualment.</string>
|
||||
<string name="apply_update_dialog_message_ab">Estàs a punt d\'actualitzar a <xliff:g id="update_name">%1$s</xliff:g>.\n\nSi prems <xliff:g id="ok">%2$s</xliff:g>, el dispositiu començarà a instal·lar en segon pla.\n\nUn cop completat, se\'t demanarà reiniciar.</string>
|
||||
<string name="apply_update_dialog_message">Esteu a punt d\'instal·lar <xliff:g id="update_name">%1$s</xliff:g>.\n\nSi premeu <xliff:g id="ok">%2$s</xliff:g>, el dispositiu es reiniciarà en el mode recuperació per a instal·lar l\'actualització.\n\nNota: Aquesta funció requereix un Recuperador compatible o les actualitzacions hauran de ser instal·lades manualment.</string>
|
||||
<string name="apply_update_dialog_message_ab">Esteu a punt d\'instal·lar <xliff:g id="update_name">%1$s</xliff:g>.\n\nSi premeu <xliff:g id="ok">%2$s</xliff:g>, el dispositiu començarà a instal·lar-ho en segon pla.\n\nUna vegada completat, se us demanarà que el reinicieu.</string>
|
||||
<string name="cancel_installation_dialog_message">Voleu cancel·lar la instal·lació?</string>
|
||||
<string name="label_download_url">URL de baixada</string>
|
||||
<string name="toast_download_url_copied">URL copiada</string>
|
||||
@@ -89,6 +85,7 @@
|
||||
<string name="notification_export_success">Actualització exportada</string>
|
||||
<string name="notification_export_fail">Ha fallat l\'exportació</string>
|
||||
<string name="toast_already_exporting">Ja s\'està exportant una actualització</string>
|
||||
<string name="toast_export_started">S\'ha iniciat l\'exportació</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">Falta 1 segon</item>
|
||||
<item quantity="other">Falten <xliff:g id="count">%d</xliff:g> segons</item>
|
||||
@@ -101,14 +98,23 @@
|
||||
<item quantity="one">Falta 1 hora</item>
|
||||
<item quantity="other">Falten <xliff:g id="count">%d</xliff:g> hores</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Advertència</string>
|
||||
<string name="update_on_mobile_data_message">Estàs a punt de baixar un paquet d\'actualització amb dades mòbils que probablement generarà un alt ús de dades. Voleu continuar?</string>
|
||||
<string name="checkbox_mobile_data_warning">No ho tornis a mostrar</string>
|
||||
<string name="menu_mobile_data_warning">Avís d\'ús de dades</string>
|
||||
<string name="update_over_metered_network_title">Advertència</string>
|
||||
<string name="update_over_metered_network_message">Esteu a punt de baixar un paquet d\'actualització a través d\'una xarxa mesurada que és probable que provoqui un ús elevat de dades. Voleu continuar?</string>
|
||||
<string name="checkbox_metered_network_warning">No ho tornis a mostrar</string>
|
||||
<string name="menu_metered_network_warning">Avís de xarxa mesurada</string>
|
||||
<string name="blocked_update_dialog_title">Actualització bloquejada</string>
|
||||
<string name="blocked_update_dialog_message">Aquesta actualització no es pot instal·lar mitjançant l\'aplicació actualitzador. Per obtenir més informació, llegiu <xliff:g id="info_url">%1$s</xliff:g>.</string>
|
||||
<string name="export_channel_title">Exportació completada</string>
|
||||
<string name="new_updates_channel_title">Noves actualitzacions</string>
|
||||
<string name="ongoing_channel_title">Baixades en curs</string>
|
||||
<string name="update_failed_channel_title">Actualització fallida</string>
|
||||
<string name="info_dialog_title">Ho sabies?</string>
|
||||
<string name="info_dialog_message">Les actualitzacions de LineageOS són paquets d\'instal·lació complets. Açò significa que sempre pots instal·lar únicament l\'última actualització, encara que t\'hagis saltat alguna actualització per entremig.</string>
|
||||
<string name="info_dialog_ok">Gràcies per la informació!</string>
|
||||
<string name="local_update_import">Actualització local</string>
|
||||
<string name="local_update_import_progress">S\'està important l\'actualització local\u2026</string>
|
||||
<string name="local_update_import_success">S\'ha importat %1$s. Ho voleu instal·lar?</string>
|
||||
<string name="local_update_import_failure">No s\'ha pogut importar l\'actualització local</string>
|
||||
<string name="local_update_import_install">Instal·la</string>
|
||||
<string name="local_update_name">Actualització local</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Aktualizace</string>
|
||||
@@ -54,6 +42,8 @@
|
||||
<string name="menu_export_update">Export aktualizace</string>
|
||||
<string name="menu_show_changelog">Zobrazit seznam změn</string>
|
||||
<string name="menu_ab_perf_mode">Upřednostňovat proces aktualizace</string>
|
||||
<string name="menu_update_recovery">Aktualizovat recovery oddíl</string>
|
||||
<string name="toast_forced_update_recovery">Na tomto zařízení není možné zakázat aktualizace oddílu Lineage recovery</string>
|
||||
<string name="snack_updates_found">Nalezeny nové aktualizace</string>
|
||||
<string name="snack_no_updates_found">Nové aktualizace nenalezeny</string>
|
||||
<string name="snack_updates_check_failed">Zjištění nové verze selhalo. Prosím zkontrolujte připojení k internetu a pokus opakujte.</string>
|
||||
@@ -66,8 +56,8 @@
|
||||
<string name="header_last_updates_check">Poslední kontrola: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> z <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> z <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> z(e) <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> z(e) <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Ověření aktualizace</string>
|
||||
<string name="list_no_updates">Nebyly nalezeny žádné nové aktualizace. Chcete-li ručně vyhledat nové aktualizace, použijte tlačítko „Obnovit“.</string>
|
||||
<string name="action_download">Stáhnout</string>
|
||||
@@ -80,8 +70,8 @@
|
||||
<string name="confirm_delete_dialog_title">Smazat soubor</string>
|
||||
<string name="confirm_delete_dialog_message">Smazat zvolený soubor aktualizace?</string>
|
||||
<string name="apply_update_dialog_title">Použít aktualizaci</string>
|
||||
<string name="apply_update_dialog_message">Chystáte se aktualizovat na <xliff:g id="update_name">%1$s</xliff:g>.\n\nPokud stisknete <xliff:g id="ok">%2$s</xliff:g>, telefon se restartuje do režimu Recovery, kde budete pokračovat v instalaci aktualizace.\n\nPoznámka: tato funkce vyžaduje nainstalovaný kompatibilní režim Recovery nebo je nutné instalaci provést ručně.</string>
|
||||
<string name="apply_update_dialog_message_ab">Chystáte se aktualizovat na <xliff:g id="update_name">%1$s</xliff:g>.\n\nPokud stisknete <xliff:g id="ok">%2$s</xliff:g>, spustí se instalace na pozadí.\n\nPo dokončení budete vyzváni k restartu.</string>
|
||||
<string name="apply_update_dialog_message">Chystáte se instalovat <xliff:g id="update_name">%1$s</xliff:g>.\n\nPokud stisknete <xliff:g id="ok">%2$s</xliff:g>, telefon se restartuje do režimu Recovery, kde budete pokračovat v instalaci aktualizace.\n\nPoznámka: tato funkce vyžaduje nainstalovaný kompatibilní režim Recovery nebo je nutné instalaci provést ručně.</string>
|
||||
<string name="apply_update_dialog_message_ab">Chystáte se instalovat <xliff:g id="update_name">%1$s</xliff:g>.\n\nPokud stisknete <xliff:g id="ok">%2$s</xliff:g>, spustí se instalace na pozadí.\n\nPo dokončení budete vyzváni k restartu.</string>
|
||||
<string name="cancel_installation_dialog_message">Zrušit instalaci?</string>
|
||||
<string name="label_download_url">URL stažení</string>
|
||||
<string name="toast_download_url_copied">URL zkopírována</string>
|
||||
@@ -89,6 +79,7 @@
|
||||
<string name="notification_export_success">Aktualizace exportována</string>
|
||||
<string name="notification_export_fail">Chyba exportu</string>
|
||||
<string name="toast_already_exporting">Aktualizace se již exportuje</string>
|
||||
<string name="toast_export_started">Export byl zahájen</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">Zbývá 1 sekunda</item>
|
||||
<item quantity="few">Zbývají <xliff:g id="count">%d</xliff:g> sekundy</item>
|
||||
@@ -107,14 +98,23 @@
|
||||
<item quantity="many">Zbývá <xliff:g id="count">%d</xliff:g> hodin</item>
|
||||
<item quantity="other">Zbývá <xliff:g id="count">%d</xliff:g> hodin</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Varování</string>
|
||||
<string name="update_on_mobile_data_message">Chystáte se stáhnout aktualizaci pomocí mobilních dat, což pravděpodobně zapříčiní vysoké využití dat. Přejete si pokračovat?</string>
|
||||
<string name="checkbox_mobile_data_warning">Znovu nezobrazovat</string>
|
||||
<string name="menu_mobile_data_warning">Upozornění mobilních dat</string>
|
||||
<string name="update_over_metered_network_title">Varování</string>
|
||||
<string name="update_over_metered_network_message">Chystáte se stáhnout aktualizaci skrze měřenou síť, což pravděpodobně zapříčiní vysoké využití dat. Chcete pokračovat?</string>
|
||||
<string name="checkbox_metered_network_warning">Znovu nezobrazovat</string>
|
||||
<string name="menu_metered_network_warning">Upozornění na měřenou síť</string>
|
||||
<string name="blocked_update_dialog_title">Aktualizace zablokována</string>
|
||||
<string name="blocked_update_dialog_message">Tuto aktualizaci nelze nainstalovat pomocí aplikace aktualizace. Přečtěte si <xliff:g id="info_url">%1$s </xliff:g> pro další informace.</string>
|
||||
<string name="export_channel_title">Dokončení exportu</string>
|
||||
<string name="new_updates_channel_title">Nové aktualizace</string>
|
||||
<string name="ongoing_channel_title">Probíhající stahování</string>
|
||||
<string name="update_failed_channel_title">Aktualizace se nezdařila</string>
|
||||
<string name="info_dialog_title">Věděli jste, že…</string>
|
||||
<string name="info_dialog_message">Aktualizace LineageOS jsou plné instalační balíčky. To znamená, že můžete vždy nainstalovat pouze nejnovější aktualizaci, a\u00a0je možné některé z\u00a0nich zcela přeskočit!</string>
|
||||
<string name="info_dialog_ok">Děkujeme za informace!</string>
|
||||
<string name="local_update_import">Místní aktualizace</string>
|
||||
<string name="local_update_import_progress">Probíhá import místní aktualizace\u2026</string>
|
||||
<string name="local_update_import_success">%1$s byla importována. Chcete ji nainstalovat?</string>
|
||||
<string name="local_update_import_failure">Nepodařilo se importovat místní aktualizaci</string>
|
||||
<string name="local_update_import_install">Instalovat</string>
|
||||
<string name="local_update_name">Místní aktualizace</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Diweddarydd</string>
|
||||
@@ -54,6 +42,8 @@
|
||||
<string name="menu_export_update">Allforio\'r diweddariad</string>
|
||||
<string name="menu_show_changelog">Dangos log newid</string>
|
||||
<string name="menu_ab_perf_mode">Blaenoriaethu\'r broses diweddaru</string>
|
||||
<string name="menu_update_recovery">Adfer y modd diweddaru</string>
|
||||
<string name="toast_forced_update_recovery">Mae\'n amhosibl analluogi diweddariadau Adfer Lineage ar y ddyfais hon.</string>
|
||||
<string name="snack_updates_found">Mae yna ddiweddariad(au) newydd</string>
|
||||
<string name="snack_no_updates_found">Ni chanfuwyd diweddariadau newydd</string>
|
||||
<string name="snack_updates_check_failed">Methodd gwiriad y diweddariad. Gwiria dy gysylltiad â\'r rhwydwaith a rhoi cynnig arall arni.</string>
|
||||
@@ -66,8 +56,8 @@
|
||||
<string name="header_last_updates_check">Gwiriwyd diwethaf: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> o <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> o <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> o <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> o <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Yn dilysu\'r diweddariad</string>
|
||||
<string name="list_no_updates">Ni chanfuwyd diweddariadau newydd. I wirio am ddiweddariadau newydd dy hun, defnyddia\'r botwm ail-lwytho.</string>
|
||||
<string name="action_download">Lawrlwytho</string>
|
||||
@@ -80,8 +70,8 @@
|
||||
<string name="confirm_delete_dialog_title">Dileu ffeil</string>
|
||||
<string name="confirm_delete_dialog_message">Dileu\'r ffeil diweddariad a ddewiswyd?</string>
|
||||
<string name="apply_update_dialog_title">Gosod diweddariad</string>
|
||||
<string name="apply_update_dialog_message">Rwyt ar fin uwchraddio i <xliff:g id="update_name">%1$s</xliff:g>.\n\nOs wyt yn gwasgu <xliff:g id="ok">%2$s</xliff:g>, bydd y ddyfais yn ail-ddechrau ei hun i\'r modd adfer er mwyn gosod y diweddariad.\n\nNodyn: Mae ar y nodwedd hon angen Modd Adfer (Recovery) cydnaws er mwyn gosod diweddariadau yn awtomatig.</string>
|
||||
<string name="apply_update_dialog_message_ab">Rwyt ar fin uwchraddio i <xliff:g id="update_name">%1$s</xliff:g>.\n\nOs wyt yn gwasgu <xliff:g id="ok">%2$s</xliff:g>, bydd y ddyfais yn dechrau\'r gosod yn y cefndir.\n\nPan fydd wedi\'i gwblhau, cei dy hysbysu i ailddechrau\'r system.</string>
|
||||
<string name="apply_update_dialog_message">Rwyt ar fin osod <xliff:g id="update_name">%1$s</xliff:g>.\n\nOs wyt yn gwasgu <xliff:g id="ok">%2$s</xliff:g>, bydd y ddyfais yn ail-ddechrau ei hun i\'r modd adfer er mwyn gosod y diweddariad.\n\nNodyn: Mae ar y nodwedd hon angen Modd Adfer (Recovery) cydnaws er mwyn gosod diweddariadau yn awtomatig.</string>
|
||||
<string name="apply_update_dialog_message_ab">Rwyt ar fin osod <xliff:g id="update_name">%1$s</xliff:g>.\n\nOs wyt yn gwasgu <xliff:g id="ok">%2$s</xliff:g>, bydd y ddyfais yn dechrau\'r gosod yn y cefndir.\n\nPan fydd wedi\'i gwblhau, cei dy hysbysu i ailddechrau\'r system.</string>
|
||||
<string name="cancel_installation_dialog_message">Diddymu\'r gosod?</string>
|
||||
<string name="label_download_url">URL lawrlwytho</string>
|
||||
<string name="toast_download_url_copied">Copïwyd yr URL</string>
|
||||
@@ -89,6 +79,7 @@
|
||||
<string name="notification_export_success">Allforiwyd y diweddariad</string>
|
||||
<string name="notification_export_fail">Gwall allforio</string>
|
||||
<string name="toast_already_exporting">Eisoes yn allforio diweddariad</string>
|
||||
<string name="toast_export_started">Wedi dechrau allforio</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="zero"><xliff:g id="count">%d</xliff:g> eiliadau yn weddill</item>
|
||||
<item quantity="one"><xliff:g id="count">%d</xliff:g> eiliad yn weddill</item>
|
||||
@@ -113,14 +104,23 @@
|
||||
<item quantity="many"><xliff:g id="count">%d</xliff:g> awr yn weddill</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> awr yn weddill</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Rhybudd</string>
|
||||
<string name="update_on_mobile_data_message">Rwyt ar fin lawrlwytho pecyn diweddaru gyda llawer o ddata dros gysylltiad data symudol. Wyt ti am barhau?</string>
|
||||
<string name="checkbox_mobile_data_warning">Peidio â dangos eto</string>
|
||||
<string name="menu_mobile_data_warning">Rhybudd data symudol</string>
|
||||
<string name="update_over_metered_network_title">Rhybudd</string>
|
||||
<string name="update_over_metered_network_message">Rwyt ar fin lawrlwytho pecyn diweddaru gyda llawer o ddata dros rwydwaith mesuredig. Wyt ti am barhau?</string>
|
||||
<string name="checkbox_metered_network_warning">Peidio â dangos eto</string>
|
||||
<string name="menu_metered_network_warning">Rhybudd rhwydwaith mesuredig</string>
|
||||
<string name="blocked_update_dialog_title">Rhwystrwyd y diweddariad</string>
|
||||
<string name="blocked_update_dialog_message">Ni ellir gosod y diweddariad hwn gyda\'r ap diweddarydd. Gweler <xliff:g id="info_url">%1$s</xliff:g> am wybodaeth bellach.</string>
|
||||
<string name="export_channel_title">Cwblhawyd allforio</string>
|
||||
<string name="new_updates_channel_title">Diweddariadau newydd</string>
|
||||
<string name="ongoing_channel_title">Llwythi sy\'n parhau</string>
|
||||
<string name="update_failed_channel_title">Methodd y diweddariad</string>
|
||||
<string name="info_dialog_title">A wyddet ti?</string>
|
||||
<string name="info_dialog_message">Mae diweddariadau LineageOS yn becynnau gosod llawn, felly mae o hyd yn bosib gosod y diweddariad diweddaraf, hyd yn oed os wyt wedi neidio ambell ddiweddariad ers y diwethaf!</string>
|
||||
<string name="info_dialog_ok">Diolch am y wybodaeth!</string>
|
||||
<string name="local_update_import">Diweddariad lleol</string>
|
||||
<string name="local_update_import_progress">Yn mewnforio diweddariad lleol\u2026</string>
|
||||
<string name="local_update_import_success">%1$s wedi ei fewnforio. Wyt ti am ei osod?</string>
|
||||
<string name="local_update_import_failure">Methwyd â mewnforio diweddariad lleol</string>
|
||||
<string name="local_update_import_install">Gosod</string>
|
||||
<string name="local_update_name">Diweddariad lleol</string>
|
||||
</resources>
|
114
app/src/main/res/values-da/strings.xml
Normal file
114
app/src/main/res/values-da/strings.xml
Normal file
@@ -0,0 +1,114 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Opdatering</string>
|
||||
<string name="display_name">Opdatering</string>
|
||||
<string name="verification_failed_notification">Bekræftelse fejlede</string>
|
||||
<string name="verifying_download_notification">Bekræfter opdatering</string>
|
||||
<string name="downloading_notification">Henter</string>
|
||||
<string name="download_paused_notification">Overførsel på pause</string>
|
||||
<string name="download_paused_error_notification">Overførselsfejl</string>
|
||||
<string name="download_completed_notification">Overførsel fuldført</string>
|
||||
<string name="download_starting_notification">Starter overførsel</string>
|
||||
<string name="update_failed_notification">Opdatering fejlede</string>
|
||||
<string name="installation_suspended_notification">Installation suspenderet</string>
|
||||
<string name="new_updates_found_title">Nye opdateringer</string>
|
||||
<string name="text_download_speed">%1$s, %2$s/s</string>
|
||||
<string name="pause_button">Pause</string>
|
||||
<string name="resume_button">Genoptag</string>
|
||||
<string name="suspend_button">Suspendér</string>
|
||||
<string name="installing_update">Installerer opdateringspakke</string>
|
||||
<string name="installing_update_error">Installeringsfejl</string>
|
||||
<string name="installing_update_finished">Opdatering installeret</string>
|
||||
<string name="finalizing_package">Fuldfører pakkeinstallering</string>
|
||||
<string name="preparing_ota_first_boot">Forbereder på første opstart</string>
|
||||
<string name="dialog_prepare_zip_message">Indledende opdateringsforberedelse</string>
|
||||
<string name="dialog_battery_low_title">Lavt batteriniveau</string>
|
||||
<string name="dialog_battery_low_message_pct">Du har for lidt strøm på dit batteri. Du skal mindst bruge <xliff:g id="percent_discharging">%1$d</xliff:g>%% for at installere opdateringen, <xliff:g id="percent_charging">%2$d</xliff:g>%% hvis din enhed oplader.</string>
|
||||
<string name="reboot">Genstart</string>
|
||||
<string name="menu_refresh">Genopfrisk</string>
|
||||
<string name="menu_preferences">Præferencer</string>
|
||||
<string name="menu_auto_updates_check">Auto-opdateringskontrol</string>
|
||||
<string name="menu_auto_updates_check_interval_daily">Én gang dagligt</string>
|
||||
<string name="menu_auto_updates_check_interval_weekly">En gang om ugen</string>
|
||||
<string name="menu_auto_updates_check_interval_monthly">En gang om måneden</string>
|
||||
<string name="menu_auto_updates_check_interval_never">Aldrig</string>
|
||||
<string name="menu_auto_delete_updates">Slet opdateringer, når installeret</string>
|
||||
<string name="menu_delete_update">Slet</string>
|
||||
<string name="menu_copy_url">Kopiér URL</string>
|
||||
<string name="menu_export_update">Eksportér opdatering</string>
|
||||
<string name="menu_show_changelog">Vis ændringslog</string>
|
||||
<string name="menu_ab_perf_mode">Prioritér opdateringsproces</string>
|
||||
<string name="menu_update_recovery">Opdatér gendannelse</string>
|
||||
<string name="toast_forced_update_recovery">Det er umuligt at deaktivere Lineage Gendannelse opdateringer på denne enhed.</string>
|
||||
<string name="snack_updates_found">Nye opdateringer fundet</string>
|
||||
<string name="snack_no_updates_found">Ingen nye opdateringer fundet</string>
|
||||
<string name="snack_updates_check_failed">Opdateringskontrollen fejlede. Kontrollér venligst din internetforbindelse og prøv igen senere.</string>
|
||||
<string name="snack_download_failed">Overførslen fejlede. Kontrollér venligst din internetforbindelse og prøv igen senere.</string>
|
||||
<string name="snack_download_verification_failed">Opdateringsbekræftelsen fejlede.</string>
|
||||
<string name="snack_download_verified">Overførsel fuldført.</string>
|
||||
<string name="snack_update_not_installable">Denne opdatering kan ikke installeres ovenpå det nuværende build.</string>
|
||||
<string name="header_title_text">LineageOS\n%1$s</string>
|
||||
<string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string>
|
||||
<string name="header_last_updates_check">Sidst kontrolleret: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> af <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> af <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Bekræfter opdatering</string>
|
||||
<string name="list_no_updates">Ingen nye opdateringer fundet. Brug Genopfrisk-knappen, for manuel kontrol af nye opdateringer.</string>
|
||||
<string name="action_download">Hent</string>
|
||||
<string name="action_pause">Pause</string>
|
||||
<string name="action_resume">Genoptag</string>
|
||||
<string name="action_install">Installér</string>
|
||||
<string name="action_info">Info</string>
|
||||
<string name="action_delete">Slet</string>
|
||||
<string name="action_cancel">Afbryd</string>
|
||||
<string name="confirm_delete_dialog_title">Slet fil</string>
|
||||
<string name="confirm_delete_dialog_message">Slet den valgte opdateringsfil?</string>
|
||||
<string name="apply_update_dialog_title">Anvend opdatering</string>
|
||||
<string name="apply_update_dialog_message">Du er ved at installere <xliff:g id="update_name">%1$s</xliff:g>. \n\n Hvis du trykker <xliff:g id="ok">%2$s</xliff:g>, enheden vil genstarte i gendannelsestilstand for at installere opdateringen.\n\nNoter: Denne funktion kræver en kompitabel gendannelse eller opdateing vil have brug for at blive installeret manuelt.</string>
|
||||
<string name="apply_update_dialog_message_ab">Du er ved at installere <xliff:g id="update_name">%1$s</xliff:g>.\n\n Hvis du trykker <xliff:g id="ok">%2$s</xliff:g>, vil enheden begynde at installere i baggrunden.\n\n Når færdig, vil du blive spurgt om at genstarte.</string>
|
||||
<string name="cancel_installation_dialog_message">Afbryd installeringen?</string>
|
||||
<string name="label_download_url">Hent URL</string>
|
||||
<string name="toast_download_url_copied">URL kopieret</string>
|
||||
<string name="dialog_export_title">Eksporterer opdatering</string>
|
||||
<string name="notification_export_success">Opdatering eksporteret</string>
|
||||
<string name="notification_export_fail">Eksportfejl</string>
|
||||
<string name="toast_already_exporting">Eksporterer allerede en opdatering</string>
|
||||
<string name="toast_export_started">Eksportering startet</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">1 sekund tilbage</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> sekunder tilbage</item>
|
||||
</plurals>
|
||||
<plurals name="eta_minutes">
|
||||
<item quantity="one">1 minut tilbage</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> minutter tilbage</item>
|
||||
</plurals>
|
||||
<plurals name="eta_hours">
|
||||
<item quantity="one">1 time tilbage</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> timer tilbage</item>
|
||||
</plurals>
|
||||
<string name="update_over_metered_network_title">Advarsel</string>
|
||||
<string name="update_over_metered_network_message">Du er ved at downloade en opdateringspakke over målingstilsluttet netværk, hvilket med stor sandsynlighed kan give højt data forbrug. Vil du gerne fortsætte?</string>
|
||||
<string name="checkbox_metered_network_warning">Vis ikke igen</string>
|
||||
<string name="menu_metered_network_warning">Målingstilsluttet netværks advarsel</string>
|
||||
<string name="blocked_update_dialog_title">Opdatering blokeret</string>
|
||||
<string name="blocked_update_dialog_message">Denne opdatering kan ikke installeres over opdatering-app\'en. Læs venligst <xliff:g id="info_url">%1$s</xliff:g> for mere information.</string>
|
||||
<string name="export_channel_title">Eksport fuldførelse</string>
|
||||
<string name="new_updates_channel_title">Nye opdateringer</string>
|
||||
<string name="ongoing_channel_title">Igangværende Downloads</string>
|
||||
<string name="update_failed_channel_title">Opdatering fejlede</string>
|
||||
<string name="info_dialog_title">Vidste du?</string>
|
||||
<string name="info_dialog_message">LineageOS opdateringer er komplette installationspakker. Det betyder, at du altid kun kan installere den seneste opdatering, selv om du har sprunget nogle over!</string>
|
||||
<string name="info_dialog_ok">Tak for info!</string>
|
||||
<string name="local_update_import">Lokal opdatering</string>
|
||||
<string name="local_update_import_progress">Importerer lokal opdatering\u2026</string>
|
||||
<string name="local_update_import_success">%1$s er blevet importeret. Vil du installere det?</string>
|
||||
<string name="local_update_import_failure">Import af lokal opdatering mislykkedes</string>
|
||||
<string name="local_update_import_install">Installér</string>
|
||||
<string name="local_update_name">Lokal opdatering</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Updater</string>
|
||||
@@ -39,10 +27,16 @@
|
||||
<string name="preparing_ota_first_boot">Erster Start wird vorbereitet</string>
|
||||
<string name="dialog_prepare_zip_message">Update wird vorbereitet</string>
|
||||
<string name="dialog_battery_low_title">Niedriger Akkustand</string>
|
||||
<string name="dialog_battery_low_message_pct">Ihr Akkustand ist zu niedrig. Es werden mindestens <xliff:g id="percent_discharging">%1$d</xliff:g>%% Restkapazität (oder <xliff:g id="percent_charging">%2$d</xliff:g>%% mit angeschlossenem Ladegerät) benötigt, um fortzufahren.</string>
|
||||
<string name="dialog_battery_low_message_pct">Dein Akkustand ist zu niedrig. Es werden mindestens <xliff:g id="percent_discharging">%1$d</xliff:g>%% Restkapazität (oder <xliff:g id="percent_charging">%2$d</xliff:g>%% mit angeschlossenem Ladegerät) benötigt, um fortzufahren.</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[ Bitte führe die folgenden Befehle aus und versuche anschließend das Update erneut durchzuführen:\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot
|
||||
]]></string>
|
||||
<string name="dialog_scratch_mounted_title">Update kann nicht installiert werden, wenn OverlayFS eingebunden ist</string>
|
||||
<string name="reboot">Neustart</string>
|
||||
<string name="menu_refresh">Aktualisieren</string>
|
||||
<string name="menu_preferences">Voreinstellungen</string>
|
||||
<string name="menu_preferences">Einstellungen</string>
|
||||
<string name="menu_auto_updates_check">Automatisch nach Updates suchen</string>
|
||||
<string name="menu_auto_updates_check_interval_daily">Einmal am Tag</string>
|
||||
<string name="menu_auto_updates_check_interval_weekly">Einmal pro Woche</string>
|
||||
@@ -54,10 +48,12 @@
|
||||
<string name="menu_export_update">Update exportieren</string>
|
||||
<string name="menu_show_changelog">Changelog anzeigen</string>
|
||||
<string name="menu_ab_perf_mode">Updateprozess priorisieren</string>
|
||||
<string name="menu_update_recovery">Recovery aktualisieren</string>
|
||||
<string name="toast_forced_update_recovery">Es ist nicht möglich, die Updates vom Lineage-Recovery auf diesem Gerät zu deaktivieren.</string>
|
||||
<string name="snack_updates_found">Neue Updates gefunden</string>
|
||||
<string name="snack_no_updates_found">Keine neuen Updates gefunden</string>
|
||||
<string name="snack_updates_check_failed">Die Suche nach Updates ist fehlgeschlagen. Bitte überprüfen Sie die Internetverbindung und versuchen Sie es später erneut.</string>
|
||||
<string name="snack_download_failed">Das Herunterladen ist fehlgeschlagen. Bitte überpüfen sie die Internetverbindung und versuchen Sie es später erneut.</string>
|
||||
<string name="snack_updates_check_failed">Die Suche nach Updates ist fehlgeschlagen. Bitte überprüfe die Internetverbindung und versuche es später erneut.</string>
|
||||
<string name="snack_download_failed">Das Herunterladen ist fehlgeschlagen. Bitte überpüfe die Internetverbindung und versuche es später erneut.</string>
|
||||
<string name="snack_download_verification_failed">Die Update-Überprüfung ist fehlgeschlagen.</string>
|
||||
<string name="snack_download_verified">Herunterladen abgeschlossen.</string>
|
||||
<string name="snack_update_not_installable">Dieses Update kann nicht auf die bestehende Installation angewendet werden.</string>
|
||||
@@ -66,10 +62,10 @@
|
||||
<string name="header_last_updates_check">Zuletzt geprüft: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> von <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> von <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> von <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> von <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Update wird geprüft</string>
|
||||
<string name="list_no_updates">Keine neuen Updates gefunden. Um manuell nach neuen Updates zu suchen, verwenden Sie die Schaltfläche \"Aktualisieren\".</string>
|
||||
<string name="list_no_updates">Keine neuen Updates gefunden. Um manuell nach neuen Updates zu suchen, verwende die Schaltfläche \"Aktualisieren\".</string>
|
||||
<string name="action_download">Herunterladen</string>
|
||||
<string name="action_pause">Anhalten</string>
|
||||
<string name="action_resume">Fortsetzen</string>
|
||||
@@ -80,8 +76,8 @@
|
||||
<string name="confirm_delete_dialog_title">Datei löschen</string>
|
||||
<string name="confirm_delete_dialog_message">Soll die ausgewählte Update-Datei gelöscht werden?</string>
|
||||
<string name="apply_update_dialog_title">Update installieren</string>
|
||||
<string name="apply_update_dialog_message">Bereit zum Update auf <xliff:g id="update_name">%1$s</xliff:g>\n\nWenn Sie <xliff:g id="ok">%2$s</xliff:g> drücken, wird das Gerät im Recovery-Modus gestartet, um das Update durchzuführen.\n\nHinweis: Diese Funktion erfordert ein kompatibles Recovery-System, anderenfalls muss das Update manuell installiert werden.</string>
|
||||
<string name="apply_update_dialog_message_ab">Bereit zum Update auf <xliff:g id="update_name">%1$s</xliff:g>\n\nWenn Sie <xliff:g id="ok">%2$s drücken</xliff:g>, beginnt das Gerät im Hintergrund mit der Installation\n\nSobald diese abgeschlossen ist, werden Sie zum Neustart aufgefordert.</string>
|
||||
<string name="apply_update_dialog_message">Bereit zur Installation von <xliff:g id="update_name">%1$s</xliff:g>\n\nWenn du <xliff:g id="ok">%2$s</xliff:g> drückst, wird das Gerät im Recovery-Modus gestartet, um das Update durchzuführen.\n\nHinweis: Diese Funktion erfordert ein kompatibles Recovery-System, anderenfalls muss das Update manuell installiert werden.</string>
|
||||
<string name="apply_update_dialog_message_ab">Bereit zur Installation von <xliff:g id="update_name">%1$s</xliff:g>\n\nWenn du <xliff:g id="ok">%2$s drückst</xliff:g>, beginnt das Gerät im Hintergrund mit der Installation.\n\nSobald diese abgeschlossen ist, wirst du zum Neustart aufgefordert.</string>
|
||||
<string name="cancel_installation_dialog_message">Installation abbrechen?</string>
|
||||
<string name="label_download_url">Download URL</string>
|
||||
<string name="toast_download_url_copied">URL wurde kopiert</string>
|
||||
@@ -89,6 +85,7 @@
|
||||
<string name="notification_export_success">Update wurde exportiert</string>
|
||||
<string name="notification_export_fail">Fehler beim Export</string>
|
||||
<string name="toast_already_exporting">Update wird bereits exportiert</string>
|
||||
<string name="toast_export_started">Export gestartet</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">noch 1 Sekunde</item>
|
||||
<item quantity="other">noch <xliff:g id="count">%d</xliff:g> Sekunden</item>
|
||||
@@ -101,14 +98,23 @@
|
||||
<item quantity="one">noch 1 Stunde</item>
|
||||
<item quantity="other">noch <xliff:g id="count">%d</xliff:g> Stunden</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Achtung</string>
|
||||
<string name="update_on_mobile_data_message">Sie sind dabei ein Software-Update über das Mobilfunknetz herunterzuladen, was zu einem hohen Datenverbrauch führen kann. Möchten Sie fortfahren?</string>
|
||||
<string name="checkbox_mobile_data_warning">Nicht wieder anzeigen</string>
|
||||
<string name="menu_mobile_data_warning">Mobildaten-Warnung</string>
|
||||
<string name="update_over_metered_network_title">Achtung</string>
|
||||
<string name="update_over_metered_network_message">Du bist dabei ein Software-Update über ein getaktetes Netzwerk herunterzuladen, was zu einem hohen Datenverbrauch führen kann. Möchtest du fortfahren?</string>
|
||||
<string name="checkbox_metered_network_warning">Nicht wieder anzeigen</string>
|
||||
<string name="menu_metered_network_warning">Warnen bei getakteter Verbindung</string>
|
||||
<string name="blocked_update_dialog_title">Update blockiert</string>
|
||||
<string name="blocked_update_dialog_message">Dieses Update kann mit der Updater-App nicht installiert werden. Für weitere Informationen lesen Sie bitte <xliff:g id="info_url">%1$s </xliff:g>.</string>
|
||||
<string name="blocked_update_dialog_message">Dieses Update kann mit der Updater-App nicht installiert werden. Für weitere Informationen lies bitte <xliff:g id="info_url">%1$s </xliff:g>.</string>
|
||||
<string name="export_channel_title">Export abgeschlossen</string>
|
||||
<string name="new_updates_channel_title">Neue Updates</string>
|
||||
<string name="ongoing_channel_title">Laufende Downloads</string>
|
||||
<string name="update_failed_channel_title">Update fehlgeschlagen</string>
|
||||
<string name="info_dialog_title">Schon gewusst?</string>
|
||||
<string name="info_dialog_message">LineageOS-Updates sind vollständige Installationspakete. Das bedeutet, dass du immer nur das neueste Update installieren zu brauchst, auch wenn du zwischendurch welche übersprungen hast!</string>
|
||||
<string name="info_dialog_ok">Danke für die Information!</string>
|
||||
<string name="local_update_import">Lokales Update</string>
|
||||
<string name="local_update_import_progress">Lokales Update wird importiert\u2026</string>
|
||||
<string name="local_update_import_success">%1$s wurde importiert. Möchtest du es installieren?</string>
|
||||
<string name="local_update_import_failure">Fehler beim Importieren des lokalen Updates</string>
|
||||
<string name="local_update_import_install">Installieren</string>
|
||||
<string name="local_update_name">Lokales Update</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Ενημερώσεις</string>
|
||||
@@ -40,6 +28,12 @@
|
||||
<string name="dialog_prepare_zip_message">Προκαταρκτική προετοιμασία ενημέρωσης</string>
|
||||
<string name="dialog_battery_low_title">Χαμηλή μπαταρία</string>
|
||||
<string name="dialog_battery_low_message_pct">Η στάθμη της μπαταρίας είναι πολύ χαμηλή, χρειάζεστε τουλάχιστον <xliff:g id="percent_discharging">%1$d</xliff:g>%% της μπαταρίας για να συνεχίσετε ή <xliff:g id="percent_charging">%2$d</xliff:g>%% κατά την φόρτιση.</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[ Παρακαλώ εκτελέστε τις ακόλουθες εντολές και δοκιμάστε ξανά την ενημέρωση:\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot
|
||||
]]></string>
|
||||
<string name="dialog_scratch_mounted_title">Αδυναμία εγκατάστασης ενημέρωσης με το OverlayFS προσαρτημένο</string>
|
||||
<string name="reboot">Επανεκκίνηση</string>
|
||||
<string name="menu_refresh">Ανανέωση</string>
|
||||
<string name="menu_preferences">Προτιμήσεις</string>
|
||||
@@ -54,6 +48,8 @@
|
||||
<string name="menu_export_update">Εξαγωγή ενημέρωσης</string>
|
||||
<string name="menu_show_changelog">Εμφάνιση αλλαγών</string>
|
||||
<string name="menu_ab_perf_mode">Επιτάχυνση διαδικασίας ενημέρωσης</string>
|
||||
<string name="menu_update_recovery">Ενημέρωση recovery</string>
|
||||
<string name="toast_forced_update_recovery">Είναι αδύνατο να απενεργοποιήσετε τις ενημερώσεις Lineage Recovery σε αυτή τη συσκευή.</string>
|
||||
<string name="snack_updates_found">Βρέθηκαν νέες ενημερώσεις</string>
|
||||
<string name="snack_no_updates_found">Δεν βρέθηκαν νέες ενημερώσεις</string>
|
||||
<string name="snack_updates_check_failed">Ο έλεγχος για ενημερώσεις απέτυχε. Παρακαλώ ελέγξτε την σύνδεσή σας στο διαδίκτυο και προσπαθήστε αργότερα.</string>
|
||||
@@ -66,8 +62,8 @@
|
||||
<string name="header_last_updates_check">Τελευταίος έλεγχος: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> από <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> από <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> από <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> από <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Επαλήθευση ενημέρωσης</string>
|
||||
<string name="list_no_updates">Δεν βρέθηκαν νέες ενημερώσεις. Για να ελέγξετε χειροκίνητα για νέες ενημερώσεις, χρησιμοποιήστε το πλήκτρο Ανανέωσης.</string>
|
||||
<string name="action_download">Λήψη</string>
|
||||
@@ -80,8 +76,8 @@
|
||||
<string name="confirm_delete_dialog_title">Διαγραφή αρχείου</string>
|
||||
<string name="confirm_delete_dialog_message">Διαγραφή του επιλεγμένου αρχείου ενημέρωσης;</string>
|
||||
<string name="apply_update_dialog_title">Εφαρμογή ενημέρωσης</string>
|
||||
<string name="apply_update_dialog_message">Πρόκειται να αναβαθμίσετε σε <xliff:g id="update_name">%1$s</xliff:g>.\n\nΑν πατήσετε <xliff:g id="ok">%2$s</xliff:g>, η συσκευή θα κάνει επανεκκίνηση σε λειτουργία recovery για να εγκατασταθεί η ενημέρωση.\n\nΣημείωση: Αυτή η λειτουργία απαιτεί μια συμβατή recovery αλλιώς η ενημέρωση θα πρέπει να εγκατασταθεί χειροκίνητα.</string>
|
||||
<string name="apply_update_dialog_message_ab">Πρόκειται να αναβαθμίσετε σε <xliff:g id="update_name">%1$s</xliff:g>.\n\nΕάν πατήσετε <xliff:g id="ok">%2$s</xliff:g>, η συσκευή θα ξεκινήσει την εγκατάσταση στο παρασκήνιο.\n\nΌταν ολοκληρωθεί, θα σας ζητηθεί να κάνετε επανεκκίνηση.</string>
|
||||
<string name="apply_update_dialog_message">Πρόκειται να εγκαταστήσετε το <xliff:g id="update_name">%1$s</xliff:g>.\n\nΑν πατήσετε <xliff:g id="ok">%2$s</xliff:g>, η συσκευή θα κάνει επανεκκίνηση σε λειτουργία recovery για να εγκατασταθεί η ενημέρωση.\n\nΣημείωση: Αυτή η λειτουργία απαιτεί μια συμβατή recovery αλλιώς η ενημέρωση θα πρέπει να εγκατασταθεί χειροκίνητα.</string>
|
||||
<string name="apply_update_dialog_message_ab">Πρόκειται να εγκαταστήσετε το <xliff:g id="update_name">%1$s</xliff:g>.\n\nΕάν πατήσετε <xliff:g id="ok">%2$s</xliff:g>, η συσκευή θα ξεκινήσει την εγκατάσταση στο παρασκήνιο.\n\nΌταν ολοκληρωθεί, θα σας ζητηθεί να κάνετε επανεκκίνηση.</string>
|
||||
<string name="cancel_installation_dialog_message">Ακύρωση της εγκατάστασης;</string>
|
||||
<string name="label_download_url">Λήψη συνδέσμου</string>
|
||||
<string name="toast_download_url_copied">Ο σύνδεσμος αντιγράφηκε</string>
|
||||
@@ -89,6 +85,7 @@
|
||||
<string name="notification_export_success">Η ενημέρωση εξάχθηκε</string>
|
||||
<string name="notification_export_fail">Σφάλμα εξαγωγής</string>
|
||||
<string name="toast_already_exporting">Εξάγεται ήδη μία ενημέρωση</string>
|
||||
<string name="toast_export_started">Η εξαγωγή ξεκίνησε</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">απομένει 1 δευτερόλεπτο</item>
|
||||
<item quantity="other">απομένουν <xliff:g id="count">%d</xliff:g> δευτερόλεπτα</item>
|
||||
@@ -101,14 +98,23 @@
|
||||
<item quantity="one">απομένει 1 ώρα</item>
|
||||
<item quantity="other">απομένουν <xliff:g id="count">%d</xliff:g> ώρες</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Προσοχή</string>
|
||||
<string name="update_on_mobile_data_message">Είστε έτοιμοι να κατεβάσετε ένα πακέτο ενημέρωσης χρησιμοποιώντας δεδομένα κινητής τηλεφωνίας το οποίο είναι πιθανό να προκαλέσει υψηλή χρήση δεδομένων. Θα θέλατε να συνεχίσετε;</string>
|
||||
<string name="checkbox_mobile_data_warning">Να μην εμφανιστεί ξανά</string>
|
||||
<string name="menu_mobile_data_warning">Προειδοποίηση δεδομένων κινητής τηλ.</string>
|
||||
<string name="update_over_metered_network_title">Προσοχή</string>
|
||||
<string name="update_over_metered_network_message">Είστε έτοιμοι να κατεβάσετε ένα πακέτο ενημέρωσης χρησιμοποιώντας ένα δίκτυο με ογκοχρέωση δεδομένων το οποίο είναι πιθανό να προκαλέσει υψηλή χρήση δεδομένων. Θα θέλατε να συνεχίσετε;</string>
|
||||
<string name="checkbox_metered_network_warning">Να μην εμφανιστεί ξανά</string>
|
||||
<string name="menu_metered_network_warning">Προειδοποίηση ογκοχρέωσης δικτύου</string>
|
||||
<string name="blocked_update_dialog_title">Η ενημέρωση μπλοκαρίστηκε</string>
|
||||
<string name="blocked_update_dialog_message">Αυτή η ενημέρωση δεν μπορεί να εγκατασταθεί χρησιμοποιώντας την εφαρμογή ενημέρωσης. Παρακαλούμε διαβάστε το <xliff:g id="info_url">%1$s </xliff:g> για περισσότερες πληροφορίες.</string>
|
||||
<string name="export_channel_title">Ολοκλήρωση εξαγωγής</string>
|
||||
<string name="new_updates_channel_title">Νέες ενημερώσεις</string>
|
||||
<string name="ongoing_channel_title">Λήψεις σε εξέλιξη</string>
|
||||
<string name="update_failed_channel_title">Η ενημέρωση απέτυχε</string>
|
||||
<string name="info_dialog_title">Το γνωρίζατε;</string>
|
||||
<string name="info_dialog_message">Οι ενημερώσεις LineageOS είναι πλήρη πακέτα εγκατάστασης. Αυτό σημαίνει ότι μπορείτε πάντα να εγκαταστήσετε μόνο την πιο πρόσφατη ενημέρωση, ακόμα κι αν παραλείψατε κάποια ενδιάμεσα!</string>
|
||||
<string name="info_dialog_ok">Ευχαριστώ για τις πληροφορίες!</string>
|
||||
<string name="local_update_import">Τοπική ενημέρωση</string>
|
||||
<string name="local_update_import_progress">Εισαγωγή τοπικής ενημέρωσης\u2026</string>
|
||||
<string name="local_update_import_success">%1$s έχει εισαχθεί. Θέλετε να τo εγκαταστήσετε;</string>
|
||||
<string name="local_update_import_failure">Αποτυχία εισαγωγής τοπικής ενημέρωσης</string>
|
||||
<string name="local_update_import_install">Εγκατάσταση</string>
|
||||
<string name="local_update_name">Τοπική ενημέρωση</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Updater</string>
|
||||
@@ -40,6 +28,12 @@
|
||||
<string name="dialog_prepare_zip_message">Preliminary update preparation</string>
|
||||
<string name="dialog_battery_low_title">Low battery</string>
|
||||
<string name="dialog_battery_low_message_pct">The battery level is too low, you need at least <xliff:g id="percent_discharging">%1$d</xliff:g>%% of the battery to continue, <xliff:g id="percent_charging">%2$d</xliff:g>%% if charging.</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[ Please run the following commands and retry the update:\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot
|
||||
]]></string>
|
||||
<string name="dialog_scratch_mounted_title">Cannot install update with OverlayFS mounted</string>
|
||||
<string name="reboot">Reboot</string>
|
||||
<string name="menu_refresh">Refresh</string>
|
||||
<string name="menu_preferences">Preferences</string>
|
||||
@@ -54,6 +48,8 @@
|
||||
<string name="menu_export_update">Export update</string>
|
||||
<string name="menu_show_changelog">Show changelog</string>
|
||||
<string name="menu_ab_perf_mode">Prioritise update process</string>
|
||||
<string name="menu_update_recovery">Update recovery</string>
|
||||
<string name="toast_forced_update_recovery">It is impossible to disable Lineage Recovery updates on this device.</string>
|
||||
<string name="snack_updates_found">New updates found</string>
|
||||
<string name="snack_no_updates_found">No new updates found</string>
|
||||
<string name="snack_updates_check_failed">The update check failed. Please check your Internet connection and try again later.</string>
|
||||
@@ -66,8 +62,8 @@
|
||||
<string name="header_last_updates_check">Last checked: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Verifying update</string>
|
||||
<string name="list_no_updates">No new updates found. To manually check for new updates, use the Refresh button.</string>
|
||||
<string name="action_download">Download</string>
|
||||
@@ -80,8 +76,8 @@
|
||||
<string name="confirm_delete_dialog_title">Delete file</string>
|
||||
<string name="confirm_delete_dialog_message">Delete the selected update file?</string>
|
||||
<string name="apply_update_dialog_title">Apply update</string>
|
||||
<string name="apply_update_dialog_message">You are about to upgrade to <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will restart itself in recovery mode to install the update.\n\nNote: This feature requires a compatible Recovery or updates will need to be installed manually.</string>
|
||||
<string name="apply_update_dialog_message_ab">You are about to upgrade to <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will begin installing in the background.\n\nOnce completed, you will be prompted to reboot.</string>
|
||||
<string name="apply_update_dialog_message">You are about to install <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will restart itself in recovery mode to install the update.\n\nNote: This feature requires a compatible Recovery or updates will need to be installed manually.</string>
|
||||
<string name="apply_update_dialog_message_ab">You are about to install <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will begin installing in the background.\n\nOnce completed, you will be prompted to reboot.</string>
|
||||
<string name="cancel_installation_dialog_message">Cancel the installation?</string>
|
||||
<string name="label_download_url">Download URL</string>
|
||||
<string name="toast_download_url_copied">URL Copied</string>
|
||||
@@ -89,6 +85,7 @@
|
||||
<string name="notification_export_success">Update exported</string>
|
||||
<string name="notification_export_fail">Export error</string>
|
||||
<string name="toast_already_exporting">Already exporting an update</string>
|
||||
<string name="toast_export_started">Export started</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">1 second left</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> seconds left</item>
|
||||
@@ -101,14 +98,23 @@
|
||||
<item quantity="one">1 hour left</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> hours left</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Warning</string>
|
||||
<string name="update_on_mobile_data_message">You\'re about to download an update package using mobile data which is likely going to cause high data usage. Would you like to proceed?</string>
|
||||
<string name="checkbox_mobile_data_warning">Do not show again</string>
|
||||
<string name="menu_mobile_data_warning">Mobile data warning</string>
|
||||
<string name="update_over_metered_network_title">Warning</string>
|
||||
<string name="update_over_metered_network_message">You\'re about to download an update package over a metered network which is likely going to cause high data usage. Would you like to proceed?</string>
|
||||
<string name="checkbox_metered_network_warning">Do not show again</string>
|
||||
<string name="menu_metered_network_warning">Metered network warning</string>
|
||||
<string name="blocked_update_dialog_title">Update blocked</string>
|
||||
<string name="blocked_update_dialog_message">This update cannot be installed using the updater app. Please read <xliff:g id="info_url">%1$s</xliff:g> for more information.</string>
|
||||
<string name="export_channel_title">Export completion</string>
|
||||
<string name="new_updates_channel_title">New updates</string>
|
||||
<string name="ongoing_channel_title">Ongoing downloads</string>
|
||||
<string name="update_failed_channel_title">Update failed</string>
|
||||
<string name="info_dialog_title">Did you know?</string>
|
||||
<string name="info_dialog_message">LineageOS updates are full installation packages. That means you can always install only the latest update, even if you skipped some in between!</string>
|
||||
<string name="info_dialog_ok">Thanks for the info!</string>
|
||||
<string name="local_update_import">Local update</string>
|
||||
<string name="local_update_import_progress">Importing local update\u2026</string>
|
||||
<string name="local_update_import_success">%1$s has been imported. Do you want to install it?</string>
|
||||
<string name="local_update_import_failure">Failed to import local update</string>
|
||||
<string name="local_update_import_install">Install</string>
|
||||
<string name="local_update_name">Local update</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Updater</string>
|
||||
@@ -40,6 +28,12 @@
|
||||
<string name="dialog_prepare_zip_message">Preliminary update preparation</string>
|
||||
<string name="dialog_battery_low_title">Low battery</string>
|
||||
<string name="dialog_battery_low_message_pct">The battery level is too low, you need at least <xliff:g id="percent_discharging">%1$d</xliff:g>%% of the battery to continue, <xliff:g id="percent_charging">%2$d</xliff:g>%% if charging.</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[ Please run the following commands and retry the update:\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot
|
||||
]]></string>
|
||||
<string name="dialog_scratch_mounted_title">Cannot install update with OverlayFS mounted</string>
|
||||
<string name="reboot">Reboot</string>
|
||||
<string name="menu_refresh">Refresh</string>
|
||||
<string name="menu_preferences">Preferences</string>
|
||||
@@ -54,6 +48,8 @@
|
||||
<string name="menu_export_update">Export update</string>
|
||||
<string name="menu_show_changelog">Show changelog</string>
|
||||
<string name="menu_ab_perf_mode">Prioritize update process</string>
|
||||
<string name="menu_update_recovery">Update recovery</string>
|
||||
<string name="toast_forced_update_recovery">It is impossible to disable Lineage Recovery updates on this device.</string>
|
||||
<string name="snack_updates_found">New updates found</string>
|
||||
<string name="snack_no_updates_found">No new updates found</string>
|
||||
<string name="snack_updates_check_failed">The update check failed. Please check your internet connection and try again later.</string>
|
||||
@@ -66,8 +62,8 @@
|
||||
<string name="header_last_updates_check">Last checked: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Verifying update</string>
|
||||
<string name="list_no_updates">No new updates found. To manually check for new updates, use the Refresh button.</string>
|
||||
<string name="action_download">Download</string>
|
||||
@@ -80,8 +76,8 @@
|
||||
<string name="confirm_delete_dialog_title">Delete file</string>
|
||||
<string name="confirm_delete_dialog_message">Delete the selected update file?</string>
|
||||
<string name="apply_update_dialog_title">Apply update</string>
|
||||
<string name="apply_update_dialog_message">You are about to upgrade to <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will restart itself in recovery mode to install the update.\n\nNote: This feature requires a compatible Recovery or updates will need to be installed manually.</string>
|
||||
<string name="apply_update_dialog_message_ab">You are about to upgrade to <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will begin installing in the background.\n\nOnce completed, you will be prompted to reboot.</string>
|
||||
<string name="apply_update_dialog_message">You are about to install <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will restart itself in recovery mode to install the update.\n\nNote: This feature requires a compatible Recovery or updates will need to be installed manually.</string>
|
||||
<string name="apply_update_dialog_message_ab">You are about to install <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will begin installing in the background.\n\nOnce completed, you will be prompted to reboot.</string>
|
||||
<string name="cancel_installation_dialog_message">Cancel the installation?</string>
|
||||
<string name="label_download_url">Download URL</string>
|
||||
<string name="toast_download_url_copied">URL Copied</string>
|
||||
@@ -89,6 +85,7 @@
|
||||
<string name="notification_export_success">Update exported</string>
|
||||
<string name="notification_export_fail">Export error</string>
|
||||
<string name="toast_already_exporting">Already exporting an update</string>
|
||||
<string name="toast_export_started">Export started</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">1 second left</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> seconds left</item>
|
||||
@@ -101,14 +98,23 @@
|
||||
<item quantity="one">1 hour left</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> hours left</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Warning</string>
|
||||
<string name="update_on_mobile_data_message">You\'re about to download an update package using mobile data which is likely going to cause high data usage. Would you like to proceed?</string>
|
||||
<string name="checkbox_mobile_data_warning">Do not show again</string>
|
||||
<string name="menu_mobile_data_warning">Mobile data warning</string>
|
||||
<string name="update_over_metered_network_title">Warning</string>
|
||||
<string name="update_over_metered_network_message">You\'re about to download an update package over a metered network which is likely going to cause high data usage. Would you like to proceed?</string>
|
||||
<string name="checkbox_metered_network_warning">Do not show again</string>
|
||||
<string name="menu_metered_network_warning">Metered network warning</string>
|
||||
<string name="blocked_update_dialog_title">Update blocked</string>
|
||||
<string name="blocked_update_dialog_message">This update cannot be installed using the updater app. Please read <xliff:g id="info_url">%1$s</xliff:g> for more information.</string>
|
||||
<string name="export_channel_title">Export completion</string>
|
||||
<string name="new_updates_channel_title">New updates</string>
|
||||
<string name="ongoing_channel_title">Ongoing downloads</string>
|
||||
<string name="update_failed_channel_title">Update failed</string>
|
||||
<string name="info_dialog_title">Did you know?</string>
|
||||
<string name="info_dialog_message">LineageOS updates are full installation packages. That means you can always install only the latest update, even if you skipped some in between!</string>
|
||||
<string name="info_dialog_ok">Thanks for the info!</string>
|
||||
<string name="local_update_import">Local update</string>
|
||||
<string name="local_update_import_progress">Importing local update\u2026</string>
|
||||
<string name="local_update_import_success">%1$s has been imported. Do you want to install it?</string>
|
||||
<string name="local_update_import_failure">Failed to import local update</string>
|
||||
<string name="local_update_import_install">Install</string>
|
||||
<string name="local_update_name">Local update</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Updater</string>
|
||||
@@ -40,6 +28,12 @@
|
||||
<string name="dialog_prepare_zip_message">Preliminary update preparation</string>
|
||||
<string name="dialog_battery_low_title">Low battery</string>
|
||||
<string name="dialog_battery_low_message_pct">The battery level is too low, you need at least <xliff:g id="percent_discharging">%1$d</xliff:g>%% of the battery to continue, <xliff:g id="percent_charging">%2$d</xliff:g>%% if charging.</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[ Please run the following commands and retry the update:\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot
|
||||
]]></string>
|
||||
<string name="dialog_scratch_mounted_title">Cannot install update with OverlayFS mounted</string>
|
||||
<string name="reboot">Reboot</string>
|
||||
<string name="menu_refresh">Refresh</string>
|
||||
<string name="menu_preferences">Preferences</string>
|
||||
@@ -54,6 +48,8 @@
|
||||
<string name="menu_export_update">Export update</string>
|
||||
<string name="menu_show_changelog">Show changelog</string>
|
||||
<string name="menu_ab_perf_mode">Prioritise update process</string>
|
||||
<string name="menu_update_recovery">Update recovery</string>
|
||||
<string name="toast_forced_update_recovery">It is impossible to disable Lineage Recovery updates on this device.</string>
|
||||
<string name="snack_updates_found">New updates found</string>
|
||||
<string name="snack_no_updates_found">No new updates found</string>
|
||||
<string name="snack_updates_check_failed">The update check failed. Please check your internet connection and try again later.</string>
|
||||
@@ -66,8 +62,8 @@
|
||||
<string name="header_last_updates_check">Last checked: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Verifying update</string>
|
||||
<string name="list_no_updates">No new updates found. To manually check for new updates, use the Refresh button.</string>
|
||||
<string name="action_download">Download</string>
|
||||
@@ -80,8 +76,8 @@
|
||||
<string name="confirm_delete_dialog_title">Delete file</string>
|
||||
<string name="confirm_delete_dialog_message">Delete the selected update file?</string>
|
||||
<string name="apply_update_dialog_title">Apply update</string>
|
||||
<string name="apply_update_dialog_message">You are about to upgrade to <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will restart itself in recovery mode to install the update.\n\nNote: This feature requires a compatible Recovery or updates will need to be installed manually.</string>
|
||||
<string name="apply_update_dialog_message_ab">You are about to upgrade to <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will begin installing in the background.\n\nOnce completed, you will be prompted to reboot.</string>
|
||||
<string name="apply_update_dialog_message">You are about to install <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will restart itself in recovery mode to install the update.\n\nNote: This feature requires a compatible Recovery or updates will need to be installed manually.</string>
|
||||
<string name="apply_update_dialog_message_ab">You are about to install <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will begin installing in the background.\n\nOnce completed, you will be prompted to reboot.</string>
|
||||
<string name="cancel_installation_dialog_message">Cancel the installation?</string>
|
||||
<string name="label_download_url">Download URL</string>
|
||||
<string name="toast_download_url_copied">URL Copied</string>
|
||||
@@ -89,6 +85,7 @@
|
||||
<string name="notification_export_success">Update exported</string>
|
||||
<string name="notification_export_fail">Export error</string>
|
||||
<string name="toast_already_exporting">Already exporting an update</string>
|
||||
<string name="toast_export_started">Export started</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">1 second left</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> seconds left</item>
|
||||
@@ -101,14 +98,23 @@
|
||||
<item quantity="one">1 hour left</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> hours left</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Warning</string>
|
||||
<string name="update_on_mobile_data_message">You\'re about to download an update package using mobile data which is likely going to cause high data usage. Would you like to proceed?</string>
|
||||
<string name="checkbox_mobile_data_warning">Do not show again</string>
|
||||
<string name="menu_mobile_data_warning">Mobile data warning</string>
|
||||
<string name="update_over_metered_network_title">Warning</string>
|
||||
<string name="update_over_metered_network_message">You\'re about to download an update package over a metered network which is likely going to cause high data usage. Would you like to proceed?</string>
|
||||
<string name="checkbox_metered_network_warning">Do not show again</string>
|
||||
<string name="menu_metered_network_warning">Metered network warning</string>
|
||||
<string name="blocked_update_dialog_title">Update blocked</string>
|
||||
<string name="blocked_update_dialog_message">This update cannot be installed using the updater app. Please read <xliff:g id="info_url">%1$s</xliff:g> for more information.</string>
|
||||
<string name="export_channel_title">Export completion</string>
|
||||
<string name="new_updates_channel_title">New updates</string>
|
||||
<string name="ongoing_channel_title">Ongoing downloads</string>
|
||||
<string name="update_failed_channel_title">Update failed</string>
|
||||
<string name="info_dialog_title">Did you know?</string>
|
||||
<string name="info_dialog_message">LineageOS updates are full installation packages. That means you can always install only the latest update, even if you skipped some in between!</string>
|
||||
<string name="info_dialog_ok">Thanks for the info!</string>
|
||||
<string name="local_update_import">Local update</string>
|
||||
<string name="local_update_import_progress">Importing local update\u2026</string>
|
||||
<string name="local_update_import_success">%1$s has been imported. Do you want to install it?</string>
|
||||
<string name="local_update_import_failure">Failed to import local update</string>
|
||||
<string name="local_update_import_install">Install</string>
|
||||
<string name="local_update_name">Local update</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Updater</string>
|
||||
@@ -40,6 +28,12 @@
|
||||
<string name="dialog_prepare_zip_message">Preliminary update preparation</string>
|
||||
<string name="dialog_battery_low_title">Low battery</string>
|
||||
<string name="dialog_battery_low_message_pct">The battery level is too low, you need at least <xliff:g id="percent_discharging">%1$d</xliff:g>%% of the battery to continue, <xliff:g id="percent_charging">%2$d</xliff:g>%% if charging.</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[ Please run the following commands and retry the update:\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot
|
||||
]]></string>
|
||||
<string name="dialog_scratch_mounted_title">Cannot install update with OverlayFS mounted</string>
|
||||
<string name="reboot">Reboot</string>
|
||||
<string name="menu_refresh">Refresh</string>
|
||||
<string name="menu_preferences">Preferences</string>
|
||||
@@ -54,6 +48,8 @@
|
||||
<string name="menu_export_update">Export update</string>
|
||||
<string name="menu_show_changelog">Show changelog</string>
|
||||
<string name="menu_ab_perf_mode">Prioritise update process</string>
|
||||
<string name="menu_update_recovery">Update recovery</string>
|
||||
<string name="toast_forced_update_recovery">It is impossible to disable Lineage Recovery updates on this device.</string>
|
||||
<string name="snack_updates_found">New updates found</string>
|
||||
<string name="snack_no_updates_found">No new updates found</string>
|
||||
<string name="snack_updates_check_failed">The update check failed. Please check your internet connection and try again later.</string>
|
||||
@@ -66,8 +62,8 @@
|
||||
<string name="header_last_updates_check">Last checked: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Verifying update</string>
|
||||
<string name="list_no_updates">No new updates found. To manually check for new updates, use the Refresh button.</string>
|
||||
<string name="action_download">Download</string>
|
||||
@@ -80,8 +76,8 @@
|
||||
<string name="confirm_delete_dialog_title">Delete file</string>
|
||||
<string name="confirm_delete_dialog_message">Delete the selected update file?</string>
|
||||
<string name="apply_update_dialog_title">Apply update</string>
|
||||
<string name="apply_update_dialog_message">You are about to upgrade to <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will restart itself in recovery mode to install the update.\n\nNote: This feature requires a compatible Recovery or updates will need to be installed manually.</string>
|
||||
<string name="apply_update_dialog_message_ab">You are about to upgrade to <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will begin installing in the background.\n\nOnce completed, you will be prompted to reboot.</string>
|
||||
<string name="apply_update_dialog_message">You are about to install <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will restart itself in recovery mode to install the update.\n\nNote: This feature requires a compatible Recovery or updates will need to be installed manually.</string>
|
||||
<string name="apply_update_dialog_message_ab">You are about to install <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will begin installing in the background.\n\nOnce completed, you will be prompted to reboot.</string>
|
||||
<string name="cancel_installation_dialog_message">Cancel the installation?</string>
|
||||
<string name="label_download_url">Download URL</string>
|
||||
<string name="toast_download_url_copied">URL Copied</string>
|
||||
@@ -89,6 +85,7 @@
|
||||
<string name="notification_export_success">Update exported</string>
|
||||
<string name="notification_export_fail">Export error</string>
|
||||
<string name="toast_already_exporting">Already exporting an update</string>
|
||||
<string name="toast_export_started">Export started</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">1 second left</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> seconds left</item>
|
||||
@@ -101,14 +98,23 @@
|
||||
<item quantity="one">1 hour left</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> hours left</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Warning</string>
|
||||
<string name="update_on_mobile_data_message">You\'re about to download an update package using mobile data which is likely going to cause high data usage. Would you like to proceed?</string>
|
||||
<string name="checkbox_mobile_data_warning">Do not show again</string>
|
||||
<string name="menu_mobile_data_warning">Mobile data warning</string>
|
||||
<string name="update_over_metered_network_title">Warning</string>
|
||||
<string name="update_over_metered_network_message">You\'re about to download an update package over a metered network which is likely going to cause high data usage. Would you like to proceed?</string>
|
||||
<string name="checkbox_metered_network_warning">Do not show again</string>
|
||||
<string name="menu_metered_network_warning">Metered network warning</string>
|
||||
<string name="blocked_update_dialog_title">Update blocked</string>
|
||||
<string name="blocked_update_dialog_message">This update cannot be installed using the updater app. Please read <xliff:g id="info_url">%1$s</xliff:g> for more information.</string>
|
||||
<string name="export_channel_title">Export completion</string>
|
||||
<string name="new_updates_channel_title">New updates</string>
|
||||
<string name="ongoing_channel_title">Ongoing downloads</string>
|
||||
<string name="update_failed_channel_title">Update failed</string>
|
||||
<string name="info_dialog_title">Did you know?</string>
|
||||
<string name="info_dialog_message">LineageOS updates are full installation packages. That means you can always install only the latest update, even if you skipped some in between!</string>
|
||||
<string name="info_dialog_ok">Thanks for the info!</string>
|
||||
<string name="local_update_import">Local update</string>
|
||||
<string name="local_update_import_progress">Importing local update\u2026</string>
|
||||
<string name="local_update_import_success">%1$s has been imported. Do you want to install it?</string>
|
||||
<string name="local_update_import_failure">Failed to import local update</string>
|
||||
<string name="local_update_import_install">Install</string>
|
||||
<string name="local_update_name">Local update</string>
|
||||
</resources>
|
13
app/src/main/res/values-es-rMX/strings.xml
Normal file
13
app/src/main/res/values-es-rMX/strings.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="installation_suspended_notification">Instalación suspendida</string>
|
||||
<string name="suspend_button">Suspender</string>
|
||||
<string name="menu_auto_updates_check_interval_daily">Una vez al día</string>
|
||||
<string name="menu_auto_updates_check_interval_weekly">Una vez a la semana</string>
|
||||
<string name="menu_auto_updates_check_interval_monthly">Una vez al mes</string>
|
||||
<string name="menu_auto_updates_check_interval_never">Nunca</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Actualizador</string>
|
||||
@@ -30,6 +18,7 @@
|
||||
<string name="text_download_speed">%1$s, %2$s/s</string>
|
||||
<string name="pause_button">Pausar</string>
|
||||
<string name="resume_button">Reanudar</string>
|
||||
<string name="suspend_button">Suspender</string>
|
||||
<string name="installing_update">Instalando paquete de actualización</string>
|
||||
<string name="installing_update_error">Error de instalación</string>
|
||||
<string name="installing_update_finished">Actualización instalada</string>
|
||||
@@ -64,8 +53,6 @@
|
||||
<string name="header_last_updates_check">Última comprobación: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_verifying_update">Verificando actualización</string>
|
||||
<string name="list_no_updates">Sin nuevas actualizaciones disponibles. Para comprobar manualmente, pulsa el botón «Actualizar».</string>
|
||||
<string name="action_download">Descargar</string>
|
||||
@@ -78,8 +65,6 @@
|
||||
<string name="confirm_delete_dialog_title">Borrar archivo</string>
|
||||
<string name="confirm_delete_dialog_message">¿Borrar el archivo de actualización seleccionado?</string>
|
||||
<string name="apply_update_dialog_title">Aplicar actualización</string>
|
||||
<string name="apply_update_dialog_message">Actualizarás a <xliff:g id="filename">%1$s</xliff:g>.\n\nAl pulsar en <xliff:g id="ok">%2$s</xliff:g>, se reiniciará el dispositivo en modo de recuperación para instalar la actualización.\n\nNota: Esta característica necesita un modo de recuperación compatible o las actualizaciones deberán instalarse manualmente.</string>
|
||||
<string name="apply_update_dialog_message_ab">Actualizarás a <xliff:g id="filename">%1$s</xliff:g>. \n\nAl pulsar en <xliff:g id="ok">%2$s</xliff:g>, el dispositivo comenzará a instalar en segundo plano.\n\nUna vez terminado el proceso, se le pedirá que reinicie.</string>
|
||||
<string name="cancel_installation_dialog_message">¿Cancelar instalación?</string>
|
||||
<string name="label_download_url">URL de descarga</string>
|
||||
<string name="toast_download_url_copied">URL copiada</string>
|
||||
@@ -99,10 +84,8 @@
|
||||
<item quantity="one">Queda 1 hora</item>
|
||||
<item quantity="other">Quedan <xliff:g id="count">%d</xliff:g> horas</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Advertencia</string>
|
||||
<string name="update_on_mobile_data_message">Se descargará un paquete de actualización usando los datos móviles, que probablemente ocasione un alto consumo de datos. ¿Quieres continuar?</string>
|
||||
<string name="checkbox_mobile_data_warning">No mostrar de nuevo</string>
|
||||
<string name="menu_mobile_data_warning">Advertencia de datos móviles</string>
|
||||
<string name="update_over_metered_network_title">Advertencia</string>
|
||||
<string name="checkbox_metered_network_warning">No mostrar de nuevo</string>
|
||||
<string name="blocked_update_dialog_title">Actualización bloqueada</string>
|
||||
<string name="blocked_update_dialog_message">Esta actualización no puede instalarse usando la aplicación «Actualizador». Lea <xliff:g id="info_url">%1$s</xliff:g> para más información.</string>
|
||||
<string name="export_channel_title">Exportación finalizada</string>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Actualizador</string>
|
||||
@@ -25,25 +13,43 @@
|
||||
<string name="download_paused_error_notification">Error de descarga</string>
|
||||
<string name="download_completed_notification">Descarga completada</string>
|
||||
<string name="download_starting_notification">Iniciando descarga</string>
|
||||
<string name="update_failed_notification">Se produjo un error en la actualización</string>
|
||||
<string name="installation_suspended_notification">Instalación suspendida</string>
|
||||
<string name="new_updates_found_title">Nuevas actualizaciones</string>
|
||||
<string name="text_download_speed">%1$s, %2$s/s</string>
|
||||
<string name="pause_button">Pausar</string>
|
||||
<string name="resume_button">Reanudar</string>
|
||||
<string name="suspend_button">Suspender</string>
|
||||
<string name="installing_update">Instalando paquete de actualización</string>
|
||||
<string name="installing_update_error">Error de instalación</string>
|
||||
<string name="installing_update_finished">Actualización instalada</string>
|
||||
<string name="finalizing_package">Finalizando instalación del paquete</string>
|
||||
<string name="preparing_ota_first_boot">Preparando para el primer arranque</string>
|
||||
<string name="dialog_prepare_zip_message">Preparación preliminar de la actualización</string>
|
||||
<string name="dialog_battery_low_title">Batería baja</string>
|
||||
<string name="dialog_battery_low_message_pct">El nivel de la batería es demasiado bajo, se necesita al menos <xliff:g id="percent_discharging">%1$d</xliff:g>%% de batería para continuar, <xliff:g id="percent_charging">%2$d</xliff:g>%% si el dispositivo se está cargando.</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[ Por favor, ejecuta los siguientes comandos y vuelve a intentar la actualización:\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot
|
||||
]]></string>
|
||||
<string name="dialog_scratch_mounted_title">No se puede instalar la actualización con OverlayFS montado</string>
|
||||
<string name="reboot">Reiniciar</string>
|
||||
<string name="menu_refresh">Actualizar</string>
|
||||
<string name="menu_preferences">Preferencias</string>
|
||||
<string name="menu_auto_updates_check">Comprobación de actualizaciones automática</string>
|
||||
<string name="menu_auto_updates_check_interval_daily">Diaria</string>
|
||||
<string name="menu_auto_updates_check_interval_weekly">Semanal</string>
|
||||
<string name="menu_auto_updates_check_interval_monthly">Mensual</string>
|
||||
<string name="menu_auto_updates_check_interval_never">Nunca</string>
|
||||
<string name="menu_auto_delete_updates">Borrar actualizaciones luego de instalar</string>
|
||||
<string name="menu_delete_update">Borrar</string>
|
||||
<string name="menu_copy_url">Copiar URL</string>
|
||||
<string name="menu_export_update">Exportar actualización</string>
|
||||
<string name="menu_show_changelog">Mostrar registro de cambios</string>
|
||||
<string name="menu_ab_perf_mode">Priorizar el proceso de actualización</string>
|
||||
<string name="menu_update_recovery">Actualizar partición de recuperación (recovery)</string>
|
||||
<string name="toast_forced_update_recovery">Es imposible desactivar en este dispositivo las actualizaciones del Modo de Recuperación («Recovery») de Lineage.</string>
|
||||
<string name="snack_updates_found">Se encontraron nuevas actualizaciones</string>
|
||||
<string name="snack_no_updates_found">No se encontraron nuevas actualizaciones</string>
|
||||
<string name="snack_updates_check_failed">Error en la comprobación de actualizaciones. Por favor, verifique la conexión a Internet e inténtalo nuevamente.</string>
|
||||
@@ -56,7 +62,8 @@
|
||||
<string name="header_last_updates_check">Última comprobación: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Verificando actualización</string>
|
||||
<string name="list_no_updates">Sin nuevas actualizaciones disponibles. Para comprobar manualmente, pulsa el botón «Actualizar».</string>
|
||||
<string name="action_download">Descargar</string>
|
||||
@@ -64,12 +71,13 @@
|
||||
<string name="action_resume">Reanudar</string>
|
||||
<string name="action_install">Instalar</string>
|
||||
<string name="action_info">Información</string>
|
||||
<string name="action_delete">Borrar</string>
|
||||
<string name="action_cancel">Cancelar</string>
|
||||
<string name="confirm_delete_dialog_title">Borrar archivo</string>
|
||||
<string name="confirm_delete_dialog_message">¿Borrar el archivo de actualización seleccionado?</string>
|
||||
<string name="apply_update_dialog_title">Aplicar actualización</string>
|
||||
<string name="apply_update_dialog_message">Actualizarás a <xliff:g id="filename">%1$s</xliff:g>.\n\nAl pulsar en <xliff:g id="ok">%2$s</xliff:g>, se reiniciará el dispositivo en modo «Recovery» para instalar la actualización.\n\nNota: Esta función requiere un «Recovery» compatible o las actualizaciones deberán instalarse manualmente.</string>
|
||||
<string name="apply_update_dialog_message_ab">Actualizarás a <xliff:g id="filename">%1$s</xliff:g>. \n\nAl pulsar en <xliff:g id="ok">%2$s</xliff:g>, el dispositivo comenzará a instalar en segundo plano.\n\nUna vez terminado el proceso, se le pedirá que reinicie.</string>
|
||||
<string name="apply_update_dialog_message">Estás a punto de instalar <xliff:g id="update_name">%1$s</xliff:g>.\n\nSi pulsas <xliff:g id="ok">%2$s</xliff:g>, el dispositivo se reiniciará en modo de recuperación para instalar la actualización.\n\nNota: esta característica requiere una partición de recuperación compatible o las actualizaciones tendrán que ser instaladas manualmente.</string>
|
||||
<string name="apply_update_dialog_message_ab">Actualizarás a <xliff:g id="filename">%1$s</xliff:g>.\n\nAl pulsar en <xliff:g id="ok">%2$s</xliff:g>, el dispositivo comenzará a instalar en segundo plano.\n\nUna vez terminado el proceso, se te pedirá que reinicies.</string>
|
||||
<string name="cancel_installation_dialog_message">¿Cancelar la instalación?</string>
|
||||
<string name="label_download_url">URL de descarga</string>
|
||||
<string name="toast_download_url_copied">URL copiada</string>
|
||||
@@ -77,13 +85,36 @@
|
||||
<string name="notification_export_success">Actualización exportada</string>
|
||||
<string name="notification_export_fail">Error de exportación</string>
|
||||
<string name="toast_already_exporting">Ya se está exportando una actualización</string>
|
||||
<string name="update_on_mobile_data_title">Advertencia</string>
|
||||
<string name="update_on_mobile_data_message">Se descargará un paquete de actualización usando los datos móviles, que probablemente ocasione un alto consumo de datos. ¿Quieres continuar?</string>
|
||||
<string name="checkbox_mobile_data_warning">No mostrar de nuevo</string>
|
||||
<string name="menu_mobile_data_warning">Advertencia de datos móviles</string>
|
||||
<string name="toast_export_started">Exportación iniciada</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">Queda 1 segundo</item>
|
||||
<item quantity="other">Quedan <xliff:g id="count">%d</xliff:g> segundos</item>
|
||||
</plurals>
|
||||
<plurals name="eta_minutes">
|
||||
<item quantity="one">Queda 1 minuto</item>
|
||||
<item quantity="other">Quedan <xliff:g id="count">%d</xliff:g> minutos</item>
|
||||
</plurals>
|
||||
<plurals name="eta_hours">
|
||||
<item quantity="one">Queda 1 hora</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> horas restantes</item>
|
||||
</plurals>
|
||||
<string name="update_over_metered_network_title">Advertencia</string>
|
||||
<string name="update_over_metered_network_message">Estás a punto de descargar un paquete de actualización utilizando datos móviles, lo que probablemente va a causar un alto consumo de datos. ¿Deseas continuar?</string>
|
||||
<string name="checkbox_metered_network_warning">No mostrar de nuevo</string>
|
||||
<string name="menu_metered_network_warning">Aviso de consumo de datos</string>
|
||||
<string name="blocked_update_dialog_title">Actualización bloqueada</string>
|
||||
<string name="blocked_update_dialog_message">Esta actualización no puede instalarse usando la aplicación «Actualizador». Lea <xliff:g id="info_url">%1$s</xliff:g> para más información.</string>
|
||||
<string name="export_channel_title">Exportación finalizada</string>
|
||||
<string name="new_updates_channel_title">Nuevas actualizaciones</string>
|
||||
<string name="ongoing_channel_title">Descargas en curso</string>
|
||||
<string name="update_failed_channel_title">Se produjo un error en la actualización</string>
|
||||
<string name="info_dialog_title">¿Sabías que...</string>
|
||||
<string name="info_dialog_message">Las actualizaciones de LineageOS son paquetes de instalación completos, lo que significa que siempre puedes instalar la última actualización, ¡incluso si has saltado algunas de las intermedias!</string>
|
||||
<string name="info_dialog_ok">¡Gracias por la información!</string>
|
||||
<string name="local_update_import">Actualización local</string>
|
||||
<string name="local_update_import_progress">Importando actualización local\u2026</string>
|
||||
<string name="local_update_import_success">%1$s ha sido importado. ¿Deseas instalarlo?</string>
|
||||
<string name="local_update_import_failure">Error al importar actualización local</string>
|
||||
<string name="local_update_import_install">Instalar</string>
|
||||
<string name="local_update_name">Actualización local</string>
|
||||
</resources>
|
@@ -1,22 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Uuendaja</string>
|
||||
<string name="display_name">Uuendaja</string>
|
||||
<string name="installation_suspended_notification">Installimine peatati</string>
|
||||
<string name="text_download_speed">%1$s, %2$s/s</string>
|
||||
<string name="suspend_button">Peata</string>
|
||||
<string name="dialog_battery_low_title">Madal akutase</string>
|
||||
<string name="dialog_battery_low_message_pct">Akutase on liiga madal, jätkamiseks on vaja akut vähemalt <xliff:g id="percent_discharging">%1$d</xliff:g>%%, laadimise korral <xliff:g id="percent_charging">%2$d</xliff:g>%%.</string>
|
||||
@@ -26,7 +17,8 @@
|
||||
<string name="menu_auto_updates_check_interval_never">Mitte kunagi</string>
|
||||
<string name="menu_show_changelog">Näita muutuste nimekirja</string>
|
||||
<string name="menu_ab_perf_mode">Eelista uuendusprotsessi</string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="menu_update_recovery">Uuenda taastust</string>
|
||||
<string name="toast_forced_update_recovery">Lineage Recovery taastevärskendusi pole selles seadmes võimalik keelata.</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">1 sekund jäänud</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> sekundit jäänud</item>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Eguneratzailea</string>
|
||||
@@ -57,7 +45,6 @@
|
||||
<string name="snack_updates_found">Eguneraketa berriak aurkitu dira</string>
|
||||
<string name="snack_no_updates_found">Ez da eguneraketa berririk aurkitu</string>
|
||||
<string name="snack_updates_check_failed">Eguneraketa bilaketak huts egin du. Interneterako konexioa egiaztatu eta berriro saiatu, mesedez.</string>
|
||||
<string name="snack_download_failed">Deskargak huts egin du. Interneterako konexioa egiaztatu eta berriro saiatu, mesedez.</string>
|
||||
<string name="snack_download_verification_failed">Eguneraketaren egiaztaketak huts egin du.</string>
|
||||
<string name="snack_download_verified">Deskarga osatuta.</string>
|
||||
<string name="snack_update_not_installable">Eguneraketa hau ezin da instalatu uneko konpilazioaren gainean.</string>
|
||||
@@ -66,8 +53,6 @@
|
||||
<string name="header_last_updates_check">Azken egiaztaketa: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_verifying_update">Eguneraketa egiaztatzen</string>
|
||||
<string name="list_no_updates">Ez da eguneraketa berririk aurkitu. Eguneraketak eskuz egiaztatzeko, erabili freskatze botoia.</string>
|
||||
<string name="action_download">Deskargatu</string>
|
||||
@@ -80,8 +65,6 @@
|
||||
<string name="confirm_delete_dialog_title">Ezabatu fitxategia</string>
|
||||
<string name="confirm_delete_dialog_message">Ezabatu hautatutako eguneraketa fitxategia?</string>
|
||||
<string name="apply_update_dialog_title">Aplikatu eguneraketa</string>
|
||||
<string name="apply_update_dialog_message"><xliff:g id="update_name">%1$s</xliff:g>. bertsioa instalatzera zoaz.\n\n <xliff:g id="ok">%2$s</xliff:g> sakatzean, gailua berreskuratze moduan berrabiaraziko da eguneraketa instalatzeko.\n\nOharra: Berreskuratze aplikazio bateragarri bat behar du ezaugarri honek, bestela eguneraketak eskuz instalatu beharko dira.</string>
|
||||
<string name="apply_update_dialog_message_ab"><xliff:g id="update_name">%1$s</xliff:g> bertsioa instalatzera zoaz.\n\n<xliff:g id="ok">%2$s</xliff:g> sakatzean, gailua atzeko planoan hasiko da eguneratzen.\n\nBehin bukatuta berrabiaraztea eskatuko zaizu.</string>
|
||||
<string name="cancel_installation_dialog_message">Ezeztatu instalazioa?</string>
|
||||
<string name="label_download_url">Deskargaren URL-s</string>
|
||||
<string name="toast_download_url_copied">URL-a kopiatuta</string>
|
||||
@@ -101,14 +84,12 @@
|
||||
<item quantity="one">Ordu 1 geratzen da</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> ordu geratzen dira</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Abisua</string>
|
||||
<string name="update_on_mobile_data_message">Eguneratze pakete bat deskargatuko duzu datu mugikorrak erabiliz, honek datuen erabilera handia egingo du. Ziur aurrera jarraitu nahi duzula?</string>
|
||||
<string name="checkbox_mobile_data_warning">Ez erakutsi berriro</string>
|
||||
<string name="menu_mobile_data_warning">Datu mugikorren abisua</string>
|
||||
<string name="update_over_metered_network_title">Abisua</string>
|
||||
<string name="checkbox_metered_network_warning">Ez erakutsi berriro</string>
|
||||
<string name="blocked_update_dialog_title">Eguneraketa blokeatuta</string>
|
||||
<string name="blocked_update_dialog_message">Eguneraketa hau ezin da eguneratze-aplikazioarekin instalatu. Irakurri <xliff:g id="info_url">%1$s</xliff:g> informazio gehiagorako.</string>
|
||||
<string name="export_channel_title">Esportazioaren osaketa</string>
|
||||
<string name="new_updates_channel_title">Eguneraketa berriak</string>
|
||||
<string name="ongoing_channel_title">Abian diren deskargak</string>
|
||||
<string name="ongoing_channel_title">Deskargak abian</string>
|
||||
<string name="update_failed_channel_title">Eguneraketak huts egin du</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Päivittäjä</string>
|
||||
@@ -54,6 +42,8 @@
|
||||
<string name="menu_export_update">Vie päivitys</string>
|
||||
<string name="menu_show_changelog">Näytä muutosloki</string>
|
||||
<string name="menu_ab_perf_mode">Priorisoi päivitysprosessi</string>
|
||||
<string name="menu_update_recovery">Päivitä recovery-tila</string>
|
||||
<string name="toast_forced_update_recovery">Tällä laitteella ei voi poistaa Lineage Recovery-päivityksiä käytöstä.</string>
|
||||
<string name="snack_updates_found">Uusia päivityksiä löytyi</string>
|
||||
<string name="snack_no_updates_found">Uusia päivityksiä ei löytynyt</string>
|
||||
<string name="snack_updates_check_failed">Päivitysten tarkistaminen epäonnistui. Tarkista internet-yhteytesi ja yritä uudelleen.</string>
|
||||
@@ -66,8 +56,6 @@
|
||||
<string name="header_last_updates_check">Viimeksi tarkistettu: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_verifying_update">Todentaa päivitystä</string>
|
||||
<string name="list_no_updates">Uusia päivityksiä ei löytynyt. Tarkistaaksesi päivitykset manuaalisesti, paina Päivitä-painiketta.</string>
|
||||
<string name="action_download">Lataa</string>
|
||||
@@ -80,8 +68,6 @@
|
||||
<string name="confirm_delete_dialog_title">Poista tiedosto</string>
|
||||
<string name="confirm_delete_dialog_message">Poista valittu päivitystiedosto?</string>
|
||||
<string name="apply_update_dialog_title">Asenna päivitys</string>
|
||||
<string name="apply_update_dialog_message">Olet päivittämässä versioon <xliff:g id="update_name">%1$s</xliff:g>.\n\nJos painat <xliff:g id="ok">%2$s</xliff:g>, laite käynnistyy Recovery-tilaan. \n\nHuomautus: Tämä toiminto vaatii yhteensopivan Recoveryn tai päivitys pitää asentaa manuaalisesti.</string>
|
||||
<string name="apply_update_dialog_message_ab">Olet päivittämässä versioon <xliff:g id="update_name">%1$s</xliff:g>.\n\nJos painat <xliff:g id="ok">%2$s</xliff:g>, asennus alkaa taustalla.\n\nKun asennus on valmis, sinua pyydetään käynnistämään laite uudelleen.</string>
|
||||
<string name="cancel_installation_dialog_message">Peruuta asennus?</string>
|
||||
<string name="label_download_url">Lataussivun URL-osoite</string>
|
||||
<string name="toast_download_url_copied">URL-osoite kopioitu</string>
|
||||
@@ -101,14 +87,20 @@
|
||||
<item quantity="one">1 tunti jäljellä</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> tuntia jäljellä</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Varoitus</string>
|
||||
<string name="update_on_mobile_data_message">Olet lataamassa päivityspakettia käyttämällä mobiilidataa, joka voi aiheuttaa tiedonsiirtokuluja. Haluatko jatkaa?</string>
|
||||
<string name="checkbox_mobile_data_warning">Älä näytä uudelleen</string>
|
||||
<string name="menu_mobile_data_warning">Mobiilidatavaroitus</string>
|
||||
<string name="update_over_metered_network_title">Varoitus</string>
|
||||
<string name="checkbox_metered_network_warning">Älä näytä uudelleen</string>
|
||||
<string name="blocked_update_dialog_title">Päivitys estetty</string>
|
||||
<string name="blocked_update_dialog_message">Tätä päivitystä ei voida asentaa päivitys-sovelluksella. Lue <xliff:g id="info_url">%1$s</xliff:g> saadaksesi lisätietoja.</string>
|
||||
<string name="export_channel_title">Vienti valmis</string>
|
||||
<string name="new_updates_channel_title">Uudet päivitykset</string>
|
||||
<string name="ongoing_channel_title">Käynnissä olevat lataukset</string>
|
||||
<string name="update_failed_channel_title">Päivitys epäonnistui</string>
|
||||
<string name="info_dialog_title">Tiesitkö?</string>
|
||||
<string name="info_dialog_message">LineageOS-päivitykset ovat täydellisiä asennuspaketteja, jonka ansiosta voit aina asentaa vain viimeisimmän päivityksen, vaikka ohittaisitkin välillä joitakin versioita!</string>
|
||||
<string name="local_update_import">Paikallinen päivitys</string>
|
||||
<string name="local_update_import_progress">Tuodaan paikallista päivitystä\u2026</string>
|
||||
<string name="local_update_import_success">%1$s on tuotu. Haluatko asentaa sen?</string>
|
||||
<string name="local_update_import_failure">Paikallisen päivityksen tuonti epäonnistui</string>
|
||||
<string name="local_update_import_install">Asenna</string>
|
||||
<string name="local_update_name">Paikallinen päivitys</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Gestionnaire de mise à jour</string>
|
||||
@@ -40,6 +28,12 @@
|
||||
<string name="dialog_prepare_zip_message">Préparation de la mise à jour préliminaire</string>
|
||||
<string name="dialog_battery_low_title">Batterie faible</string>
|
||||
<string name="dialog_battery_low_message_pct">Le niveau de batterie est trop faible. Pour continuer, vous devez avoir au moins <xliff:g id="percent_discharging">%1$d</xliff:g> %% de batterie restante, ou <xliff:g id="percent_charging">%2$d</xliff:g> %% si l\'appareil est en charge.</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[ Merci d\'exécuter les commandes suivantes et de retenter la mise à jour :\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot
|
||||
]]></string>
|
||||
<string name="dialog_scratch_mounted_title">Impossible d\'installer la mise à jour avec OverlayFS monté</string>
|
||||
<string name="reboot">Redémarrer</string>
|
||||
<string name="menu_refresh">Actualiser</string>
|
||||
<string name="menu_preferences">Préférences</string>
|
||||
@@ -54,6 +48,8 @@
|
||||
<string name="menu_export_update">Exporter la mise à jour</string>
|
||||
<string name="menu_show_changelog">Afficher l\'historique des modifications</string>
|
||||
<string name="menu_ab_perf_mode">Privilégier le processus de mise à jour</string>
|
||||
<string name="menu_update_recovery">Mettre à jour la récupération</string>
|
||||
<string name="toast_forced_update_recovery">Il est impossible de désactiver les mises à jour de la récupération de Lineage sur cet appareil.</string>
|
||||
<string name="snack_updates_found">Nouvelles mises à jour disponibles</string>
|
||||
<string name="snack_no_updates_found">Aucune nouvelle mise à jour disponible</string>
|
||||
<string name="snack_updates_check_failed">La vérification de nouvelles mises à jour a échoué. Vérifiez votre connexion internet et réessayez ultérieurement.</string>
|
||||
@@ -66,8 +62,8 @@
|
||||
<string name="header_last_updates_check">Dernière vérification : <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> sur <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> sur <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> sur <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> sur <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Vérification de la mise à jour en cours</string>
|
||||
<string name="list_no_updates">Aucune nouvelle mise à jour trouvée. Pour vérifier manuellement la présence de mises à jour, utiliser le bouton Actualiser.</string>
|
||||
<string name="action_download">Télécharger</string>
|
||||
@@ -80,8 +76,8 @@
|
||||
<string name="confirm_delete_dialog_title">Supprimer le fichier</string>
|
||||
<string name="confirm_delete_dialog_message">Supprimer le fichier de mise à jour sélectionné ?</string>
|
||||
<string name="apply_update_dialog_title">Appliquer la mise à jour</string>
|
||||
<string name="apply_update_dialog_message">Vous êtes sur le point d\'installer <xliff:g id="update_name">%1$s</xliff:g>.\n\nLorsque vous appuierez sur <xliff:g id="ok">%2$s</xliff:g>, votre appareil redémarrera automatiquement en mode recovery pour installer la mise à jour.\n\nRemarque : Cette opération nécessite un recovery compatible, sinon les mises à jour devront être installées manuellement.</string>
|
||||
<string name="apply_update_dialog_message_ab">Vous êtes sur le point de faire la mise à jour vers <xliff:g id="update_name">%1$s</xliff:g>.\n\nLorsque vous appuierez sur <xliff:g id="ok">%2$s</xliff:g>, l’appareil commencera l\'installation en tâche de fond.\n\nUne fois celle-ci terminée, il vous sera demandé de redémarrer.</string>
|
||||
<string name="apply_update_dialog_message">Vous êtes sur le point d\'installer <xliff:g id="update_name">%1$s</xliff:g>.\n\nSi vous appuyez sur <xliff:g id="ok">%2$s</xliff:g>, votre appareil redémarrera automatiquement en mode récupération pour installer la mise à jour.\n\nRemarque : Cette opération nécessite un système de récupération compatible, sans quoi les mises à jour devront être installées manuellement.</string>
|
||||
<string name="apply_update_dialog_message_ab">Vous êtes sur le point d\'installer <xliff:g id="update_name">%1$s</xliff:g>.\n\nSi vous appuyez sur <xliff:g id="ok">%2$s</xliff:g>, l’appareil commencera l\'installation en arrière-plan.\n\nUne fois celle-ci terminée, il vous sera demandé de redémarrer.</string>
|
||||
<string name="cancel_installation_dialog_message">Annuler l\'installation ?</string>
|
||||
<string name="label_download_url">URL de téléchargement</string>
|
||||
<string name="toast_download_url_copied">URL copiée</string>
|
||||
@@ -89,6 +85,7 @@
|
||||
<string name="notification_export_success">Mise à jour exportée</string>
|
||||
<string name="notification_export_fail">Erreur lors de l\'exportation</string>
|
||||
<string name="toast_already_exporting">Une mise à jour est déjà en cours d\'export</string>
|
||||
<string name="toast_export_started">Export démarré</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">temps restant : 1 seconde</item>
|
||||
<item quantity="other">temps restant : <xliff:g id="count">%d</xliff:g> secondes</item>
|
||||
@@ -101,14 +98,23 @@
|
||||
<item quantity="one">temps restant : 1 heure</item>
|
||||
<item quantity="other">temps restant : <xliff:g id="count">%d</xliff:g> heures</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Avertissement</string>
|
||||
<string name="update_on_mobile_data_message">Vous êtes sur le point de télécharger un paquet de mise à jour via les données mobiles qui pourrait représenter un volume de données important. Voulez-vous tout de même procéder au téléchargement ?</string>
|
||||
<string name="checkbox_mobile_data_warning">Ne plus afficher</string>
|
||||
<string name="menu_mobile_data_warning">Avertissement d\'usage des données mobiles</string>
|
||||
<string name="update_over_metered_network_title">Avertissement</string>
|
||||
<string name="update_over_metered_network_message">Vous allez télécharger une mise à jour nécessitant un important volume de données en utilisant un réseau forfaitaire. Souhaitez-vous continuer ?</string>
|
||||
<string name="checkbox_metered_network_warning">Ne plus afficher</string>
|
||||
<string name="menu_metered_network_warning">Avertissement de réseau forfaitaire</string>
|
||||
<string name="blocked_update_dialog_title">Mise à jour bloquée</string>
|
||||
<string name="blocked_update_dialog_message">Cette mise à jour ne peut pas être installée en utilisant le gestionnaire de mise à jour. Veuillez lire <xliff:g id="info_url">%1$s</xliff:g> pour plus d’information.</string>
|
||||
<string name="export_channel_title">Fin de l\'exportation</string>
|
||||
<string name="new_updates_channel_title">Nouvelles mises à jour</string>
|
||||
<string name="ongoing_channel_title">Téléchargements en cours</string>
|
||||
<string name="update_failed_channel_title">Échec de la mise à jour</string>
|
||||
<string name="info_dialog_title">Le saviez-vous ?</string>
|
||||
<string name="info_dialog_message">Les mises à jour de LineageOS sont des paquets d\'installation complets. Cela signifie que vous ne pouvez installer que la dernière mise à jour, même si vous en avez ignorées entre temps !</string>
|
||||
<string name="info_dialog_ok">Merci pour l\'information !</string>
|
||||
<string name="local_update_import">Mise à jour locale</string>
|
||||
<string name="local_update_import_progress">Importation de la mise à jour locale\u2026</string>
|
||||
<string name="local_update_import_success">%1$s a été importée. Voulez-vous l\'installer ?</string>
|
||||
<string name="local_update_import_failure">Impossible d\'importer la mise à jour locale</string>
|
||||
<string name="local_update_import_install">Installer</string>
|
||||
<string name="local_update_name">Mise à jour locale</string>
|
||||
</resources>
|
120
app/src/main/res/values-fur-rIT/strings.xml
Normal file
120
app/src/main/res/values-fur-rIT/strings.xml
Normal file
@@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Inzornaments</string>
|
||||
<string name="display_name">Inzornaments</string>
|
||||
<string name="verification_failed_notification">Verifiche falide</string>
|
||||
<string name="verifying_download_notification">Verifiche inzornaments</string>
|
||||
<string name="downloading_notification">Daûr a discjariâ</string>
|
||||
<string name="download_paused_notification">Discjariament in pause</string>
|
||||
<string name="download_paused_error_notification">Erôr tal discjariâ</string>
|
||||
<string name="download_completed_notification">Discjariament completât</string>
|
||||
<string name="download_starting_notification">Daûr a scomençâ il discjariament</string>
|
||||
<string name="update_failed_notification">Inzornament falît</string>
|
||||
<string name="installation_suspended_notification">Instalazion sospindude</string>
|
||||
<string name="new_updates_found_title">Gnûfs inzornaments</string>
|
||||
<string name="text_download_speed">%1$s, %2$s/s</string>
|
||||
<string name="pause_button">Pause</string>
|
||||
<string name="resume_button">Ripie</string>
|
||||
<string name="suspend_button">Sospint</string>
|
||||
<string name="installing_update">Instalazion dal pachet di inzornament</string>
|
||||
<string name="installing_update_error">Erôr di instalazion</string>
|
||||
<string name="installing_update_finished">Inzornament instalât</string>
|
||||
<string name="finalizing_package">Daûr a completâ la instalazion dal pachet</string>
|
||||
<string name="preparing_ota_first_boot">Preparazion pal prin inviament</string>
|
||||
<string name="dialog_prepare_zip_message">Preparazion dal inzornament preliminâr</string>
|
||||
<string name="dialog_battery_low_title">Batarie basse</string>
|
||||
<string name="dialog_battery_low_message_pct">Il nivel de batarie al è masse bas, tu scugnis vê almancul il <xliff:g id="percent_discharging">%1$d</xliff:g>%% par continuâ, <xliff:g id="percent_charging">%2$d</xliff:g>%% se e je in cjame.</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[ Eseguìs chescj comants e torne prove l\'inzornament:\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot
|
||||
]]></string>
|
||||
<string name="dialog_scratch_mounted_title">Impussibil instalâ l\'inzornament cun OverlayFS montât</string>
|
||||
<string name="reboot">Torne invie</string>
|
||||
<string name="menu_refresh">Torne cjame</string>
|
||||
<string name="menu_preferences">Preferencis</string>
|
||||
<string name="menu_auto_updates_check">Ricercje inzornaments in automatic</string>
|
||||
<string name="menu_auto_updates_check_interval_daily">Une volte par dì</string>
|
||||
<string name="menu_auto_updates_check_interval_weekly">Une volte par setemane</string>
|
||||
<string name="menu_auto_updates_check_interval_monthly">Une volte par mês</string>
|
||||
<string name="menu_auto_updates_check_interval_never">Mai</string>
|
||||
<string name="menu_auto_delete_updates">Elimine i inzornaments se instalâts</string>
|
||||
<string name="menu_delete_update">Elimine</string>
|
||||
<string name="menu_copy_url">Copie l\'URL</string>
|
||||
<string name="menu_export_update">Espuarte inzornament</string>
|
||||
<string name="menu_show_changelog">Mostre regjisti modifichis</string>
|
||||
<string name="menu_ab_perf_mode">Inzornaments cun prioritât</string>
|
||||
<string name="menu_update_recovery">Inzorne Recovery</string>
|
||||
<string name="toast_forced_update_recovery">Nol è pussibil disativâ i inzornaments di Lineage Recovery su chest dispositîf.</string>
|
||||
<string name="snack_updates_found">Cjatâts gnûfs inzornaments</string>
|
||||
<string name="snack_no_updates_found">Nissun gnûf inzornament cjatât</string>
|
||||
<string name="snack_updates_check_failed">La verifiche di gnûfs inzornaments e je falide. Controle la conession internet e torne prove plui indenant.</string>
|
||||
<string name="snack_download_failed">Il discjariament dal inzornament al è falît. Controle la conession a internet e torne prove plui indenant.</string>
|
||||
<string name="snack_download_verification_failed">Verifiche dal inzornament falide.</string>
|
||||
<string name="snack_download_verified">Discjariament completât.</string>
|
||||
<string name="snack_update_not_installable">Nol è pussibil instalâ chest inzornament sore di cheste version.</string>
|
||||
<string name="header_title_text">LineageOS\n%1$s</string>
|
||||
<string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string>
|
||||
<string name="header_last_updates_check">Ultime verifiche: <xliff:g id="date" example="2 di Zenâr dal 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="Lui 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> di <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> di <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Verifiche inzornament</string>
|
||||
<string name="list_no_updates">Nissun gnûf inzornament cjatât. Par controlâ a man i gnûfs inzornaments, tocje il boton Inzorne.</string>
|
||||
<string name="action_download">Discjame</string>
|
||||
<string name="action_pause">Pause</string>
|
||||
<string name="action_resume">Ripie</string>
|
||||
<string name="action_install">Instale</string>
|
||||
<string name="action_info">Informazions</string>
|
||||
<string name="action_delete">Elimine</string>
|
||||
<string name="action_cancel">Anule</string>
|
||||
<string name="confirm_delete_dialog_title">Elimine file</string>
|
||||
<string name="confirm_delete_dialog_message">Eliminâ il file di inzornament selezionât?</string>
|
||||
<string name="apply_update_dialog_title">Apliche inzornament</string>
|
||||
<string name="apply_update_dialog_message">Tu stâs par instalâ <xliff:g id="update_name">%1$s</xliff:g>.\n\nSe tu frachis <xliff:g id="ok">%2$s</xliff:g>, il dispositîf al tornarà a inviâsi in modalitât recovery par instalâ in automatic l\'inzornament.\n\nNote: Cheste funzion e domande une Recovery compatibile, in câs contrari tu varâs di procedi ae instalazion manuâl.</string>
|
||||
<string name="apply_update_dialog_message_ab">Tu stâs par instalâ <xliff:g id="update_name">%1$s</xliff:g>.\n\nSe tu frachis <xliff:g id="ok">%2$s</xliff:g>, il dispositîf al scomençarà la instalazion in sotfont.\n\nUne volte completade, ti vignarà domandât di tornâ a inviâ il dispositîf.</string>
|
||||
<string name="cancel_installation_dialog_message">Anulâ la instalazion?</string>
|
||||
<string name="label_download_url">URL dal discjariament</string>
|
||||
<string name="toast_download_url_copied">URL copiât</string>
|
||||
<string name="dialog_export_title">Esportazion inzornament</string>
|
||||
<string name="notification_export_success">Inzornament espuartât</string>
|
||||
<string name="notification_export_fail">Erôr de esportazion</string>
|
||||
<string name="toast_already_exporting">Si sta za espuartant un inzornament</string>
|
||||
<string name="toast_export_started">Esportazion scomençade</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">Al mancje 1 secont</item>
|
||||
<item quantity="other">A mancjin <xliff:g id="count">%d</xliff:g> seconts</item>
|
||||
</plurals>
|
||||
<plurals name="eta_minutes">
|
||||
<item quantity="one">Al mancje 1 minût</item>
|
||||
<item quantity="other">A mancjin <xliff:g id="count">%d</xliff:g> minûts</item>
|
||||
</plurals>
|
||||
<plurals name="eta_hours">
|
||||
<item quantity="one">E mancje 1 ore</item>
|
||||
<item quantity="other">A mancjin <xliff:g id="count">%d</xliff:g> oris</item>
|
||||
</plurals>
|
||||
<string name="update_over_metered_network_title">Atenzion</string>
|
||||
<string name="update_over_metered_network_message">Tu stâs par discjariâ un pachet di inzornament doprant une rêt a consum, chest al podarès puartâ a consumâ une vore di dâts. Procedi?</string>
|
||||
<string name="checkbox_metered_network_warning">No sta mostrâ plui</string>
|
||||
<string name="menu_metered_network_warning">Avîs di rêt a consum</string>
|
||||
<string name="blocked_update_dialog_title">Inzornament blocât</string>
|
||||
<string name="blocked_update_dialog_message">Nol è pussibil instalâ chest inzornament cu la aplicazion di inzornament. Lei <xliff:g id="info_url">%1$s</xliff:g> par vê plui informazions.</string>
|
||||
<string name="export_channel_title">Completament de esportazion</string>
|
||||
<string name="new_updates_channel_title">Gnûfs inzornaments</string>
|
||||
<string name="ongoing_channel_title">Discjariaments in vore</string>
|
||||
<string name="update_failed_channel_title">Inzornament falît</string>
|
||||
<string name="info_dialog_title">Savevistu?</string>
|
||||
<string name="info_dialog_message">I inzornaments di LineageOS a son pachets di instalazion complets. Chest al significhe che tu puedis simpri instalâ l\'ultin inzornament, ancje se prime tu\'nd âs saltât cualchidun!</string>
|
||||
<string name="info_dialog_ok">Graciis pe informazion!</string>
|
||||
<string name="local_update_import">Inzornament locâl</string>
|
||||
<string name="local_update_import_progress">Daûr a impuartâ l\'inzornament locâl\u2026</string>
|
||||
<string name="local_update_import_success">%1$s al è stât impuartât. Desideristu instalâlu?</string>
|
||||
<string name="local_update_import_failure">Importazion inzornament locâl falide</string>
|
||||
<string name="local_update_import_install">Instale</string>
|
||||
<string name="local_update_name">Inzornament locâl</string>
|
||||
</resources>
|
96
app/src/main/res/values-fy-rNL/strings.xml
Normal file
96
app/src/main/res/values-fy-rNL/strings.xml
Normal file
@@ -0,0 +1,96 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Fernijer</string>
|
||||
<string name="display_name">Fernijer</string>
|
||||
<string name="verification_failed_notification">Ferifikaasje mislearre</string>
|
||||
<string name="verifying_download_notification">Fernijing ferifiearje</string>
|
||||
<string name="downloading_notification">Downloade</string>
|
||||
<string name="download_paused_notification">Download pauzearre</string>
|
||||
<string name="download_paused_error_notification">Flater by downloaden</string>
|
||||
<string name="download_completed_notification">Downloaden foltôge</string>
|
||||
<string name="download_starting_notification">Download starte</string>
|
||||
<string name="update_failed_notification">Fernijing mislearre</string>
|
||||
<string name="installation_suspended_notification">Ynstallaasje ûnderbrutsen</string>
|
||||
<string name="new_updates_found_title">Nije fernijingen</string>
|
||||
<string name="text_download_speed">%1$s, %2$s/s</string>
|
||||
<string name="pause_button">Pauze</string>
|
||||
<string name="resume_button">Ferfetsje</string>
|
||||
<string name="suspend_button">Underbrekke</string>
|
||||
<string name="installing_update">Fernijing ynstallearje</string>
|
||||
<string name="installing_update_error">Ynstallaasjeflater</string>
|
||||
<string name="installing_update_finished">Fernijing ynstallearre</string>
|
||||
<string name="finalizing_package">Ynstallaasje fan het pakket foltôgje</string>
|
||||
<string name="preparing_ota_first_boot">Earste start tariede</string>
|
||||
<string name="dialog_prepare_zip_message">Fernijing tariede</string>
|
||||
<string name="dialog_battery_low_title">Lege batterijspanning</string>
|
||||
<string name="dialog_battery_low_message_pct">Jo batterijnivo is te leech, jo moatte op syn minst <xliff:g id="percent_discharging">%1$d</xliff:g>%% batterijkapasiteit hawwe om troch te gean of <xliff:g id="percent_charging">%2$d</xliff:g>%% wylst it opladen.</string>
|
||||
<string name="reboot">Opnij starte</string>
|
||||
<string name="menu_refresh">Fernije</string>
|
||||
<string name="menu_preferences">Foarkarren</string>
|
||||
<string name="menu_auto_updates_check">Automatysk kontrolearje op fernijingen</string>
|
||||
<string name="menu_auto_updates_check_interval_daily">Ien kear deis</string>
|
||||
<string name="menu_auto_updates_check_interval_weekly">Ien kear yn de wike</string>
|
||||
<string name="menu_auto_updates_check_interval_monthly">Ien kear yn de moanne</string>
|
||||
<string name="menu_auto_updates_check_interval_never">Nea</string>
|
||||
<string name="menu_auto_delete_updates">Fernijingen fuortsmite neidat se ynstallearre binne</string>
|
||||
<string name="menu_delete_update">Fuortsmite</string>
|
||||
<string name="menu_copy_url">URL kopiearje</string>
|
||||
<string name="menu_export_update">Fernijing eksportearje</string>
|
||||
<string name="menu_show_changelog">Changelog toane</string>
|
||||
<string name="menu_ab_perf_mode">Fernijingsproses prioriteit jaan</string>
|
||||
<string name="snack_updates_found">Nije fernijingen fûn</string>
|
||||
<string name="snack_no_updates_found">Gjin nije fernijingen fûn</string>
|
||||
<string name="snack_updates_check_failed">Kin net kontrolearje op fernijingen. Kontrolearje jo ynternetferbining en probearje it letter opnij.</string>
|
||||
<string name="snack_download_failed">Downloaden mislearre. Kontrolearje jo ynternetferbining en probearje it letter opnij.</string>
|
||||
<string name="snack_download_verification_failed">Ferifikaasje fan de fernijing mislearre.</string>
|
||||
<string name="snack_download_verified">Downloaden foltôge.</string>
|
||||
<string name="snack_update_not_installable">Dizze fernijing kin net ynstallearre wurde boppe-op de aktuele ferzje.</string>
|
||||
<string name="header_title_text">LineageOS\n%1$s</string>
|
||||
<string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string>
|
||||
<string name="header_last_updates_check">Lêst kontrolearre: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_verifying_update">Fernijing ferifiearje</string>
|
||||
<string name="list_no_updates">Gjin nije fernijingen fûn. Brûk de knop Fernije om hânmjittich te kontrolearjen op nije fernijingen.</string>
|
||||
<string name="action_download">Downloade</string>
|
||||
<string name="action_pause">Pauzeearje</string>
|
||||
<string name="action_resume">Ferfetsje</string>
|
||||
<string name="action_install">Ynstallearje</string>
|
||||
<string name="action_info">Ynformaasje</string>
|
||||
<string name="action_delete">Fuortsmite</string>
|
||||
<string name="action_cancel">Annulearje</string>
|
||||
<string name="confirm_delete_dialog_title">Bestân fuortsmite</string>
|
||||
<string name="confirm_delete_dialog_message">Selektearre fernijingsbestân fuortsmite?</string>
|
||||
<string name="apply_update_dialog_title">Fernijing tapasse</string>
|
||||
<string name="cancel_installation_dialog_message">Ynstallaasje annulearje?</string>
|
||||
<string name="label_download_url">Download-URL</string>
|
||||
<string name="toast_download_url_copied">URL kopiearre</string>
|
||||
<string name="dialog_export_title">Fernijing eksportearje</string>
|
||||
<string name="notification_export_success">Fernijing eksportearre</string>
|
||||
<string name="notification_export_fail">Flater by eksportearjen</string>
|
||||
<string name="toast_already_exporting">Der wurdt al in fernijing eksportearre</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">1 sekonde restearjend</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> sekonden restearjend</item>
|
||||
</plurals>
|
||||
<plurals name="eta_minutes">
|
||||
<item quantity="one">1 minút restearjend</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> minuten restearjend</item>
|
||||
</plurals>
|
||||
<plurals name="eta_hours">
|
||||
<item quantity="one">1 oer restearjend</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> oer restearjend</item>
|
||||
</plurals>
|
||||
<string name="update_over_metered_network_title">Warskôging</string>
|
||||
<string name="checkbox_metered_network_warning">Net opnij toane</string>
|
||||
<string name="blocked_update_dialog_title">Fernijing blokkearre</string>
|
||||
<string name="blocked_update_dialog_message">Dizze fernijing kin net ynstallearre wurde mei heulp fan de fernijings-app. Lês <xliff:g id="info_url">%1$s</xliff:g> foar mear ynformaasje.</string>
|
||||
<string name="export_channel_title">Eksportearjen foltôge</string>
|
||||
<string name="new_updates_channel_title">Nije fernijingen</string>
|
||||
<string name="ongoing_channel_title">Aktuele downloads</string>
|
||||
<string name="update_failed_channel_title">Fernijing mislearre</string>
|
||||
</resources>
|
129
app/src/main/res/values-ga-rIE/strings.xml
Normal file
129
app/src/main/res/values-ga-rIE/strings.xml
Normal file
@@ -0,0 +1,129 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Nuashonróir</string>
|
||||
<string name="display_name">Nuashonróir</string>
|
||||
<string name="verification_failed_notification">Theip ar an bhfíorú</string>
|
||||
<string name="verifying_download_notification">Nuashonrú á fhíorú</string>
|
||||
<string name="downloading_notification">Ag íosluchtú</string>
|
||||
<string name="download_paused_notification">Íoslódáil ar sos</string>
|
||||
<string name="download_paused_error_notification">Earráid íoslódáil</string>
|
||||
<string name="download_completed_notification">Íoslódáil críochnaithe</string>
|
||||
<string name="download_starting_notification">Ag tosú íoslódáil</string>
|
||||
<string name="update_failed_notification">Theip ar an nuashonrú</string>
|
||||
<string name="installation_suspended_notification">Suiteáil ar fionraí</string>
|
||||
<string name="new_updates_found_title">Nuashonruithe nua</string>
|
||||
<string name="text_download_speed">%1$s, %2$s/s</string>
|
||||
<string name="pause_button">Sos</string>
|
||||
<string name="resume_button">Tosaigh arís</string>
|
||||
<string name="suspend_button">Fionraí</string>
|
||||
<string name="installing_update">Ag suiteáil pacáiste nuashonraithe</string>
|
||||
<string name="installing_update_error">Earráid a shuiteáil</string>
|
||||
<string name="installing_update_finished">Nuashonrú suiteáilte</string>
|
||||
<string name="finalizing_package">Ag suiteáil pacáiste a thabhairt chun críche</string>
|
||||
<string name="preparing_ota_first_boot">Ag ullmhú don chéad tosaithe</string>
|
||||
<string name="dialog_prepare_zip_message">Réamh-ullmhúchán nuashonraithe</string>
|
||||
<string name="dialog_battery_low_title">Ceallraí íseal</string>
|
||||
<string name="dialog_battery_low_message_pct">Tá leibhéal an cheallraí ró-íseal, ní mór duit ar a laghad <xliff:g id="percent_discharging">%1$d</xliff:g> %% den cheallraí chun leanúint ar aghaidh, <xliff:g id="percent_charging">%2$d</xliff:g>%% má tá tú ag muirearú.</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[Rith na horduithe seo a leanas agus bain triail eile as an nuashonrú:\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot
|
||||
]]></string>
|
||||
<string name="dialog_scratch_mounted_title">Ní féidir an nuashonrú a shuiteáil le OverlayFS suite</string>
|
||||
<string name="reboot">Atosaigh</string>
|
||||
<string name="menu_refresh">Athnuaigh</string>
|
||||
<string name="menu_preferences">Roghanna</string>
|
||||
<string name="menu_auto_updates_check">Seiceáil nuashonruithe uathoibríoch</string>
|
||||
<string name="menu_auto_updates_check_interval_daily">Uair sa lá</string>
|
||||
<string name="menu_auto_updates_check_interval_weekly">Uair sa tseachtain</string>
|
||||
<string name="menu_auto_updates_check_interval_monthly">Uair sa mhí</string>
|
||||
<string name="menu_auto_updates_check_interval_never">Riamh</string>
|
||||
<string name="menu_auto_delete_updates">Scrios nuashonruithe nuair a shuiteáiltear iad</string>
|
||||
<string name="menu_delete_update">Scrios</string>
|
||||
<string name="menu_copy_url">Cóipeáil URL</string>
|
||||
<string name="menu_export_update">Easpórtáil nuashonrú</string>
|
||||
<string name="menu_show_changelog">Taispeáin loga na n-athruithe</string>
|
||||
<string name="menu_ab_perf_mode">Tabhair tosaíocht don phróiseas nuashonraithe</string>
|
||||
<string name="menu_update_recovery">Nuashonraigh aisghabháil</string>
|
||||
<string name="toast_forced_update_recovery">Tá sé dodhéanta nuashonruithe Lineage Recovery a dhíchumasú ar an ngléas seo.</string>
|
||||
<string name="snack_updates_found">Nuashonruithe nua aimsithe</string>
|
||||
<string name="snack_no_updates_found">Níor aimsíodh aon nuashonruithe nua</string>
|
||||
<string name="snack_updates_check_failed">Theip ar an tseiceáil nuashonraithe. Seiceáil do cheangal idirlín agus bain triail eile as ar ball.</string>
|
||||
<string name="snack_download_failed">Theip ar an íoslódáil. Seiceáil do cheangal idirlín agus bain triail eile as ar ball.</string>
|
||||
<string name="snack_download_verification_failed">Theip ar fhíorú an nuashonraithe.</string>
|
||||
<string name="snack_download_verified">Íoslódáil críochnaithe.</string>
|
||||
<string name="snack_update_not_installable">Ní féidir an nuashonrú seo a shuiteáil ar bharr an leagan reatha.</string>
|
||||
<string name="header_title_text">LineageOS\n%1$s</string>
|
||||
<string name="header_android_version">Android <xliff:g id="version" sampla="7.1.2">%1$s</xliff:g></string>
|
||||
<string name="header_last_updates_check">Seiceáladh seo caite: <xliff:g id="date" example="1 Eanáir 1970">%1$s</xliff:g> (<xliff:g id="time" sampla="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Nuashonrú á fhíorú</string>
|
||||
<string name="list_no_updates">Níor aimsíodh aon nuashonruithe nua. Chun seiceáil de láimh le haghaidh nuashonruithe nua, úsáid an cnaipe Athnuaigh.</string>
|
||||
<string name="action_download">Íosluchtaigh</string>
|
||||
<string name="action_pause">Sos</string>
|
||||
<string name="action_resume">Tosaigh arís</string>
|
||||
<string name="action_install">Suiteáil</string>
|
||||
<string name="action_info">Eolas</string>
|
||||
<string name="action_delete">Scrios</string>
|
||||
<string name="action_cancel">Cealaigh</string>
|
||||
<string name="confirm_delete_dialog_title">Scrios an comhad</string>
|
||||
<string name="confirm_delete_dialog_message">Scrios comhad uasdátaigh ?</string>
|
||||
<string name="apply_update_dialog_title">Cuir nuashonrú</string>
|
||||
<string name="apply_update_dialog_message">Tá tú ar tí <xliff:g id="update_name">%1$s</xliff:g> a shuiteáil.\n\nMá bhrúíonn tú <xliff:g id="ok">%2$s</xliff: g>, atosóidh an gléas é féin sa mhodh athshlánaithe chun an nuashonrú a shuiteáil.\n\nNóta: Teastaíonn Aisghabháil comhoiriúnach don ghné seo nó beidh gá le nuashonruithe a shuiteáil de láimh.</string>
|
||||
<string name="apply_update_dialog_message_ab">Tá tú ar tí <xliff:g id="update_name">%1$s</xliff:g> a shuiteáil.\n\nMá bhrúíonn tú <xliff:g id="ok">%2$s</xliff: g>, cuirfear tús leis an ngléas a shuiteáil sa chúlra.\n\nNuair a bheidh sé críochnaithe, tabharfar leid duit é a atosú.</string>
|
||||
<string name="cancel_installation_dialog_message">Cealaigh an tsuiteáil?</string>
|
||||
<string name="label_download_url">Íoslódáil URL</string>
|
||||
<string name="toast_download_url_copied">URL Chóipeáil</string>
|
||||
<string name="dialog_export_title">Nuashonrú easpórtála</string>
|
||||
<string name="notification_export_success">Easpórtáil an nuashonrú</string>
|
||||
<string name="notification_export_fail">Earráid easpórtála</string>
|
||||
<string name="toast_already_exporting">Ag easpórtáil nuashonrú cheana féin</string>
|
||||
<string name="toast_export_started">Thosaigh easpórtáil</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">1 soicind fágtha</item>
|
||||
<item quantity="two"><xliff:g id="count">%d</xliff:g> soicind fágtha</item>
|
||||
<item quantity="few"><xliff:g id="count">%d</xliff:g> soicind fágtha</item>
|
||||
<item quantity="many"><xliff:g id="count">%d</xliff:g> soicind fágtha</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> soicind fágtha</item>
|
||||
</plurals>
|
||||
<plurals name="eta_minutes">
|
||||
<item quantity="one">1 nóiméad fágtha</item>
|
||||
<item quantity="two"><xliff:g id="count">%d</xliff:g> nóiméad fágtha</item>
|
||||
<item quantity="few"><xliff:g id="count">%d</xliff:g> nóiméad fágtha</item>
|
||||
<item quantity="many"><xliff:g id="count">%d</xliff:g> nóiméad fágtha</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> nóiméad fágtha</item>
|
||||
</plurals>
|
||||
<plurals name="eta_hours">
|
||||
<item quantity="one">1 uair fágtha</item>
|
||||
<item quantity="two"><xliff:g id="count">%d</xliff:g> uair fágtha</item>
|
||||
<item quantity="few"><xliff:g id="count">%d</xliff:g> uair fágtha</item>
|
||||
<item quantity="many"><xliff:g id="count">%d</xliff:g> uair fágtha</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> uair fágtha</item>
|
||||
</plurals>
|
||||
<string name="update_over_metered_network_title">Rabhadh</string>
|
||||
<string name="update_over_metered_network_message">Tá tú ar tí pacáiste nuashonraithe a íoslódáil thar líonra méadraithe agus is dócha go mbeidh sé ina chúis le húsáid ard sonraí. Ar mhaith leat dul ar aghaidh?</string>
|
||||
<string name="checkbox_metered_network_warning">Ná taispeáin arís</string>
|
||||
<string name="menu_metered_network_warning">Rabhadh líonra méadraithe</string>
|
||||
<string name="blocked_update_dialog_title">Nuashonrú bactha</string>
|
||||
<string name="blocked_update_dialog_message">Ní féidir an nuashonrú seo a shuiteáil leis an aip nuashonraithe. Léigh <xliff:g id="info_url">%1$s</xliff:g> le haghaidh tuilleadh eolais.</string>
|
||||
<string name="export_channel_title">Críochnú onnmhairithe</string>
|
||||
<string name="new_updates_channel_title">Nuashonruithe nua</string>
|
||||
<string name="ongoing_channel_title">Íoslódálacha leanúnacha</string>
|
||||
<string name="update_failed_channel_title">Theip ar an nuashonrú</string>
|
||||
<string name="info_dialog_title">An raibh a fhios agat?</string>
|
||||
<string name="info_dialog_message">Is pacáistí suiteála iomlána iad nuashonruithe LineageOS. Ciallaíonn sé sin nach féidir leat ach an nuashonrú is déanaí a shuiteáil i gcónaí, fiú mura ndearna tú roinnt eatarthu!</string>
|
||||
<string name="info_dialog_ok">Go raibh maith agat as an eolas!</string>
|
||||
<string name="local_update_import">Nuashonrú áitiúil</string>
|
||||
<string name="local_update_import_progress">Nuashonrú logánta á iompórtáil\u2026</string>
|
||||
<string name="local_update_import_success">Iompórtáladh %1$s. Ar mhaith leat é a shuiteáil?</string>
|
||||
<string name="local_update_import_failure">Theip ar iompórtáil an nuashonrú áitiúil</string>
|
||||
<string name="local_update_import_install">Suiteáil</string>
|
||||
<string name="local_update_name">Nuashonrú áitiúil</string>
|
||||
</resources>
|
104
app/src/main/res/values-gd/strings.xml
Normal file
104
app/src/main/res/values-gd/strings.xml
Normal file
@@ -0,0 +1,104 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">An t-ùraichear</string>
|
||||
<string name="display_name">An t-ùraichear</string>
|
||||
<string name="verification_failed_notification">Dh’fhàillig an dearbhadh</string>
|
||||
<string name="verifying_download_notification">A’ dearbhadh an ùrachaidh</string>
|
||||
<string name="downloading_notification">’Ga luchdadh a-nuas</string>
|
||||
<string name="download_paused_notification">Tha an luchdadh a-nuas ’na stad</string>
|
||||
<string name="download_paused_error_notification">Mearachd leis an luchdadh a-nuas</string>
|
||||
<string name="download_completed_notification">Tha an luchdadh a-nuas deiseil</string>
|
||||
<string name="download_starting_notification">A’ tòiseachadh air an luchdadh a-nuas</string>
|
||||
<string name="update_failed_notification">Dh’fhàillig leis an ùrachadh</string>
|
||||
<string name="installation_suspended_notification">Chaidh an stàladh a chur ’na dhàil</string>
|
||||
<string name="new_updates_found_title">Ùrachaidhean</string>
|
||||
<string name="text_download_speed">%1$s, %2$s/s</string>
|
||||
<string name="pause_button">Cuir ’na stad</string>
|
||||
<string name="resume_button">Lean air</string>
|
||||
<string name="suspend_button">Cuir ’na dhàil</string>
|
||||
<string name="installing_update">A’ stàladh pacaid ùrachaidh</string>
|
||||
<string name="installing_update_error">Mearachd leis an stàladh</string>
|
||||
<string name="installing_update_finished">Chaidh an t-ùrachadh a stàladh</string>
|
||||
<string name="finalizing_package">A’ crìochnachadh stàladh na pacaid</string>
|
||||
<string name="preparing_ota_first_boot">Ag ullachadh a’ chiad tòiseachaidh</string>
|
||||
<string name="dialog_prepare_zip_message">Ullachadh an ùrachaidh</string>
|
||||
<string name="dialog_battery_low_title">Bataraidh fann</string>
|
||||
<string name="dialog_battery_low_message_pct">Tha am bataraidh ro fhann, feumaidh tu co-dhiù <xliff:g id="percent_discharging">%1$d</xliff:g>%% dhen bhataraidh mus lean thu air adhart no <xliff:g id="percent_charging">%2$d</xliff:g>%% fhad ’s a bhios tu ’ga theàirrdseadh.</string>
|
||||
<string name="reboot">Dèan ath-thòiseachadh</string>
|
||||
<string name="menu_refresh">Ath-nuadhaich</string>
|
||||
<string name="menu_preferences">Roghainnean</string>
|
||||
<string name="menu_auto_updates_check">Thoir sùil airson ùrachaidhean gu fèin-obrachail</string>
|
||||
<string name="menu_auto_updates_check_interval_daily">Gach latha</string>
|
||||
<string name="menu_auto_updates_check_interval_weekly">Gach seachdain</string>
|
||||
<string name="menu_auto_updates_check_interval_monthly">Gach mìos</string>
|
||||
<string name="menu_auto_updates_check_interval_never">Chan ann idir</string>
|
||||
<string name="menu_auto_delete_updates">Sguab às na h-ùrachaidhean às dèidh an stàlaidh</string>
|
||||
<string name="menu_delete_update">Sguab às</string>
|
||||
<string name="menu_copy_url">Dèan lethbhreac dhen URL</string>
|
||||
<string name="menu_export_update">Às-phortaich an t-ùrachadh</string>
|
||||
<string name="menu_show_changelog">Seall loga nan atharraichean</string>
|
||||
<string name="menu_ab_perf_mode">Cuir prìomhachas air pròiseas an ùrachaidh</string>
|
||||
<string name="menu_update_recovery">Ùraich an t-aiseag</string>
|
||||
<string name="toast_forced_update_recovery">Cha ghabh ùrachadh air aiseag Lineage a chur à comas air an uidheam seo.</string>
|
||||
<string name="snack_updates_found">Chaidh ùrachadh a lorg</string>
|
||||
<string name="snack_no_updates_found">Cha deach ùrachadh a lorg</string>
|
||||
<string name="snack_updates_check_failed">Cha b’ urrainn dhuinn sùil a thoirt airson ùrachaidhean. Thoir sùil air a’ cheangal agad ris an eadar-lìon is feuch ris a-rithist an ceann greis.</string>
|
||||
<string name="snack_download_failed">Dh’fhàillig an luchdadh a-nuas. Thoir sùil air a’ cheangal ris an eadar-lìon agad is feuch ris a-rithist an ceann greis.</string>
|
||||
<string name="snack_download_verification_failed">Dh’fhàillig le dearbhadh an ùrachaidh.</string>
|
||||
<string name="snack_download_verified">Tha an luchdadh a-nuas deiseil.</string>
|
||||
<string name="snack_update_not_installable">Chan urrainn dhut an t-ùrachadh seo a’ stàladh air an togail làithreach agad.</string>
|
||||
<string name="header_title_text">LineageOS\n%1$s</string>
|
||||
<string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string>
|
||||
<string name="header_last_updates_check">An sgrùdadh mu dheireadh: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> – <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_verifying_update">A’ dearbhadh an ùrachaidh</string>
|
||||
<string name="list_no_updates">Cha deach ùrachadh a lorg. Airson sùil a thoirt airson ùrachaidhean a làimh, cleachd am putan “Ath-nuadhaich”.</string>
|
||||
<string name="action_download">Luchdaich a-nuas</string>
|
||||
<string name="action_pause">Cuir ’na stad</string>
|
||||
<string name="action_resume">Lean air</string>
|
||||
<string name="action_install">Stàlaich</string>
|
||||
<string name="action_info">Fiosrachadh</string>
|
||||
<string name="action_delete">Sguab às</string>
|
||||
<string name="action_cancel">Sguir dheth</string>
|
||||
<string name="confirm_delete_dialog_title">Sguab às am faidhle</string>
|
||||
<string name="confirm_delete_dialog_message">A bheil thu airson faidhle an ùrachaidh a thagh thu a sguabadh às?</string>
|
||||
<string name="apply_update_dialog_title">Cuir an t-ùrachadh an sàs</string>
|
||||
<string name="cancel_installation_dialog_message">An sguir thu dhen stàladh?</string>
|
||||
<string name="label_download_url">Luchdaich a-nuas URL</string>
|
||||
<string name="toast_download_url_copied">Chaidh lethbhreac dhen URL a dhèanamh</string>
|
||||
<string name="dialog_export_title">Ag às-phortadh an ùrachaidh</string>
|
||||
<string name="notification_export_success">Chaidh an t-ùrachadh às-phortadh</string>
|
||||
<string name="notification_export_fail">Mearachd leis an às-phortadh</string>
|
||||
<string name="toast_already_exporting">Tha thu ag às-phortadh ùrachadh mu thràth</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one"><xliff:g id="count">%d</xliff:g> diog air fhàgail</item>
|
||||
<item quantity="two"><xliff:g id="count">%d</xliff:g> dhiog air fhàgail</item>
|
||||
<item quantity="few"><xliff:g id="count">%d</xliff:g> diogan air fhàgail</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> diog air fhàgail</item>
|
||||
</plurals>
|
||||
<plurals name="eta_minutes">
|
||||
<item quantity="one"><xliff:g id="count">%d</xliff:g> mhion. air fhàgail</item>
|
||||
<item quantity="two"><xliff:g id="count">%d</xliff:g> mhion. air fhàgail</item>
|
||||
<item quantity="few"><xliff:g id="count">%d</xliff:g> mion. air fhàgail</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> mion. air fhàgail</item>
|
||||
</plurals>
|
||||
<plurals name="eta_hours">
|
||||
<item quantity="one"><xliff:g id="count">%d</xliff:g> uair a thìde air fhàgail</item>
|
||||
<item quantity="two"><xliff:g id="count">%d</xliff:g> uair a thìde air fhàgail</item>
|
||||
<item quantity="few"><xliff:g id="count">%d</xliff:g> uairean a thìde air fhàgail</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> uair a thìde air fhàgail</item>
|
||||
</plurals>
|
||||
<string name="update_over_metered_network_title">Rabhadh</string>
|
||||
<string name="checkbox_metered_network_warning">Na seall seo a-rithist</string>
|
||||
<string name="blocked_update_dialog_title">Chaidh an t-ùrachadh a bhacadh</string>
|
||||
<string name="blocked_update_dialog_message">Cha ghabh an t-ùrachadh seo stàladh le aplacaid an ùraicheir. Leugh <xliff:g id="info_url">%1$s</xliff:g> airson barrachd fiosrachaidh.</string>
|
||||
<string name="export_channel_title">Coileanadh an às-phortaidh</string>
|
||||
<string name="new_updates_channel_title">Ùrachaidhean</string>
|
||||
<string name="ongoing_channel_title">’Ga luchdadh a-nuas</string>
|
||||
<string name="update_failed_channel_title">Dh’fhàillig leis an ùrachadh</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Actualizador</string>
|
||||
@@ -26,10 +14,12 @@
|
||||
<string name="download_completed_notification">Descarga completada</string>
|
||||
<string name="download_starting_notification">Iniciando descarga</string>
|
||||
<string name="update_failed_notification">Erro ao actualizar</string>
|
||||
<string name="installation_suspended_notification">Instalación suspendida</string>
|
||||
<string name="new_updates_found_title">Novas actualizacións</string>
|
||||
<string name="text_download_speed">%1$s, %2$s/s</string>
|
||||
<string name="pause_button">Pausar</string>
|
||||
<string name="resume_button">Continuar</string>
|
||||
<string name="suspend_button">Suspender</string>
|
||||
<string name="installing_update">Instalando paquete de actualización</string>
|
||||
<string name="installing_update_error">Erro de instalación</string>
|
||||
<string name="installing_update_finished">Actualización instalada</string>
|
||||
@@ -52,6 +42,8 @@
|
||||
<string name="menu_export_update">Exportar actualización</string>
|
||||
<string name="menu_show_changelog">Amosar o rexistro de cambios</string>
|
||||
<string name="menu_ab_perf_mode">Dar prioridade ao proceso de actualización</string>
|
||||
<string name="menu_update_recovery">Actualizar recuperador</string>
|
||||
<string name="toast_forced_update_recovery">Non é posible desactivar as actualizacións do recuperador do Lineage neste dispositivo.</string>
|
||||
<string name="snack_updates_found">Atopáronse novas actualizacións</string>
|
||||
<string name="snack_no_updates_found">Non se atoparon novas actualizacións</string>
|
||||
<string name="snack_updates_check_failed">A verificación da descarga fallou. Comproba a túa conexión a internet e téntao de novo.</string>
|
||||
@@ -64,8 +56,6 @@
|
||||
<string name="header_last_updates_check">Última comprobación: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new">restan <xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_verifying_update">Comprobando actualización</string>
|
||||
<string name="list_no_updates">Non se atoparon novas actualizacións. Para buscar manualmente, preme no botón Actualizar.</string>
|
||||
<string name="action_download">Descarga</string>
|
||||
@@ -78,8 +68,6 @@
|
||||
<string name="confirm_delete_dialog_title">Eliminar ficheiro</string>
|
||||
<string name="confirm_delete_dialog_message">Eliminar o ficheiro de actualización seleccionado?</string>
|
||||
<string name="apply_update_dialog_title">Aplicar a actualización</string>
|
||||
<string name="apply_update_dialog_message">Procederase a actualizar <xliff:g id="update_name">%1$s</xliff:g>.\n\nAo premer en <xliff:g id="ok">%2$s</xliff:g>, reiniciarase no modo recuperación para instalar a actualización.\n\nAviso: Esta función require dunha recuperación compatible ou as actualizacións precisarán de se instalar manualmente.</string>
|
||||
<string name="apply_update_dialog_message_ab">Actualizaráse a <xliff:g id="update_name">%1$s</xliff:g>.\n\n Se pulsase <xliff:g id="ok">%2$s</xliff:g>, o dispositivo comezará a instalar en segundo plano.\n\nUnha vez terminado o proceso, pediráselle que reinicie.</string>
|
||||
<string name="cancel_installation_dialog_message">Cancelar a instalación?</string>
|
||||
<string name="label_download_url">URL da descarga</string>
|
||||
<string name="toast_download_url_copied">URL copiado</string>
|
||||
@@ -99,10 +87,8 @@
|
||||
<item quantity="one">resta 1 hora</item>
|
||||
<item quantity="other">restan <xliff:g id="count">%d</xliff:g> horas</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Aviso</string>
|
||||
<string name="update_on_mobile_data_message">Estás a punto de descargar un paquete de actualización a través da conexión de datos móbeis o que xerará un maior consumo de datos. Tes a certeza de querer continuar?</string>
|
||||
<string name="checkbox_mobile_data_warning">Non amosar máis</string>
|
||||
<string name="menu_mobile_data_warning">Aviso de datos móbiles</string>
|
||||
<string name="update_over_metered_network_title">Aviso</string>
|
||||
<string name="checkbox_metered_network_warning">Non amosar máis</string>
|
||||
<string name="blocked_update_dialog_title">Actualización bloqueada</string>
|
||||
<string name="blocked_update_dialog_message">Esta actualización non se pode instalar empregando este actualizador. Por favor, le <xliff:g id="info_url">%1$s</xliff:g> para máis información.</string>
|
||||
<string name="export_channel_title">Exportación completada</string>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Ažuriranje</string>
|
||||
@@ -43,6 +31,8 @@
|
||||
<string name="menu_copy_url">Kopiraj URL</string>
|
||||
<string name="menu_export_update">Izvezi ažuriranje</string>
|
||||
<string name="menu_show_changelog">Prikaži promjene</string>
|
||||
<string name="menu_update_recovery">Ažuriraj recovery</string>
|
||||
<string name="toast_forced_update_recovery">Nemoguće je onemogućiti ažuriranja Lineage Recovery na ovom uređaju.</string>
|
||||
<string name="snack_updates_found">Pronađena su nova ažuriranja</string>
|
||||
<string name="snack_no_updates_found">Nema pronađenih novih ažuriranja</string>
|
||||
<string name="snack_updates_check_failed">Provjera ažuriranja nije uspjela. Provjerite internetsku vezu i pokušajte ponovo kasnije.</string>
|
||||
@@ -61,8 +51,6 @@
|
||||
<string name="confirm_delete_dialog_title">Izbriši datoteku</string>
|
||||
<string name="confirm_delete_dialog_message">Želite li izbrisati odabranu datoteku ažuriranja?</string>
|
||||
<string name="apply_update_dialog_title">Primjeni ažuriranje</string>
|
||||
<string name="apply_update_dialog_message">Ažurirat ćete svoj sustav na <xliff:g id="filename">%1$s</xliff:g>.\n\nAko pritisnete <xliff:g id="ok">%2$s</xliff:g>, uređaj će se sam ponovno pokrenuti u načinu oporavka kako bi instalirao ažuriranje.\n\nNapomena: ova značajka zahtijeva kompatibilan Oporavak. U suprotnome će se ažuriranja morati instalirati ručno.</string>
|
||||
<string name="apply_update_dialog_message_ab">Spremate se ažurirati na <xliff:g id="filename">%1$s </xliff:g>.\n\nAko dodirnete <xliff:g id="ok">%2$s</xliff:g>, uređaj će započeti instalaciju u pozadini.\n\nKad se završi, trebati ćete ponovno pokrenuti uređaj.</string>
|
||||
<string name="cancel_installation_dialog_message">Prekinuti instalaciju?</string>
|
||||
<string name="label_download_url">Preuzmi URL</string>
|
||||
<string name="toast_download_url_copied">URL kopiran</string>
|
||||
@@ -70,10 +58,8 @@
|
||||
<string name="notification_export_success">Ažuriranje je izvezeno</string>
|
||||
<string name="notification_export_fail">Pogreška izvoza</string>
|
||||
<string name="toast_already_exporting">Ažuriranje se već izvozi</string>
|
||||
<string name="update_on_mobile_data_title">Upozorenje</string>
|
||||
<string name="update_on_mobile_data_message">Upravo ćete preuzeti paket ažuriranja pomoću mobilnih podataka koji će vjerojatno uzrokovati visoku upotrebu podataka. Želite li nastaviti?</string>
|
||||
<string name="checkbox_mobile_data_warning">Ne prikazuj ponovno</string>
|
||||
<string name="menu_mobile_data_warning">Upozorenje o mobilnim podacima</string>
|
||||
<string name="update_over_metered_network_title">Upozorenje</string>
|
||||
<string name="checkbox_metered_network_warning">Ne prikazuj ponovno</string>
|
||||
<string name="blocked_update_dialog_title">Ažuriranje je blokirano</string>
|
||||
<string name="blocked_update_dialog_message">Ovo se ažuriranje ne može instalirati pomoću aplikacije za ažuriranje. Molimo pročitajte <xliff:g id="info_url">%1$s</xliff:g> za više informacija.</string>
|
||||
<string name="export_channel_title">Kraj izvoza</string>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Frissítés</string>
|
||||
@@ -41,6 +29,12 @@
|
||||
<string name="dialog_battery_low_title">Alacsony akkumulátorszint</string>
|
||||
<string name="dialog_battery_low_message_pct">Az akkumulátortöltöttség túl alacsony, szüksége van legalább <xliff:g id="percent_discharging">%1$d</xliff:g>%% töltöttségre a folytatáshoz,
|
||||
illetve, ha éppen tölt, akkor még <xliff:g id="percent_charging">%2$d</xliff:g>%% töltés szükséges.</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[ Futtassa az alábbi parancsokat, majd próbálja újra a frissítést:\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot
|
||||
]]></string>
|
||||
<string name="dialog_scratch_mounted_title">Nem telepíthet frissítést a felcsatlakoztatott OverlayFS miatt</string>
|
||||
<string name="reboot">Újraindítás</string>
|
||||
<string name="menu_refresh">Frissítés</string>
|
||||
<string name="menu_preferences">Testreszabás</string>
|
||||
@@ -55,6 +49,8 @@ illetve, ha éppen tölt, akkor még <xliff:g id="percent_charging">%2$d</xliff:
|
||||
<string name="menu_export_update">A frissítés exportálása</string>
|
||||
<string name="menu_show_changelog">A változások listájának megjelenítése</string>
|
||||
<string name="menu_ab_perf_mode">Állítsa fontossági sorrendbe a frissítési folyamatot</string>
|
||||
<string name="menu_update_recovery">Recovery-frissítés</string>
|
||||
<string name="toast_forced_update_recovery">Ezen a készüléken nem lehet letiltani a Lineage Recovery frissítéseket.</string>
|
||||
<string name="snack_updates_found">Új frissítés érhető el</string>
|
||||
<string name="snack_no_updates_found">Nem található új frissítés</string>
|
||||
<string name="snack_updates_check_failed">Nem sikerült a frissítéskeresés. Ellenőrizze az internetkapcsolatát, majd próbálja újra.</string>
|
||||
@@ -67,8 +63,8 @@ illetve, ha éppen tölt, akkor még <xliff:g id="percent_charging">%2$d</xliff:
|
||||
<string name="header_last_updates_check">Utolsó ellenőrzés: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> a <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g>-ból - <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> a <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g>-ból (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Frissítésellenőrzés</string>
|
||||
<string name="list_no_updates">Nem található új frissítés. A manuális ellenőrzéshez használja a Frissítés gombot.</string>
|
||||
<string name="action_download">Letöltés</string>
|
||||
@@ -81,8 +77,8 @@ illetve, ha éppen tölt, akkor még <xliff:g id="percent_charging">%2$d</xliff:
|
||||
<string name="confirm_delete_dialog_title">Fájltörlés</string>
|
||||
<string name="confirm_delete_dialog_message">Biztosan törölni szeretné a letöltött frissítőfájlt?</string>
|
||||
<string name="apply_update_dialog_title">A frissítés telepítése</string>
|
||||
<string name="apply_update_dialog_message">A következő frissítésre készül: <xliff:g id="update_name">%1$s</xliff:g>.\n\nHa megnyomja ezt a gombot: <xliff:g id="ok">%2$s</xliff:g>, a készülék újraindul recovery módban a frissítés telepítéséhez.\n\nMegjegyzés: Ehhez a funkcióhoz kompatibilis recovery-re van szükség, ennek hiányában manuálisan kell a telepíteni a frissítéseket.</string>
|
||||
<string name="apply_update_dialog_message_ab">A következő frissítésre készül: <xliff:g id="update_name">%1$s</xliff:g>.\n\nHa megnyomja ezt a gombot: <xliff:g id="ok">%2$s</xliff:g>, a készülék elkezdi a telepítést a háttérben.\n\nAmint kész, újraindításra lesz szükség.</string>
|
||||
<string name="apply_update_dialog_message">Ön a következőt kívánja telepiteni: <xliff:g id="update_name">%1$s</xliff:g>\n\nAmennyiben megnyomja az <xliff:g id="ok">%2$s</xliff:g> gombot, a készülék újraindul recovery-módban és telepíti a frissítést.\n\nFigyelmeztetés: a telepítéshez a készülékkel kompatibilis Recovery szükséges</string>
|
||||
<string name="apply_update_dialog_message_ab">A következő telepítésre készül: <xliff:g id="update_name">%1$s</xliff:g>.\n\nAmennyiben megnyomja az <xliff:g id="ok">%2$s</xliff:g> gombot, a készülék elkezdi a telepítést a háttérben.\n\nAmint kész, újraindításra lesz szükség.</string>
|
||||
<string name="cancel_installation_dialog_message">Megszakítja a telepítést?</string>
|
||||
<string name="label_download_url">Az URL letöltése</string>
|
||||
<string name="toast_download_url_copied">Az URL másolva</string>
|
||||
@@ -90,6 +86,7 @@ illetve, ha éppen tölt, akkor még <xliff:g id="percent_charging">%2$d</xliff:
|
||||
<string name="notification_export_success">A frissítés exportálva</string>
|
||||
<string name="notification_export_fail">Exportálás hiba</string>
|
||||
<string name="toast_already_exporting">Egy frissítés exportálása már folyamatban van</string>
|
||||
<string name="toast_export_started">Az exportálás elindult</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">1 másodperc van hátra</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> másodperc van hátra</item>
|
||||
@@ -102,14 +99,23 @@ illetve, ha éppen tölt, akkor még <xliff:g id="percent_charging">%2$d</xliff:
|
||||
<item quantity="one">1 óra van hátra</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> óra van hátra</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Figyelmeztetés</string>
|
||||
<string name="update_on_mobile_data_message">A frissítés mobiladat-forgalom használatával fog letöltődni, ami magas mobiladat-használatot eredményezhet. Szeretné folytatni?</string>
|
||||
<string name="checkbox_mobile_data_warning">Ne jelenjen meg többet</string>
|
||||
<string name="menu_mobile_data_warning">Mobiladat-használati figyelmeztetés</string>
|
||||
<string name="update_over_metered_network_title">Figyelmeztetés</string>
|
||||
<string name="update_over_metered_network_message">Úgy tűnik mobiladat-forgalmat használva kíván letölteni egy nagyméretű frissítési csomagot, ami nagy költséggel járhat. Biztos benne hogy engedélyezi ezt?</string>
|
||||
<string name="checkbox_metered_network_warning">Ne jelenjen meg többet</string>
|
||||
<string name="menu_metered_network_warning">Mobiladat-költség figyelmeztetés</string>
|
||||
<string name="blocked_update_dialog_title">A frissítés blokkolva</string>
|
||||
<string name="blocked_update_dialog_message">Ez a frissítés nem telepíthető a Frissítés alkalmazással. További információért olvassa el a következőt: <xliff:g id="info_url">%1$s</xliff:g></string>
|
||||
<string name="export_channel_title">Exportálás-véglegesítés</string>
|
||||
<string name="new_updates_channel_title">Új frissítések</string>
|
||||
<string name="ongoing_channel_title">Folyamatban lévő letöltések</string>
|
||||
<string name="update_failed_channel_title">A frissítés sikertelen</string>
|
||||
<string name="info_dialog_title">Tudta Ön?</string>
|
||||
<string name="info_dialog_message">A LineageOS frissítései teljes telepítőcsomagok. Ez azt jelenti, hogy mindig elég a legfrissebb csomagot telepítenie, nem baj ha korábban kihagyott párat!</string>
|
||||
<string name="info_dialog_ok">Köszönet az információért!</string>
|
||||
<string name="local_update_import">Helyi frissítés</string>
|
||||
<string name="local_update_import_progress">Helyi frissítés importálása\u2026</string>
|
||||
<string name="local_update_import_success">%1$s importálva lett. Kívánja telepíteni?</string>
|
||||
<string name="local_update_import_failure">Nem sikerült importálni a helyi frissítést</string>
|
||||
<string name="local_update_import_install">Telepítés</string>
|
||||
<string name="local_update_name">Helyi frissítés</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Pembaruan</string>
|
||||
@@ -54,6 +42,8 @@
|
||||
<string name="menu_export_update">Ekspor pembaruan</string>
|
||||
<string name="menu_show_changelog">Tampilkan catatan perubahan</string>
|
||||
<string name="menu_ab_perf_mode">Prioritaskan proses pembaruan</string>
|
||||
<string name="menu_update_recovery">Perbarui Recovery</string>
|
||||
<string name="toast_forced_update_recovery">Tidak mungkin untuk menonaktifkan pembaruan Lineage Recovery di perangkat ini.</string>
|
||||
<string name="snack_updates_found">Pembaruan baru ditemukan</string>
|
||||
<string name="snack_no_updates_found">Tidak ada pembaruan baru ditemukan</string>
|
||||
<string name="snack_updates_check_failed">Pemeriksaan pembaruan gagal. Silakan periksa koneksi Internet Anda dan coba lagi nanti.</string>
|
||||
@@ -66,8 +56,8 @@
|
||||
<string name="header_last_updates_check">Terakhir diperiksa: <xliff:g id="date" example="1 January 1970">%1$s </xliff:g> (<xliff:g id="time" example="01:23">%2$s </xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> dari <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> dari <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="duration" example="3 minutes">%3$s</xliff:g> lagi) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> dari <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> dari <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Memverifikasi pembaruan</string>
|
||||
<string name="list_no_updates">Pembaruan tidak ditemukan. Untuk memeriksa pembaruan secara manual, gunakan tombol Segarkan.</string>
|
||||
<string name="action_download">Unduh</string>
|
||||
@@ -80,8 +70,8 @@
|
||||
<string name="confirm_delete_dialog_title">Hapus berkas</string>
|
||||
<string name="confirm_delete_dialog_message">Hapus berkas pembaruan yang terpilih?</string>
|
||||
<string name="apply_update_dialog_title">Terapkan pembaruan</string>
|
||||
<string name="apply_update_dialog_message">Anda akan meningkatkan ke <xliff:g id="update_name">%1$s</xliff:g>.\n\nJika Anda menekan <xliff:g id="ok">%2$s</xliff:g>, perangkat akan mulai ulang sendiri dalam mode recovery untuk memasang pembaruan.\n\nPerhatian: Fitur ini memerlukan Recovery yang kompatibel atau pembaruan perlu dipasang secara manual.</string>
|
||||
<string name="apply_update_dialog_message_ab">Anda akan meningkatkan ke <xliff:g id="update_name">%1$s</xliff:g>.\n\nJika Anda menekan <xliff:g id="ok">%2$s</xliff:g>, perangkat akan mulai memasang di latar belakang.\n\nSetelah selesai, Anda akan diminta untuk memulai ulang perangkat.</string>
|
||||
<string name="apply_update_dialog_message">Anda akan memasang <xliff:g id="update_name">%1$s</xliff:g>.\n\nJika Anda menekan <xliff:g id="ok">%2$s</xliff:g>, perangkat akan mulai ulang sendiri dalam mode recovery untuk memasang pembaruan.\n\nPerhatian: Fitur ini memerlukan Recovery yang kompatibel atau pembaruan perlu dipasang secara manual.</string>
|
||||
<string name="apply_update_dialog_message_ab">Anda akan memasang <xliff:g id="update_name">%1$s</xliff:g>.\n\nJika Anda menekan <xliff:g id="ok">%2$s</xliff:g>, perangkat akan mulai memasang di latar belakang.\n\nSetelah selesai, Anda akan diminta untuk memulai ulang perangkat.</string>
|
||||
<string name="cancel_installation_dialog_message">Batalkan pemasangan?</string>
|
||||
<string name="label_download_url">URL Unduh</string>
|
||||
<string name="toast_download_url_copied">URL disalin</string>
|
||||
@@ -89,6 +79,7 @@
|
||||
<string name="notification_export_success">Pembaruan diekspor</string>
|
||||
<string name="notification_export_fail">Kesalahan saat mengekspor</string>
|
||||
<string name="toast_already_exporting">Sudah mengekspor pembaruan</string>
|
||||
<string name="toast_export_started">Ekspor dimulai</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> detik tersisa</item>
|
||||
</plurals>
|
||||
@@ -98,14 +89,23 @@
|
||||
<plurals name="eta_hours">
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> jam tersisa</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Peringatan</string>
|
||||
<string name="update_on_mobile_data_message">Anda akan mengunduh paket pembaruan menggunakan data seluler yang mungkin akan menyebabkan penggunaan data yang tinggi. Apakah Anda ingin melanjutkan?</string>
|
||||
<string name="checkbox_mobile_data_warning">Jangan tampilkan lagi</string>
|
||||
<string name="menu_mobile_data_warning">Peringatan data seluler</string>
|
||||
<string name="update_over_metered_network_title">Peringatan</string>
|
||||
<string name="update_over_metered_network_message">Anda akan mengunduh paket pembaruan melalui jaringan terukur yang kemungkinan besar akan menyebabkan penggunaan data yang tinggi. Apakah Anda ingin melanjutkan?</string>
|
||||
<string name="checkbox_metered_network_warning">Jangan tampilkan lagi</string>
|
||||
<string name="menu_metered_network_warning">Peringatan jaringan terukur</string>
|
||||
<string name="blocked_update_dialog_title">Pembaruan diblokir</string>
|
||||
<string name="blocked_update_dialog_message">Pembaruan ini tidak dapat dipasang menggunakan aplikasi pembaruan. Baca <xliff:g id="info_url">%1$s</xliff:g> untuk informasi lebih lanjut.</string>
|
||||
<string name="blocked_update_dialog_message">Pembaruan ini tidak dapat dipasang menggunakan aplikasi pembaruan. Baca <xliff:g id="info_url">%1$s</xliff:g> untuk informasi lebih lanjut.</string>
|
||||
<string name="export_channel_title">Penyelesaian ekspor</string>
|
||||
<string name="new_updates_channel_title">Pembaruan baru</string>
|
||||
<string name="ongoing_channel_title">Unduhan sedang berlangsung</string>
|
||||
<string name="update_failed_channel_title">Pembaruan gagal</string>
|
||||
<string name="info_dialog_title">Tahukah Anda?</string>
|
||||
<string name="info_dialog_message">Pembaruan LineageOS adalah paket instalasi lengkap. Itu berarti Anda selalu dapat menginstal hanya pembaruan terbaru, bahkan jika Anda melewatkan beberapa di antaranya!</string>
|
||||
<string name="info_dialog_ok">Terima kasih atas infonya!</string>
|
||||
<string name="local_update_import">Pembaruan lokal</string>
|
||||
<string name="local_update_import_progress">Mengimpor pembaruan lokal\u2026</string>
|
||||
<string name="local_update_import_success">%1$s telah diimpor. Apakah Anda ingin menginstalnya?</string>
|
||||
<string name="local_update_import_failure">Gagal mengimpor pembaruan lokal</string>
|
||||
<string name="local_update_import_install">Instal</string>
|
||||
<string name="local_update_name">Pembaruan lokal</string>
|
||||
</resources>
|
115
app/src/main/res/values-is/strings.xml
Normal file
115
app/src/main/res/values-is/strings.xml
Normal file
@@ -0,0 +1,115 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Uppfærslustýring</string>
|
||||
<string name="display_name">Uppfærslustýring</string>
|
||||
<string name="verification_failed_notification">Sannvottun mistókst</string>
|
||||
<string name="verifying_download_notification">Yfirfer uppfærslu</string>
|
||||
<string name="downloading_notification">Sæki gögn</string>
|
||||
<string name="download_paused_notification">Niðurhal í bið</string>
|
||||
<string name="download_paused_error_notification">Villa við að sækja gögn</string>
|
||||
<string name="download_completed_notification">Niðurhali lokið</string>
|
||||
<string name="download_starting_notification">Byrja niðurhal</string>
|
||||
<string name="update_failed_notification">Uppfærsla mistókst</string>
|
||||
<string name="installation_suspended_notification">Uppsetning sett í bið</string>
|
||||
<string name="new_updates_found_title">Nýjar uppfærslur</string>
|
||||
<string name="text_download_speed">%1$s, %2$s/s</string>
|
||||
<string name="pause_button">Í bið</string>
|
||||
<string name="resume_button">Halda áfram</string>
|
||||
<string name="suspend_button">Setja í bið</string>
|
||||
<string name="installing_update">Set inn uppfærslupakka</string>
|
||||
<string name="installing_update_error">Villa í uppsetningu</string>
|
||||
<string name="installing_update_finished">Uppfærsla uppsett</string>
|
||||
<string name="finalizing_package">Lýk uppsetningu á pakka</string>
|
||||
<string name="preparing_ota_first_boot">Undirbý fyrstu ræsingu</string>
|
||||
<string name="dialog_prepare_zip_message">Undirbúningur forstillinga uppfærslu</string>
|
||||
<string name="dialog_battery_low_title">Lítil hleðsla á rafhlöðu</string>
|
||||
<string name="dialog_battery_low_message_pct">Hleðslan á rafhlöðunni er of lítil, þú þarft a.m.k. <xliff:g id="percent_discharging">%1$d</xliff:g>%% hleðslu til að halda áfram, <xliff:g id="percent_charging">%2$d</xliff:g>%% ef í hleðslu.</string>
|
||||
<string name="reboot">Endurræsa</string>
|
||||
<string name="menu_refresh">Endurlesa</string>
|
||||
<string name="menu_preferences">Kjörstillingar</string>
|
||||
<string name="menu_auto_updates_check">Sjálfvirk athugun með uppfærslur</string>
|
||||
<string name="menu_auto_updates_check_interval_daily">Einu sinni á dag</string>
|
||||
<string name="menu_auto_updates_check_interval_weekly">Einu sinni í viku</string>
|
||||
<string name="menu_auto_updates_check_interval_monthly">Einu sinni í mánuði</string>
|
||||
<string name="menu_auto_updates_check_interval_never">Aldrei</string>
|
||||
<string name="menu_auto_delete_updates">Eyða uppfærslupökkum þegar þeir hafa verið settir inn</string>
|
||||
<string name="menu_delete_update">Eyða</string>
|
||||
<string name="menu_copy_url">Afrita slóð</string>
|
||||
<string name="menu_export_update">Flytja út uppfærslu</string>
|
||||
<string name="menu_show_changelog">Birta breytingaannál</string>
|
||||
<string name="menu_ab_perf_mode">Setja uppfærsluferli í forgang</string>
|
||||
<string name="menu_update_recovery">Uppfæra endurheimtingu</string>
|
||||
<string name="toast_forced_update_recovery">Ekki er hægt að gera uppfærslur á endurheimtingu LineageOS óvirkar á þessu
|
||||
tæki.</string>
|
||||
<string name="snack_updates_found">Nýjar uppfærslur fundust</string>
|
||||
<string name="snack_no_updates_found">Engar nýjar uppfærslur fundust</string>
|
||||
<string name="snack_updates_check_failed">Athugun með uppfærslur mistókst. Skoðaðu internettenginguna og reyndu aftur síðar.</string>
|
||||
<string name="snack_download_failed">Niðurhal mistókst. Athugaðu internettenginguna og reyndu aftur síðar.</string>
|
||||
<string name="snack_download_verification_failed">Sannvottun uppfærslu mistókst.</string>
|
||||
<string name="snack_download_verified">Niðurhali er lokið.</string>
|
||||
<string name="snack_update_not_installable">Þessa uppfærslu er ekki gægt að setja upp á þessari byggingarútgáfu.</string>
|
||||
<string name="header_title_text">LineageOS\n%1$s</string>
|
||||
<string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string>
|
||||
<string name="header_last_updates_check">Síðast kannað: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Yfirfer uppfærslu</string>
|
||||
<string name="list_no_updates">Engar nýjar uppfærslur fundust. Til að athuga handvirkt með nýjar uppfærslur, notaðu Endurlesa-hnappinn.</string>
|
||||
<string name="action_download">Sækja</string>
|
||||
<string name="action_pause">Í bið</string>
|
||||
<string name="action_resume">Halda áfram</string>
|
||||
<string name="action_install">Setja upp</string>
|
||||
<string name="action_info">Upplýsingar</string>
|
||||
<string name="action_delete">Eyða</string>
|
||||
<string name="action_cancel">Hætta við</string>
|
||||
<string name="confirm_delete_dialog_title">Eyða skrá</string>
|
||||
<string name="confirm_delete_dialog_message">Eyða valdri uppfærsluskrá?</string>
|
||||
<string name="apply_update_dialog_title">Virkja uppfærslu</string>
|
||||
<string name="apply_update_dialog_message">Þú ert í þann mund að setja upp <xliff:g id="update_name">%1$s</xliff:g>.\n\nEf þú ýtir á <xliff:g id="ok">%2$s</xliff:g>, mun tækið endurræsa sig í endurheimtuham til að setja inn uppfærsluna.\n\nAthugaðu: Þessi eiginleiki krefst þess að til staðar séu samhæfð endurheimtugögn því annars þarf að setja uppfærslurnar inn handvirkt.</string>
|
||||
<string name="apply_update_dialog_message_ab">Þú ert í þann mund að setja upp <xliff:g id="update_name">%1$s</xliff:g>.\n\nEf þú ýtir á <xliff:g id="ok">%2$s</xliff:g>, mun tækið hefja uppfærsluna í bakgrunnsferli.\n\nÞegar henni er lokið færðu beiðni um að endurræsa.</string>
|
||||
<string name="cancel_installation_dialog_message">Hætta við uppsetningu?</string>
|
||||
<string name="label_download_url">Niðurhalsslóð</string>
|
||||
<string name="toast_download_url_copied">URL-slóð afrituð</string>
|
||||
<string name="dialog_export_title">Flytja út uppfærslu</string>
|
||||
<string name="notification_export_success">Uppfærsla flutt út</string>
|
||||
<string name="notification_export_fail">Villa við útflutning</string>
|
||||
<string name="toast_already_exporting">Þegar að flytja út uppfærslu</string>
|
||||
<string name="toast_export_started">Útflutningur hafinn</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">1 sekúnda eftir</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> sekúndur eftir</item>
|
||||
</plurals>
|
||||
<plurals name="eta_minutes">
|
||||
<item quantity="one">1 mínúta eftir</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> mínútur eftir</item>
|
||||
</plurals>
|
||||
<plurals name="eta_hours">
|
||||
<item quantity="one">1 klukkustund eftir</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> klukkustundir eftir</item>
|
||||
</plurals>
|
||||
<string name="update_over_metered_network_title">Aðvörun</string>
|
||||
<string name="update_over_metered_network_message">Þú ert í þann mund að fara að sækja uppfærslupakka í gegnum gjaldskylt net,
|
||||
sem gæti útheimt mikla notkun gagnamagns. Viltu halda áfram?</string>
|
||||
<string name="checkbox_metered_network_warning">Ekki sýna aftur</string>
|
||||
<string name="menu_metered_network_warning">Aðvörun á gjaldskyldu neti</string>
|
||||
<string name="blocked_update_dialog_title">Lokað á uppfærslu</string>
|
||||
<string name="blocked_update_dialog_message">Þessa uppfærslu er ekki hægt að setja inn með uppfærsluforritinu. Skoðaðu <xliff:g id="info_url">%1$s</xliff:g> til að fá frekari upplýsingar.</string>
|
||||
<string name="export_channel_title">Klárun útflutnings</string>
|
||||
<string name="new_updates_channel_title">Nýjar uppfærslur</string>
|
||||
<string name="ongoing_channel_title">Niðurhal í gangi</string>
|
||||
<string name="update_failed_channel_title">Uppfærsla mistókst</string>
|
||||
<string name="info_dialog_title">Vissir þú?</string>
|
||||
<string name="info_dialog_message">Uppfærslur á LineageOS eru alltaf heilir uppsetningapakkar. Það þýðir að þú getur alltaf sett einungis upp nýjustu uppfærsluna, jafnvel þótt þú hafir sleppt einhverjum uppfærslum í millitíðinni!</string>
|
||||
<string name="info_dialog_ok">Takk fyrir upplýsingarnar!</string>
|
||||
<string name="local_update_import">Staðbundin uppfærsla</string>
|
||||
<string name="local_update_import_progress">Flyt inn staðbundna uppfærslu\u2026</string>
|
||||
<string name="local_update_import_success">%1$s hefur verið flutt inn. Viltu setja hana upp?</string>
|
||||
<string name="local_update_import_failure">Mistókst að flytja inn staðbundna uppfærslu</string>
|
||||
<string name="local_update_name">Staðbundin uppfærsla</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Aggiornamenti</string>
|
||||
@@ -35,11 +23,17 @@
|
||||
<string name="installing_update">Installazione del pacchetto aggiornamento</string>
|
||||
<string name="installing_update_error">Errore d\'installazione</string>
|
||||
<string name="installing_update_finished">Aggiornamento installato</string>
|
||||
<string name="finalizing_package">Finalizzalizzazione del pachetto d\'installazione in corso</string>
|
||||
<string name="finalizing_package">Finalizzazione dell\'installazione del pacchetto</string>
|
||||
<string name="preparing_ota_first_boot">Preparazione per il primo avvio</string>
|
||||
<string name="dialog_prepare_zip_message">Preparazione aggiornamento preliminare</string>
|
||||
<string name="dialog_prepare_zip_message">Preparazione preliminare dell\'aggiornamento</string>
|
||||
<string name="dialog_battery_low_title">Batteria scarica</string>
|
||||
<string name="dialog_battery_low_message_pct">Il livello della batteria è troppo basso, è necessario almeno il <xliff:g id="percent_discharging">%1$d</xliff:g>%% di batteria per continuare, oppure il <xliff:g id="percent_charging">%2$d</xliff:g>%% se il dispositivo è in carica.</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[ Esegui i seguenti comandi e ritenta l\'aggiornamento:\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot
|
||||
]]></string>
|
||||
<string name="dialog_scratch_mounted_title">Impossibile installare l\'aggiornamento con OverlayFS montato</string>
|
||||
<string name="reboot">Riavvia</string>
|
||||
<string name="menu_refresh">Ricarica</string>
|
||||
<string name="menu_preferences">Preferenze</string>
|
||||
@@ -54,6 +48,8 @@
|
||||
<string name="menu_export_update">Esporta aggiornamento</string>
|
||||
<string name="menu_show_changelog">Mostra il changelog</string>
|
||||
<string name="menu_ab_perf_mode">Agg. con priorità</string>
|
||||
<string name="menu_update_recovery">Aggiornamento recovery</string>
|
||||
<string name="toast_forced_update_recovery">Impossibile disabilitare l\'aggiornamento di Lineage Recovery su questo dispositivo</string>
|
||||
<string name="snack_updates_found">Nessun aggiornamento trovato</string>
|
||||
<string name="snack_no_updates_found">Nessun nuovo aggiornamento trovato</string>
|
||||
<string name="snack_updates_check_failed">La verifica di aggiornamenti è fallita. Controlla la connessione ad internet e riprova più tardi.</string>
|
||||
@@ -66,11 +62,11 @@
|
||||
<string name="header_last_updates_check">Ultima verifica: <xliff:g id="date" example="1 Gennaio 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="Luglio 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> di <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> di <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> di <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> di <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Verifica aggiornamento</string>
|
||||
<string name="list_no_updates">Nessun nuovo aggiornamento trovato. Per controllare manualmente nuovi aggiornamenti, tocca il pulsante Aggiorna.</string>
|
||||
<string name="action_download">Download</string>
|
||||
<string name="action_download">Scarica</string>
|
||||
<string name="action_pause">Pausa</string>
|
||||
<string name="action_resume">Riprendi</string>
|
||||
<string name="action_install">Installa</string>
|
||||
@@ -80,8 +76,8 @@
|
||||
<string name="confirm_delete_dialog_title">Elimina file</string>
|
||||
<string name="confirm_delete_dialog_message">Eliminare il file di aggiornamento selezionato?</string>
|
||||
<string name="apply_update_dialog_title">Applica aggiornamento</string>
|
||||
<string name="apply_update_dialog_message">Si sta per aggiornare a <xliff:g id="update_name">%1$s</xliff:g>.\n\nSe si preme <xliff:g id="ok">%2$s</xliff:g>, il dispositivo verrà riavviato in modalità recovery per installare l\'aggiornamento automaticamente.\n\nNota: Questa funzione richiede una recovery compatibile, in caso contrario si dovrà procedere all\'installazione manualmente.</string>
|
||||
<string name="apply_update_dialog_message_ab">Si sta per aggiornare a <xliff:g id="update_name">%1$s</xliff:g>.\n\nPremendo <xliff:g id="ok">%2$s</xliff:g>, il dispositivo inizierà l\'installazione in background.\n\nUna volta completato verrà richiesto di riavviare il dispositivo.</string>
|
||||
<string name="apply_update_dialog_message">Stai per installare <xliff:g id="update_name">%1$s</xliff:g>.\n\nSe premi <xliff:g id="ok">%2$s</xliff:g>, il dispositivo verrà riavviato in modalità recovery per installare l\'aggiornamento automaticamente.\n\nNota: questa funzione richiede una recovery compatibile, in caso contrario si dovrà procedere all\'installazione manualmente.</string>
|
||||
<string name="apply_update_dialog_message_ab">Stai per installare <xliff:g id="update_name">%1$s</xliff:g>.\n\nSe premi <xliff:g id="ok">%2$s</xliff:g>, il dispositivo inizierà l\'installazione in background.\n\nUna volta completato, ti verrà richiesto di riavviare il dispositivo.</string>
|
||||
<string name="cancel_installation_dialog_message">Annullare l\'installazione?</string>
|
||||
<string name="label_download_url">Download URL</string>
|
||||
<string name="toast_download_url_copied">URL copiato</string>
|
||||
@@ -89,6 +85,7 @@
|
||||
<string name="notification_export_success">Aggiornamento esportato</string>
|
||||
<string name="notification_export_fail">Errore esportazione</string>
|
||||
<string name="toast_already_exporting">Esportazione aggiornamento già in corso</string>
|
||||
<string name="toast_export_started">Esportazione avviata</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">1 secondo rimanente</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> secondi rimanenti</item>
|
||||
@@ -101,14 +98,23 @@
|
||||
<item quantity="one">1 ora rimanente</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> ore rimanenti</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Attenzione</string>
|
||||
<string name="update_on_mobile_data_message">Stai per scaricare un aggiornamento utilizzando i dati mobili, ciò potrebbe comportare un utilizzo elevato di dati. Vuoi procedere?</string>
|
||||
<string name="checkbox_mobile_data_warning">Non mostrare di nuovo</string>
|
||||
<string name="menu_mobile_data_warning">Avviso utilizzo dati mobili</string>
|
||||
<string name="update_over_metered_network_title">Attenzione</string>
|
||||
<string name="update_over_metered_network_message">Stai per scaricare un aggiornamento tramite una rete a consumo, ciò probabilmente comporterà un elevato traffico di dati. Vuoi procedere?</string>
|
||||
<string name="checkbox_metered_network_warning">Non mostrare di nuovo</string>
|
||||
<string name="menu_metered_network_warning">Avviso di rete a consumo</string>
|
||||
<string name="blocked_update_dialog_title">Aggiornamento bloccato</string>
|
||||
<string name="blocked_update_dialog_message">Questo aggiornamento non può essere installato usando l\'app updater. Si prega di leggere <xliff:g id="info_url">%1$s</xliff:g> per ulteriori informazioni.</string>
|
||||
<string name="blocked_update_dialog_message">Questo aggiornamento non può essere installato usando l\'app Aggiornamenti. Si prega di leggere <xliff:g id="info_url">%1$s</xliff:g> per ulteriori informazioni.</string>
|
||||
<string name="export_channel_title">Completamento esportazione</string>
|
||||
<string name="new_updates_channel_title">Nuovi aggiornamenti</string>
|
||||
<string name="ongoing_channel_title">Download in corso</string>
|
||||
<string name="update_failed_channel_title">Aggiornamento fallito</string>
|
||||
<string name="info_dialog_title">Lo sapevi?</string>
|
||||
<string name="info_dialog_message">Gli aggiornamenti di LineageOS sono pacchetti d\'installazione completi. Questo significa che puoi sempre installare solo l\'ultimo aggiornamento, anche se ne hai saltati alcuni in precedenza!</string>
|
||||
<string name="info_dialog_ok">Grazie per l\'informazione!</string>
|
||||
<string name="local_update_import">Aggiornamento locale</string>
|
||||
<string name="local_update_import_progress">Importazione aggiornamento locale\u2026</string>
|
||||
<string name="local_update_import_success">%1$s è stato importato. Vuoi installarlo?</string>
|
||||
<string name="local_update_import_failure">Importazione aggiornamento locale fallita</string>
|
||||
<string name="local_update_import_install">Installa</string>
|
||||
<string name="local_update_name">Aggiornamento locale</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">המעדכן</string>
|
||||
@@ -60,8 +48,6 @@
|
||||
<string name="header_last_updates_check">בדיקה אחרונה: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> מתוך <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> מתוך <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_verifying_update">מאמת עדכון</string>
|
||||
<string name="list_no_updates">לא נמצאו עדכונים חדשים. בכדי לבדוק אם יש עדכונים חדשים, לחץ על רענון.</string>
|
||||
<string name="action_download">הורד</string>
|
||||
@@ -74,8 +60,6 @@
|
||||
<string name="confirm_delete_dialog_title">מחק קובץ</string>
|
||||
<string name="confirm_delete_dialog_message">למחוק את קבצי העדכון שנבחרו?</string>
|
||||
<string name="apply_update_dialog_title">החל עדכון</string>
|
||||
<string name="apply_update_dialog_message">אתה עומד לשדרג אל <xliff:g id="update_name">%1$s</xliff:g>.\n\nאם תבחר <xliff:g id="ok">%2$s</xliff:g>, המכשיר יופעל מחדש למצב שחזור (Recovery) להתקנת העדכון.\n\nשים לב: תכונה זו דורשת ריקוברי תואם או שהעדכון לא יותקן אוטומטית.</string>
|
||||
<string name="apply_update_dialog_message_ab">אתה עומד לעדכן אל <xliff:g id="update_name">%1$s</xliff:g>.\n\nאם תלחץ על <xliff:g id="ok">%2$s</xliff:g>, המכשיר יתחיל בהתקנה ברקע.\n\nלאחר שההתקנה תסתיים, תתבקש להפעיל את המכשיר מחדש.</string>
|
||||
<string name="cancel_installation_dialog_message">לבטל את ההתקנה?</string>
|
||||
<string name="label_download_url">כתובת ההורדה</string>
|
||||
<string name="toast_download_url_copied">הכתובת הועתקה</string>
|
||||
@@ -101,10 +85,8 @@
|
||||
<item quantity="many"><xliff:g id="count">%d</xliff:g> שעות נותרו</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> שעות נותרו</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">אזהרה</string>
|
||||
<string name="update_on_mobile_data_message">אתה עומד להוריד חבילת עדכונים באמצעות האינטרנט הסלולרי שסביר להניח יגרום לבזבוז חלק גדול מחבילת הגלישה שלך. להמשיך?</string>
|
||||
<string name="checkbox_mobile_data_warning">אל תציג שוב</string>
|
||||
<string name="menu_mobile_data_warning">אזהרת אינטרנט סלולרי</string>
|
||||
<string name="update_over_metered_network_title">אזהרה</string>
|
||||
<string name="checkbox_metered_network_warning">אל תציג שוב</string>
|
||||
<string name="blocked_update_dialog_title">העדכון חסום</string>
|
||||
<string name="blocked_update_dialog_message">אין אפשרות להתקין עדכון זה באמצעות יישום המעדכן. תוכל לקרוא בקישור <xliff:g id="info_url">%1$s</xliff:g> לקבלת מידע נוסף.</string>
|
||||
<string name="export_channel_title">השלמת הייצוא</string>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">アップデータ</string>
|
||||
@@ -40,6 +28,12 @@
|
||||
<string name="dialog_prepare_zip_message">予備のアップデート準備</string>
|
||||
<string name="dialog_battery_low_title">バッテリー残量少</string>
|
||||
<string name="dialog_battery_low_message_pct">バッテリー残量が不足しています。続行するには<xliff:g id="percent_discharging">%1$d</xliff:g>%%、充電時は<xliff:g id="percent_charging">%2$d</xliff:g>%%のバッテリー残量が必要です。</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[ 以下のコマンドを実行し、アップデートを再試行してください:\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot
|
||||
]]></string>
|
||||
<string name="dialog_scratch_mounted_title">OverlayFS マウント済みの場合アップデートはインストールできません</string>
|
||||
<string name="reboot">再起動</string>
|
||||
<string name="menu_refresh">再読み込み</string>
|
||||
<string name="menu_preferences">設定</string>
|
||||
@@ -54,6 +48,8 @@
|
||||
<string name="menu_export_update">アップデートのエクスポート</string>
|
||||
<string name="menu_show_changelog">更新履歴の表示</string>
|
||||
<string name="menu_ab_perf_mode">更新プロセスを優先する</string>
|
||||
<string name="menu_update_recovery">リカバリーを更新</string>
|
||||
<string name="toast_forced_update_recovery">このデバイスでは Lineage Recovery のアップデートを無効にすることはできません。</string>
|
||||
<string name="snack_updates_found">アップデートが見つかりました</string>
|
||||
<string name="snack_no_updates_found">新しいアップデートはありません</string>
|
||||
<string name="snack_updates_check_failed">アップデートを確認できませんでした。インターネット接続を確認して、しばらくしてからもう一度お試しください。</string>
|
||||
@@ -66,8 +62,8 @@
|
||||
<string name="header_last_updates_check">最終確認: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">アップデートを確認</string>
|
||||
<string name="list_no_updates">新しい更新はありません。新しい更新を手動で確認するには、更新ボタンを押してください。</string>
|
||||
<string name="action_download">ダウンロード</string>
|
||||
@@ -80,8 +76,8 @@
|
||||
<string name="confirm_delete_dialog_title">ファイルを削除</string>
|
||||
<string name="confirm_delete_dialog_message">選択したアップデートファイルを削除しますか?</string>
|
||||
<string name="apply_update_dialog_title">アップデートを適用</string>
|
||||
<string name="apply_update_dialog_message"><xliff:g id="update_name">%1$s</xliff:g>にアップデートしようとしています。\n\n<xliff:g id="ok">%2$s</xliff:g>を押すと、アップデートをインストールするために端末をリカバリーモードでに再起動します。\n\n注意: この機能には対応したリカバリーが必要です。なければ手動でインストールする必要があります。</string>
|
||||
<string name="apply_update_dialog_message_ab"><xliff:g id="update_name">%1$s</xliff:g> にアップデートしようとしています。\n\n<xliff:g id="ok">%2$s</xliff:g>を押すと、バックグラウンドでインストールを開始します。\n\nインストールが完了したら、再起動を促すプロンプトが表示されます。</string>
|
||||
<string name="apply_update_dialog_message"><xliff:g id="update_name">%1$s</xliff:g> をインストールしようとしています。\n\n<xliff:g id="ok">%2$s</xliff:g>を押すと、アップデートをインストールするために端末をリカバリーモードでに再起動します。\n\n注意: この機能には対応したリカバリーが必要です。なければ手動でインストールする必要があります。</string>
|
||||
<string name="apply_update_dialog_message_ab"><xliff:g id="update_name">%1$s</xliff:g> をインストールしようとしています。\n\n<xliff:g id="ok">%2$s</xliff:g>を押すと、バックグラウンドでインストールを開始します。\n\nインストールが完了したら、再起動を促すプロンプトが表示されます。</string>
|
||||
<string name="cancel_installation_dialog_message">インストールをキャンセルしますか?</string>
|
||||
<string name="label_download_url">ダウンロード URL</string>
|
||||
<string name="toast_download_url_copied">URL をコピーしました</string>
|
||||
@@ -89,6 +85,7 @@
|
||||
<string name="notification_export_success">アップデートのエクスポート</string>
|
||||
<string name="notification_export_fail">エラー出力</string>
|
||||
<string name="toast_already_exporting">すでにアップデートをエクスポートしています。</string>
|
||||
<string name="toast_export_started">エクスポートを開始しました</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="other">残り<xliff:g id="count">%d</xliff:g>秒</item>
|
||||
</plurals>
|
||||
@@ -98,14 +95,23 @@
|
||||
<plurals name="eta_hours">
|
||||
<item quantity="other">残り<xliff:g id="count">%d</xliff:g>時間</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">警告</string>
|
||||
<string name="update_on_mobile_data_message">モバイルデータ通信で更新プログラムをダウンロードすると、データ使用量が増加する可能性があります。続行しますか?</string>
|
||||
<string name="checkbox_mobile_data_warning">次回から表示しない</string>
|
||||
<string name="menu_mobile_data_warning">モバイルデータの警告</string>
|
||||
<string name="update_over_metered_network_title">警告</string>
|
||||
<string name="update_over_metered_network_message">従量課金制のネットワークでアップデートパッケージをダウンロードしようとしており、データ使用量が増加する可能性があります。続行しますか?</string>
|
||||
<string name="checkbox_metered_network_warning">次回から表示しない</string>
|
||||
<string name="menu_metered_network_warning">従量制課金接続の警告</string>
|
||||
<string name="blocked_update_dialog_title">更新をブロックしました</string>
|
||||
<string name="blocked_update_dialog_message">このアップデートはアプリからインストールできません。詳しくは <xliff:g id="info_url">%1$s</xliff:g> をご覧ください。</string>
|
||||
<string name="export_channel_title">エクスポート完了</string>
|
||||
<string name="new_updates_channel_title">新しいアップデート</string>
|
||||
<string name="ongoing_channel_title">ダウンロード中</string>
|
||||
<string name="update_failed_channel_title">更新に失敗しました</string>
|
||||
<string name="info_dialog_title">ご存知ですか?</string>
|
||||
<string name="info_dialog_message">LineageOS のアップデートは完全なインストールパッケージです。つまり、いくつかのアップデートをスキップしても、最新のアップデートのみをインストールするだけで良いのです!</string>
|
||||
<string name="info_dialog_ok">ありがとうございます!</string>
|
||||
<string name="local_update_import">ローカルアップデート</string>
|
||||
<string name="local_update_import_progress">ローカルアップデートをインポート中\u2026</string>
|
||||
<string name="local_update_import_success">%1$s をインポートしました。インストールしますか?</string>
|
||||
<string name="local_update_import_failure">ローカルアップデートのインポートに失敗しました</string>
|
||||
<string name="local_update_import_install">インストール</string>
|
||||
<string name="local_update_name">ローカルアップデート</string>
|
||||
</resources>
|
114
app/src/main/res/values-ka/strings.xml
Normal file
114
app/src/main/res/values-ka/strings.xml
Normal file
@@ -0,0 +1,114 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">განმაახლებელი</string>
|
||||
<string name="display_name">განმაახლებელი</string>
|
||||
<string name="verification_failed_notification">დამოწმება ვერ მოხერხდა</string>
|
||||
<string name="verifying_download_notification">მიმდინარეობს განახლების დამოწმება</string>
|
||||
<string name="downloading_notification">ჩამოიტვირთება</string>
|
||||
<string name="download_paused_notification">ჩამოტვირთვა შეჩერებულია</string>
|
||||
<string name="download_paused_error_notification">ჩამოტვირთვის შეცდომა</string>
|
||||
<string name="download_completed_notification">ჩამოტვირთვა დასრულებულია</string>
|
||||
<string name="download_starting_notification">ჩამოტვირთვა იწყება</string>
|
||||
<string name="update_failed_notification">განახლება ვერ მოხერხდა</string>
|
||||
<string name="installation_suspended_notification">დაყენება გადაიდო</string>
|
||||
<string name="new_updates_found_title">ბოლო განახლებები</string>
|
||||
<string name="text_download_speed">%1$s, %2$s/წმ</string>
|
||||
<string name="pause_button">შეჩერება</string>
|
||||
<string name="resume_button">გაგრძელება</string>
|
||||
<string name="suspend_button">გადადება</string>
|
||||
<string name="installing_update">ყენდება განახლების კრებული</string>
|
||||
<string name="installing_update_error">შეცდომა დაყენებისას</string>
|
||||
<string name="installing_update_finished">განახლება დაყენებულია</string>
|
||||
<string name="finalizing_package">სრულდება კრებულის ჩადგმა</string>
|
||||
<string name="preparing_ota_first_boot">მზადდება პირველი ჩატვირთვისთვის</string>
|
||||
<string name="dialog_prepare_zip_message">წინასწარი მომზადება განახლებისთვის</string>
|
||||
<string name="dialog_battery_low_title">ბატარეა ჯდება</string>
|
||||
<string name="dialog_battery_low_message_pct">მუხტის დონე მეტად მცირეა, საჭიროა დამუხტული იყოს არანაკლებ <xliff:g id="percent_discharging">%1$d</xliff:g>%% ან <xliff:g id="percent_charging">%2$d</xliff:g>%% შეერთდეს სატენზე.</string>
|
||||
<string name="reboot">გადატვირთვა</string>
|
||||
<string name="menu_refresh">განახლება</string>
|
||||
<string name="menu_preferences">პარამეტრები</string>
|
||||
<string name="menu_auto_updates_check">თვითგანახლების შემოწმება</string>
|
||||
<string name="menu_auto_updates_check_interval_daily">დღეში ერთხელ</string>
|
||||
<string name="menu_auto_updates_check_interval_weekly">კვირაში ერთხელ</string>
|
||||
<string name="menu_auto_updates_check_interval_monthly">თვეში ერთხელ</string>
|
||||
<string name="menu_auto_updates_check_interval_never">არასდროს</string>
|
||||
<string name="menu_auto_delete_updates">განახლებების წაშლა დაყენების შემდეგ</string>
|
||||
<string name="menu_delete_update">წაშლა</string>
|
||||
<string name="menu_copy_url">ბმულის ასლი</string>
|
||||
<string name="menu_export_update">განახლების გატანა</string>
|
||||
<string name="menu_show_changelog">ცვლილებების ჩვენება</string>
|
||||
<string name="menu_ab_perf_mode">განახლებისთვის უპირატესობის მინიჭება</string>
|
||||
<string name="menu_update_recovery">აღმდგენის განახლება</string>
|
||||
<string name="toast_forced_update_recovery">ვერ გაითიშება Lineage-აღმდგენის განახლებები ამ მოწყობილობაზე.</string>
|
||||
<string name="snack_updates_found">ნაპოვნია განახლებები</string>
|
||||
<string name="snack_no_updates_found">განახლებები ვერ მოიძებნა</string>
|
||||
<string name="snack_updates_check_failed">განახლებებზე შემოწმება ვერ მოხერხდა. გთხოვთ, გადაამოწმოთ თქვენი ინტერნეტკავშირი და მოგვიანებით სცადოთ ხელახლა.</string>
|
||||
<string name="snack_download_failed">ჩამოტვირთვა ვერ მოხერხდა. გთხოვთ გადაამოწმოთ თქვენი ინტერნეტკავშირი და სცადოთ ხელახლა.</string>
|
||||
<string name="snack_download_verification_failed">განახლების დამოწმება ვერ მოხერხდა.</string>
|
||||
<string name="snack_download_verified">ჩამოტვირთვა დასრულებულია.</string>
|
||||
<string name="snack_update_not_installable">განახლების ვერ დაყენდება მიმდინარე ანაწყობზე.</string>
|
||||
<string name="header_title_text">LineageOS\n%1$s</string>
|
||||
<string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string>
|
||||
<string name="header_last_updates_check">ბოლო შემოწმება: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g>, სულ <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g>, სულ <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">განახლება მოწმდება</string>
|
||||
<string name="list_no_updates">განახლებები ვერ მოიძებნა. განახლებებზე ხელით შესამოწმებლად, გამოიყენეთ განახლების ღილაკი.</string>
|
||||
<string name="action_download">ჩამოტვირთვა</string>
|
||||
<string name="action_pause">შეჩერება</string>
|
||||
<string name="action_resume">გაგრძელება</string>
|
||||
<string name="action_install">დაყენება</string>
|
||||
<string name="action_info">მონაცემები</string>
|
||||
<string name="action_delete">წაშლა</string>
|
||||
<string name="action_cancel">გაუქმება</string>
|
||||
<string name="confirm_delete_dialog_title">ფაილის წაშლა</string>
|
||||
<string name="confirm_delete_dialog_message">წაიშალოს განახლების შერჩეული ფაილი?</string>
|
||||
<string name="apply_update_dialog_title">განახლების ასახვა</string>
|
||||
<string name="apply_update_dialog_message">აპირებთ, ჩააყენოთ <xliff:g id="update_name">%1$s</xliff:g>.\n\nთუ დააჭერთ ღილაკზე <xliff:g id="ok">%2$s</xliff:g>, მოწყობილობა ხელახლა ჩაირთვება აღმდგენ რეჟიმში, განახლების დასაყენებლად.\n\nშენიშვნა: საჭიროებს თავსებად აღმდგენ გარსს, თუ არადა განახლებები ხელით იქნება დასაყენებელი.</string>
|
||||
<string name="apply_update_dialog_message_ab">აპირებთ, ჩააყენოთ <xliff:g id="update_name">%1$s</xliff:g>.\n\nთუ დააჭერთ ღილაკზე <xliff:g id="ok">%2$s</xliff:g>, მოწყობილობა დაიწყებს დაყენებას ფონურად.\n\nდასრულებისას კი მოგთხოვთ გადატვირთვას.</string>
|
||||
<string name="cancel_installation_dialog_message">გაუქმდეს დაყენება?</string>
|
||||
<string name="label_download_url">ჩამოტვირთვის ბმული</string>
|
||||
<string name="toast_download_url_copied">ბმულის ასლი აღებულია</string>
|
||||
<string name="dialog_export_title">განახლება ცალკე შეინახება</string>
|
||||
<string name="notification_export_success">განახლება გატანილია ფაილში</string>
|
||||
<string name="notification_export_fail">შეცდომა გატანისას</string>
|
||||
<string name="toast_already_exporting">გატანა უკვე მიმდინარეობს</string>
|
||||
<string name="toast_export_started">გატანა დაწყებულია</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">დარჩენილია 1 წამი</item>
|
||||
<item quantity="other">დარჩენილია <xliff:g id="count">%d</xliff:g> წამი</item>
|
||||
</plurals>
|
||||
<plurals name="eta_minutes">
|
||||
<item quantity="one">დარჩენილია 1 წუთი</item>
|
||||
<item quantity="other">დარჩენილია <xliff:g id="count">%d</xliff:g> წუთი</item>
|
||||
</plurals>
|
||||
<plurals name="eta_hours">
|
||||
<item quantity="one">დარჩენილია 1 საათი</item>
|
||||
<item quantity="other">დარჩენილია <xliff:g id="count">%d</xliff:g> საათი</item>
|
||||
</plurals>
|
||||
<string name="update_over_metered_network_title">გაფრთხილება</string>
|
||||
<string name="update_over_metered_network_message">აპირებთ ჩამოტვირთოთ განახლების კრებული შეზღუდული ინტერნეტით, რასაც შეიძლება მოჰყვეს დიდი ხარჯი. ნამდვილად გსურთ, განაგრძოთ?</string>
|
||||
<string name="checkbox_metered_network_warning">მომავალში ჩვენების გარეშე</string>
|
||||
<string name="menu_metered_network_warning">შეზღუდული ქსელის გაფრთხილება</string>
|
||||
<string name="blocked_update_dialog_title">განახლება შეიზღუდა</string>
|
||||
<string name="blocked_update_dialog_message">განახლების დაყენება ვერ ხერხდება გამნახლებელი აპით. ვრცლად, გთხოვთ, იხილოთ <xliff:g id="info_url">%1$s</xliff:g>.</string>
|
||||
<string name="export_channel_title">გადატანა დასრულებულია</string>
|
||||
<string name="new_updates_channel_title">ბოლო განახლებები</string>
|
||||
<string name="ongoing_channel_title">მიმდინარე ჩამოტვირთვები</string>
|
||||
<string name="update_failed_channel_title">განახლება ვერ მოხერხდა</string>
|
||||
<string name="info_dialog_title">იცოდით?</string>
|
||||
<string name="info_dialog_message">LineageOS-ის განახლებები სრულ კრებულებს წარმოადგენს. ეს კი ნიშნავს, რომ ყოველთვის შეგიძლიათ ჩააყენოთ ბოლო განახლება, ზოგიერთის გამოტოვების შემთხვევაშიც. </string>
|
||||
<string name="info_dialog_ok">გმადლობთ, რომ მაცნობეთ!</string>
|
||||
<string name="local_update_import">ადგილობრივად განახლება</string>
|
||||
<string name="local_update_import_progress">ადგილობრივი განახლების შემოტანა\u2026</string>
|
||||
<string name="local_update_import_success">%1$s შემოტანილია. გსურთ, დააყენოთ?</string>
|
||||
<string name="local_update_import_failure">ადგილობრივი განახლების შემოტანა ვერ მოხერხდა</string>
|
||||
<string name="local_update_import_install">დაყენება</string>
|
||||
<string name="local_update_name">ადგილობრივი განახლება</string>
|
||||
</resources>
|
73
app/src/main/res/values-kab-rDZ/strings.xml
Normal file
73
app/src/main/res/values-kab-rDZ/strings.xml
Normal file
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Asefrak n ulqem</string>
|
||||
<string name="display_name">Asefrak n ulqem</string>
|
||||
<string name="verification_failed_notification">Icceḍ usenqed</string>
|
||||
<string name="verifying_download_notification">Asenqed n welqem</string>
|
||||
<string name="downloading_notification">Asider</string>
|
||||
<string name="download_paused_error_notification">Tuccḍa n usider</string>
|
||||
<string name="download_completed_notification">Asider yemmed</string>
|
||||
<string name="download_starting_notification">Asenker n usider</string>
|
||||
<string name="installation_suspended_notification">Ittwafsex usebdded</string>
|
||||
<string name="new_updates_found_title">Ileqman imaynuten</string>
|
||||
<string name="text_download_speed">%1$s, %2$s/s</string>
|
||||
<string name="pause_button">Steɛfu</string>
|
||||
<string name="resume_button">Kemmel</string>
|
||||
<string name="suspend_button">Ittwafsex</string>
|
||||
<string name="installing_update">Asebded n ukemmus n lqem</string>
|
||||
<string name="installing_update_error">Tuccḍa g usebded</string>
|
||||
<string name="installing_update_finished">Lqem ibded</string>
|
||||
<string name="preparing_ota_first_boot">Aheggi i tnekra tamezwarut</string>
|
||||
<string name="dialog_prepare_zip_message">Aheggi n lqem n unezwer</string>
|
||||
<string name="dialog_battery_low_title">Aẓru qrib ad-yefak</string>
|
||||
<string name="reboot">Ales asenker</string>
|
||||
<string name="menu_refresh">Sismeḍ</string>
|
||||
<string name="menu_preferences">Tiwelhiwin</string>
|
||||
<string name="menu_auto_updates_check">A senqed n uleqqem awurman</string>
|
||||
<string name="menu_auto_updates_check_interval_daily">Tikkelt i wass</string>
|
||||
<string name="menu_auto_updates_check_interval_weekly">Tikkelt i ddurt</string>
|
||||
<string name="menu_auto_updates_check_interval_monthly">Tikkelt i waggur</string>
|
||||
<string name="menu_auto_updates_check_interval_never">Weṛǧin</string>
|
||||
<string name="menu_auto_delete_updates">Kkes Ileqman ticki isbedden</string>
|
||||
<string name="menu_delete_update">Kkes</string>
|
||||
<string name="menu_copy_url">Nɣel URL</string>
|
||||
<string name="menu_export_update">Sifeḍ lqem</string>
|
||||
<string name="menu_update_recovery">Leqqem aḥraz</string>
|
||||
<string name="snack_updates_found">Llan ileqman imaynuten</string>
|
||||
<string name="snack_no_updates_found">Ulac ileqman imaynuten</string>
|
||||
<string name="snack_updates_check_failed">Icceḍ usenqed n uleqqem. Txilek senqed tuqqna-k γer internet sakin ɛreḍ tikelt nniḍen ticki.</string>
|
||||
<string name="snack_download_failed">Icceḍ usider. Txilek senqed tuqqna-k γer internet sakin ɛreḍ tikelt nniḍen ticki.</string>
|
||||
<string name="snack_download_verification_failed">Icceḍ usenqed n ulqem.</string>
|
||||
<string name="snack_download_verified">Asider yemmed.</string>
|
||||
<string name="header_title_text">LineageOS\n%1$s</string>
|
||||
<string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string>
|
||||
<string name="header_last_updates_check">Asenqed aneggaru: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g>(<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_verifying_update">Asenqed n welqem</string>
|
||||
<string name="list_no_updates">Ulac ileqman imaynuten. Iwakken ad-tsenqdeḍ ileqman imaynuten s ufus, seqdec taqffalt Sismeḍ.</string>
|
||||
<string name="action_download">Sider</string>
|
||||
<string name="action_pause">Steɛfu</string>
|
||||
<string name="action_resume">Kemmel</string>
|
||||
<string name="action_install">Sebded</string>
|
||||
<string name="action_info">Talɣut</string>
|
||||
<string name="action_delete">Kkes</string>
|
||||
<string name="action_cancel">Sefsex</string>
|
||||
<string name="confirm_delete_dialog_title">Kkes afaylu</string>
|
||||
<string name="confirm_delete_dialog_message">Kkes afaylu n lqem ittwafernen?</string>
|
||||
<string name="apply_update_dialog_title">Seddu lqem</string>
|
||||
<string name="label_download_url">Sider URL</string>
|
||||
<string name="toast_download_url_copied">URL ittwanγel</string>
|
||||
<string name="dialog_export_title">Asifeḍ n lqem</string>
|
||||
<string name="notification_export_success">Lqem ittwasifeḍ</string>
|
||||
<string name="notification_export_fail">Tuccḍa g usifeḍ</string>
|
||||
<string name="update_over_metered_network_title">Ɣur-k</string>
|
||||
<string name="checkbox_metered_network_warning">Ur tuɣaleḍ ara ad itsekneḍ</string>
|
||||
<string name="blocked_update_dialog_title">Lqem iwḥel</string>
|
||||
<string name="blocked_update_dialog_message">A leqqem agi ur izmir ara ad-ibded s usnas n usefrak n-lqem. Ttxil-ek ɣer <xliff:g id="info_url">%1$s</xliff:g> i ugar talɣut.</string>
|
||||
<string name="new_updates_channel_title">Ileqman imaynuten</string>
|
||||
</resources>
|
64
app/src/main/res/values-kn/strings.xml
Normal file
64
app/src/main/res/values-kn/strings.xml
Normal file
@@ -0,0 +1,64 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="verification_failed_notification">ಪರಿಶೀಲನೆ ವಿಫಲ</string>
|
||||
<string name="verifying_download_notification">ನವೀಕರಣ ಪರಿಶೀಲಿಸುತ್ತಿದೆ</string>
|
||||
<string name="downloading_notification">ಇಳಿಸುತ್ತಿದೆ</string>
|
||||
<string name="download_paused_notification">ಇಳಿಸುವಿಕೆ ವಿರಾಮ</string>
|
||||
<string name="download_paused_error_notification">ಇಳಿಸುವಾಗ ದೋಷ</string>
|
||||
<string name="download_completed_notification">ಇಳಿಸುವಿಕೆ ಪೂರ್ಣಗೊಂಡಿದೆ</string>
|
||||
<string name="text_download_speed">%1$s, %2$s/s</string>
|
||||
<string name="installing_update">ನವೀಕರಣ ಘಂಟನ್ನು ಸ್ಥಾಪಿಸುತ್ತಿದೆ</string>
|
||||
<string name="installing_update_error">ಸ್ಥಾಪನೆ ದೋಷ</string>
|
||||
<string name="finalizing_package">ಘಂಟು ಸ್ಥಾಪನೆಯನ್ನು ಕೊನೆಗೊಳಿಸುತ್ತಿದೆ</string>
|
||||
<string name="dialog_battery_low_title">ಅಲ್ಪ ಮಿಂತಿಣಿ</string>
|
||||
<string name="dialog_battery_low_message_pct">ಮಿಂತಿಣಿ ಮಟ್ಟ ತೀರಾ ಕಡಿಮೆಯಿದೆ. ಮುಂದುವರಿಸಲು ನಿಮಗೆ ಕನಿಷ್ಟ <xliff:g id="percent_discharging">%1$d</xliff:g>%% ಚಾರ್ಜ್ ಅಥವಾ ಚಾರ್ಜಿಂಗ್ನಲ್ಲಿ <xliff:g id="percent_charging">%2$d</xliff:g>%% ಬೇಕು.</string>
|
||||
<string name="menu_auto_updates_check">ಸ್ವಯಂ ನವೀಕರಣ ಪರಿಶೀಲನೆ</string>
|
||||
<string name="menu_auto_updates_check_interval_daily">ದಿನಕ್ಕೊಮ್ಮೆ</string>
|
||||
<string name="menu_auto_updates_check_interval_weekly">ವಾರಕ್ಕೊಮ್ಮೆ</string>
|
||||
<string name="menu_auto_updates_check_interval_monthly">ತಿಂಗಳಿಗೊಮ್ಮೆ</string>
|
||||
<string name="menu_auto_updates_check_interval_never">ಎಂದಿಗೂ ಬೇಡ</string>
|
||||
<string name="menu_auto_delete_updates">ಸ್ಥಾಪಿಸಿದ ನಂತರ ನವೀಕರಣಗಳನ್ನು ಅಳಿಸು</string>
|
||||
<string name="menu_delete_update">ಅಳಿಸು</string>
|
||||
<string name="menu_copy_url">URL ನಕಲಿಸು</string>
|
||||
<string name="menu_export_update">ನವೀಕರಿಣ ನಿರ್ಯಾತ</string>
|
||||
<string name="menu_show_changelog">ಬದಲಾವಣೆಗಳನ್ನು ತೋರಿಸು</string>
|
||||
<string name="menu_ab_perf_mode">ನವೀಕರಣಕ್ಕೆ ಆದ್ಯತೆ ಕೊಡು</string>
|
||||
<string name="snack_download_verified">ಇಳಿಸುವಿಕೆ ಪೂರ್ಣಗೊಂಡಿದೆ.</string>
|
||||
<string name="header_last_updates_check">ಕೊನೆಯ ಪರಿಶೀಲನೆ: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_verifying_update">ನವೀಕರಣ ಪರಿಶೀಲಿಸುತ್ತಿದೆ</string>
|
||||
<string name="action_download">ಇಳಿಸು</string>
|
||||
<string name="action_install">ಸ್ಥಾಪಿಸು</string>
|
||||
<string name="action_info">ಮಾಹಿತಿ</string>
|
||||
<string name="action_delete">ಅಳಿಸು</string>
|
||||
<string name="action_cancel">ರದ್ದು</string>
|
||||
<string name="confirm_delete_dialog_title">ಕಡತವನ್ನು ಅಳಿಸು</string>
|
||||
<string name="confirm_delete_dialog_message">ಆಯ್ಕೆಯಾದ ನವೀಕರಣ ಕಡತ ಅಳಿಸುವುದೇ?</string>
|
||||
<string name="apply_update_dialog_title">ನವೀಕರಣ ಅನ್ವಯಿಸು</string>
|
||||
<string name="cancel_installation_dialog_message">ಸ್ಥಾಪನೆ ರದ್ದಿಸಲೇ?</string>
|
||||
<string name="label_download_url">ಇಳಿಸುವ URL</string>
|
||||
<string name="dialog_export_title">ನವೀಕರಿಣ ನಿರ್ಯಾತವಾಗುತ್ತಿದೆ</string>
|
||||
<string name="notification_export_fail">ದೋಷ ನಿರ್ಯಾತ</string>
|
||||
<string name="toast_already_exporting">ಈಗಾಗಲೇ ನವೀಕರಣವನ್ನು ರಫ್ತು ಮಾಡಲಾಗುತ್ತಿದೆ</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">೧ ಕ್ಷಣ ಬಾಕಿ</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> ಕ್ಷಣ ಬಾಕಿ</item>
|
||||
</plurals>
|
||||
<plurals name="eta_minutes">
|
||||
<item quantity="one">೧ ನಿಮಿಷ ಬಾಕಿ</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> ನಿಮಿಷಗಳು ಬಾಕಿ</item>
|
||||
</plurals>
|
||||
<plurals name="eta_hours">
|
||||
<item quantity="one">೧ ಗಂಟೆ ಬಾಕಿ</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> ಗಂಟೆ ಬಾಕಿ</item>
|
||||
</plurals>
|
||||
<string name="update_over_metered_network_title">ಎಚ್ಚರಿಕೆ</string>
|
||||
<string name="checkbox_metered_network_warning">ಪುನಃ ತೋರಿಸದಿರು</string>
|
||||
<string name="export_channel_title">ನಿರ್ಯಾತ ಪೂರ್ಣತೆ</string>
|
||||
<string name="ongoing_channel_title">ಪ್ರಗತಿಯಲ್ಲಿರುವ ಕೆಳಭರಿತಗಳು</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">업데이터</string>
|
||||
@@ -26,10 +14,12 @@
|
||||
<string name="download_completed_notification">다운로드 완료</string>
|
||||
<string name="download_starting_notification">다운로드 시작</string>
|
||||
<string name="update_failed_notification">업데이트 실패</string>
|
||||
<string name="installation_suspended_notification">설치가 지연됨</string>
|
||||
<string name="new_updates_found_title">새 업데이트</string>
|
||||
<string name="text_download_speed">%1$s, %2$s/s</string>
|
||||
<string name="pause_button">일시 중지</string>
|
||||
<string name="resume_button">이어 받기</string>
|
||||
<string name="suspend_button">지연</string>
|
||||
<string name="installing_update">업데이트 패키지 설치 중</string>
|
||||
<string name="installing_update_error">설치 오류</string>
|
||||
<string name="installing_update_finished">업데이트 설치됨</string>
|
||||
@@ -38,6 +28,12 @@
|
||||
<string name="dialog_prepare_zip_message">예비 업데이트 준비</string>
|
||||
<string name="dialog_battery_low_title">배터리 부족</string>
|
||||
<string name="dialog_battery_low_message_pct">배터리 수준이 너무 낮습니다. 계속하려면 방전 중일 경우 <xliff:g id="percent_discharging">%1$d</xliff:g>%% 이상, 충전 중일 경우 <xliff:g id="percent_charging">%2$d</xliff:g>%% 이상의 배터리 수준이 필요합니다.</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[ 다음 명령어를 실행한 뒤 업데이트를 다시 시도해 주세요:\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot
|
||||
]]></string>
|
||||
<string name="dialog_scratch_mounted_title">OverlayFS 마운트 상태에서는 업데이트를 설치할 수 없음</string>
|
||||
<string name="reboot">다시 시작</string>
|
||||
<string name="menu_refresh">새로고침</string>
|
||||
<string name="menu_preferences">설정</string>
|
||||
@@ -45,12 +41,15 @@
|
||||
<string name="menu_auto_updates_check_interval_daily">하루에 한 번</string>
|
||||
<string name="menu_auto_updates_check_interval_weekly">일주일에 한 번</string>
|
||||
<string name="menu_auto_updates_check_interval_monthly">한달에 한 번</string>
|
||||
<string name="menu_auto_updates_check_interval_never">사용 안 함</string>
|
||||
<string name="menu_auto_delete_updates">설치한 뒤 업데이트 파일 삭제</string>
|
||||
<string name="menu_delete_update">삭제</string>
|
||||
<string name="menu_copy_url">URL 복사</string>
|
||||
<string name="menu_export_update">업데이트 내보내기</string>
|
||||
<string name="menu_show_changelog">변경 사항 보기</string>
|
||||
<string name="menu_ab_perf_mode">우선 업데이트</string>
|
||||
<string name="menu_update_recovery">복구 모드 업데이트</string>
|
||||
<string name="toast_forced_update_recovery">이 기기에서는 Lineage 복구 모드 업데이트를 비활성화할 수 없습니다.</string>
|
||||
<string name="snack_updates_found">새 업데이트 발견</string>
|
||||
<string name="snack_no_updates_found">새로운 업데이트 없음</string>
|
||||
<string name="snack_updates_check_failed">업데이트 확인에 실패했습니다. 인터넷 연결을 확인한 뒤 다시 시도해 주세요.</string>
|
||||
@@ -63,8 +62,8 @@
|
||||
<string name="header_last_updates_check">마지막 확인: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">업데이트 검증 중</string>
|
||||
<string name="list_no_updates">새로운 업데이트가 없습니다. 수동으로 새 업데이트를 확인하려면 새로고침 버튼을 누르세요.</string>
|
||||
<string name="action_download">다운로드</string>
|
||||
@@ -77,8 +76,8 @@
|
||||
<string name="confirm_delete_dialog_title">파일 삭제</string>
|
||||
<string name="confirm_delete_dialog_message">선택한 업데이트 파일을 삭제하시겠습니까?</string>
|
||||
<string name="apply_update_dialog_title">업데이트 적용</string>
|
||||
<string name="apply_update_dialog_message"><xliff:g id="update_name">%1$s</xliff:g> 버전으로 업그레이드를 시도하려 합니다.\n\n<xliff:g id="ok">%2$s</xliff:g>을 누르면 업데이트를 설치하기 위해 기기가 리커버리 모드로 다시 시작됩니다.\n\n주의: 이 기능은 호환되는 리커버리가 필요하며, 없을 경우 업데이트를 수동으로 설치해야 합니다.</string>
|
||||
<string name="apply_update_dialog_message_ab"><xliff:g id="update_name">%1$s</xliff:g> 버전으로 업그레이드를 시도하려 합니다.\n\n<xliff:g id="ok">%2$s</xliff:g>을 누르면 백그라운드에서 이 업데이트를 설치합니다.\n\n설치가 완료되면 기기를 다시 시작할 것인지 묻는 대화 상자가 나타납니다.</string>
|
||||
<string name="apply_update_dialog_message"><xliff:g id="update_name">%1$s</xliff:g> 버전을 설치하려 합니다.\n\n<xliff:g id="ok">%2$s</xliff:g>을 누르면 업데이트를 설치하기 위해 기기가 리커버리 모드로 다시 시작됩니다.\n\n주의: 이 기능은 호환되는 리커버리가 필요하며, 없을 경우 업데이트를 수동으로 설치해야 합니다.</string>
|
||||
<string name="apply_update_dialog_message_ab"><xliff:g id="update_name">%1$s</xliff:g> 버전을 설치하려 합니다.\n\n<xliff:g id="ok">%2$s</xliff:g>을 누르면 백그라운드에서 이 업데이트를 설치합니다.\n\n설치가 완료되면 기기를 다시 시작할 것인지 묻는 대화 상자가 나타납니다.</string>
|
||||
<string name="cancel_installation_dialog_message">설치를 취소하시겠습니까?</string>
|
||||
<string name="label_download_url">다운로드 URL</string>
|
||||
<string name="toast_download_url_copied">URL 복사됨</string>
|
||||
@@ -86,6 +85,7 @@
|
||||
<string name="notification_export_success">업데이트를 내보냈습니다.</string>
|
||||
<string name="notification_export_fail">내보내기 오류</string>
|
||||
<string name="toast_already_exporting">이미 업데이트를 내보내는 중입니다.</string>
|
||||
<string name="toast_export_started">내보내기를 시작했습니다.</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g>초 남음</item>
|
||||
</plurals>
|
||||
@@ -95,14 +95,23 @@
|
||||
<plurals name="eta_hours">
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g>시간 남음</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">경고</string>
|
||||
<string name="update_on_mobile_data_message">모바일 데이터를 사용하여 업데이트 패키지를 다운로드하려 합니다. 데이터를 매우 많이 사용하게 될 수 있습니다. 정말 계속하시겠습니까?</string>
|
||||
<string name="checkbox_mobile_data_warning">다시 보지 않기</string>
|
||||
<string name="menu_mobile_data_warning">모바일 데이터 경고</string>
|
||||
<string name="update_over_metered_network_title">경고</string>
|
||||
<string name="update_over_metered_network_message">모바일 데이터를 사용하여 업데이트 패키지를 다운로드하려 합니다. 데이터를 매우 많이 사용하게 될 수 있습니다. 정말 계속하시겠습니까?</string>
|
||||
<string name="checkbox_metered_network_warning">다시 보지 않기</string>
|
||||
<string name="menu_metered_network_warning">모바일 데이터 사용 경고</string>
|
||||
<string name="blocked_update_dialog_title">업데이트 차단됨</string>
|
||||
<string name="blocked_update_dialog_message">이 업데이트는 업데이터 앱으로 설치할 수 없습니다. 자세한 정보는 <xliff:g id="info_url">%1$s</xliff:g> 페이지를 참고하세요.</string>
|
||||
<string name="export_channel_title">내보내기 완료</string>
|
||||
<string name="new_updates_channel_title">새 업데이트</string>
|
||||
<string name="ongoing_channel_title">진행 중인 다운로드</string>
|
||||
<string name="update_failed_channel_title">업데이트 실패</string>
|
||||
<string name="info_dialog_title">알고 계신가요?</string>
|
||||
<string name="info_dialog_message">LineageOS 업데이트는 전체 설치 패키지입니다. 중간에 몇 개 버전을 건너뛰었더라도 가장 최신 버전만 설치하면 됩니다!</string>
|
||||
<string name="info_dialog_ok">정보 감사합니다!</string>
|
||||
<string name="local_update_import">로컬 업데이트</string>
|
||||
<string name="local_update_import_progress">로컬 업데이트 가져오는 중\u2026</string>
|
||||
<string name="local_update_import_success">%1$s 업데이트를 가져왔습니다. 설치하시겠습니까?</string>
|
||||
<string name="local_update_import_failure">로컬 업데이트를 가져오지 못했습니다.</string>
|
||||
<string name="local_update_import_install">설치</string>
|
||||
<string name="local_update_name">로컬 업데이트</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Oppdaterer</string>
|
||||
@@ -56,7 +44,6 @@
|
||||
<string name="header_last_updates_check">Sist sjekket: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> av <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_verifying_update">Bekrefter oppdatering</string>
|
||||
<string name="list_no_updates">Ingen nye programvareoppdateringer funnet. For å se etter oppdateringer manuelt, bruk Oppdater-knappen.</string>
|
||||
<string name="action_download">Last ned</string>
|
||||
@@ -69,8 +56,6 @@
|
||||
<string name="confirm_delete_dialog_title">Slett fil</string>
|
||||
<string name="confirm_delete_dialog_message">Slett valgt oppdateringsfil?</string>
|
||||
<string name="apply_update_dialog_title">Installer oppdatering</string>
|
||||
<string name="apply_update_dialog_message">Du er i ferd med å oppdatere til <xliff:g id="update_name">%1$s</xliff:g>.\n\nHvis du trykker <xliff:g id="ok">%2$s</xliff:g> vil enheten starte på nytt i gjenopprettingsmodus for å installere oppdateringen.\n\nMerk: Denne funksjonen krever en kompatibel gjenopprettingsprogramvare ellers må oppdateringer installeres manuelt.</string>
|
||||
<string name="apply_update_dialog_message_ab">Du er i ferd med å oppdatere til <xliff:g id="update_name">%1$s</xliff:g>.\n\nHvis du trykker <xliff:g id="ok">%2$s</xliff:g> vil enheten begynne å installere i bakgrunnen.\n\nNår den er ferdig, vil du bli spurt om å starte på nytt.</string>
|
||||
<string name="cancel_installation_dialog_message">Vil du avbryte installasjonen?</string>
|
||||
<string name="label_download_url">Last ned nettadresse</string>
|
||||
<string name="toast_download_url_copied">Nettadresse kopiert</string>
|
||||
@@ -78,10 +63,8 @@
|
||||
<string name="notification_export_success">Oppdatering eksportert</string>
|
||||
<string name="notification_export_fail">Eksporteringsfeil</string>
|
||||
<string name="toast_already_exporting">Eksporterer allerede en oppdatering</string>
|
||||
<string name="update_on_mobile_data_title">Advarsel</string>
|
||||
<string name="update_on_mobile_data_message">Du er i ferd med å laste ned en oppdateringspakke ved bruk av mobildata, noe som antagelig vil forårsake høy databruk. Ønsker du å fortsette?</string>
|
||||
<string name="checkbox_mobile_data_warning">Ikke vis igjen</string>
|
||||
<string name="menu_mobile_data_warning">Advarsel for mobildata</string>
|
||||
<string name="update_over_metered_network_title">Advarsel</string>
|
||||
<string name="checkbox_metered_network_warning">Ikke vis igjen</string>
|
||||
<string name="blocked_update_dialog_title">Oppdatering blokkert</string>
|
||||
<string name="blocked_update_dialog_message">Denne oppdateringen kan ikke installeres med oppdateringsappen. Les <xliff:g id="info_url">%1$s</xliff:g> for mer informasjon.</string>
|
||||
<string name="new_updates_channel_title">Nye oppdateringer</string>
|
@@ -1,4 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2018 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources>
|
||||
<bool name="theme_is_light">false</bool>
|
||||
</resources>
|
14
app/src/main/res/values-night/colors.xml
Normal file
14
app/src/main/res/values-night/colors.xml
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2018-2023 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources>
|
||||
<color name="theme_primary">#212121</color>
|
||||
<color name="theme_primary_dark">#1c1c1c</color>
|
||||
<color name="theme_accent">@*android:color/accent_device_default_dark</color>
|
||||
<color name="background">@android:color/system_neutral1_900</color>
|
||||
<color name="toolbar_collapsed">@android:color/system_neutral1_700</color>
|
||||
|
||||
<color name="inverted">#f5f5f5</color>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Updater</string>
|
||||
@@ -38,6 +26,13 @@
|
||||
<string name="finalizing_package">Installatie van het pakket afronden</string>
|
||||
<string name="preparing_ota_first_boot">Eerste start voorbereiden</string>
|
||||
<string name="dialog_prepare_zip_message">Update voorbereiden</string>
|
||||
<string name="dialog_battery_low_title">Batterij bijna leeg</string>
|
||||
<string name="dialog_battery_low_message_pct">Uw batterijniveau is te laag, u moet op zijn minst <xliff:g id="percent_discharging">%1$d</xliff:g>%% batterijcapaciteit hebben om door te gaan of <xliff:g id="percent_charging">%2$d</xliff:g>%% tijdens het opladen.</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[Voer deze opdrachten uit en probeer opnieuw te updaten:\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot]]></string>
|
||||
<string name="dialog_scratch_mounted_title">Kan update niet installeren met OverlayFS gekoppeld</string>
|
||||
<string name="reboot">Herstarten</string>
|
||||
<string name="menu_refresh">Vernieuwen</string>
|
||||
<string name="menu_preferences">Instellingen</string>
|
||||
@@ -51,6 +46,9 @@
|
||||
<string name="menu_copy_url">URL kopiëren</string>
|
||||
<string name="menu_export_update">Update exporteren</string>
|
||||
<string name="menu_show_changelog">Changelog weergeven</string>
|
||||
<string name="menu_ab_perf_mode">Geef prioriteit aan het updateproces</string>
|
||||
<string name="menu_update_recovery">Recovery bijwerken</string>
|
||||
<string name="toast_forced_update_recovery">Het is onmogelijk om Lineage Recovery updates op dit apparaat uit te schakelen.</string>
|
||||
<string name="snack_updates_found">Nieuwe updates gevonden</string>
|
||||
<string name="snack_no_updates_found">Geen nieuwe updates gevonden</string>
|
||||
<string name="snack_updates_check_failed">Kan niet controleren op updates. Controleer uw internetverbinding en probeer het later opnieuw.</string>
|
||||
@@ -63,7 +61,8 @@
|
||||
<string name="header_last_updates_check">Laatst gecontroleerd: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> van <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> van <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> van <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Update verifiëren</string>
|
||||
<string name="list_no_updates">Geen nieuwe updates gevonden. Gebruik de knop Vernieuwen om handmatig te controleren op nieuwe updates.</string>
|
||||
<string name="action_download">Downloaden</string>
|
||||
@@ -76,8 +75,8 @@
|
||||
<string name="confirm_delete_dialog_title">Bestand verwijderen</string>
|
||||
<string name="confirm_delete_dialog_message">Geselecteerde update-bestand verwijderen?</string>
|
||||
<string name="apply_update_dialog_title">Update toepassen</string>
|
||||
<string name="apply_update_dialog_message">Uw systeem wordt bijgewerkt naar <xliff:g id="update_name">%1$s</xliff:g>.\n\nWanneer u op <xliff:g id="ok">%2$s</xliff:g> tikt, zal het apparaat herstarten naar recovery om de update te installeren.\n\nLet op: een compatibele recovery is vereist, anders moet de update handmatig worden geïnstalleerd.</string>
|
||||
<string name="apply_update_dialog_message_ab">Uw systeem wordt bijgewerkt naar <xliff:g id="update_name">%1$s</xliff:g>.\n\nWanneer u op <xliff:g id="ok">%2$s</xliff:g> tikt, zal het apparaat de update op de achtergrond uitvoeren.\n\nWanneer de installatie voltooid is zal gevraagd worden het toestel te herstarten.</string>
|
||||
<string name="apply_update_dialog_message">U staat op het punt uw systeem bij te werken naar <xliff:g id="update_name">%1$s</xliff:g>.\n\nAls u op <xliff:g id="ok">%2$s</xliff:g> tikt, zal het apparaat herstarten naar recovery om de update te installeren.\n\nLet op: een compatibele recovery is vereist, anders moet de update handmatig worden geïnstalleerd.</string>
|
||||
<string name="apply_update_dialog_message_ab">U staat op het punt om uw toestel bij te werken naar <xliff:g id="update_name">%1$s</xliff:g>.\n\nAls u op <xliff:g id="ok">%2$s</xliff:g> tikt, zal het apparaat de update op de achtergrond uitvoeren.\n\nZodra de installatie voltooid is, zal gevraagd worden om het apparaat te herstarten.</string>
|
||||
<string name="cancel_installation_dialog_message">Installatie annuleren?</string>
|
||||
<string name="label_download_url">Download-URL</string>
|
||||
<string name="toast_download_url_copied">URL gekopieerd</string>
|
||||
@@ -85,6 +84,7 @@
|
||||
<string name="notification_export_success">Update geëxporteerd</string>
|
||||
<string name="notification_export_fail">Fout bij exporteren</string>
|
||||
<string name="toast_already_exporting">Er wordt al een update geëxporteerd</string>
|
||||
<string name="toast_export_started">Exporteren is begonnen</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">1 seconde resterend</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> seconden resterend</item>
|
||||
@@ -97,13 +97,23 @@
|
||||
<item quantity="one">1 uur resterend</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> uur resterend</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Let op</string>
|
||||
<string name="update_on_mobile_data_message">U staat op het punt een update te downloaden via mobiele gegevens, wat tot een hoog gegevensgebruik kan leiden. Wilt u verder gaan?</string>
|
||||
<string name="checkbox_mobile_data_warning">Niet opnieuw tonen</string>
|
||||
<string name="menu_mobile_data_warning">Waarschuwing mobiele gegevens</string>
|
||||
<string name="update_over_metered_network_title">Let op</string>
|
||||
<string name="update_over_metered_network_message">U staat op het punt om een updatepakket te downloaden via een netwerk met datalimiet, wat waarschijnlijk een hoog gegevensgebruik zal veroorzaken. Wilt u doorgaan?</string>
|
||||
<string name="checkbox_metered_network_warning">Niet opnieuw tonen</string>
|
||||
<string name="menu_metered_network_warning">Waarschuwing gemeten netwerk</string>
|
||||
<string name="blocked_update_dialog_title">Update geblokkeerd</string>
|
||||
<string name="blocked_update_dialog_message">Deze update kan niet worden geïnstalleerd met behulp van de updater-app. Lees <xliff:g id="info_url">%1$s</xliff:g> voor meer informatie.</string>
|
||||
<string name="export_channel_title">Exporteren voltooid</string>
|
||||
<string name="new_updates_channel_title">Nieuwe updates</string>
|
||||
<string name="ongoing_channel_title">Huidige downloads</string>
|
||||
<string name="update_failed_channel_title">Update mislukt</string>
|
||||
<string name="info_dialog_title">Wist u dat?</string>
|
||||
<string name="info_dialog_message">LineageOS updates zijn volledige installatiepakketten. Dat betekent dat u altijd alleen de nieuwste update hoeft te installeren, zelfs als u een paar updates overslaat!</string>
|
||||
<string name="info_dialog_ok">Bedankt voor de informatie!</string>
|
||||
<string name="local_update_import">Lokale update</string>
|
||||
<string name="local_update_import_progress">Importeer lokale update\u2026</string>
|
||||
<string name="local_update_import_success">%1$s is geïmporteerd. Wilt u het installeren?</string>
|
||||
<string name="local_update_import_failure">Importeren van lokale update is mislukt</string>
|
||||
<string name="local_update_import_install">Installeer</string>
|
||||
<string name="local_update_name">Lokale update</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Aktualizator</string>
|
||||
@@ -39,7 +27,13 @@
|
||||
<string name="preparing_ota_first_boot">Przygotowanie do pierwszego uruchomienia</string>
|
||||
<string name="dialog_prepare_zip_message">Przygotowanie wstępne aktualizacji</string>
|
||||
<string name="dialog_battery_low_title">Niskim poziom baterii</string>
|
||||
<string name="dialog_battery_low_message_pct">Poziom naładowania baterii jest zbyt niski, musisz mieć co najmniej <xliff:g id="percent_discharging">%1$d</xliff:g>% baterii lub <xliff:g id="percent_charging">%2$d</xliff:g>% w trakcie ładowania.</string>
|
||||
<string name="dialog_battery_low_message_pct">Poziom naładowania baterii jest zbyt niski, musisz mieć co najmniej <xliff:g id="percent_discharging">%1$d</xliff:g>%% baterii lub <xliff:g id="percent_charging">%2$d</xliff:g>%% w trakcie ładowania.</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[ Uruchom następujące polecenia i dokonaj ponownej aktualizacji:\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot
|
||||
]]></string>
|
||||
<string name="dialog_scratch_mounted_title">Nie można zainstalować aktualizacji z zamontowanym \"OverlayFS\"</string>
|
||||
<string name="reboot">Uruchom ponownie</string>
|
||||
<string name="menu_refresh">Odśwież</string>
|
||||
<string name="menu_preferences">Ustawienia</string>
|
||||
@@ -54,6 +48,8 @@
|
||||
<string name="menu_export_update">Wyślij aktualizację</string>
|
||||
<string name="menu_show_changelog">Pokaż listę zmian</string>
|
||||
<string name="menu_ab_perf_mode">Nadaj wyższy priorytet procesowi aktualizacji</string>
|
||||
<string name="menu_update_recovery">Aktualizuj Recovery</string>
|
||||
<string name="toast_forced_update_recovery">Nie można wyłączyć aktualizacji Lineage Recovery na tym urządzeniu.</string>
|
||||
<string name="snack_updates_found">Znaleziono nowe aktualizacje</string>
|
||||
<string name="snack_no_updates_found">Nie znaleziono nowych aktualizacji</string>
|
||||
<string name="snack_updates_check_failed">Sprawdzanie aktualizacji nie powiodło się. Sprawdź połączenie z Internetem i spróbuj ponownie.</string>
|
||||
@@ -66,22 +62,22 @@
|
||||
<string name="header_last_updates_check">Ostatnio sprawdzane: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> z <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> z <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> z <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> z <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Sprawdzanie aktualizacji</string>
|
||||
<string name="list_no_updates">Nie znaleziono nowych aktualizacji. Aby ręcznie sprawdzić dostępność nowych aktualizacji, użyj przycisku Odśwież.</string>
|
||||
<string name="action_download">Pobierz</string>
|
||||
<string name="action_pause">Wstrzymaj</string>
|
||||
<string name="action_resume">Wznów</string>
|
||||
<string name="action_install">Instaluj</string>
|
||||
<string name="action_install">Zainstaluj</string>
|
||||
<string name="action_info">Informacje</string>
|
||||
<string name="action_delete">Usuń</string>
|
||||
<string name="action_cancel">Anuluj</string>
|
||||
<string name="confirm_delete_dialog_title">Usuń plik</string>
|
||||
<string name="confirm_delete_dialog_message">Usunąć wybrany plik aktualizacji?</string>
|
||||
<string name="apply_update_dialog_title">Zastosuj aktualizację</string>
|
||||
<string name="apply_update_dialog_message">Masz zamiar zaktualizować do <xliff:g id="update_name">%1$s</xliff:g>.\n\nGdy naciśniesz <xliff:g id="ok">%2$s</xliff:g>, urządzenie uruchomi się ponownie w trybie recovery, aby zainstalować aktualizację.\n\nUwaga: Ta funkcja wymaga kompatybilnego recovery, w innym przypadku aktualizację należy zainstalować ręcznie.</string>
|
||||
<string name="apply_update_dialog_message_ab">Masz zamiar zaktualizować do <xliff:g id="filename">%1$s</xliff:g>. \n\nGdy naciśniesz <xliff:g id="ok">%2$s</xliff:g>, urządzenie zacznie instalować w tle.\n\nPo zakończeniu wyświetli komunikat, aby urządzenie uruchomić ponownie.</string>
|
||||
<string name="apply_update_dialog_message">Zamierzasz zainstalować <xliff:g id="update_name">%1$s</xliff:g>.\n\nJeśli naciśniesz <xliff:g id="ok">%2$s</xliff:g>, urządzenie uruchomi się ponownie w trybie Recovery, aby zainstalować aktualizację.\n\nUwaga: Ta funkcja wymaga kompatybilnego Recovery lub aktualizacje będą musiały być zainstalowane ręcznie.</string>
|
||||
<string name="apply_update_dialog_message_ab">Zamierzasz zainstalować <xliff:g id="update_name">%1$s</xliff:g>.\n\nJeśli naciśniesz <xliff:g id="ok">%2$s</xliff:g>, urządzenie rozpocznie instalację w tle.\n\nPo zakończeniu, zostanie wyświetlony komunikat, aby uruchomić urządzenie ponownie.</string>
|
||||
<string name="cancel_installation_dialog_message">Anulować instalację?</string>
|
||||
<string name="label_download_url">Pobierz adres URL</string>
|
||||
<string name="toast_download_url_copied">Skopiowano adres URL</string>
|
||||
@@ -89,6 +85,7 @@
|
||||
<string name="notification_export_success">Aktualizacja wysłana</string>
|
||||
<string name="notification_export_fail">Błąd wysyłania</string>
|
||||
<string name="toast_already_exporting">Aktualizacja jest już wysyłana</string>
|
||||
<string name="toast_export_started">Rozpoczęto eksportowanie</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">Pozostała 1 sekunda</item>
|
||||
<item quantity="few">Pozostały <xliff:g id="count">%d</xliff:g> sekundy</item>
|
||||
@@ -107,14 +104,23 @@
|
||||
<item quantity="many">Pozostało <xliff:g id="count">%d</xliff:g> godzin</item>
|
||||
<item quantity="other">Pozostało <xliff:g id="count">%d</xliff:g> godzin</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Ostrzeżenie</string>
|
||||
<string name="update_on_mobile_data_message">Zamierzasz pobrać pakiet aktualizacji przy użyciu sieci komórkowej co spowoduje duże zużycie transferu danych. Czy chcesz kontynuować?</string>
|
||||
<string name="checkbox_mobile_data_warning">Nie pokazuj ponownie</string>
|
||||
<string name="menu_mobile_data_warning">Ostrzeżenie o danych komórkowych</string>
|
||||
<string name="update_over_metered_network_title">Ostrzeżenie</string>
|
||||
<string name="update_over_metered_network_message">Zamierzasz pobrać pakiet aktualizacji za pomocą sieci komórkowej, co prawdopodobnie spowoduje wysokie zużycie danych. Czy chcesz kontynuować?</string>
|
||||
<string name="checkbox_metered_network_warning">Nie pokazuj ponownie</string>
|
||||
<string name="menu_metered_network_warning">Ostrzeżenie o sieci z pomiarem</string>
|
||||
<string name="blocked_update_dialog_title">Aktualizacja zablokowana</string>
|
||||
<string name="blocked_update_dialog_message">Tej aktualizacji nie można zainstalować przy użyciu aplikacji aktualizacji. Zapoznaj się z <xliff:g id="info_url">%1$s </xliff:g> aby uzyskać więcej informacji.</string>
|
||||
<string name="blocked_update_dialog_message">Tej aktualizacji nie można zainstalować przy użyciu aplikacji \"Aktualizator\". Zapoznaj się z <xliff:g id="info_url">%1$s </xliff:g>, aby uzyskać więcej informacji.</string>
|
||||
<string name="export_channel_title">Eksport zakończony</string>
|
||||
<string name="new_updates_channel_title">Nowe aktualizacje</string>
|
||||
<string name="ongoing_channel_title">Trwające pobieranie</string>
|
||||
<string name="update_failed_channel_title">Aktualizacja nie powiodła się</string>
|
||||
<string name="info_dialog_title">Czy wiesz, że?</string>
|
||||
<string name="info_dialog_message">Aktualizacje LineageOS to pełne pakiety instalacyjne. Oznacza to, że zawsze możesz zainstalować tylko najnowszą aktualizację, nawet jeśli poprzednie zostały pominięte!</string>
|
||||
<string name="info_dialog_ok">Dziękujemy za informację!</string>
|
||||
<string name="local_update_import">Aktualizacja lokalna</string>
|
||||
<string name="local_update_import_progress">Importowanie aktualizacji lokalnej\u2026</string>
|
||||
<string name="local_update_import_success">Zaimportowano %1$s. Czy chcesz to zainstalować?</string>
|
||||
<string name="local_update_import_failure">Nie udało się zaimportować aktualizacji lokalnej</string>
|
||||
<string name="local_update_import_install">Zainstaluj</string>
|
||||
<string name="local_update_name">Aktualizacja lokalna</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Atualizador</string>
|
||||
@@ -40,6 +28,12 @@
|
||||
<string name="dialog_prepare_zip_message">Preparação preliminar de atualização</string>
|
||||
<string name="dialog_battery_low_title">Bateria fraca</string>
|
||||
<string name="dialog_battery_low_message_pct">O nível da bateria está muito baixo, precisando de, pelo menos, <xliff:g id="percent_discharging">%1$d</xliff:g>%% de bateria para continuar, ou <xliff:g id="percent_charging">%2$d</xliff:g>%% se estiver carregando.</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[ Execute os seguintes comandos e tente atualizar novamente:\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot
|
||||
]]></string>
|
||||
<string name="dialog_scratch_mounted_title">Não é possível instalar a atualização com o OverlayFS montado</string>
|
||||
<string name="reboot">Reiniciar</string>
|
||||
<string name="menu_refresh">Atualizar</string>
|
||||
<string name="menu_preferences">Preferências</string>
|
||||
@@ -54,6 +48,8 @@
|
||||
<string name="menu_export_update">Exportar atualização</string>
|
||||
<string name="menu_show_changelog">Mostrar alterações</string>
|
||||
<string name="menu_ab_perf_mode">Priorizar o processo de atualização</string>
|
||||
<string name="menu_update_recovery">Atualizar a recuperação</string>
|
||||
<string name="toast_forced_update_recovery">Não é possível desativar as atualizações do Lineage Recovery neste dispositivo.</string>
|
||||
<string name="snack_updates_found">Nova atualização disponível</string>
|
||||
<string name="snack_no_updates_found">Não foram encontradas novas atualizações</string>
|
||||
<string name="snack_updates_check_failed">Falha ao procurar por atualizações. Verifique sua conexão com a internet e tente novamente.</string>
|
||||
@@ -66,8 +62,8 @@
|
||||
<string name="header_last_updates_check">Última verificação: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> às <xliff:g id="time" example="01:23">%2$s</xliff:g></string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Verificando atualização</string>
|
||||
<string name="list_no_updates">Não foram encontradas novas atualizações. Use o botão Atualizar para buscar por novas atualizações manualmente.</string>
|
||||
<string name="action_download">Baixar</string>
|
||||
@@ -80,8 +76,8 @@
|
||||
<string name="confirm_delete_dialog_title">Excluir arquivo</string>
|
||||
<string name="confirm_delete_dialog_message">Excluir o arquivo de atualização selecionado?</string>
|
||||
<string name="apply_update_dialog_title">Instalar atualização</string>
|
||||
<string name="apply_update_dialog_message">Você está prestes a atualizar para <xliff:g id="update_name">%1$s</xliff:g>.\n\nAo clicar em <xliff:g id="ok">%2$s</xliff:g>, o dispositivo reiniciará no modo de recuperação para instalar a atualização.\n\nÉ necessário ter uma Recuperação compatível, caso contrário as atualizações deverão ser instaladas manualmente.</string>
|
||||
<string name="apply_update_dialog_message_ab">Você está prestes a atualizar para <xliff:g id="update_name">%1$s</xliff:g>.\n\nAo clicar em <xliff:g id="ok">%2$s</xliff:g>, o dispositivo iniciará a instalação em segundo plano.\n\nAo concluir, você será solicitado a reiniciar o dispositivo.</string>
|
||||
<string name="apply_update_dialog_message">Você está prestes a instalar <xliff:g id="update_name">%1$s</xliff:g>.\n\nSe você pressionar <xliff:g id="ok">%2$s</xliff:g>, o dispositivo será reiniciado no modo de recuperação para instalar a atualização.\n\nObservação: Esse recurso requer uma recuperação compatível ou as atualizações precisarão ser instaladas manualmente.</string>
|
||||
<string name="apply_update_dialog_message_ab">Você está prestes a instalar <xliff:g id="update_name">%1$s</xliff:g>.\n\nSe você pressionar <xliff:g id="ok">%2$s</xliff:g>, a instalação do dispositivo começará em segundo plano.\n\nDepois de concluído, você será solicitado a reiniciar o dispositivo.</string>
|
||||
<string name="cancel_installation_dialog_message">Deseja cancelar a instalação?</string>
|
||||
<string name="label_download_url">URL de Download</string>
|
||||
<string name="toast_download_url_copied">URL copiado</string>
|
||||
@@ -89,6 +85,7 @@
|
||||
<string name="notification_export_success">Atualização exportada</string>
|
||||
<string name="notification_export_fail">Falha ao exportar</string>
|
||||
<string name="toast_already_exporting">Uma atualização já está sendo exportada</string>
|
||||
<string name="toast_export_started">Exportação iniciada</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">1 segundo restante</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> segundos restantes</item>
|
||||
@@ -101,14 +98,23 @@
|
||||
<item quantity="one">1 hora restante</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> horas restantes</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Aviso</string>
|
||||
<string name="update_on_mobile_data_message">Você está prestes a baixar um pacote de atualização usando os dados móveis, o que provavelmente causará um alto consumo de dados. Deseja continuar?</string>
|
||||
<string name="checkbox_mobile_data_warning">Não mostrar novamente</string>
|
||||
<string name="menu_mobile_data_warning">Aviso de dados móveis</string>
|
||||
<string name="update_over_metered_network_title">Aviso</string>
|
||||
<string name="update_over_metered_network_message">Você está prestes a baixar um pacote de atualização usando os dados móveis, o que provavelmente causará um alto consumo de dados. Deseja continuar?</string>
|
||||
<string name="checkbox_metered_network_warning">Não mostrar novamente</string>
|
||||
<string name="menu_metered_network_warning">Aviso de rede limitada</string>
|
||||
<string name="blocked_update_dialog_title">Atualização bloqueada</string>
|
||||
<string name="blocked_update_dialog_message">Esta atualização não pode ser instalada pelo Atualizador. Leia <xliff:g id="info_url">%1$s</xliff:g> para obter mais informações.</string>
|
||||
<string name="export_channel_title">Exportação concluída</string>
|
||||
<string name="new_updates_channel_title">Novas atualizações</string>
|
||||
<string name="ongoing_channel_title">Downloads em andamento</string>
|
||||
<string name="update_failed_channel_title">Falha ao atualizar</string>
|
||||
<string name="info_dialog_title">Você sabia?</string>
|
||||
<string name="info_dialog_message">As atualizações do LineageOS são pacotes de instalação completos. Isso significa que você sempre pode instalar apenas a atualização mais recente, mesmo que você tenha ignorado versões anteriores!</string>
|
||||
<string name="info_dialog_ok">Agradecemos o seu comentário!</string>
|
||||
<string name="local_update_import">Atualização local</string>
|
||||
<string name="local_update_import_progress">Importando atualização local\u2026</string>
|
||||
<string name="local_update_import_success">%1$s foi importado. Você quer instalá-lo?</string>
|
||||
<string name="local_update_import_failure">Falha ao importar a atualização local</string>
|
||||
<string name="local_update_import_install">Instalar</string>
|
||||
<string name="local_update_name">Atualização local</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Atualizador</string>
|
||||
@@ -54,6 +42,8 @@
|
||||
<string name="menu_export_update">Exportar atualização</string>
|
||||
<string name="menu_show_changelog">Mostrar registo de alterações</string>
|
||||
<string name="menu_ab_perf_mode">Priorizar o processo de atualização</string>
|
||||
<string name="menu_update_recovery">Atualizar recuperação</string>
|
||||
<string name="toast_forced_update_recovery">Não é possível desativar as atualizações da recuperação Lineage neste dispositivo.</string>
|
||||
<string name="snack_updates_found">Não foram encontradas atualizações</string>
|
||||
<string name="snack_no_updates_found">Não foram encontradas novas atualizações</string>
|
||||
<string name="snack_updates_check_failed">A verificação de atualizações falhou. Por favor, verifique a sua ligação à internet e tente novamente.</string>
|
||||
@@ -66,8 +56,8 @@
|
||||
<string name="header_last_updates_check">Última verificação: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">A verificar atualização</string>
|
||||
<string name="list_no_updates">Não foram encontradas novas atualizações. Para verificar novas atualizações manualmente, use o botão Atualizar.</string>
|
||||
<string name="action_download">Transferir</string>
|
||||
@@ -81,7 +71,7 @@
|
||||
<string name="confirm_delete_dialog_message">Deseja eliminar o ficheiro de atualizações selecionado?</string>
|
||||
<string name="apply_update_dialog_title">Aplicar atualização</string>
|
||||
<string name="apply_update_dialog_message">Está prestes a atualizar para <xliff:g id="update_name">%1$s</xliff:g>.\n\nSe carregar em<xliff:g id="ok">%2$s</xliff:g>, o dispositivo irá reiniciar no modo de recuperação para instalar a atualização.\n\nNota: É necessária uma Recuperação compatível, caso contrário as atualizações terão de ser instaladas manualmente.</string>
|
||||
<string name="apply_update_dialog_message_ab">Está prestes a atualizar para <xliff:g id="update_name">%1$s</xliff:g>.\n\nSe selecionar <xliff:g id="ok">%2$s</xliff:g>, o dispositivo irá iniciar a instalação em plano de fundo.\n\nUma vez concluída, ser-lhe-á pedido que reinicie o dispositivo.</string>
|
||||
<string name="apply_update_dialog_message_ab">Está prestes a atualizar para <xliff:g id="update_name">%1$s</xliff:g>.\n\nSe selecionar <xliff:g id="ok">%2$s</xliff:g>, o dispositivo irá iniciar a instalação em segundo plano.\n\nUma vez concluída, ser-lhe-á pedido que reinicie o dispositivo.</string>
|
||||
<string name="cancel_installation_dialog_message">Cancelar a instalação?</string>
|
||||
<string name="label_download_url">URL de transferência</string>
|
||||
<string name="toast_download_url_copied">URL copiado</string>
|
||||
@@ -89,6 +79,7 @@
|
||||
<string name="notification_export_success">Atualização exportada</string>
|
||||
<string name="notification_export_fail">Erro de exportação</string>
|
||||
<string name="toast_already_exporting">Já está a exportar uma atualização</string>
|
||||
<string name="toast_export_started">Exportação iniciada</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">1 segundo restante</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> segundos restantes</item>
|
||||
@@ -101,14 +92,15 @@
|
||||
<item quantity="one">1 hora restante</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> horas restantes</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Aviso</string>
|
||||
<string name="update_on_mobile_data_message">Está prestes a transferir um pacote de atualização usando dados móveis, o que provavelmente irá resultar num elevado consumo de dados. Deseja continuar?</string>
|
||||
<string name="checkbox_mobile_data_warning">Não mostrar novamente</string>
|
||||
<string name="menu_mobile_data_warning">Aviso de dados móveis</string>
|
||||
<string name="update_over_metered_network_title">Aviso</string>
|
||||
<string name="checkbox_metered_network_warning">Não mostrar novamente</string>
|
||||
<string name="blocked_update_dialog_title">Atualização bloqueada</string>
|
||||
<string name="blocked_update_dialog_message">Esta atualização não pode ser instalada usando a aplicação do atualizador. Por favor, leia <xliff:g id="info_url">%1$s </xliff:g> para mais informações.</string>
|
||||
<string name="export_channel_title">Conclusão da exportação</string>
|
||||
<string name="new_updates_channel_title">Novas atualizações</string>
|
||||
<string name="ongoing_channel_title">Transferências em curso</string>
|
||||
<string name="update_failed_channel_title">A atualização falhou</string>
|
||||
<string name="info_dialog_title">Sabias que?</string>
|
||||
<string name="info_dialog_message">As atualizações do LineageOS são pacotes de instalação completa. Isso significa que podes instalar apenas a última atualização, mesmo que tenhas ignorado alguns deles!</string>
|
||||
<string name="info_dialog_ok">Obrigado pela informação!</string>
|
||||
</resources>
|
@@ -1,19 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.com-->
|
||||
<!--
|
||||
Copyright (C) 2017 The LineageOS Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
SPDX-FileCopyrightText: 2017-2024 The LineageOS Project
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Actualizator</string>
|
||||
@@ -40,6 +28,12 @@
|
||||
<string name="dialog_prepare_zip_message">Pregătire preliminară pentru actualizare</string>
|
||||
<string name="dialog_battery_low_title">Baterie slabă</string>
|
||||
<string name="dialog_battery_low_message_pct">Nivelul bateriei este prea scăzut. Aveți nevoie de cel puțin<xliff:g id="percent_discharging">%1$d</xliff:g>%% pentru a continua, <xliff:g id="percent_charging">%2$d</xliff:g>%% dacă telefonul este la încărcat.</string>
|
||||
<string name="dialog_scratch_mounted_message"><![CDATA[ Vă rugăm să rulați următoarele și să reîncărcați actualizarea:\n
|
||||
• adb root\n
|
||||
• adb enable-verity\n
|
||||
• adb reboot
|
||||
]]></string>
|
||||
<string name="dialog_scratch_mounted_title">Nu se poate instala actualizarea cu OverlayFS montat</string>
|
||||
<string name="reboot">Repornire</string>
|
||||
<string name="menu_refresh">Reîmprospătare</string>
|
||||
<string name="menu_preferences">Preferințe</string>
|
||||
@@ -54,6 +48,8 @@
|
||||
<string name="menu_export_update">Exportează actualizarea</string>
|
||||
<string name="menu_show_changelog">Arată changelog</string>
|
||||
<string name="menu_ab_perf_mode">Proces update prioritar</string>
|
||||
<string name="menu_update_recovery">Actualizare recovery</string>
|
||||
<string name="toast_forced_update_recovery">Este imposibil să dezactivați actualizarea Lineage Recovery pe acest dispozitiv.</string>
|
||||
<string name="snack_updates_found">Noi actualizări găsite</string>
|
||||
<string name="snack_no_updates_found">Nu s-au găsit actualizări noi</string>
|
||||
<string name="snack_updates_check_failed">Verificarea actualizării a eșuat. Vă rugăm să verificați conexiunea la internet și să încercați din nou mai târziu.</string>
|
||||
@@ -66,8 +62,8 @@
|
||||
<string name="header_last_updates_check">Ultima verificare: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
|
||||
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
|
||||
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> din <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> • <xliff:g id="percentage" example="56">%3$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> din <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
|
||||
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> din <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
|
||||
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> din <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
|
||||
<string name="list_verifying_update">Verificare actualizare</string>
|
||||
<string name="list_no_updates">Nicio actualizare nouă găsită. Pentru a verifica manual pentru noi actualizări, utilizați butonul Reîmprospătare.</string>
|
||||
<string name="action_download">Descărcați</string>
|
||||
@@ -80,8 +76,8 @@
|
||||
<string name="confirm_delete_dialog_title">Ștergeți fișierul</string>
|
||||
<string name="confirm_delete_dialog_message">Șterge fișierul de actualizare selectat?</string>
|
||||
<string name="apply_update_dialog_title">Aplicaţi actualizarea</string>
|
||||
<string name="apply_update_dialog_message">Sunteți pe cale de a face upgrade la <xliff:g id="update_name">%1$s</xliff:g>.\n\nDacă apăsați <xliff:g id="ok">%2$s</xliff:g>, dispozitivul se va restarta în modul de recuperare pentru a instala actualizarea.\n\nNotă: Această caracteristică necesită o Recuperare compatibilă sau actualizările vor trebui să fie instalate manual.</string>
|
||||
<string name="apply_update_dialog_message_ab">Sunteți pe cale de a face upgrade la <xliff:g id="update_name">%1$s</xliff:g>.\n\nDacă apăsați <xliff:g id="ok">%2$s</xliff:g>, dispozitivul va începe instalarea în fundal.\n\nOdată finalizată, veți fi anunțat(ă) să reporniți telefonul.</string>
|
||||
<string name="apply_update_dialog_message">Sunteți pe cale să instalați <xliff:g id="update_name">%1$s</xliff:g>.\n\nDacă apăsați <xliff:g id="ok">%2$s</xliff:g>, dispozitivul va reporni în modul recuperare pentru a instala actualizarea.\n\nNotă: Această caracteristică necesită un Recovery compatibil ori actualizările vor trebui instalate manual.</string>
|
||||
<string name="apply_update_dialog_message_ab">Sunteți pe cale să instalați <xliff:g id="update_name">%1$s</xliff:g>.\n\nDacă apăsați <xliff:g id="ok">%2$s</xliff:g>, dispozitivul va începe instalarea în fundal.\n\nOdată terminată, vi se va solicita să reporniți dispozitivul.</string>
|
||||
<string name="cancel_installation_dialog_message">Revocaţi instalarea?</string>
|
||||
<string name="label_download_url">Descărcați URL-ul</string>
|
||||
<string name="toast_download_url_copied">URL copiat</string>
|
||||
@@ -89,6 +85,7 @@
|
||||
<string name="notification_export_success">Actualizare exportată</string>
|
||||
<string name="notification_export_fail">Eroare de export</string>
|
||||
<string name="toast_already_exporting">Se exportează deja o actualizare</string>
|
||||
<string name="toast_export_started">Export inițiat</string>
|
||||
<plurals name="eta_seconds">
|
||||
<item quantity="one">1 secundă rămasă</item>
|
||||
<item quantity="few"><xliff:g id="count">%d</xliff:g> (de) secunde rămase</item>
|
||||
@@ -104,14 +101,23 @@
|
||||
<item quantity="few"><xliff:g id="count">%d</xliff:g> (de) ore rămase</item>
|
||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> (de) ore rămase</item>
|
||||
</plurals>
|
||||
<string name="update_on_mobile_data_title">Avertizare</string>
|
||||
<string name="update_on_mobile_data_message">Sunteți pe cale de a descărca un pachet de actualizare folosind datele mobile care, probabil, vor provoca o utilizare mare de date. Doriţi să continuaţi?</string>
|
||||
<string name="checkbox_mobile_data_warning">Nu mai afişa</string>
|
||||
<string name="menu_mobile_data_warning">Avertizare de date mobile</string>
|
||||
<string name="update_over_metered_network_title">Avertizare</string>
|
||||
<string name="update_over_metered_network_message">Sunteți pe cale să descărcați un pachet de actualizare printr-o rețea contorizată care va cauza probabil un consum ridicat de date. Doriți să continuați?</string>
|
||||
<string name="checkbox_metered_network_warning">Nu mai afişa</string>
|
||||
<string name="menu_metered_network_warning">Avertizare rețea contorizată</string>
|
||||
<string name="blocked_update_dialog_title">Actualizare blocată</string>
|
||||
<string name="blocked_update_dialog_message">Această actualizare nu poate fi instalată folosind aplicația actualizator. Vă rugăm să citiţi <xliff:g id="info_url">%1$s</xliff:g> pentru mai multe informaţii.</string>
|
||||
<string name="export_channel_title">Completare export</string>
|
||||
<string name="new_updates_channel_title">Actualizări noi</string>
|
||||
<string name="ongoing_channel_title">Descărcări în desfășurare</string>
|
||||
<string name="update_failed_channel_title">Actualizare eșuată</string>
|
||||
<string name="info_dialog_title">Știai că?</string>
|
||||
<string name="info_dialog_message">Actualizările LineageOS sunt pachete complete de instalare. Acest lucru înseamnă că întotdeauna puteți instala doar ultima actualizare, chiar dacă ați sărit unele dintre ele!</string>
|
||||
<string name="info_dialog_ok">Mulțumesc pentru informații!</string>
|
||||
<string name="local_update_import">Actualizare locală</string>
|
||||
<string name="local_update_import_progress">Importare actualizare locală\u2026</string>
|
||||
<string name="local_update_import_success">%1$s a fost importată. Doriți să o instalați?</string>
|
||||
<string name="local_update_import_failure">Eroare la importarea actualizării locale</string>
|
||||
<string name="local_update_import_install">Instalați</string>
|
||||
<string name="local_update_name">Actualizare locală</string>
|
||||
</resources>
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user