diff --git a/AndroidManifest.xml b/AndroidManifest.xml index e2bc3312652d4cb70176308e1584452344419812..78b6df7d63c9bb238266aa332dcaf46390a068cb 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -216,6 +216,56 @@ android:resource="@string/summary_empty" /> + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -268,28 +318,6 @@ android:resource="@string/summary_empty" /> - - - - - - - - - - - - diff --git a/proguard.flags b/proguard.flags index cfbdae392515331eb465e7d795950ad261cb5bb1..8991f2bb954ed51a1a5cdb30073dea02bfb38ea9 100644 --- a/proguard.flags +++ b/proguard.flags @@ -11,7 +11,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/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/values-de/e_strings.xml b/res/values-de/e_strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..0dd6a462930a433eca03fe3396de77c833b40c51 --- /dev/null +++ b/res/values-de/e_strings.xml @@ -0,0 +1,21 @@ + + + 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-fr/e_strings.xml b/res/values-fr/e_strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..508025f978d8f5c202ff24b77a1f94f9df3d8398 --- /dev/null +++ b/res/values-fr/e_strings.xml @@ -0,0 +1,20 @@ + + + + Contributeurs 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 /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. + \ No newline at end of file diff --git a/res/values-is/e_strings.xml b/res/values-is/e_strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..61a6b818def9da950ea8b942e13d60e8fde6be4c --- /dev/null +++ b/res/values-is/e_strings.xml @@ -0,0 +1,22 @@ + + + + Google gefur út öryggisplástra mánaðarlega í sambandi við SoC-öryggissérfræðinga til að bæta úr göllum, sem óvinveitt forrit gætu nýtt sér til að komast framhjá öryggistakmörkunum og þannig valdið alvarlegum skemmdum á kerfinu þínu. Öryggisplástrar Google eru settir inn í hverjum mánuði á öll studd tæki, en öryggisplástra á séreignakóða getur einungis framleiðandi tækisins sett inn. Til að halda tækinu þinu öruggu ættirðu að sjá til þess að útgáfa þín af /e/ OS sé ávallt af nýjustu gerð og (ef við á) tryggja að kerfisdiskmynd framleiðanda sé uppfærð í þá nýjustu sem /e/ OS mælir með. + Þátttakendur í /e/ + Stuðningsaðilar /e/ + Aðstandendur LineageOS + \ No newline at end of file diff --git a/res/values-ja/e_strings.xml b/res/values-ja/e_strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..5cc20f35e82edde6fb3fc9e4a26f5caf5ed157b9 --- /dev/null +++ b/res/values-ja/e_strings.xml @@ -0,0 +1,7 @@ + + + /e/ 貢献者 + セキュリティーパッチは、システム・オン・チップ(System On a Chip)のベンダーと協力して、Googleにより毎月リリースされます。これは悪意あるアプリが、セキュリティー上の制限を回避し、端末に永続的なダメージを与えようとして使用する可能性がある不具合を修正することを狙いとしています。パッチはGoogleにより、毎月、サポートされている全ての端末に対して提供されますが、プロプライエタリーなコードに関するパッチについては、あなたの端末の製造元しかこれを適用することができません。端末の安全性を維持するためには、あなたの/e/ OSを常に最新のバージョンに保ち、可能であれば、ベンダーイメージを/e/ OSの推奨する最新のバージョンにアップデートしてください。 + /e/ サポーター + LineageOSの貢献者 + \ No newline at end of file diff --git a/res/values-nl/e_strings.xml b/res/values-nl/e_strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4b17bf5419b7b5fb92355b018900e3c6b8068aba --- /dev/null +++ b/res/values-nl/e_strings.xml @@ -0,0 +1,22 @@ + + + + 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-ru/e_strings.xml b/res/values-ru/e_strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4a1363744102114bc90c9faf92a4d20b7710592f --- /dev/null +++ b/res/values-ru/e_strings.xml @@ -0,0 +1,22 @@ + + + + участники проекта /e/ + Исправления безопасности ежемесячно выпускаются Google в сотрудничестве с производителями SoC для устранения недостатков, которые могут быть использованы вредоносными приложениями для обхода ограничений безопасности и нанесения постоянного ущерба вашему устройству. Исправления, выпускаемые Google, применяются каждый месяц на всех поддерживаемых устройствах, но исправления для собственного кода могут быть применены только производителем вашего устройства. Для обеспечения безопасности вашего устройства убедитесь, что сборка /e/ OS всегда актуальна, и (если это применимо) убедитесь, что образ производителя обновлен до последней версии, рекомендованной /e/ OS. + Поддерживающие проект /e/ люди + Участники проекта LineageOS + \ No newline at end of file diff --git a/res/values-sv/e_strings.xml b/res/values-sv/e_strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4119df02d7817ada6de08d22ed09f48063fc9d2b --- /dev/null +++ b/res/values-sv/e_strings.xml @@ -0,0 +1,7 @@ + + + /e/ bidragsgivare + Säkerhetsprogramfixar släpps månadsvis av Google i samarbete med SoC-leverantörer för att adressera fel som kan utnyttjas av skadliga appar för att gå runt säkerhetsrestriktioner och göra permanent skada på din enhet. Programfixar som gjorts tillgängliga av Google appliceras varje månad på alla enheter som stöds. Programfixar för proprietär kod kan endast appliceras av din enhets tillverkare. Se till att ditt bygge av /e/ OS alltid är uppdaterat för att hålla din enhet säker, och (om möjligt) säkerställ att din leverantörsavbild är uppdaterad till den senaste avbilden som rekommenderas av /e/ OS. + LineageOS bidragsgivare + /e/ anhängare + \ No newline at end of file diff --git a/res/values-uk/e_strings.xml b/res/values-uk/e_strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..6d69fce869ca041ae342ea603e4465fa72de17be --- /dev/null +++ b/res/values-uk/e_strings.xml @@ -0,0 +1,7 @@ + + + Розробники /e/ + Google щомісяця випускає патчі безпеки у співпраці з виробниками SoC, щоб усунути недоліки, які можуть бути використані зловмисними застосунками для обходу обмежень безпеки та завдати незворотної шкоди вашому пристрою. Випущені Google виправлення встановлюються щомісяця на всіх підтримуваних пристроях, але виправлення для пропрієтарного коду можуть бути встановлені лише виробником вашого пристрою. Щоб захистити свій пристрій, переконайтеся, що ваша збірка /e/ OS завжди актуальна, і (якщо це можливо) переконайтеся, що ваш образ вендора оновлений до останньої версії, яка відповідає рекомендаціям /e/ OS. + Розробники LineageOS + Підтримують /e/ OS + \ No newline at end of file diff --git a/res/values/arrays.xml b/res/values/arrays.xml index f9b9b91744d9b5d55e53eae83e716fa24ccc7101..9eb90fe3277530f8d30acbc9d3e06baeaf4b66b8 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -81,7 +81,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 @@ -95,7 +94,6 @@ 6 7 8 - 9 10 diff --git a/res/values/config.xml b/res/values/config.xml index adfcaa48afe6e01f21c8b133839ad5c212cdc6df..4c575f2fbfa6dc974276da5760b798bce98cb662 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -6,9 +6,6 @@ --> - - https://stats.lineageos.org/api/v1/stats - diff --git a/res/values/e_strings.xml b/res/values/e_strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..948c00aba58d0d8fc186bc9ae8717041d121969b --- /dev/null +++ b/res/values/e_strings.xml @@ -0,0 +1,30 @@ + + + + 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. + + + /e/ contributors + /e/ supporters + LineageOS contributors + + + microG + + + OpenKeychain + diff --git a/res/values/strings.xml b/res/values/strings.xml index 6d07c9fc5cf702bc9661dfd00d6548e914ec7d9f..2594649f1979cf20bdf1ad57d6f0be30db0c403b 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -540,28 +540,6 @@ Total commits: %2$s

