diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 19bbbb8811ae73e219f8e3666c367805e7bcf6c1..218343a2ca9c720c6440eb0c8374bcd320c20cab 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -183,6 +183,54 @@
android:resource="@string/summary_empty" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -225,30 +273,16 @@
android:resource="@string/summary_empty" />
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
+
diff --git a/proguard.flags b/proguard.flags
index 9de6495053d846167327d7b0ffa3874cc6611110..911b751c39ed93144ee4c523609f3228e10c374e 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -7,7 +7,6 @@
-keep class org.lineageos.lineageparts.gestures.*
-keep class org.lineageos.lineageparts.hardware.*
-keep class org.lineageos.lineageparts.input.*
--keep class org.lineageos.lineageparts.lineagestats.*
-keep class org.lineageos.lineageparts.livedisplay.*
-keep class org.lineageos.lineageparts.notificationlight.*
-keep class org.lineageos.lineageparts.power.*
diff --git a/res/drawable-hdpi/nav_divider.png b/res/drawable-hdpi/nav_divider.png
new file mode 100644
index 0000000000000000000000000000000000000000..b1f035c93d93eb3d9767fa9e266ab62a46ff8b9b
Binary files /dev/null and b/res/drawable-hdpi/nav_divider.png differ
diff --git a/res/drawable-mdpi/nav_divider.png b/res/drawable-mdpi/nav_divider.png
new file mode 100644
index 0000000000000000000000000000000000000000..f7ed6dff8ecf1393296142e701ec454f7a44286a
Binary files /dev/null and b/res/drawable-mdpi/nav_divider.png differ
diff --git a/res/drawable-xhdpi/nav_divider.png b/res/drawable-xhdpi/nav_divider.png
new file mode 100644
index 0000000000000000000000000000000000000000..00e3852d5b61d77de5f7f230106e10971fa59974
Binary files /dev/null and b/res/drawable-xhdpi/nav_divider.png differ
diff --git a/res/drawable/ic_gear.xml b/res/drawable/ic_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9562ea152fcf3275555cb9de992464626d935073
--- /dev/null
+++ b/res/drawable/ic_gear.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
diff --git a/res/drawable/ic_settings_microg.xml b/res/drawable/ic_settings_microg.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4e55f7c107462876bb9e4602add8636f07d0fb9c
--- /dev/null
+++ b/res/drawable/ic_settings_microg.xml
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/res/drawable/ic_settings_weather.xml b/res/drawable/ic_settings_weather.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1a5a8a922a954d665f2d3bdb397c89b2107ef929
--- /dev/null
+++ b/res/drawable/ic_settings_weather.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/empty_weather_state.xml b/res/layout/empty_weather_state.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ce9e7490c6d99e2261414d32ff7831dc15f1f773
--- /dev/null
+++ b/res/layout/empty_weather_state.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/weather_service_provider_info_row.xml b/res/layout/weather_service_provider_info_row.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ad63d3c1f4ffbc6578a79f404b9703004e39dd8f
--- /dev/null
+++ b/res/layout/weather_service_provider_info_row.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index a6991d7dd1621b4ba2ee67ec654e9023a7c1118d..0da143f906fabeaa7c18b2a81c927943110cd650 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -370,6 +370,20 @@
90 grade180 grade270 grade
+ Weer
+ Geen weer verskaffer dienste geïnstalleer nie
+ Installeer \'n weer verskaffer om weer inligting te ontvang
+ Verskaffer instellings
+ Kon nie die instellings-kieslys van die verskaffer begin nie
+ Voeg weer verskaffer by
+ Algemeen
+ Verskaffers
+ Temperatuur eenheid
+ Celsius
+ Fahrenheit
+ weer
+ Wys weer
+ Wys die huidige temperatuur op die statusbalkLaai klankeSpeel \'n klank met die koppeling of ontkoppeling van \'n kragbronVibreer
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 65244a35397753d3cf92568032d48850fdbab032..3806f97eb590d8080db4d01358eb3cec68cd7fe5 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -14,8 +14,7 @@
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.
--->
-
+-->إعدادات LineageOSتحميل\u2026موافق
@@ -86,8 +85,6 @@
درجة حرارة اللونالنهار: %1$dK الليل: %2$dK%1$dK
-
- وضع في الخارج التلقائيزيادة الإضاءة والإشباع تلقائياً تحت أشعة الشمسمضاد الوميض
@@ -426,6 +423,20 @@
90 درجة180 درجة270 درجة
+ الطقس
+ لم يتم تثبيت خدمات مزوّد الطقس
+ قم بتثبيت موفر طقس لتلقي تحديثات الطقس
+ إعدادات مزوّد الخدمة
+ تعذر بدء قائمة الإعدادات لهذا الموفر
+ إضافة موفر الطقس
+ إعدادات عامة
+ المزودات
+ وحدة درجة الحرارة
+ مئوية
+ فهرنهايت
+ الطقس
+ إظهار حالة الطقس
+ عرض درجة الحرارة الحالية على شريط الحالةتطبيقات الشاشة الكاملةاجبِر التطبيقات القديمة على إستخدام نسبة العرض إلى الارتفاع على كامل الشاشةلا تطبيقات
@@ -505,4 +516,4 @@
التطبيقات يمكنها إرسال %s رسائل في 1 دقيقة قبل ان تتطلب التأكيدلا يُسمح للتطبيقات بإرسال أيّة رسائل دون إذنالتأكيد دائماً
-
+
\ No newline at end of file
diff --git a/res/values-ast-rES/strings.xml b/res/values-ast-rES/strings.xml
index 720c31f9918bd783dc20f273941efdce29a58fed..3faefda9d02641a5538148095d2a1a931bb43ec3 100644
--- a/res/values-ast-rES/strings.xml
+++ b/res/values-ast-rES/strings.xml
@@ -226,6 +226,20 @@
Carga per cableCarga ensin filosUn toque
+ Meteoroloxía
+ Nun hai fornidores meteorolóxicos instalaos
+ Instala un fornidor metereolóxicu pa recibir anovamientos del clima
+ Axustes del fornidor
+ Nun pue llanzase\'l menú d\'axustes d\'esti fornidor
+ Amestar fornidor meteorolóxicu
+ Xeneral
+ Fornidores
+ Unidá de temperatura
+ Celsius
+ Fahrenheit
+ meteoroloxía
+ Amosar metereoloxía
+ Amuesa la temperatura actual na barra d\'estáuNun facer nadaAmosar la visualización d\'ambienteEstáu
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 55685edab4e804f651dea140f783256bc71d2f56..2bac59e1b1d6d7618dcf0d440172938f84bee956 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -443,6 +443,20 @@
90 dərəcə180 dərəcə270 dərəcə
+ Hava
+ Quraşdırılmış hava xidməti təchizatçısı yoxdur
+ Hava məlumatı yeniləmələrini almaq üçün bir hava təchizatçısı quraşdırın
+ Təchizatçı tənzimləmələri
+ Bu təchizatçının tənzimləmələr menyusu açıla bilmədi
+ Hava təchizatçısı əlavə et
+ Ümumi
+ Təchizatçılar
+ Hərarət vahidi
+ Selsi
+ Farenheyt
+ hava
+ Havanı göstər
+ Hazırki hərarəti vəziyyət sətrində göstərTam ekran tətbiqləriKöhnəlmiş tətbiqləri tam ekran rejimini istifadə etməyə məcbur edərTətbiq yoxdur
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 791fd67fc5b3f9c0ab3fe97020617af40d02886e..9ae902641e6d978903289956a89df8b9471b7330 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -328,4 +328,11 @@
Кіраванне падтрымкай злучэнняў па USB, такіх як навушнікі, прылады захоўвання даных, увод (мышы, клавіятуры, джойсцікі) і ADBЗабараніць злучэнні па USBАбмежаванне паведамленняў SMS
+ Агульнае
+ Адзінкі тэмпературы
+ Цэльсій
+ Фарэнгейт
+ надвор\'е
+ Паказваць надвор\'е
+ Паказваць надвор\'е ў радку стану
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 54ba229ad2932993c11302ad3636802f316fbe5b..1731dbe0e4f4cd5535cad5c975d86b6e079dea97 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -433,6 +433,20 @@
90 градуса180 градуса270 градуса
+ Прогноза на времето
+ Няма инсталиран доставчик на време
+ Инсталирайте на доставчик на време за да получавате актуализации за времето
+ Настройки на доставчика
+ Неуспешно стартиране на меню \"Настройки\" на този доставчик
+ Добавяне на доставчик
+ Общи
+ Доставчици
+ Температурни единици
+ Целзий
+ Фаренхайт
+ времето
+ Покажи на времето
+ Покази текущата температура в лентата на състояниетоПриложения на цял екранАктивираъ приложенията да използват пропорциите за цял екранНяма приложения
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 69a21241b6c1d156f242eb6fb7e0860be4b47ab0..8a838ddd80196e76f0fb26f81a9202c2cb31c66e 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -441,6 +441,20 @@
90 graus180 graus270 graus
+ El temps
+ No hi ha cap servei de proveïdor de temps instal·lat
+ Instal·la un proveïdor meteorològic per rebre actualitzacions del temps
+ Configuració del proveïdor
+ No s\'ha pogut iniciar el menú de configuració d\'aquest proveïdor
+ Afegeix proveïdor meteorològic
+ General
+ Proveïdors
+ Unitat de temperatura
+ Celsius
+ Fahrenheit
+ el temps
+ Mostrar el temps
+ Mostra la temperatura actual a la barra d\'estatAplicacions a pantalla completaForça les aplicacions heretades per utilitzar la relació d\'aspecte de pantalla completaCap aplicació
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index b41f9b4e8dddea05c93ffc851319428abcdc6df7..92efb545994cdde496b213c25cf8fc708382cd44 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -441,6 +441,20 @@
90°180°270°
+ Počasí
+ Nejsou nainstalovány žádné služby poskytovatele počasí
+ Pro získávání informací o počasí nainstalujte poskytovatele počasí
+ Nastavení poskytovatele
+ Nelze spustit nastavení tohoto poskytovatele
+ Přidat poskytovatele počasí
+ Hlavní
+ Poskytovatelé
+ Jednotky teploty
+ Celsia
+ Fahrenheita
+ počasí
+ Zobrazit počasí
+ Zobrazení aktuální teploty na stavovém řádkuAplikace na celou obrazovkuPřimět starší aplikace na použití poměrů na celou obrazovkuŽádné aplikace
diff --git a/res/values-cy/strings.xml b/res/values-cy/strings.xml
index 8201a8dd7ce357529d0ac761272f687435ca0964..8ae2e8bfd19bd15b317060dc532fd573b8488db4 100644
--- a/res/values-cy/strings.xml
+++ b/res/values-cy/strings.xml
@@ -434,6 +434,20 @@
90 gradd180 gradd270 gradd
+ Tywydd
+ Does dim darparydd gwasanaethau tywydd wedi\'i osod
+ Gosoda ddarparydd tywydd er mwyn cael diweddariadau tywydd
+ Gosodiadau\'r darparydd
+ Methwyd â lansio dewislen gosodiadau\'r darparydd hwn
+ Ychwanegu darparydd tywydd
+ Cyffredinol
+ Darparyddion
+ Uned tymheredd
+ Celsius
+ Fahrenheit
+ tywydd
+ Dangos y tywydd
+ Dangos y tymheredd cyfredol ar y bar statwsApiau sgrin lawnGorfodi apiau cymyd i ddefnyddio cymhareb agwedd sgrin lawnDim apiau
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index a7860f8bb37f0b6e72ca78d2c25eee4311b1f3d6..6b90d888a0958d68af1490d9e0f68312b30c7aba 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -411,6 +411,20 @@
90 grader180 grader270 grader
+ Vejr
+ Ingen vejrudbydertjenester er installeret
+ Installér en vejrudbyder for at modtage vejropdateringer
+ Udbyderindstillinger
+ Kunne ikke åbne indstillingsmenuen for denne udbyder
+ Tilføj vejrudbyder
+ Generelt
+ Udbydere
+ Temperaturenhed
+ Celsius
+ Fahrenheit
+ vejr
+ Vis vejr
+ Vis den aktuelle temperatur på statusbjælkenOpladningslydeAktivér opladningslydeAfspil en lyd, når du tilslutter eller frakobler en strømkilde
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 4f36e51dc655f23c6def3dea183028315bde052e..d6f2177fc037add37930b1bff37816298c854715 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -14,10 +14,9 @@
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.
--->
-
+-->LineageOS-Einstellungen
- Wird geladen\u2026
+ Wird geladen …OKAbbrechenHinzufügen
@@ -84,7 +83,7 @@
Farben automatisch wählenLED-EinstellungenBenachrichtigungs-LED durch Einstellungen aktiviert
- Um App-spezifische Einstellungen hinzuzufügen, „%1$s“ aktivieren und „Hinzufügen“ antippen
+ Um App-spezifische Kontrolle hinzuzufügen, aktiviere \'%1$s\' und tippe auf \'Hinzufügen\'Optimiert deinen Bildschirm basierend auf der Tageszeit und den Umgebungsbedingungen, um die Lesbarkeit zu verbessern und die Ermüdung der Augen zu mildernBildschirmmodusFarbtemperatur
@@ -160,7 +159,7 @@
Geteilter BildschirmApp im Vordergrund beendenKurzer Blick
- Der Bildschirm bleibt aktiviert, solange die Kamera-Taste halb durchgedrückt gehalten wird.
+ Der Bildschirm bleibt aktiviert, solange die Taste halb durchgedrückt gehalten wirdKamera startenLanges Drücken und Loslassen startet die KameraWiedergabe steuern
@@ -224,7 +223,7 @@
GerätesteuerungErweiterter NeustartBei entsperrtem Bildschirm dem Neustartmenü Optionen für Neustart in Recovery oder in Bootloader hinzufügen
- Notfallausstattung ist aktiviert
+ Die Notfallfunktion ist aktiviertDoppelt drücken für KameraKamera ohne Entsperren deines Bildschirms schnell öffnenLange drücken für Taschenlampe
@@ -441,6 +440,20 @@
90 Grad180 Grad270 Grad
+ Wetter
+ Keine Wetterdaten-Anbieter installiert
+ Installiere einen Wetterdatenanbieter, um Wetter-Aktualisierungen zu erhalten
+ Anbieter-Einstellungen
+ Das Einstellungsmenü dieses Anbieters konnte nicht gestartet werden
+ Wetterdatenanbieter hinzufügen
+ Allgemein
+ Anbieter
+ Temperatureinheit
+ Celsius
+ Fahrenheit
+ Wetter
+ Wetter anzeigen
+ Die aktuelle Temperatur in der Statusleiste anzeigenVollbild-AppsÄltere Anwendungen zu Vollbild zwingenKeine Apps
@@ -496,7 +509,7 @@
Inaktivitätsdisplay anzeigenStatusSELinux
- Enforcing
+ ErzwingenDeaktiviertSELinux bestimmt, welche Prozesse Zugriff auf welche Dateien/Verzeichnisse auf deinem Gerät haben.\nDadurch wird verhindert, dass Anwendungen und Dienste auf Dateien zugreifen, die sie nicht benötigen: Auf diese Weise wird ein potenziell bösartiger Prozess eingeschränkt und deine Sicherheit gewahrt.Android-Sicherheitspatches
@@ -528,4 +541,10 @@
Apps können %s Nachrichten in 1 Minute ohne Bestätigung versendenApps dürfen keine Nachrichten ohne Bestätigung versendenImmer bestätigen
-
+ OpenKeychain
+ microG
+ LineageOS Mitwirkende
+ /e/ Unterstützer
+ /e/ Mitwirkende
+ Sicherheits-Patches werden monatlich von Google in Zusammenarbeit mit SoC-Anbietern veröffentlicht, um Schwachstellen zu beheben, die von bösartigen Apps ausgenutzt werden könnten, um Sicherheitseinschränkungen zu umgehen und das Gerät dauerhaft zu beschädigen. Die von Google zur Verfügung gestellten Patches werden jeden Monat auf alle unterstützten Geräte aufgespielt, aber Patches für proprietären Code können nur vom Hersteller deines Geräts aufgespielt werden. Um dein Gerät zu schützen, solltest du sicherstellen, dass dein /e/-OS-Build immer auf dem neuesten Stand ist, und (falls zutreffend) dass dein Hersteller-Image auf die neueste von /e/OS empfohlene Version aktualisiert ist.
+
\ No newline at end of file
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 24f7a981e04213e11de2f49242333db244d94014..bd6832a4e602f8879f3624cad7654f2a471dc882 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -445,6 +445,20 @@
90 μοίρες180 μοίρες270 μοίρες
+ Καιρός
+ Δεν υπάρχουν εγκατεστημένοι πάροχοι καιρού
+ Εγκαταστήσετε έναν πάροχο καιρού για να λαμβάνετε ενημερώσεις καιρικών συνθηκών
+ Ρυθμίσεις παρόχου
+ Δεν είναι δυνατό το άνοιγμα του μενού ρυθμίσεων αυτού του παρόχου
+ Προσθήκη παρόχου καιρού
+ Γενικές
+ Πάροχοι
+ Μονάδα θερμοκρασίας
+ Κελσίου
+ Φαρενάιτ
+ καιρός
+ Εμφάνιση καιρού
+ Εμφάνιση της τρέχουσας θερμοκρασίας στη γραμμή κατάστασηςΕφαρμογές πλήρους οθόνηςΑναγκάστε τις εφαρμογές παλαιού τύπου να χρησιμοποιούν αναλογία διαστάσεων πλήρους οθόνηςΔεν υπάρχουν εφαρμογές
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 933d487ebd17002481251e6c6e83e94561755e02..737369fc8574b7a933e3fe7a873422a6f0f1a055 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -443,6 +443,20 @@
90 degrees180 degrees270 degrees
+ Weather
+ No weather provider services installed
+ Install a weather provider to receive weather updates
+ Provider settings
+ Unable to launch the settings menu of this provider
+ Add weather provider
+ General
+ Providers
+ Temperature unit
+ Celsius
+ Fahrenheit
+ weather
+ Show weather
+ Display the current temperature on the status barFull screen appsForce legacy apps to use full screen aspect ratioNo apps
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index b383e70cc2b66ea30f727ffc6ef629fd40b64db8..8ac06985689df7484028d18575ff14aa5376b82c 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -443,6 +443,20 @@
90 degrees180 degrees270 degrees
+ Weather
+ No weather provider services installed
+ Install a weather provider to receive weather updates
+ Provider settings
+ Unable to launch the settings menu of this provider
+ Add weather provider
+ General
+ Providers
+ Temperature unit
+ Celsius
+ Fahrenheit
+ weather
+ Show weather
+ Display the current temperature on the status barFull screen appsForce legacy apps to use full screen aspect ratioNo apps
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 68c99dcfb41c1e99fa622109cd4ac83ed8d18fd5..8bb6f8605673df949f5481133f22c1126df74a51 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -443,6 +443,20 @@
90 degrees180 degrees270 degrees
+ Weather
+ No weather provider services installed
+ Install a weather provider to receive weather updates
+ Provider settings
+ Unable to launch the settings menu of this provider
+ Add weather provider
+ General
+ Providers
+ Temperature unit
+ Celsius
+ Fahrenheit
+ weather
+ Show weather
+ Display the current temperature on the status barFull screen appsForce legacy apps to use full screen aspect ratioNo apps
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 507aa716c22b5fdc32859c6949678c9baf82115c..c21ef9d6b6a9475d95d6e5654f8435999bf756a9 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -443,6 +443,20 @@
90 degrees180 degrees270 degrees
+ Weather
+ No weather provider services installed
+ Install a weather provider to receive weather updates
+ Provider settings
+ Unable to launch the settings menu of this provider
+ Add weather provider
+ General
+ Providers
+ Temperature unit
+ Celsius
+ Fahrenheit
+ weather
+ Show weather
+ Display the current temperature on the status barFull screen appsForce legacy apps to use full screen aspect ratioNo apps
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 1195acf34de08c1094572fbd673582ad6730c13e..f3df7141a8044c894ee1fc58b763fa2b56560d28 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -412,6 +412,20 @@
90 grados180 grados270 grados
+ Clima
+ Sin servicios de proveedores climáticos instalados
+ Instalar un proveedor climáticos para recibir información meteorológica
+ Ajustes del proveedor
+ No se puede iniciar el menú de ajustes de este proveedor
+ Añadir proveedor climático
+ General
+ Proveedores
+ Unidad de temperatura
+ Celsius
+ Fahrenheit
+ clima
+ Mostrar clima
+ Mostrar la temperatura actual en la barra de estadoAplicaciones a pantalla completaForzar a las aplicaciones antiguas, a utilizar la relación de aspecto a pantalla completaSin aplicaciones
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 9410617c53885c8e6d732b57247048de4eaad592..1bb99014dea9f3e569b99c24c8145e142084a0df 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -14,8 +14,7 @@
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.
--->
-
+-->Ajustes de LineageOSCargando\u2026OK
@@ -286,7 +285,7 @@
Modo de vibraciónElegir el tono de notificaciónElegir el tono de llamada
- Tono de llamada del teléfono
+ Tono de llamadaTono de notificaciónAjustes del sistemaModo de bloqueo de la pantalla
@@ -408,6 +407,20 @@
180 grados270 gradosSin aplicaciones
+ Clima
+ Sin servicios de proveedores de clima instalados
+ Instalar un proveedor de servicios climáticos para recibir información metorológica
+ Ajustes del proveedor
+ No se puede iniciar el menú de ajustes de este proveedor
+ Añadir proveedor del clima
+ General
+ Proveedores
+ Unidad de temperatura
+ Celsius
+ Fahrenheit
+ clima
+ Mostrar clima
+ Mostrar la temperatura actual en la barra de estadoSonidos de carga del dispositivoReproducir un sonido al conectar o desconectar el cargadorVibración
@@ -459,4 +472,41 @@
Saber másEntiendoLímite de mensajes SMS
-
+ Desliza el dedo hacia arriba desde el botón de inicio
+ Carga inalámbrica
+ Carga por cable
+ Sonidos de notificación
+ Activar sonidos de carga
+ Obligar a las aplicaciones heredadas a utilizar la relación de aspecto de pantalla completa
+ Aplicaciones a pantalla completa
+ <b>Contribuidores totales:</b> <xliff:g id=total_contributors>%1$s</xliff:g><br/><br/> <b>Objetivos totales:</b> <xliff:g id=total_commits>%2$s</xliff:g><br/><br/> <b>Última actualización:</b> <xliff:g id=date>%3$s</xliff:g>
+ <b>Nombre:</b> <xliff:g id=name>%1$s</xliff:g><br/><br/> <b>Nick:</b> <xliff:g id=nick>%2$s</xliff:g><br/><br/> <b>Objetivos:</b> <xliff:g id=commits>%3$s</xliff:g>
+ Ocultar el reloj si el lanzador está visible
+ Mostrar horas, minutos y segundos
+ Mostrar segundos
+ Crear un nuevo perfil
+ Activar perfiles
+ La función de emergencia está activada
+ Cuando esté desbloqueado, incluir opciones en el menú de encendido para reiniciar en recovery o bootloader
+ Reinicio avanzado
+ Controles del dispositivo
+ Emergencia
+ El informe de errores está deshabilitado para usuarios no principales.
+ La notificación de errores está desactivada, ya que los ajustes de desarrollo no están activados
+ Elementos del menú Energía
+ Acción de pulsación larga hacia atrás
+ Activar la barra de tareas
+ Intercambiar el orden de los botones \"Recientes\" y \"Atrás
+ Panel de volumen en la parte izquierda de la pantalla
+ Mostrar panel de la izquierda
+ Desactivar aplicación en primer plano
+ Modo de escala de grises para una lectura prolongada
+ Modo lectura
+ Evita el parpadeo generalizado y reduce la fatiga visual en condiciones de poca luz. Puede degradar la precisión del color y afectar a la forma en que se muestran algunos elementos.
+ Antireflectante
+ Para añadir un control por aplicación, active \"%1$s\" y pulse \"Añadir\"
+ Activar luz de notificación
+ Se apaga cuando está completamente cargado
+ Activar la luz de batería
+ Vista previa de los ajustes de luz
+
\ No newline at end of file
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 6e6aa5e15a5f52a669855459282efc97c7b1fc6d..4467bfb94a6611806850e9655ad9e8a62d527411 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -430,6 +430,20 @@ andmete eelvaade.
90 kraadi180 kraadi270 kraadi
+ Ilm
+ Ilmapakkuja teenused pole installitud
+ Installi ilmapakkuja, et saada ilmateateid
+ Pakkuja seaded
+ Selle pakkuja seadete menüü avamine ei õnnestunud
+ Lisa ilmapakkuja
+ Üldine
+ Pakkujad
+ Temperatuuriühik
+ Celsius
+ Fahrenheit
+ ilm
+ Näita ilmateadet
+ Kuva olekuribal hetketemperatuuriTäisekraanis rakendusedLuba pärandrakendustel kasutada täielikku ekraani kuvasuhetRakendusi pole
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index aa8e3d2a90e3e14bb8d5a1abf48a5a19e97df450..d679608823c46be33501c2c5de703c49043faaa3 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -404,6 +404,20 @@ Informazio hau gailuaren abio bakoitzean bidaltzen da.\n\nBidalitako informazioa
90 gradu180 gradu270 gradu
+ Eguraldia
+ Ez da eguraldi hornitzailerik instalatu
+ Instalatu eguraldi hornitzaile bat eguraldiaren informazio eguneratua jasotzeko
+ Hornitzailearen ezarpenak
+ Ezin izan da hornitzaile honen ezarpen menua abiatu
+ Gehitu eguraldi hornitzailea
+ Orokorra
+ Hornitzaileak
+ Tenperatura unitatea
+ Celsius
+ Fahrenheit
+ eguraldia
+ Erakutsi eguraldia
+ Bistaratu uneko tenperatura egoera-barranPantaila osoko aplikazioakBehartu aplikazio zaharrei pantaila osoko aspektu erlazioa errabiltzeraKargatze-soinuak
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 3759adbc948fed7c1be922563cfcb963dbce034b..734a45337b93fb5510ceec88a7e46c04ea68f7c1 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -428,6 +428,20 @@
90 astetta180 astetta270 astetta
+ Sää
+ Säätarjoajapalveluita ei asennettu
+ Asenna sääpalveluntarjoaja vastaanottaaksesi sääpäivityksiä
+ Tarjoajan asetukset
+ Tämän palveluntarjoajan asetusvalikon avaaminen ei onnistu
+ Lisää sääpalveluntarjoaja
+ Yleinen
+ Palveluntarjoajat
+ Lämpötilan yksikkö
+ Celsius
+ Fahrenheit
+ sää weather
+ Näytä sää
+ Näytä nykyinen lämpötila tilarivilläKoko näytön sovelluksetPakota vanhat sovellukset käyttämään koko näytön suhdettaEi sovelluksia
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index a60ef8ef66a6554a9b3361dcd3fe73d358bc2f03..e2b8a770a41e1a8bdf3f3cabb57da30f05118a77 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -14,8 +14,7 @@
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.
--->
-
+-->Paramètres de LineageOSChargement\u2026OK
@@ -428,6 +427,20 @@
90 degrés180 degrés270 degrés
+ Météo
+ Aucun fournisseur de services météorologiques installé
+ Installer un fournisseur de services météorologiques pour recevoir des bulletins météo
+ Paramètres du fournisseur
+ Impossible d\'ouvrir le menu de configuration de ce fournisseur
+ Ajouter un fournisseur de météo
+ Général
+ Fournisseurs
+ Unité de température
+ Celsius
+ Fahrenheit
+ météo
+ Afficher la météo
+ Afficher la température actuelle dans la barre d\'étatApplications en plein écranForcer l\'affichage des anciennes applications en plein écranAucune application
@@ -487,7 +500,7 @@
À jourObsolète de quelques moisObsolète
- Les correctifs de sécurité sont publiés chaque mois par Google, en coopération avec les fournisseurs de SoC. Ils permettent de corriger des failles que des applications malveillantes sont susceptibles d\'exploiter pour contourner les restrictions de sécurité et endommager votre appareil de façon définitive. Les correctifs fournis par Google sont appliqués chaque mois à tous les appareils compatibles, mais ceux concernant le code propriétaire ne peuvent l\'être que par le fabricant de votre appareil. Pour garantir la sécurité de votre appareil, veillez à toujours utiliser la dernière version de LineageOS et, le cas échéant, mettez à jour votre fichier vendor.img afin qu\'il corresponde à la dernière version recommandée par LineageOS.
+ Les correctifs de sécurité sont publiés chaque mois par Google, en coopération avec les fabricants de puces SoC (System On a Chip). Ils permettent de corriger des failles que des applications malveillantes sont susceptibles d\'exploiter pour contourner les restrictions de sécurité et endommager votre appareil de façon définitive. Les correctifs fournis par Google sont appliqués chaque mois à tous les appareils compatibles, mais ceux concernant le code propriétaire ne peuvent l\'être que par le fabricant de votre appareil. Pour garantir la sécurité de votre appareil, veillez à toujours utiliser la dernière version de LineageOS et, le cas échéant, mettez à jour votre fichier vendor.img afin qu\'il corresponde à la dernière version recommandée par LineageOS.ChiffrementActivéÉcran de verrouillage sécurisé requis
@@ -507,4 +520,25 @@
Les applications peuvent envoyer %s messages en une minute avant qu\'une confirmation ne soit requiseLes applications ne sont pas autorisées à envoyer de messages sans confirmationToujours confirmer
-
+ Contributeurs LineageOS
+ Charge par câble
+ Charge sans fil
+ Sons des notifications
+ Masquer l\'horloge si le lanceur d\'applications est visible
+ Les correctifs de sécurité sont publiés chaque mois par Google, en coopération avec les fabricants de puces SoC (System On a Chip). Ils permettent de corriger des failles que des applications malveillantes sont susceptibles d\'exploiter pour contourner les restrictions de sécurité et endommager votre appareil de façon définitive. Les correctifs fournis par Google sont appliqués chaque mois à tous les appareils compatibles, mais ceux concernant le code propriétaire ne peuvent l\'être que par le fabricant de votre appareil. Pour garantir la sécurité de votre appareil, veillez à toujours utiliser la dernière version de /e/OS et, le cas échéant, mettez à jour votre fichier vendor.img afin qu\'il corresponde à la dernière version recommandée par /e/OS.
+ Activer les sons d\'alimentation
+ Créer un nouveau profil
+ Activer les profils
+ Inclure les options de redémarrage en mode recovery ou bootloader dans le menu Marche/Arrêt lorsque l\'appareil est déverrouillé
+ Redémarrage avancé
+ Commande des appareils
+ Eléments du menu Marche/Arrêt
+ Activer la barre des tâches
+ Pour ajouter une gestion par application, activez \'%1$s\' et appuyez sur \'Ajouter\'
+ Activer les voyants de notification
+ Activer le voyant batterie
+ Aperçu des paramètres de voyants
+ Toujours autoriser les connexions USB
+ OpenKeychain
+ microG
+
\ No newline at end of file
diff --git a/res/values-fy-rNL/strings.xml b/res/values-fy-rNL/strings.xml
index 5944289a222a0b4c0645774b336de30ab969eece..acd432409e91cc8a0f34e1874bd450fc46ef6530 100644
--- a/res/values-fy-rNL/strings.xml
+++ b/res/values-fy-rNL/strings.xml
@@ -406,6 +406,20 @@
90 graden180 graden270 graden
+ It waar
+ Gjin waartsjinsten ynstallearre
+ Ynstallearje in waaroanbieder om waarfernijingen te ûntfangen
+ Ynstellingen oanbieder
+ Kin ynstellingenmenu fan dizze oanbieder net iepenje
+ Waaroanbieder tafoegje
+ Algemien
+ Oanbieders
+ Temperatuerienheid
+ Celsius
+ Fahrenheit
+ it waar
+ It waar toane
+ Aktuele temperatuer op de steatbalke toaneFolslein skerm appsAlde apps forsearje op folslein skermGjin apps
diff --git a/res/values-gd/strings.xml b/res/values-gd/strings.xml
index 2d9b01917189b0476213cb40afdf009527410866..a6fee03f448951aaa165807065408d80e09a4351 100644
--- a/res/values-gd/strings.xml
+++ b/res/values-gd/strings.xml
@@ -435,6 +435,20 @@
90 ceum180 ceum270 ceum
+ An aimsir
+ Cha deach seirbheis solaraiche aimsire a stàladh
+ Stàlaich solaraiche aimsire airson naidheachd na h-aimsire fhaighinn
+ Roghainnean an t-solaraiche
+ Cha deach leinn clàr-taice nan roghainnean a chur gu dol airson an t-solaraiche seo
+ Cuir solaraiche aimsire ris
+ Coitcheann
+ Solaraichean
+ Aonad na teothachd
+ Celsius
+ Fahrenheit
+ aimsir
+ Seall an aimsir
+ Seall an teothachd làithreach air bàr na staidAplacaidean làn-sgrìnSpàrr air aplacaidean dìleabach gun cleachd iad co-mheas deilbh na làn-sgrìnChan eil aplacaid ann
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 846a6faadbbac67d065993d9c1b976c2b169c784..07e8d5004b76f0c112dd4074ad05444e53913ac8 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -433,6 +433,20 @@
90 graos180 graos270 graos
+ Tempo
+ Non instalouse ningun probeedor do tempo
+ Instalar un proveedor do clima para recibir actualizacións do tempo
+ Axustes do fornecedor
+ Non se puido iniciar o menú de configuración deste provedor
+ Engadir fornecedor de clima
+ Xeral
+ Fornecedores
+ Unidade de temperatura
+ Celsius
+ Fahrenheit
+ clima
+ Amosar o tempo
+ Mostrar a temperatura actual na barra de estadoAplicacións a pantalla completaForzar as aplicacións herdadas a empregar as proporcións da pantalla completaNingunha aplicación
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index f48321eec95e6d19fde7ea269be55745bef7358e..143ec7eec6033ec40e6f0647c4e87c09be9d7892 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -412,6 +412,20 @@
90 stupnjeva180 stupnjeva270 stupnjeva
+ Vrijeme
+ Nema instaliranih usluga davatelja vremenske prognoze
+ Instalirajte davatelja vremenske prognoze za primanje ažuriranja vremenske prognoze
+ Postavke davatelja
+ Nije moguće otvoriti izbornik postavki ovog davatelja usluga
+ Dodaj pružatelja vremenske prognoze
+ Općenito
+ Pružatelji
+ Jedinica temperature
+ Celzij
+ Fahrenheit
+ vrijeme
+ Pokaži prognozu
+ Prikaži trenutnu temperaturu na traci statusaZvukovi punjenjaReproducirat će zvuk pri spajanju ili odspajanju s izvora napajanjaVibracija
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index ae79631b45e3e3aa75c5bf6a4789b3b5859c2d37..39e84d6d2773f62b1fca505abea9d9a0ea1d2f83 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -441,6 +441,20 @@
90 fok180 fok270 fok
+ Időjárás
+ Nincs telepítve Időjárás szolgáltató
+ Telepítsen egy időjárás-szolgáltatót az időjárási frissítésekért
+ Szolgáltató beállítások
+ Ezen szolgáltató beállítások menüje nem indítható
+ Időjárás szolgáltató felvétele
+ Általános
+ Szolgáltatók
+ Hőmérsékleti egység
+ Celsius
+ Fahrenheit
+ időjárás
+ Időjárás megjelenítése
+ Aktuális hőmérséklet megjelenítése az állapotsoronTeljesképernyős alkalmazásokRégi alkalmazások kényszerítése, hogy a teljes képernyőt használjákNincsenek alkalmazások
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 47a99c1ac87fa7b79d645b907c21de46e83d412e..a77f7e4355e8abab6c63ae3c51df0df941849425 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -434,6 +434,20 @@
90 derajat180 derajat270 derajat
+ Cuaca
+ Tidak ada layanan penyedia cuaca terpasang
+ Pasang penyedia cuaca untuk menerima pembaruan cuaca
+ Pengaturan penyedia
+ Tidak dapat membuka menu pengaturan untuk penyedia ini
+ Tambah penyedia cuaca
+ Umum
+ Penyedia
+ Satuan temperatur
+ Celsius
+ Fahrenheit
+ cuaca
+ Tampilkan cuaca
+ Tampilkan suhu sekarang pada status barAplikasi layar penuhPaksa aplikasi lawas untuk menggunakan rasio aspek layar penuhTidak ada aplikasi
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 7176cdd3d099c9ee61d231d93358ae1ad2f86168..184d424c3248257c5406fa1f7e40492f1bb6f6db 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -14,10 +14,9 @@
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.
--->
-
+-->Impostazioni LineageOS
- Caricamento\u2026
+ Caricamento…OKAnnullaAggiungi
@@ -84,7 +83,7 @@
I colori sono scelti automaticamenteImpostazioni luciLED attivato dalle impostazioni
- Per aggiungere impostazioni per specifiche app, attiva \'%1$s\' e premi \'Aggiungi\'
+ Per aggiungere un controllo per App, attiva \'%1$s\' e premi \'Aggiungi\'Ottimizza lo schermo in base all\'ora del giorno e alle condizioni ambientali per migliorare la leggibilità e ridurre l\'affaticamento degli occhiModalità displayTemperatura colore
@@ -441,6 +440,20 @@
90 gradi180 gradi270 gradi
+ Meteo
+ Nessun provider meteo installato
+ Installa un provider meteo per ricevere aggiornamenti sul meteo
+ Impostazioni provider
+ Impossibile aprire il menu d\'impostazioni di questo provider
+ Aggiungi provider meteo
+ Generali
+ Provider
+ Unità temperatura
+ Celsius
+ Fahrenheit
+ meteo
+ Mostra meteo
+ Mostra la temperatura corrente nella barra di statoApp a schermo interoForza le app ad utilizzare lo schermo interoNessuna app
@@ -528,4 +541,4 @@
Le applicazioni possono inviare %s messaggi in 1 minuto prima di richiedere confermaNon è consentito alle app l\'invio di messaggi senza confermaConferma sempre
-
+
\ No newline at end of file
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 422d20a46cdfdc9538c6d493a251cde3c4632abd..519a366662689b5dde7e3b6eea6d1114a9ecb009 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -400,6 +400,20 @@
90 מעלות180 מעלות270 מעלות
+ תחזית
+ לא מותקנים שירותי ספקי תחזית
+ התקן ספק תחזית בכדי לקבל עדכוני מזג האוויר
+ הגדרות ספק
+ לא ניתן להפעיל את תפריט ההגדרות של ספק זה
+ הוסף ספק מזג אוויר
+ כללי
+ ספקים
+ יחידת טמפרטורה
+ צלזיוס
+ פרנהייט
+ תחזית
+ הראה תחזית
+ הצג את הטמפרטורה הנוכחית בשורת המצביישומים במסך מלאאכוף יישומים ישנים להמתח במסך מלאצלילי טעינה
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index ae14aa3952acfeeb95bd4626f2cb4e1778fecf7e..e097e97e10590709c09524955cc17ab54676404f 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -441,6 +441,20 @@
90度180度270度
+ 天気
+ 天気プロバイダサービスがインストールされていません
+ 天気の更新を受け取るには天気プロバイダをインストールしてください
+ プロバイダの設定
+ このプロバイダの設定メニューを起動できませんでした
+ 天気プロバイダを追加
+ 全般
+ プロバイダ
+ 温度の単位
+ 摂氏
+ 華氏
+ 天気
+ 気温を表示
+ ステータスバーに現在の気温を表示する全画面表示のアプリ従来のアプリに全画面表示のアスペクト比を使用させるなし
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 73d6e76e056d3c343792324994f8b543885ed909..f96c3e22be6d3f9728b4d50dc0f6c19ce60c2552 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -397,6 +397,20 @@
೯೦ ಡಿಗ್ರಿಗಳು೧೮೦ ಡಿಗ್ರಿಗಳು೨೭೦ ಡಿಗ್ರಿಗಳು
+ ಹವಾಮಾನ
+ ಹವಾಮಾನ ಪರಿಚಾರಕ ಸೇವೆಗಳನ್ನು ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ
+ ಹವಾಮಾನ ವರದಿಗಳನ್ನು ಪಡೆಯಲು ಹವಾಮಾನ ಪರಿಚಾರಕವನ್ನು ಸ್ಥಾಪಿಸು
+ ಪೂರೈಕೆದಾರ ಅಳವಡಿಕೆಗಳು
+ ಈ ಪರಿಚಾರಕದ ಅಳವಡಿಕೆ ಪಟ್ಟಿಯನ್ನು ತೆರೆಯಲಾಗುತ್ತಿಲ್ಲ
+ ಹವಾಮಾನ ಪರಿಚಾರಕವನ್ನು ಸೇರಿಸು
+ ಸಾಮಾನ್ಯ
+ ಪೂರೈಕೆದಾರರು
+ ತಾಪಮಾನದ ಘಟಕ
+ ಸೆಲ್ಸಿಯಸ್
+ ಫ್ಯಾರನ್ಹೀಟ್
+ ಹವಾಮಾನ
+ ಹವಾಮಾನ ತೋರಿಸು
+ ಪ್ರಸ್ತುತ ತಾಪಮಾನವನ್ನು ಸ್ಥಿತಿ ಪಟ್ಟಿ ಮೇಲೆ ಪ್ರದರ್ಶಿಸುಪೂರ್ಣ ಪರದೆಯ ಆಪ್ಗಳುಪೂರ್ವಾರ್ಜಿತ ಆಪ್ಗಳಿಗೆ ಪೂರ್ಣ ಪರದೆ ಅನುಪಾತವನ್ನು ಬಳಸಲು ಒತ್ತಾಯಿಸುತುಂಬುಕ ಶಬ್ಧಗಳು
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 8c2cac28068900d628ba6a1ed92133ba2c03b801..aa410669852f83fa32ed826522a1f16c0f4ed507 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -440,6 +440,20 @@
90도180도270도
+ 날씨
+ 날씨 공급자 서비스 설치되지 않음
+ 날씨 정보를 받으려면 날씨 공급자를 설치하세요
+ 날씨 공급자 설정
+ 이 날씨 공급자의 설정 메뉴를 열 수 없습니다
+ 날씨 공급자 추가
+ 일반
+ 공급자
+ 온도 단위
+ 섭씨
+ 화씨
+ 날씨
+ 날씨 표시
+ 상태 표시줄에 현재 온도 표시전체 화면 앱레거시 앱에서 전체 화면 가로 세로 비율 강제 사용앱 없음
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 3fc016a6159f620a6a00dd3eb11ce4df68e7b5eb..67d0045860735014e67d9617ae38c7b7e46602f8 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -370,6 +370,20 @@
90 степени180 степени270 степени
+ Време
+ Не се инсталирани услуги за временски прогнози
+ Инсталирајте временски провајдер за да добивате ажурирања на временските прогнози
+ Поставувања на провајдерот
+ Не може да се подигне менито за поставувања на овој провајдер
+ Додај временски провајдер
+ Општо
+ Провајдери
+ Единица за температура
+ Целзиус
+ Фаренхајт
+ време
+ Покажи го времето
+ Прикажете ја моменталната температура на статусната лентаЗвуци за полнењеРепродуцирај звук при поврзување или исклучување на извор на енергијаВибрација
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 2a8c86f9b71c79c113d91fec8b589089434ea956..08f477a7f681e6fa2cbb719520d4524fd59c0e08 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -370,6 +370,20 @@
90 grader180 grader270 grader
+ Vær
+ Ingen værleverandør tjeneste installert
+ Installer en værleverandør for å motta væroppdateringer
+ Leverandørinnstillinger
+ Kan ikke starte innstillingsmenyen for denne leverandøren
+ Legg til værleverandør
+ Generelt
+ Leverandører
+ Temperaturenhet
+ Celsius
+ Fahrenheit
+ vær
+ Vis været
+ Vise gjeldende temperatur på statuslinjenLade-lyderSpill av en lyd når du kobler til eller fra en strømkildeVibrer
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 7f8351ff2fd5860f420ac48076f27225ae0fe196..8c1f047128494a111c5f813a3bb2a7f382d6c9e2 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -14,15 +14,14 @@
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.
--->
-
+-->LineageOS-instellingen
- Laden\u2026
+ Laden…OKAnnuleren
- Toevoegen
- App selecteren
- Opnieuw instellen
+ Voeg toe
+ Kies applicatie
+ HerstelGeavanceerdInstellingenNaam
@@ -116,7 +115,7 @@
BasisScherm ongekalibreerd gebruikenAanpasbaar
- Kleuren passen zich aan aan de omgeving
+ Kleuren zullen zich aanpassen aan de omgevingLezenWarmere kleuren voor minder vermoeidheid van de ogensRGB
@@ -266,7 +265,7 @@
Schrijven naar NFC-tagRaak tag aan om te schrijvenTag succesvol geschreven
- Tag schrijven mislukt
+ Tag schrijven mislukt!Gekozen profiel: %1$sEen profiel naar een NFC-tag schrijven maakt het mogelijk een profiel te kiezen door de tag aan te raken. Een tweede keer aanraken selecteert het vorig gekozen profiel.Onbekend profiel
@@ -275,12 +274,12 @@
Profiel %1$s verwijderen?Profiel instellen met behulp van huidige apparaatinstellingen?Huidige apparaatinstellingen importeren
- Kan huidige profiel niet verwijderen.
+ Kan huidig profiel niet verwijderen!Meldingen aanpassenGroepen toevoegen of verwijderenApp-groepen toevoegen of verwijderen om meldingsgedrag te manipulerenAan
- Off
+ UitNiet wijzigenNaam<nieuw profiel>
@@ -404,17 +403,15 @@
Netwerkverkeersindicator uitgeschakeld vanwege klokpositieBeschermde appsBeheren welke apps beschermd zijn
- Bijdragers
- Informatie over bijdragers laden\u2026
- Kan informatie over bijdragers niet laden
- Informatie over bijdragers
+ Medewerkers
+ Informatie over medewerkers laden…
+ Kan informatie over medewerkers niet laden
+ Informatie over medewerkersNaam: %1$s
Bijnaam:%2$s
Commits:%3$s]]>
- Informatie over bijdragers
- Totaal aantal bijdragers: %1$s
- Totaal aantal commits:%2$s
- Laatste update:%3$s]]>
+ Informatie over medewerkers
+ <b>Totaal aantal medewerkers:</b> <xliff:g id=total_contributors>%1$s</xliff:g><br/><br/> <b>Totaal aantal commits:</b> <xliff:g id=total_commits>%2$s</xliff:g><br/><br/> <b>Laatste update:</b> <xliff:g id=date>%3$s</xliff:g>LineageOS-statistiekenHelp LineageOS te verbeteren door anonieme statistieken te verzendenOver
@@ -444,6 +441,20 @@
Volledig scherm appsOude apps forceren op volledig schermGeen apps
+ Weer
+ Geen weeraanbiederservices geïnstalleerd
+ Installeer een weeraanbieder om weer-updates te ontvangen
+ Instellingen aanbieder
+ Kan instellingenmenu van deze aanbieder niet openen
+ Weeraanbieder toevoegen
+ Algemeen
+ Aanbieders
+ Eenheid temperatuur
+ Celsius
+ Fahrenheit
+ weer
+ Weer weergeven
+ Huidige temperatuur op de statusbalk weergevenOpladergeluidOplaadgeluid inschakelenGeluid afspelen bij het aansluiten of loskoppelen van een lader
@@ -498,7 +509,8 @@
SELinuxAfdwingen (enforcing)Uitgeschakeld
- SELinux bepaalt welke processen toegang hebben tot welke bestanden/mappen op uw apparaat.\nDit voorkomt dat applicaties en services toegang krijgen tot bestanden die ze niet nodig hebben: op deze manier wordt een potentieel kwaadaardig proces beperkt en uw veiligheid behouden.
+ SELinux bepaalt welke processen toegang hebben tot welke bestanden/mappen op uw toestel.
+\nDit voorkomt dat apps en services toegang hebben tot bestanden waar ze niet aan hoeven te komen: op deze manier wordt een potentieel schadelijk proces ingetoomd, en blijft de veiligheid gewaarborgd.Android-beveiligingspatchesPlatform: %1$s\nProvider: %2$sBijgewerkt
@@ -528,4 +540,10 @@
Apps kunnen %s berichten binnen 1 minuut verzenden zonder bevestigingApps mogen geen berichten verzenden zonder bevestigingAltijd bevestigen
-
+ OpenKeychain
+ microG
+ LineageOS medewerkers
+ /e/ ondersteuners
+ /e/ medewerkers
+ Veiligheidsupdates worden maandelijks vrijgegeven door Google in samenwerking met SoC fabrikanten om gebreken te verbeteren die kunnen misbruikt worden door schadelijke apps om veiligheidsrestricties te omzeilen en je toestel permanent te beschadigen. Veiligheidsupdates van Google worden maandelijks toegepast op alle ondersteunde toestellen, maar updates voor propriëtaire code kunnen enkel toegepast worden door de fabrikant van jouw toestel. Om de veiligheid op je toestel te garanderen, hou je /e/ OS altijd up-to-date, en (indien van toepassing) zorg er voor dat de vendor-image is bijgewerkt tot de laatste versie, aangeraden door /e/ OS.
+
\ No newline at end of file
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 9912f710f4b82e51b5119606db505a0f2726c8cc..793ac316b45b9a4e69aec0fd1bd5736f30147086 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -408,6 +408,20 @@
90 stopni180 stopni270 stopni
+ Pogoda
+ Nie zainstalowano usług dostawcy pogody
+ Zainstaluj dostawcę usługi pogody, aby otrzymywać informacje pogodowe
+ Ustawienia dostawcy
+ Nie można uruchomić menu ustawień tego dostawcy
+ Dodaj dostawcę pogody
+ Ogólne
+ Dostawcy
+ Jednostka temperatury
+ Stopnie Celsjusza
+ Stopnie Fahrenheita
+ pogoda
+ Pokaż pogodę
+ Wyświetlanie aktualnej temperatury na pasku stanuAplikacje pełnoekranoweWymuś na starszych aplikacjach korzystanie z pełnych proporcji ekranuBrak aplikacji
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index 73322c3f2bc606ccbf65fcb40098398ebea4170d..e6061e872e6432f3f17b20bf92df5e79d7c2f729 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -414,6 +414,20 @@
90 graus180 graus270 graus
+ Previsão do tempo
+ Não há provedor de previsão do tempo instalado
+ Instale um provedor de previsão do tempo para receber atualizações meteorológicas
+ Configurações do provedor
+ Não foi possível iniciar o menu de configurações deste provedor
+ Adicionar provedor de previsão do tempo
+ Geral
+ Provedores
+ Unidade de temperatura
+ Celsius
+ Fahrenheit
+ previsão do tempo
+ Mostrar previsão do tempo
+ Exibir a temperatura atual na barra de statusAplicativos em tela cheiaForçar os aplicativos preexistentes a utilizarem a proporção em tela cheiaNenhum aplicativo
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index fe3ddc301f32ecea2869b1b0ffb48c77a05bfd64..afad95e61f19e43f40a387dd7b7e2f4b32e3d42b 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -441,6 +441,20 @@
90 graus180 graus270 graus
+ Meteorologia
+ Não há serviços de fornecedor de meteorologia instalados
+ Instale um fornecedor de meteorologia para receber atualizações meteorológicas
+ Definições do fornecedor
+ Não é possível iniciar o menu de definições deste fornecedor
+ Adicionar fornecedor de meteorologia
+ Gerais
+ Fornecedores
+ Unidade de temperatura
+ Celsius
+ Fahrenheit
+ meteorologia
+ Mostrar meteorologia
+ Mostrar a temperatura atual na barra de estadoAplicações em ecrã inteiroForçar aplicações legadas a usarem a proporção de apresentação do ecrã inteiroSem aplicações
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index bd7d1e27195b1ab48536722e7fe8ab939913e479..d130b27b33c45fe47857406d08e11f073293cb7f 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -443,6 +443,20 @@
90 de grade180 de grade270 de grade
+ Vremea
+ Niciun serviciu furnizor de vreme instalat
+ Instalaţi un furnizor de vreme pentru a primi actualizări despre vreme
+ Setări furnizor
+ Imposibil de a lansa meniul de setări pentru acest furnizor
+ Adăugați un furnizor de vreme
+ General
+ Furnizori
+ Unitate de temperatură
+ Celsius
+ Fahrenheit
+ vreme
+ Arată vremea
+ Afișează temperatura actuală pe bara de stareAplicații ecran completForțează aplicațiile vechi să utilizeze ecranul completNicio aplicație
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 622e1564a5c8b34cff8b6e10d4b7276fae5064d1..a22b6a2e1887c3643d5151176142632768dba98f 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -14,8 +14,7 @@
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.
--->
-
+-->Настройки LineageOSЗагрузка\u2026OK
@@ -224,7 +223,7 @@
Управление устройствомВарианты перезапускаКогда устройство разблокировано, в меню кнопки питания доступны опции перезагрузки в Recovery и загрузчик
- Возможности для экстренных ситуаций включены
+ Экстренная возможность включенаНажмите кнопку питания дважды для запуска камерыБыстро запустить камеру без разблокировки устройстваДлительное нажатие для включения фонарика
@@ -441,6 +440,20 @@
90 градусов180 градусов270 градусов
+ Погода
+ Нет установленных служб поставщиков погоды
+ Установите службу поставщика погоды, чтобы получать обновления погоды
+ Настройки поставщика
+ Не удается запустить меню настройки этого поставщика
+ Добавить поставщика погоды
+ Общие
+ Поставщики
+ Единицы измерения температуры
+ Градус Цельсия
+ Градус Фаренгейта
+ погода
+ Показать погоду
+ Отображение текущей погоды в строке состоянияПолноэкранные приложенияПринудительное использование полноэкранного режима устаревшими приложениямиНет приложений
@@ -528,4 +541,10 @@
Запрашивать подтверждение при отправке более %s сообщений в минутуПриложениям запрещено отправлять сообщения без подтвержденияПодтверждать всегда
-
+ участники проекта /e/
+ Исправления безопасности ежемесячно выпускаются Google в сотрудничестве с производителями SoC для устранения недостатков, которые могут быть использованы вредоносными приложениями для обхода ограничений безопасности и нанесения постоянного ущерба вашему устройству. Исправления, выпускаемые Google, применяются каждый месяц на всех поддерживаемых устройствах, но исправления для собственного кода могут быть применены только производителем вашего устройства. Для обеспечения безопасности вашего устройства убедитесь, что сборка /e/ OS всегда актуальна, и (если это применимо) убедитесь, что образ производителя обновлен до последней версии, рекомендованной /e/ OS.
+ OpenKeychain
+ Поддерживающие проект /e/ люди
+ microG
+ Участники проекта LineageOS
+
\ No newline at end of file
diff --git a/res/values-sc-rIT/strings.xml b/res/values-sc-rIT/strings.xml
index 30317e7193a3034a450619f0fe24a3d369242c85..a8fb8e63b34a8193b497268165ad3b3da8c0790d 100644
--- a/res/values-sc-rIT/strings.xml
+++ b/res/values-sc-rIT/strings.xml
@@ -103,5 +103,6 @@
90 grados180 grados270 grados
+ GeneralesVibratzione
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index f58d5392bca76f6586f36b8bafc0e4e148d5e7ae..1f4d84c0c9c558711dca3f67bc65e5ea6dc09701 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -428,6 +428,20 @@
90 stupňov180 stupňov270 stupňov
+ Počasie
+ Žiadne nainštalované služby poskytovateľa počasia
+ Nainštalovať poskytovateľa počasia pre príjem predpovede počasia
+ Nastavenia poskytovateľa
+ Nepodarilo sa spustiť ponuku nastavení toto poskytovateľa
+ Pridať poskytovateľa počasia
+ Všeobecné
+ Poskytovatelia
+ Jednotky teploty
+ Celzia
+ Fahrenheita
+ počasie
+ Zobraziť počasie
+ Zobrazovať aktuálnu teplotu v stavovom riadkuAplikácie na celú obrazovkuPrinútiť staršie aplikácie na použitie pomerov na celú obrazovkuŽiadne aplikácie
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 6704d1520adf65f1a08da52fad4f462f2056267f..f9fc99ac52a263edc093af82874fdaf3ec2e0373 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -443,6 +443,20 @@
90 stopinj180 stopinj270 stopinj
+ Vreme
+ Ni nameščene storitve ponudnika vremena
+ Namestite ponudnika vremena, da boste prejemali vremenske posodobitve
+ Nastavitve ponudnika
+ Menija nastavitev za tega ponudnika ni mogoče zagnati
+ Dodaj ponudnika vremena
+ Splošno
+ Ponudniki
+ Enote za temperaturo
+ Celzij
+ Fahrenheit
+ vreme
+ Prikaži vreme
+ Prikaži trenutno temperaturo v vrstici stanjaCelozaslonske aplikacijeVsili zapuščinskim aplikacijam uporabo celozaslonskega razmerja slikeNi aplikacij
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index c5834ed768669189286330ad2b947a7c4ccb23eb..fa971720aa0fa2fd41b0c872b56188327479ed4c 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -441,6 +441,20 @@
90 gradë180 gradë270 gradë
+ Moti
+ Nuk është instaluar asnjë ofrues i shërbimit meteorologjik
+ Instalo një ofrues të shërbimit meteorologjik për të marrë përditësime të motit
+ Parametrat e ofruesit
+ Menuja e parametrave të këtij ofruesi nuk mund të hapet
+ Shto një ofrues të motit
+ Të përgjithshme
+ Ofruesit
+ Njësia e temperaturës
+ Celsius
+ Fahrenheit
+ moti
+ Shfaq motin
+ Trego temperaturën aktuale në shiritin e statusitAplikacione që shfaqen në gjithë ekraninDetyro aplikacionet e vjetra të përdorin dimension me ekran të plotëNuk ka aplikacione
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index da0365cd426e6024579890631b69b3fd568d7d93..a0cc98c66b45c2534cdbd1400076ac485b71ab6d 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -401,6 +401,20 @@
90 степени180 степени270 степени
+ Време
+ Нема инсталираног добављача временске прогнозе.
+ Инсталирајте добављача временске прогнозе да бисте преузимали податке о времену.
+ Подешавања добављача
+ Не могу да покренем мени са подешавањима овог добављача.
+ Додај добављача временске прогнозе
+ Опште
+ Добављачи
+ Јединица за температуру
+ Целзијус
+ Фаренхајт
+ време
+ Време
+ Приказује тренутну температуру у статусној траци.Апликације преко целог екранаПриморај застареле апликације да користе цео екранЗвук при пуњењу
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index a19c0c779ba96a47a8828e1c28c5a7f56f729208..cfa5987c14f0f3f20acfe12e66d7f202cc14d487 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -241,6 +241,15 @@
90 grader180 grader270 grader
+ Väder
+ Leverantörsinställningar
+ Allmänt
+ Leverantörer
+ Temperaturenhet
+ Celsius
+ Fahrenheit
+ väder
+ Visa väderLaddningsljudVibreraTyst
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index a1eccfee9cc97e389ba766894b156cc7c4e25a15..fa4276169303a2fa3f588698d860f84d0aea0f2b 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -415,6 +415,20 @@
90 องศา180 องศา270 องศา
+ สภาพอากาศ
+ ไม่มีผู้ให้บริการข้อมูลสภาพอากาศติดตั้งอยู่
+ ติดตั้งผู้ให้บริการสภาพอากาศรับการปรับปรุงสภาพอากาศ
+ ตั้งค่าผู้ให้บริการ
+ ไม่สามารถเปิดการตั้งค่าของผู้ให้บริการนี้ได้
+ เพิ่มผู้ให้บริการรายงานสภาพอากาศ
+ ทั่วไป
+ ผู้ให้บริการ
+ หน่วยอุณหภูมิ
+ เซลเซียส
+ ฟาเรนไฮต์
+ สภาพอากาศ
+ แสดงสภาพอากาศ
+ แสดงอุณหภูมิปัจจุบันบนแถบสถานะแอปพลิเคชันเต็มหน้าจอบังคับให้แอปเก่าใช้อัตราส่วนจอแบบเต็มไม่มีแอป
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 4dabc2f2a1f01eea2710b8a8868196dfd8b07554..b884f76a135470c736d36ccd967187e80f01ab92 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -443,6 +443,20 @@
90 derece180 derece270 derece
+ Hava durumu
+ Yüklü hava durumu hizmet sağlayıcısı yok
+ Hava durumu güncelleştirmelerini almak için bir hava sağlayıcı yükleyin
+ Sağlayıcı ayarları
+ Bu sağlayıcının ayarlar menüsü açılamadı
+ Hava durumu sağlayıcısı ekle
+ Genel
+ Sağlayıcılar
+ Sıcaklık birimi
+ Santigrat
+ Fahrenhayt
+ hava durumu
+ Hava durumunu göster
+ Mevcut sıcaklığı durum çubuğunda gösterTam ekran uygulamalarıEski uygulamaların tam ekranın en boy oranını kullanmasına zorlanırUygulama yok
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 0748b889d57c49b4974213e0c69ba96a58714805..d3c021e002ba235684c25cdb599cb69a583395e1 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -14,11 +14,10 @@
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.
--->
-
+-->Завантаження\u2026ОК
- Скаcувати
+ СкасуватиДодатиВиберіть додатокСкинути
@@ -402,6 +401,20 @@
90 градусів180 градусів270 градусів
+ Погода
+ Не встановлено жодного постачальника погоди
+ Встановіть службу постачальника погоди для отримання оновлень
+ Налаштування постачальника
+ Не вдалося запустити меню налаштувань цього постачальника
+ Додати постачальника погоди
+ Загальні
+ Постачальники
+ Одиниця виміру температури
+ Цельсій
+ Фаренгейт
+ погода
+ Показувати погоду
+ Відображати поточну температуру в рядку стануЗвуки зарядкиУвімкнути звуки заряджанняГрати звук при підключенні чи від\'єднанні від зарядного пристрою
@@ -466,4 +479,4 @@
Обмеження SMS-повідомленьПри спробі застосунків надіслати понад %s повідомлень за хвилину буде запитано підтвердженняЗавжди підтверджувати
-
+
\ No newline at end of file
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 23a2ae8daf3c9160cea25ae94bdb06c89da70f3d..029afe3a67a74bbc2fdc19b0a06024d5469da9b4 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -433,6 +433,20 @@
90 độ180 độ270 độ
+ Thời tiết
+ Không có dịch vụ nhà cung cấp thời tiết nào được cài đặt
+ Cài đặt nhà cung cấp thời tiết để nhận thông tin thời tiết cập nhật
+ Cài đặt nhà cung cấp
+ Không thể khởi động trình đơn cài đặt của nhà cung cấp này
+ Thêm nhà cung cấp thời tiết
+ Chung
+ Nhà cung cấp
+ Đơn vị nhiệt độ
+ Độ C
+ Độ F
+ thời tiết
+ Hiển thị thời tiết
+ Hiển thị nhiệt độ hiện tại trên thanh trạng tháiỨng dụng toàn màn hìnhBuộc ứng dụng cũ sử dụng tỷ lệ cỡ ảnh toàn màn hìnhKhông có ứng dụng
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 9a2f53c6ef1db830e4358830320f51cd9dbc8d75..e980e4595cda7c7758b6733a236197cecfa8b0f4 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -441,6 +441,20 @@
90 度180 度270 度
+ 天气
+ 没有安装天气提供商服务
+ 安装天气提供商以接收天气更新
+ 提供商设置
+ 无法为此提供商启动设置菜单
+ 添加天气提供商
+ 常规
+ 提供商
+ 温度单位
+ 摄氏
+ 华氏
+ 天气
+ 显示天气
+ 在状态栏上显示当前气温全屏应用强制旧式应用程序使用全屏长宽比无应用
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 303afd1d5ad6cd395970d278dacd7ca2e31fd171..f53069db61a5c34489a9e308ec6139f915277579 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -426,6 +426,20 @@
90 度180 度270 度
+ 天氣
+ 沒有安裝任何天氣服務
+ 安裝天氣服務即可接收天氣更新
+ 服務選項
+ 無法為此天氣服務啟動設定選單
+ 新增天氣服務
+ 一般
+ 天氣服務
+ 溫度單位
+ 攝氏
+ 華氏
+ 天氣
+ 顯示天氣資訊
+ 在狀態列上顯示目前溫度全螢幕應用程式強制舊型應用程式使用全螢幕的比例沒有應用程式
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 9f4c965c77feab8789fbe6d8e2ed35c8103c47f7..6fc7fa72fbd62b64256ddf7ee04114404e87ad83 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -62,7 +62,6 @@
@string/hardware_keys_action_launch_camera@string/hardware_keys_action_sleep@string/hardware_keys_action_last_app
- @string/hardware_keys_action_split_screen@string/hardware_keys_action_kill_app
@@ -76,7 +75,6 @@
678
- 910
@@ -281,6 +279,17 @@
2
+
+
+ @string/weather_settings_temp_celsius
+ @string/weather_settings_temp_fahrenheit
+
+
+
+ 1
+ 2
+
+
@string/touchscreen_gesture_action_do_nothing
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 28335c3d3b69542a928c33c74c070e6d63d914af..66e5a0a5993c63b99dba034ae4ba03c0a89f776e 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -19,6 +19,8 @@
#ff5252
+ #B4B9BA
+
#36B37E#FFAB00
diff --git a/res/values/config.xml b/res/values/config.xml
index a3ee4370584d21e56d7f125c8dbc0f44eee202f8..eed044a3bb0f9ebb4c07449da21004a899c84d80 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -17,8 +17,8 @@
-
- https://stats.lineageos.org/api/v1/stats
+
+ true
-
- LineageOS statistics
- Help make LineageOS better by opting into anonymous statistics reporting
- About
- Opting into LineageOS Statistics will allow non-personal data to be submitted to the
- developers of LineageOS to track unique installations across devices. The information submitted includes an unique identifier,
- which does not compromise your privacy or personal data. The data is submitted during each boot.\n\nFor an example of the data that is submitted, tap on Preview Data.
- Enable reporting
- Preview data
- View stats
- Learn more
-
-
- Unique ID
- Device
- Version
- Country
- Carrier
- Stats collection
- Allow installation metrics and device statistics to be collected
-
Auto-rotate screenRotation settings
@@ -568,6 +546,23 @@
180 degrees270 degrees
+
+ Weather
+ No weather provider services installed
+ Install a weather provider to receive weather updates
+ Provider settings
+ Unable to launch the settings menu of this provider
+ Add weather provider
+ https://download.lineageos.org/extras
+ General
+ Providers
+ Temperature unit
+ Celsius
+ Fahrenheit
+ weather
+ Show weather
+ Display the current temperature on the status bar
+
Full screen appsForce legacy apps to use full screen aspect ratio
@@ -651,6 +646,7 @@
Out of dateSecurity patches are released monthly by Google in cooperation with SoC vendors to address flaws which could be exploited by malicious apps to bypass security restrictions and cause permanent damage to your device. Patches made available by Google are applied every month on all supported devices, but patches to proprietary code can only be applied by your device\'s manufacturer. To keep your device safe make sure your LineageOS build is always up-to-date, and (if applicable) ensure your vendor image is updated to the latest one recommended by LineageOS.
+ Security patches are released monthly by Google in cooperation with SoC vendors to address flaws which could be exploited by malicious apps to bypass security restrictions and cause permanent damage to your device. Patches made available by Google are applied every month on all supported devices, but patches to proprietary code can only be applied by your device\'s manufacturer. To keep your device safe make sure your /e/ OS build is always up-to-date, and (if applicable) ensure your vendor image is updated to the latest one recommended by /e/ OS.EncryptionEnabledNeeds a secure lock screen
@@ -676,4 +672,17 @@
Apps can send %s messages in 1 minute before requiring confirmationApps are not allowed to send any messages without confirmationAlways confirm
+
+
+
+
+ /e/ contributors
+ /e/ supporters
+ LineageOS contributors
+
+
+ microG
+
+
+ OpenKeychain
diff --git a/res/values/styles.xml b/res/values/styles.xml
index aaf7bdfa68cd7dc5cf8619516aa1f6afbbb0ffaa..33aec0e6c0364654d448dbdd8c26d1973460de56 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -42,7 +42,7 @@
diff --git a/res/xml/contributors.xml b/res/xml/contributors.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ba2581fdebf49295b35a0fae662fe0d223a908b3
--- /dev/null
+++ b/res/xml/contributors.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/xml/contributors_cloud.xml b/res/xml/microg_settings.xml
similarity index 82%
rename from res/xml/contributors_cloud.xml
rename to res/xml/microg_settings.xml
index 2e83511e417a66f9d9be8525be6c2769a7c384f3..57a51ee54efa91e036dbe73c4625796efd756e03 100644
--- a/res/xml/contributors_cloud.xml
+++ b/res/xml/microg_settings.xml
@@ -1,12 +1,10 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/res/xml/trust_preferences.xml b/res/xml/trust_preferences.xml
index 7cebff4a87ef740bb58adbf40c7fe90c198bdc02..3b890304974408565ea0ff8d307f0859b60280dd 100644
--- a/res/xml/trust_preferences.xml
+++ b/res/xml/trust_preferences.xml
@@ -47,9 +47,6 @@
android:entryValues="@array/trust_restrict_usb_values"
android:defaultValue="0" />
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/org/lineageos/lineageparts/BootReceiver.java b/src/org/lineageos/lineageparts/BootReceiver.java
index 6b0ab872939e61143ad7c7088a071baa397276d1..b8d62bcb911605073f51ef87a299792291ebfc2a 100644
--- a/src/org/lineageos/lineageparts/BootReceiver.java
+++ b/src/org/lineageos/lineageparts/BootReceiver.java
@@ -41,6 +41,7 @@ public class BootReceiver extends BroadcastReceiver {
setRestoredTunable(ctx);
}
+ ButtonSettings.setLongPressActionToNothing(ctx);
ButtonSettings.restoreKeySwapper(ctx);
TouchscreenGestureSettings.restoreTouchscreenGestureStates(ctx);
diff --git a/src/org/lineageos/lineageparts/contributors/ContributorsSettings.java b/src/org/lineageos/lineageparts/contributors/ContributorsSettings.java
new file mode 100644
index 0000000000000000000000000000000000000000..abf20072c6a524b6c33dc31e0cb448cb8b5376c0
--- /dev/null
+++ b/src/org/lineageos/lineageparts/contributors/ContributorsSettings.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2022 /e/ Foundation
+ *
+ * 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.
+ */
+
+package org.lineageos.lineageparts.contributors;
+
+import android.os.Bundle;
+
+import org.lineageos.lineageparts.R;
+import org.lineageos.lineageparts.SettingsPreferenceFragment;
+
+public class ContributorsSettings extends SettingsPreferenceFragment {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.contributors);
+ }
+}
diff --git a/src/org/lineageos/lineageparts/input/ButtonSettings.java b/src/org/lineageos/lineageparts/input/ButtonSettings.java
index a6fa54f45a9222d17afc4b939d5d0e99adf6d20a..6f3af12c6d9927d4b218e9fbddeebb14b0ac954c 100644
--- a/src/org/lineageos/lineageparts/input/ButtonSettings.java
+++ b/src/org/lineageos/lineageparts/input/ButtonSettings.java
@@ -840,6 +840,18 @@ public class ButtonSettings extends SettingsPreferenceFragment
preferences.getBoolean(KEY_SWAP_CAPACITIVE_KEYS, false));
}
+ public static void setLongPressActionToNothing(Context context) {
+ final int action = LineageSettings.System.getIntForUser(context.getContentResolver(),
+ LineageSettings.System.KEY_APP_SWITCH_LONG_PRESS_ACTION, context.getResources().getInteger(
+ org.lineageos.platform.internal.R.integer.config_longPressOnAppSwitchBehavior),
+ UserHandle.USER_CURRENT);
+
+ if (action == Action.SPLIT_SCREEN.ordinal()) {
+ LineageSettings.System.putInt(context.getContentResolver(),
+ LineageSettings.System.KEY_APP_SWITCH_LONG_PRESS_ACTION, Action.NOTHING.ordinal());
+ }
+ }
+
@Override
public boolean onPreferenceTreeClick(Preference preference) {
if (preference == mSwapVolumeButtons) {
diff --git a/src/org/lineageos/lineageparts/lineagestats/AnonymousStats.java b/src/org/lineageos/lineageparts/lineagestats/AnonymousStats.java
deleted file mode 100644
index 114872facc94bbfb4b84c1dafab84e83827db8ea..0000000000000000000000000000000000000000
--- a/src/org/lineageos/lineageparts/lineagestats/AnonymousStats.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2015 The CyanogenMod Project
- * Copyright (C) 2022 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.
- */
-
-package org.lineageos.lineageparts.lineagestats;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.os.Bundle;
-
-import org.lineageos.lineageparts.R;
-import org.lineageos.lineageparts.SettingsPreferenceFragment;
-
-public class AnonymousStats extends SettingsPreferenceFragment {
-
- private static final String PREF_FILE_NAME = "LineageStats";
- static final String ANONYMOUS_OPT_IN = "pref_anonymous_opt_in";
- static final String ANONYMOUS_LAST_CHECKED = "pref_anonymous_checked_in";
-
- static final String KEY_LAST_JOB_ID = "last_job_id";
- static final int QUEUE_MAX_THRESHOLD = 1000;
-
- public static SharedPreferences getPreferences(Context context) {
- return context.getSharedPreferences(PREF_FILE_NAME, 0);
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.anonymous_stats);
- }
-
- public static void updateLastSynced(Context context) {
- getPreferences(context)
- .edit()
- .putLong(ANONYMOUS_LAST_CHECKED,System.currentTimeMillis())
- .commit();
- }
-
- public static int getLastJobId(Context context) {
- return getPreferences(context).getInt(KEY_LAST_JOB_ID, 0);
- }
-
- private static void setLastJobId(Context context, int id) {
- getPreferences(context)
- .edit()
- .putInt(KEY_LAST_JOB_ID, id)
- .commit();
- }
-
- public static int getNextJobId(Context context) {
- int lastId = getLastJobId(context);
- if (lastId >= QUEUE_MAX_THRESHOLD) {
- lastId = 1;
- } else {
- lastId += 1;
- }
- setLastJobId(context, lastId);
- return lastId;
- }
-}
diff --git a/src/org/lineageos/lineageparts/lineagestats/PreviewData.java b/src/org/lineageos/lineageparts/lineagestats/PreviewData.java
deleted file mode 100644
index d0c3aa2d9115711996d31639bfd01d55b9273d14..0000000000000000000000000000000000000000
--- a/src/org/lineageos/lineageparts/lineagestats/PreviewData.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2012 The CyanogenMod Project
- * 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.
- */
-
-package org.lineageos.lineageparts.lineagestats;
-
-import android.content.Context;
-import android.os.Bundle;
-
-import androidx.preference.PreferenceScreen;
-
-import org.lineageos.lineageparts.R;
-import org.lineageos.lineageparts.SettingsPreferenceFragment;
-
-public class PreviewData extends SettingsPreferenceFragment {
- private static final String UNIQUE_ID = "preview_id";
- private static final String DEVICE = "preview_device";
- private static final String VERSION = "preview_version";
- private static final String COUNTRY = "preview_country";
- private static final String CARRIER = "preview_carrier";
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- addPreferencesFromResource(R.xml.preview_data);
-
- final PreferenceScreen prefSet = getPreferenceScreen();
- final Context context = getActivity();
-
- prefSet.findPreference(UNIQUE_ID).setSummary(Utilities.getUniqueID(context));
- prefSet.findPreference(DEVICE).setSummary(Utilities.getDevice());
- prefSet.findPreference(VERSION).setSummary(Utilities.getModVersion());
- prefSet.findPreference(COUNTRY).setSummary(Utilities.getCountryCode(context));
- prefSet.findPreference(CARRIER).setSummary(Utilities.getCarrier(context));
- }
-}
diff --git a/src/org/lineageos/lineageparts/lineagestats/ReportingService.java b/src/org/lineageos/lineageparts/lineagestats/ReportingService.java
deleted file mode 100644
index 44279b3c315e10714f7414b508250b7e33cb2d41..0000000000000000000000000000000000000000
--- a/src/org/lineageos/lineageparts/lineagestats/ReportingService.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2015 The CyanogenMod Project
- * 2017-2022 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.
- */
-
-package org.lineageos.lineageparts.lineagestats;
-
-import android.app.IntentService;
-import android.app.job.JobInfo;
-import android.app.job.JobScheduler;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.os.PersistableBundle;
-import android.util.Log;
-
-public class ReportingService extends IntentService {
- /* package */ static final String TAG = "LineageStats";
- private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
-
- public ReportingService() {
- super(ReportingService.class.getSimpleName());
- }
-
- @Override
- protected void onHandleIntent(Intent intent) {
- JobScheduler js = getSystemService(JobScheduler.class);
-
- Context context = getApplicationContext();
-
- String deviceId = Utilities.getUniqueID(context);
- String deviceName = Utilities.getDevice();
- String deviceVersion = Utilities.getModVersion();
- String deviceCountry = Utilities.getCountryCode(context);
- String deviceCarrier = Utilities.getCarrier(context);
- String deviceCarrierId = Utilities.getCarrierId(context);
-
- final int lineageOldJobId = AnonymousStats.getLastJobId(context);
- final int lineageOrgJobId = AnonymousStats.getNextJobId(context);
-
- if (DEBUG) Log.d(TAG, "scheduling job id: " + lineageOrgJobId);
-
- PersistableBundle lineageBundle = new PersistableBundle();
- lineageBundle.putString(StatsUploadJobService.KEY_DEVICE_NAME, deviceName);
- lineageBundle.putString(StatsUploadJobService.KEY_UNIQUE_ID, deviceId);
- lineageBundle.putString(StatsUploadJobService.KEY_VERSION, deviceVersion);
- lineageBundle.putString(StatsUploadJobService.KEY_COUNTRY, deviceCountry);
- lineageBundle.putString(StatsUploadJobService.KEY_CARRIER, deviceCarrier);
- lineageBundle.putString(StatsUploadJobService.KEY_CARRIER_ID, deviceCarrierId);
- lineageBundle.putLong(StatsUploadJobService.KEY_TIMESTAMP, System.currentTimeMillis());
-
- // set job types
- lineageBundle.putInt(StatsUploadJobService.KEY_JOB_TYPE,
- StatsUploadJobService.JOB_TYPE_LINEAGEORG);
-
- // schedule lineage stats upload
- js.schedule(new JobInfo.Builder(lineageOrgJobId, new ComponentName(getPackageName(),
- StatsUploadJobService.class.getName()))
- .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
- .setMinimumLatency(1000)
- .setExtras(lineageBundle)
- .setPersisted(true)
- .build());
-
- // cancel old job in case it didn't run yet
- js.cancel(lineageOldJobId);
-
- // reschedule
- AnonymousStats.updateLastSynced(this);
- ReportingServiceManager.setAlarm(this);
- }
-}
diff --git a/src/org/lineageos/lineageparts/lineagestats/ReportingServiceManager.java b/src/org/lineageos/lineageparts/lineagestats/ReportingServiceManager.java
deleted file mode 100644
index 6faeb8979ba6f0dd1ca342e565b24407ccb1b253..0000000000000000000000000000000000000000
--- a/src/org/lineageos/lineageparts/lineagestats/ReportingServiceManager.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 2012 The CyanogenMod Project
- * 2017,2020-2021 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.
- */
-
-package org.lineageos.lineageparts.lineagestats;
-
-import android.app.AlarmManager;
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.os.UserHandle;
-import android.util.Log;
-
-public class ReportingServiceManager extends BroadcastReceiver {
- private static final long MILLIS_PER_HOUR = 60L * 60L * 1000L;
- private static final long MILLIS_PER_DAY = 24L * MILLIS_PER_HOUR;
- private static final long UPDATE_INTERVAL = 1L * MILLIS_PER_DAY;
-
- private static final String TAG = ReportingServiceManager.class.getSimpleName();
-
- public static final String ACTION_LAUNCH_SERVICE =
- "org.lineageos.lineageparts.action.TRIGGER_REPORT_METRICS";
- public static final String EXTRA_FORCE = "force";
-
- @Override
- public void onReceive(Context context, Intent intent) {
- if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
- setAlarm(context);
- } else if (intent.getAction().equals(ACTION_LAUNCH_SERVICE)){
- launchService(context, intent.getBooleanExtra(EXTRA_FORCE, false));
- }
- }
-
- public static void setAlarm(Context context) {
- SharedPreferences prefs = AnonymousStats.getPreferences(context);
- if (prefs.contains(AnonymousStats.ANONYMOUS_OPT_IN)) {
- migrate(context, prefs);
- }
- if (!Utilities.isStatsCollectionEnabled(context)) {
- return;
- }
- long lastSynced = prefs.getLong(AnonymousStats.ANONYMOUS_LAST_CHECKED, 0);
- if (lastSynced == 0) {
- launchService(context, true); // service will reschedule the next alarm
- return;
- }
- long millisFromNow = (lastSynced + UPDATE_INTERVAL) - System.currentTimeMillis();
-
- Intent intent = new Intent(ACTION_LAUNCH_SERVICE);
- intent.setClass(context, ReportingServiceManager.class);
-
- AlarmManager alarmManager = context.getSystemService(AlarmManager.class);
- alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + millisFromNow,
- PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE));
- Log.d(TAG, "Next sync attempt in : "
- + (millisFromNow / MILLIS_PER_HOUR) + " hours");
- }
-
- public static void launchService(Context context, boolean force) {
- SharedPreferences prefs = AnonymousStats.getPreferences(context);
-
- if (!Utilities.isStatsCollectionEnabled(context)) {
- return;
- }
-
- if (!force) {
- long lastSynced = prefs.getLong(AnonymousStats.ANONYMOUS_LAST_CHECKED, 0);
- if (lastSynced == 0) {
- setAlarm(context);
- return;
- }
- long timeElapsed = System.currentTimeMillis() - lastSynced;
- if (timeElapsed < UPDATE_INTERVAL) {
- long timeLeft = UPDATE_INTERVAL - timeElapsed;
- Log.d(TAG, "Waiting for next sync : "
- + timeLeft / MILLIS_PER_HOUR + " hours");
- return;
- }
- }
-
- Intent intent = new Intent();
- intent.setClass(context, ReportingService.class);
- context.startServiceAsUser(intent, UserHandle.OWNER);
- }
-
- private static void migrate(Context context, SharedPreferences prefs) {
- Utilities.setStatsCollectionEnabled(context,
- prefs.getBoolean(AnonymousStats.ANONYMOUS_OPT_IN, true));
- prefs.edit().remove(AnonymousStats.ANONYMOUS_OPT_IN).commit();
- }
-
-}
diff --git a/src/org/lineageos/lineageparts/lineagestats/StatsUploadJobService.java b/src/org/lineageos/lineageparts/lineagestats/StatsUploadJobService.java
deleted file mode 100644
index bfe741373f136e3b704bec472e6a216cb2e4cfbf..0000000000000000000000000000000000000000
--- a/src/org/lineageos/lineageparts/lineagestats/StatsUploadJobService.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright (C) 2015 The CyanogenMod Project
- * 2017-2022 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.
- */
-
-package org.lineageos.lineageparts.lineagestats;
-
-import android.app.job.JobParameters;
-import android.app.job.JobService;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.PersistableBundle;
-import android.util.ArrayMap;
-import android.util.Log;
-import org.lineageos.lineageparts.R;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.nio.charset.StandardCharsets;
-import java.util.Collections;
-import java.util.Map;
-
-public class StatsUploadJobService extends JobService {
-
- private static final String TAG = StatsUploadJobService.class.getSimpleName();
- private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
-
- public static final String KEY_JOB_TYPE = "job_type";
- public static final int JOB_TYPE_LINEAGEORG = 1;
-
- public static final String KEY_UNIQUE_ID = "uniqueId";
- public static final String KEY_DEVICE_NAME = "deviceName";
- public static final String KEY_VERSION = "version";
- public static final String KEY_COUNTRY = "country";
- public static final String KEY_CARRIER = "carrier";
- public static final String KEY_CARRIER_ID = "carrierId";
- public static final String KEY_TIMESTAMP = "timeStamp";
-
- private final Map mCurrentJobs
- = Collections.synchronizedMap(new ArrayMap());
-
- @Override
- public boolean onStartJob(JobParameters jobParameters) {
- if (DEBUG)
- Log.d(TAG, "onStartJob() called with " + "jobParameters = [" + jobParameters + "]");
-
- if (!Utilities.isStatsCollectionEnabled(this)) {
- return false;
- }
-
- final StatsUploadTask uploadTask = new StatsUploadTask(jobParameters);
- mCurrentJobs.put(jobParameters, uploadTask);
- uploadTask.execute((Void) null);
- return true;
- }
-
- @Override
- public boolean onStopJob(JobParameters jobParameters) {
- if (DEBUG)
- Log.d(TAG, "onStopJob() called with " + "jobParameters = [" + jobParameters + "]");
-
- final StatsUploadTask cancelledJob;
- cancelledJob = mCurrentJobs.remove(jobParameters);
-
- if (cancelledJob != null) {
- // cancel the ongoing background task
- cancelledJob.cancel(true);
- return true; // reschedule
- }
-
- return false;
- }
-
- private class StatsUploadTask extends AsyncTask {
-
- private final JobParameters mJobParams;
-
- public StatsUploadTask(JobParameters jobParams) {
- this.mJobParams = jobParams;
- }
-
- @Override
- protected Boolean doInBackground(Void... params) {
-
- PersistableBundle extras = mJobParams.getExtras();
-
- String deviceId = extras.getString(KEY_UNIQUE_ID);
- String deviceName = extras.getString(KEY_DEVICE_NAME);
- String deviceVersion = extras.getString(KEY_VERSION);
- String deviceCountry = extras.getString(KEY_COUNTRY);
- String deviceCarrier = extras.getString(KEY_CARRIER);
- String deviceCarrierId = extras.getString(KEY_CARRIER_ID);
-
- boolean success = false;
- int jobType = extras.getInt(KEY_JOB_TYPE, -1);
- if (!isCancelled()) {
- switch (jobType) {
- case JOB_TYPE_LINEAGEORG:
- try {
- JSONObject json = buildStatsRequest(deviceId, deviceName,
- deviceVersion, deviceCountry, deviceCarrier, deviceCarrierId);
- success = uploadToLineage(json);
- } catch (IOException | JSONException e) {
- Log.e(TAG, "Could not upload stats checkin to community server", e);
- success = false;
- }
- break;
- }
- }
- if (DEBUG)
- Log.d(TAG, "job id " + mJobParams.getJobId() + ", has finished with success="
- + success);
- return success;
- }
-
- @Override
- protected void onPostExecute(Boolean success) {
- mCurrentJobs.remove(mJobParams);
- jobFinished(mJobParams, !success);
- }
- }
-
- private JSONObject buildStatsRequest(String deviceId, String deviceName, String deviceVersion,
- String deviceCountry, String deviceCarrier,
- String deviceCarrierId) throws JSONException {
- JSONObject request = new JSONObject();
- request.put("device_hash", deviceId);
- request.put("device_name", deviceName);
- request.put("device_version", deviceVersion);
- request.put("device_country", deviceCountry);
- request.put("device_carrier", deviceCarrier);
- request.put("device_carrier_id", deviceCarrierId);
- return request;
- }
-
- private boolean uploadToLineage(JSONObject json) throws IOException {
- final Uri uri = Uri.parse(getString(R.string.stats_lineage_url));
- URL url = new URL(uri.toString());
- HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
- try {
- urlConnection.setInstanceFollowRedirects(true);
- urlConnection.setDoOutput(true);
- urlConnection.setDoInput(true);
- urlConnection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
-
- OutputStream os = urlConnection.getOutputStream();
- os.write(json.toString().getBytes(StandardCharsets.UTF_8));
- os.close();
-
- final int responseCode = urlConnection.getResponseCode();
- if (DEBUG) Log.d(TAG, "lineage server response code=" + responseCode);
- final boolean success = responseCode == HttpURLConnection.HTTP_OK;
- if (!success) {
- Log.w(TAG, "failed sending, server returned: " + getResponse(urlConnection));
- }
- return success;
- } finally {
- urlConnection.disconnect();
- }
-
- }
-
- private String getResponse(HttpURLConnection httpUrlConnection)
- throws IOException {
- InputStream responseStream = new BufferedInputStream(httpUrlConnection.getErrorStream());
-
- BufferedReader responseStreamReader = new BufferedReader(
- new InputStreamReader(responseStream));
- String line = "";
- StringBuilder stringBuilder = new StringBuilder();
- while ((line = responseStreamReader.readLine()) != null) {
- stringBuilder.append(line).append("\n");
- }
- responseStreamReader.close();
- responseStream.close();
-
- return stringBuilder.toString();
- }
-
-}
diff --git a/src/org/lineageos/lineageparts/lineagestats/Utilities.java b/src/org/lineageos/lineageparts/lineagestats/Utilities.java
deleted file mode 100644
index 9757367adbd879c73ab04633929e09ec309f7110..0000000000000000000000000000000000000000
--- a/src/org/lineageos/lineageparts/lineagestats/Utilities.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) 2012 The CyanogenMod Project
- * Copyright (C) 2021-2022 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.
- */
-
-package org.lineageos.lineageparts.lineagestats;
-
-import android.content.Context;
-import android.os.Build;
-import android.os.SystemProperties;
-import android.provider.Settings;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-
-import lineageos.providers.LineageSettings;
-
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.util.Locale;
-
-public class Utilities {
- public static String getUniqueID(Context context) {
- final String id = Settings.Secure.getString(context.getContentResolver(),
- Settings.Secure.ANDROID_ID);
- return digest(context.getPackageName() + id);
- }
-
- public static String getCarrier(Context context) {
- TelephonyManager tm = context.getSystemService(TelephonyManager.class);
- String carrier = tm.getNetworkOperatorName();
- if (TextUtils.isEmpty(carrier)) {
- String simOperator = tm.getSimOperatorName();
- if (!TextUtils.isEmpty(simOperator)) {
- carrier = simOperator;
- } else {
- carrier = "Unknown";
- }
- }
- return carrier;
- }
-
- public static String getCarrierId(Context context) {
- TelephonyManager tm = context.getSystemService(TelephonyManager.class);
- String carrierId = tm.getNetworkOperator();
- if (TextUtils.isEmpty(carrierId)) {
- carrierId = "0";
- }
- return carrierId;
- }
-
- public static String getCountryCode(Context context) {
- TelephonyManager tm = context.getSystemService(TelephonyManager.class);
- String countryCode = tm.getNetworkCountryIso().toUpperCase();
- if (TextUtils.isEmpty(countryCode) || isCdmaPhone(tm)) {
- String localeCountryCode = Locale.getDefault().getCountry();
- if (localeCountryCode.length() == 2) {
- countryCode = localeCountryCode;
- } else {
- countryCode = "Unknown";
- }
- }
- return countryCode;
- }
-
- public static String getDevice() {
- return SystemProperties.get("ro.lineage.device", Build.PRODUCT);
- }
-
- public static String getModVersion() {
- return SystemProperties.get("ro.lineage.version", Build.DISPLAY);
- }
-
- public static String digest(String input) {
- try {
- MessageDigest md = MessageDigest.getInstance("SHA-256");
- return new BigInteger(1, md.digest(input.getBytes())).toString(16).toUpperCase();
- } catch (Exception e) {
- return null;
- }
- }
-
- /**
- * Check to see if global stats are enabled.
- * @return Whether or not stats collection is enabled.
- */
- public static boolean isStatsCollectionEnabled(Context context) {
- return LineageSettings.Secure.getInt(context.getContentResolver(),
- LineageSettings.Secure.STATS_COLLECTION, 1) != 0;
- }
-
- /**
- * Enabled or disable stats collection
- * @param enabled Boolean that sets collection being enabled.
- */
- public static void setStatsCollectionEnabled(Context context, boolean enabled) {
- int enable = (enabled) ? 1 : 0;
- LineageSettings.Secure.putInt(context.getContentResolver(),
- LineageSettings.Secure.STATS_COLLECTION, enable);
- }
-
- private static boolean isCdmaPhone(TelephonyManager tm) {
- return tm != null && tm.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA;
- }
-}
diff --git a/src/org/lineageos/lineageparts/microg/MicrogSettings.java b/src/org/lineageos/lineageparts/microg/MicrogSettings.java
new file mode 100644
index 0000000000000000000000000000000000000000..3862ba55d2c205d5e19ef0cad368fc749ea3d1c9
--- /dev/null
+++ b/src/org/lineageos/lineageparts/microg/MicrogSettings.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2022 /e/ foundation
+ *
+ * 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.
+ */
+
+package org.lineageos.lineageparts.microg;
+
+import android.app.Activity;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.os.Bundle;
+
+import org.lineageos.lineageparts.R;
+import org.lineageos.lineageparts.SettingsPreferenceFragment;
+
+public class MicrogSettings extends SettingsPreferenceFragment {
+
+ private static final String MICROG_PACKAGE_NAME = "com.google.android.gms";
+ private static final String MICROG_ACTIVITY_NAME = "org.microg.gms.ui.SettingsActivity";
+
+ @Override
+ public void onCreate(Bundle savedInstance) {
+ super.onCreate(savedInstance);
+
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.setComponent(new ComponentName(MICROG_PACKAGE_NAME, MICROG_ACTIVITY_NAME));
+ startActivity(intent);
+
+ Activity activity = getActivity();
+ if (activity != null) {
+ activity.finish();
+ }
+ }
+}
diff --git a/src/org/lineageos/lineageparts/openkeychain/OpenKeychainSettings.java b/src/org/lineageos/lineageparts/openkeychain/OpenKeychainSettings.java
new file mode 100644
index 0000000000000000000000000000000000000000..0990a7a1b6d7f5db1952abf7e019ca58b66db632
--- /dev/null
+++ b/src/org/lineageos/lineageparts/openkeychain/OpenKeychainSettings.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2022 /e/ foundation
+ *
+ * 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.
+ */
+
+package org.lineageos.lineageparts.openkeychain;
+
+import android.app.Activity;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.os.Bundle;
+
+import org.lineageos.lineageparts.R;
+import org.lineageos.lineageparts.SettingsPreferenceFragment;
+
+public class OpenKeychainSettings extends SettingsPreferenceFragment {
+
+ private static final String OPENKEYCHAIN_PACKAGE_NAME = "org.sufficientlysecure.keychain";
+ private static final String OPENKEYCHAIN_ACTIVITY_NAME = "org.sufficientlysecure.keychain.ui.MainActivity";
+
+ @Override
+ public void onCreate(Bundle savedInstance) {
+ super.onCreate(savedInstance);
+
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.setComponent(new ComponentName(OPENKEYCHAIN_PACKAGE_NAME, OPENKEYCHAIN_ACTIVITY_NAME));
+ startActivity(intent);
+
+ Activity activity = getActivity();
+ if (activity != null) {
+ activity.finish();
+ }
+ }
+}
diff --git a/src/org/lineageos/lineageparts/trust/TrustPreferences.java b/src/org/lineageos/lineageparts/trust/TrustPreferences.java
index a38b395bc0bcd7c7f7a7b1aa7ec63f23c5273d46..f889ee3a79e85226b18db92a8c5c703a7e00ffdc 100644
--- a/src/org/lineageos/lineageparts/trust/TrustPreferences.java
+++ b/src/org/lineageos/lineageparts/trust/TrustPreferences.java
@@ -71,7 +71,7 @@ public class TrustPreferences extends SettingsPreferenceFragment {
mSELinuxPref.setOnPreferenceClickListener(p ->
showInfo(R.string.trust_feature_selinux_explain));
mSecurityPatchesPref.setOnPreferenceClickListener(p ->
- showInfo(R.string.trust_feature_security_patches_explain));
+ showInfo(R.string.trust_feature_security_patches_explain_e));
mEncryptionPref.setOnPreferenceClickListener(p ->
showInfo(R.string.trust_feature_encryption_explain));
mSmsLimitPref.setOnPreferenceChangeListener((p, v) ->
diff --git a/src/org/lineageos/lineageparts/weather/WeatherServiceSettings.java b/src/org/lineageos/lineageparts/weather/WeatherServiceSettings.java
new file mode 100644
index 0000000000000000000000000000000000000000..07f40dd35690733cf236082c0bee00c617e3a43b
--- /dev/null
+++ b/src/org/lineageos/lineageparts/weather/WeatherServiceSettings.java
@@ -0,0 +1,482 @@
+/*
+ * Copyright (C) 2016 The CyanogenMod Project
+ * Copyright (C) 2019 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.
+ */
+
+package org.lineageos.lineageparts.weather;
+
+import android.app.Activity;
+import android.content.ActivityNotFoundException;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.UserHandle;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.util.Xml;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.RadioButton;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.preference.ListPreference;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceScreen;
+import androidx.preference.PreferenceViewHolder;
+
+import com.android.internal.content.PackageMonitor;
+import com.android.internal.os.BackgroundThread;
+
+import org.lineageos.lineageparts.R;
+import org.lineageos.lineageparts.SettingsPreferenceFragment;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+import lineageos.providers.LineageSettings;
+import lineageos.providers.WeatherContract;
+import lineageos.weatherservice.WeatherProviderService;
+
+public class WeatherServiceSettings extends SettingsPreferenceFragment
+ implements Preference.OnPreferenceChangeListener {
+
+ private Context mContext;
+ private Handler mHandler;
+ private static final String TAG = WeatherServiceSettings.class.getSimpleName();
+
+ private static final String PREFERENCE_GENERAL = "weather_general_settings";
+ private static final String PREFERENCE_PROVIDERS = "weather_service_providers";
+ private static final String PREFERENCE_TEMP_UNIT = "weather_temperature_unit";
+
+ private static final float DISABLED_ALPHA = 0.4f;
+
+ private PreferenceCategory mGeneralSettingsCategory;
+ private PreferenceCategory mProvidersCategory;
+ private ListPreference mTemperatureUnit;
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ mContext = activity;
+ mHandler = new Handler(mContext.getMainLooper());
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ addPreferencesFromResource(R.xml.weather_settings);
+
+ final PreferenceScreen ps = getPreferenceScreen();
+ mGeneralSettingsCategory = ps.findPreference(PREFERENCE_GENERAL);
+ mProvidersCategory = ps.findPreference(PREFERENCE_PROVIDERS);
+ mTemperatureUnit = ps.findPreference(PREFERENCE_TEMP_UNIT);
+ mTemperatureUnit.setOnPreferenceChangeListener(this);
+
+ ps.removePreference(mGeneralSettingsCategory);
+ watch(LineageSettings.Secure.getUriFor(LineageSettings.Secure.WEATHER_PROVIDER_SERVICE));
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ updateAdapter();
+ registerPackageMonitor();
+
+ mTemperatureUnit.setValue(String.valueOf(getSelectedTemperatureUnit(mContext)));
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ unregisterPackageMonitor();
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ if (preference == mTemperatureUnit) {
+ LineageSettings.Global.putInt(mContext.getContentResolver(),
+ LineageSettings.Global.WEATHER_TEMPERATURE_UNIT,
+ Integer.valueOf((String) newValue));
+ }
+ return true;
+ }
+
+ private void registerPackageMonitor() {
+ mPackageMonitor.register(mContext, BackgroundThread.getHandler().getLooper(),
+ UserHandle.ALL, true);
+ }
+
+ private void launchGetWeatherProviders() {
+ startActivity(new Intent(Intent.ACTION_VIEW,
+ Uri.parse(getString(R.string.weather_settings_provider_url)))
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+ }
+
+ private void unregisterPackageMonitor() {
+ mPackageMonitor.unregister();
+ }
+
+ private PackageMonitor mPackageMonitor = new PackageMonitor() {
+ @Override
+ public void onPackageAdded(String packageName, int uid) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ updateAdapter();
+ }
+ });
+ }
+
+ @Override
+ public void onPackageRemoved(String packageName, int uid) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ updateAdapter();
+ }
+ });
+ }
+ };
+
+ private static List getInstalledServices(Context context) {
+ final PackageManager pm = context.getPackageManager();
+ final Intent intent = new Intent(WeatherProviderService.SERVICE_INTERFACE);
+ List resolveInfoList = pm.queryIntentServices(intent,
+ PackageManager.GET_SERVICES | PackageManager.GET_META_DATA);
+ List weatherProviderServiceInfos
+ = new ArrayList<>(resolveInfoList.size());
+ ComponentName activeService = getEnabledWeatherServiceProvider(context);
+ for (ResolveInfo resolveInfo : resolveInfoList) {
+ if (resolveInfo.serviceInfo == null) continue;
+
+ if (resolveInfo.serviceInfo.packageName == null
+ || resolveInfo.serviceInfo.name == null) {
+ //Really?
+ continue;
+ }
+
+ if (!resolveInfo.serviceInfo.permission.equals(
+ lineageos.platform.Manifest.permission.BIND_WEATHER_PROVIDER_SERVICE)) {
+ continue;
+ }
+ WeatherProviderServiceInfo serviceInfo = new WeatherProviderServiceInfo();
+ serviceInfo.componentName = new ComponentName(resolveInfo.serviceInfo.packageName,
+ resolveInfo.serviceInfo.name);
+ serviceInfo.isActive = serviceInfo.componentName.equals(activeService);
+ serviceInfo.caption = resolveInfo.loadLabel(pm);
+ serviceInfo.icon = resolveInfo.loadIcon(pm);
+ serviceInfo.settingsComponentName = getSettingsComponent(pm, resolveInfo);
+
+ weatherProviderServiceInfos.add(serviceInfo);
+ }
+ return weatherProviderServiceInfos;
+ }
+
+ private void updateAdapter() {
+ final List weatherProviderServiceInfos =
+ getInstalledServices(getContext());
+
+ final PreferenceScreen ps = getPreferenceScreen();
+ if (!weatherProviderServiceInfos.isEmpty()) {
+ if (ps.findPreference(PREFERENCE_PROVIDERS) == null) {
+ ps.addPreference(mProvidersCategory);
+ }
+
+ mProvidersCategory.removeAll();
+ for (WeatherProviderServiceInfo info : weatherProviderServiceInfos) {
+ mProvidersCategory.addPreference(new WeatherProviderPreference(mContext, info));
+ }
+
+ Preference addServicePreference = new Preference(mContext);
+ addServicePreference.setTitle(R.string.weather_settings_add_weather_provider);
+ addServicePreference.setIcon(R.drawable.ic_menu_add);
+ addServicePreference.setOnPreferenceClickListener(
+ new Preference.OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ launchGetWeatherProviders();
+ return false;
+ }
+ });
+ mProvidersCategory.addPreference(addServicePreference);
+
+ } else {
+ ps.removePreference(mProvidersCategory);
+ }
+
+ }
+
+ /**
+ * Gets the currently selected temperature unit.
+ * If none is selected yet, returns a unit appropriate for the current locale
+ */
+ public static int getSelectedTemperatureUnit(Context context) {
+ int tempUnit = LineageSettings.Global.getInt(context.getContentResolver(),
+ LineageSettings.Global.WEATHER_TEMPERATURE_UNIT, -1);
+ if (tempUnit != -1) {
+ return tempUnit;
+ }
+
+ Locale locale = context.getResources().getConfiguration().locale;
+ boolean useFahrenheit = locale.equals(Locale.US)
+ || locale.toString().equals("en_BS") // Bahamas
+ || locale.toString().equals("en_BZ") // Belize
+ || locale.toString().equals("en_KY"); // Cayman Islands
+ return useFahrenheit
+ ? WeatherContract.WeatherColumns.TempUnit.FAHRENHEIT
+ : WeatherContract.WeatherColumns.TempUnit.CELSIUS;
+ }
+
+ private class WeatherProviderPreference extends Preference {
+ private WeatherProviderServiceInfo mInfo;
+ private RadioButton mRadioButton;
+ private View mSettingsButton;
+ private Context mContext;
+
+ public WeatherProviderPreference(Context context, WeatherProviderServiceInfo info) {
+ super(context);
+ mInfo = info;
+ mContext = context;
+
+ setLayoutResource(R.layout.weather_service_provider_info_row);
+ setTitle(mInfo.caption);
+ setIcon(mInfo.icon);
+ }
+
+ @Override
+ public void onBindViewHolder(final PreferenceViewHolder holder) {
+ super.onBindViewHolder(holder);
+
+ mRadioButton = (RadioButton) holder.findViewById(R.id.radio);
+ mRadioButton.setChecked(mInfo.isActive);
+ mRadioButton.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ holder.itemView.onTouchEvent(event);
+ return false;
+ }
+ });
+
+ boolean showSettings = mInfo.settingsComponentName != null;
+ View settingsDivider = holder.findViewById(R.id.divider);
+ settingsDivider.setVisibility(showSettings ? View.VISIBLE : View.INVISIBLE);
+
+ mSettingsButton = holder.findViewById(R.id.settings);
+ mSettingsButton.setVisibility(showSettings ? View.VISIBLE : View.INVISIBLE);
+ mSettingsButton.setAlpha(mInfo.isActive ? 1f : DISABLED_ALPHA);
+ mSettingsButton.setEnabled(mInfo.isActive);
+ mSettingsButton.setFocusable(mInfo.isActive);
+ mSettingsButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ launchSettingsActivity(mInfo);
+ }
+ });
+ }
+
+ @Override
+ public void performClick() {
+ if (isActiveProvider()) {
+ return;
+ }
+ setActiveWeatherProviderService();
+ notifyChanged();
+ }
+
+ private boolean isActiveProvider() {
+ return mInfo.isActive;
+ }
+
+ public void setActiveState(boolean active) {
+ mInfo.isActive = active;
+ mRadioButton.setChecked(active);
+
+ boolean hasSettings = mInfo.settingsComponentName != null;
+ if (hasSettings) {
+ mSettingsButton.setAlpha(mInfo.isActive ? 1f : DISABLED_ALPHA);
+ mSettingsButton.setEnabled(mInfo.isActive);
+ mSettingsButton.setFocusable(mInfo.isActive);
+ }
+ }
+
+ private void launchSettingsActivity(WeatherProviderServiceInfo info) {
+ if (info != null && info.settingsComponentName != null) {
+ try {
+ mContext.startActivity(new Intent().setComponent(info.settingsComponentName));
+ } catch (ActivityNotFoundException e) {
+ Toast.makeText(mContext,
+ R.string.weather_settings_activity_not_found,
+ Toast.LENGTH_LONG)
+ .show();
+ Log.w(TAG, info.settingsComponentName + " not found");
+ }
+ }
+ }
+
+ private void setActiveWeatherProviderService() {
+ if (!mInfo.isActive) {
+ markAsActiveProvider();
+ mInfo.isActive = true;
+ LineageSettings.Secure.putString(mContext.getContentResolver(),
+ LineageSettings.Secure.WEATHER_PROVIDER_SERVICE,
+ mInfo.componentName.flattenToString());
+ }
+ }
+
+ private void markAsActiveProvider() {
+ // Check for current active provider
+ PreferenceCategory providersCategory = findPreferenceInHierarchy(
+ WeatherServiceSettings.PREFERENCE_PROVIDERS);
+ if (providersCategory != null) {
+ final int count = providersCategory.getPreferenceCount();
+ for (int index = 0; index < count; index++) {
+ Preference p = providersCategory.getPreference(index);
+ if (p instanceof WeatherProviderPreference) {
+ WeatherProviderPreference preference = (WeatherProviderPreference) p;
+ if (preference.isActiveProvider()) {
+ preference.setActiveState(false);
+ break;
+ }
+ }
+ }
+ }
+ // Mark this provider as active
+ setActiveState(true);
+ }
+ }
+
+ private static ComponentName getSettingsComponent(PackageManager pm, ResolveInfo resolveInfo) {
+ if (resolveInfo == null
+ || resolveInfo.serviceInfo == null
+ || resolveInfo.serviceInfo.metaData == null) {
+ return null;
+ }
+ String cn = null;
+ XmlResourceParser parser = null;
+ Exception caughtException = null;
+
+ try {
+ parser = resolveInfo.serviceInfo.loadXmlMetaData(pm,
+ WeatherProviderService.SERVICE_META_DATA);
+ if (parser == null) {
+ Log.w(TAG, "Can't find " + WeatherProviderService.SERVICE_META_DATA + " meta-data");
+ return null;
+ }
+ Resources res =
+ pm.getResourcesForApplication(resolveInfo.serviceInfo.applicationInfo);
+ AttributeSet attrs = Xml.asAttributeSet(parser);
+ int type;
+ while ((type=parser.next()) != XmlPullParser.END_DOCUMENT
+ && type != XmlPullParser.START_TAG) {
+ }
+ String nodeName = parser.getName();
+ if (!"weather-provider-service".equals(nodeName)) {
+ Log.w(TAG, "Meta-data does not start with weather-provider-service tag");
+ return null;
+ }
+ //Will use Dream styleable for now, it has the attribute we need
+ TypedArray sa = res.obtainAttributes(attrs, com.android.internal.R.styleable.Dream);
+ cn = sa.getString(com.android.internal.R.styleable.Dream_settingsActivity);
+ sa.recycle();
+ } catch (PackageManager.NameNotFoundException e) {
+ caughtException = e;
+ } catch (IOException e) {
+ caughtException = e;
+ } catch (XmlPullParserException e) {
+ caughtException = e;
+ } finally {
+ if (parser != null) parser.close();
+ }
+ if (caughtException != null) {
+ Log.w(TAG, "Error parsing : " + resolveInfo.serviceInfo.packageName,
+ caughtException);
+ return null;
+ }
+ if (cn != null && cn.indexOf('/') < 0) {
+ cn = resolveInfo.serviceInfo.packageName + "/" + cn;
+ }
+ return cn == null ? null : ComponentName.unflattenFromString(cn);
+ }
+
+ private static ComponentName getEnabledWeatherServiceProvider(Context context) {
+ String activeWeatherServiceProvider = LineageSettings.Secure.getString(
+ context.getContentResolver(), LineageSettings.Secure.WEATHER_PROVIDER_SERVICE);
+ if (activeWeatherServiceProvider == null) return null;
+ return ComponentName.unflattenFromString(activeWeatherServiceProvider);
+ }
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+
+ ViewGroup contentRoot = (ViewGroup) getListView().getParent();
+ View emptyView = getActivity().getLayoutInflater().inflate(
+ R.layout.empty_weather_state, contentRoot, false);
+ TextView emptyTextView = (TextView) emptyView.findViewById(R.id.message);
+ emptyTextView.setText(R.string.weather_settings_no_services_prompt);
+
+ Button addProviderButton = (Button) emptyView.findViewById(R.id.add_weather_provider);
+ addProviderButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ launchGetWeatherProviders();
+ }
+ });
+
+ contentRoot.addView(emptyView);
+ setEmptyView(emptyView);
+ }
+
+ private static class WeatherProviderServiceInfo {
+ CharSequence caption;
+ Drawable icon;
+ boolean isActive;
+ ComponentName componentName;
+ public ComponentName settingsComponentName;
+ }
+
+ public static final SummaryProvider SUMMARY_PROVIDER = new SummaryProvider() {
+ @Override
+ public String getSummary(Context context, String key) {
+ final List infos = getInstalledServices(context);
+ if (infos != null && infos.size() > 0) {
+ for (WeatherProviderServiceInfo info : infos) {
+ if (info.isActive) {
+ Log.d(TAG, "lineageparts: found active provider: " + info.caption);
+ return String.valueOf(info.caption);
+ }
+ }
+ }
+ return context.getString(R.string.weather_settings_no_services_summary);
+ }
+ };
+}