Last update: %3$s]]> - - - 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 screen Rotation settings diff --git a/res/xml/anonymous_stats.xml b/res/xml/anonymous_stats.xml deleted file mode 100644 index 898bc74616063314ad707ab06b2d03930aa02f2a..0000000000000000000000000000000000000000 --- a/res/xml/anonymous_stats.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - diff --git a/res/xml/button_settings.xml b/res/xml/button_settings.xml index 059092144c4f6ec333f4061c861ec87260028c5a..97e4a22311c65d96b05f3a2f2c2c8625f18e4f50 100644 --- a/res/xml/button_settings.xml +++ b/res/xml/button_settings.xml @@ -103,7 +103,7 @@ android:key="torch_long_press_power_gesture" android:title="@string/torch_long_press_power_gesture_title" android:summary="@string/torch_long_press_power_gesture_desc" - android:defaultValue="false" + android:defaultValue="true" lineage:requiresConfig="@*android:bool/config_supportLongPressPowerWhenNonInteractive" /> - - diff --git a/res/xml/e_contributors.xml b/res/xml/e_contributors.xml new file mode 100644 index 0000000000000000000000000000000000000000..1784f9c916a06c8e55b879126752cdd7a156fa40 --- /dev/null +++ b/res/xml/e_contributors.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + diff --git a/res/xml/microg_settings.xml b/res/xml/microg_settings.xml new file mode 100644 index 0000000000000000000000000000000000000000..57a51ee54efa91e036dbe73c4625796efd756e03 --- /dev/null +++ b/res/xml/microg_settings.xml @@ -0,0 +1,18 @@ + + + + diff --git a/res/xml/openkeychain_settings.xml b/res/xml/openkeychain_settings.xml new file mode 100644 index 0000000000000000000000000000000000000000..8517cf10ec1357584526a5d0e37c8fd154567db2 --- /dev/null +++ b/res/xml/openkeychain_settings.xml @@ -0,0 +1,18 @@ + + + + diff --git a/res/xml/parts_catalog.xml b/res/xml/parts_catalog.xml index d6b19c035a9425cf0a8958e285e40c5614656dad..52ca689eadd49cd3450d3c5db669b547b9c9770b 100644 --- a/res/xml/parts_catalog.xml +++ b/res/xml/parts_catalog.xml @@ -35,8 +35,8 @@ + android:fragment="org.lineageos.lineageparts.contributors.ContributorsSettings" + lineage:xmlRes="@xml/e_contributors" /> - - + + + + diff --git a/res/xml/preview_data.xml b/res/xml/preview_data.xml deleted file mode 100644 index a554bf28cfa482259f7fbf500befeb30cb56a594..0000000000000000000000000000000000000000 --- a/res/xml/preview_data.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/res/xml/trust_preferences.xml b/res/xml/trust_preferences.xml index 021533b8e2f523575fa7bf0ebe914b369522ddb7..5767cf40aecda7fcc3114af77930252e8a9354bc 100644 --- a/res/xml/trust_preferences.xml +++ b/res/xml/trust_preferences.xml @@ -36,9 +36,6 @@ android:entryValues="@array/trust_restrict_usb_values" android:defaultValue="0" /> - - = 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 32e441371225e527b90003a8617a22de0e87edc3..0000000000000000000000000000000000000000 --- a/src/org/lineageos/lineageparts/lineagestats/PreviewData.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2012 The CyanogenMod Project - * SPDX-FileCopyrightText: 2017-2023 The LineageOS Project - * SPDX-License-Identifier: Apache-2.0 - */ - -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 = requireActivity(); - - 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 7455b500c30236b987852d31a905f8603fe1d72a..0000000000000000000000000000000000000000 --- a/src/org/lineageos/lineageparts/lineagestats/ReportingService.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2015 The CyanogenMod Project - * SPDX-FileCopyrightText: 2017-2022 The LineageOS Project - * SPDX-License-Identifier: Apache-2.0 - */ - -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 5698953787d729870ea6a79d1634909a2b6e6b7d..0000000000000000000000000000000000000000 --- a/src/org/lineageos/lineageparts/lineagestats/ReportingServiceManager.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2012 The CyanogenMod Project - * SPDX-FileCopyrightText: 2017-2023 The LineageOS Project - * SPDX-License-Identifier: Apache-2.0 - */ - -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.SYSTEM); - } - - 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 b7a9f187ecfbd1fa717e312af9d4c086c0261daa..0000000000000000000000000000000000000000 --- a/src/org/lineageos/lineageparts/lineagestats/StatsUploadJobService.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2015 The CyanogenMod Project - * SPDX-FileCopyrightText: 2017-2023 The LineageOS project - * SPDX-License-Identifier: Apache-2.0 - */ - -package org.lineageos.lineageparts.lineagestats; - -import android.app.job.JobParameters; -import android.app.job.JobService; -import android.net.Uri; -import android.os.Handler; -import android.os.Looper; -import android.os.PersistableBundle; -import android.util.ArrayMap; -import android.util.Log; - -import org.json.JSONException; -import org.json.JSONObject; -import org.lineageos.lineageparts.R; - -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; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -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(); - 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(); - return true; // reschedule - } - - return false; - } - - private class StatsUploadTask { - - private final JobParameters mJobParams; - private boolean mCancelled; - - public StatsUploadTask(JobParameters jobParams) { - this.mJobParams = jobParams; - } - - public void execute() { - ExecutorService executor = Executors.newSingleThreadExecutor(); - Handler handler = new Handler(Looper.getMainLooper()); - executor.execute(() -> { - 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 (!mCancelled) { - 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); - } - break; - } - } - if (DEBUG) - Log.d(TAG, "job id " + mJobParams.getJobId() + ", has finished with success=" - + success); - - if (!mCancelled) { - final boolean finalResult = success; - handler.post(() -> { - mCurrentJobs.remove(mJobParams); - jobFinished(mJobParams, !finalResult); - }); - } - }); - } - - public void cancel() { - mCancelled = true; - } - } - - 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 ce155c692d2dcc33a237db9923e712c790f9df68..0000000000000000000000000000000000000000 --- a/src/org/lineageos/lineageparts/lineagestats/Utilities.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2012 The CyanogenMod Project - * SPDX-FileCopyrightText: 2021-2022 The LineageOS Project - * SPDX-License-Identifier: Apache-2.0 - */ - -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 f966f920ccd694c8becb36703178ed27501ac90d..125831178192597a2dbf3c9f3c8a7b276e530b9f 100644 --- a/src/org/lineageos/lineageparts/trust/TrustPreferences.java +++ b/src/org/lineageos/lineageparts/trust/TrustPreferences.java @@ -60,7 +60,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.e_trust_feature_security_patches_explain)); mEncryptionPref.setOnPreferenceClickListener(p -> showInfo(R.string.trust_feature_encryption_explain)); mSmsLimitPref.setOnPreferenceChangeListener((p, v) -> diff --git a/src/org/lineageos/lineageparts/utils/EUtils.java b/src/org/lineageos/lineageparts/utils/EUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..5eead97ff5281b37c15d8697935220db7941654a --- /dev/null +++ b/src/org/lineageos/lineageparts/utils/EUtils.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2023 MURENA SAS + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.lineageos.lineageparts.utils; + +import android.content.Context; +import android.os.UserHandle; +import android.provider.Settings; + +import java.util.UUID; + + +public class EUtils { + + private static final String SENTRY_USERID = "sentry_userid"; + + public static void loadSentryID(Context context) { + String sentryId = Settings.Secure.getStringForUser( + context.getContentResolver(), SENTRY_USERID, + UserHandle.USER_CURRENT); + if (sentryId == null) { + UUID uuid = UUID.randomUUID(); + Settings.Secure.putStringForUser(context.getContentResolver(), + SENTRY_USERID, uuid.toString(), + UserHandle.USER_CURRENT); + } + } +}