From: Soren Stoutner Date: Sat, 30 Nov 2024 23:27:28 +0000 (-0700) Subject: Bump target API to 35 (Android 15). https://redmine.stoutner.com/issues/1237 X-Git-Url: https://gitweb.stoutner.com/?a=commitdiff_plain;ds=sidebyside;p=PrivacyBrowserAndroid.git Bump target API to 35 (Android 15). https://redmine.stoutner.com/issues/1237 --- diff --git a/app/build.gradle b/app/build.gradle index 36116ccf..4abe6ac3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,20 +1,20 @@ -/* - * Copyright 2016-2024 Soren Stoutner . +/* SPDX-License-Identifier: GPL-3.0-or-later + * SPDX-FileCopyrightText: 2016-2024 Soren Stoutner * * This file is part of Privacy Browser Android . * - * Privacy Browser Android 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 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. * - * Privacy Browser Android 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. + * 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 Privacy Browser Android. If not, see . + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . */ plugins { @@ -23,11 +23,11 @@ plugins { } android { - compileSdk 34 + compileSdk 35 defaultConfig { minSdk 26 - targetSdk 34 + targetSdk 35 versionCode 75 versionName "3.18.1" resourceConfigurations += ['en', 'de', 'es', 'fr', 'it', 'pt-rBR', 'ru', 'tr', 'zh-rCN'] @@ -88,9 +88,9 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.7.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' - implementation 'androidx.core:core-ktx:1.13.1' + implementation 'androidx.core:core-ktx:1.15.0' implementation 'androidx.drawerlayout:drawerlayout:1.2.0' - implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.6' + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7' implementation 'androidx.preference:preference-ktx:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.viewpager:viewpager:1.0.0' @@ -100,5 +100,5 @@ dependencies { implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.9.20' // Include the Google material library. - implementation 'com.google.android.material:material:1.13.0-alpha07' + implementation 'com.google.android.material:material:1.13.0-alpha08' } diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/ImportExportActivity.kt b/app/src/main/java/com/stoutner/privacybrowser/activities/ImportExportActivity.kt index 77019932..f0b89d98 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/ImportExportActivity.kt +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/ImportExportActivity.kt @@ -1,26 +1,25 @@ -/* - * Copyright 2018-2024 Soren Stoutner . +/* SPDX-License-Identifier: GPL-3.0-or-later + * SPDX-FileCopyrightText: 2018-2024 Soren Stoutner * * This file is part of Privacy Browser Android . * - * Privacy Browser Android 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 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. * - * Privacy Browser Android 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. + * 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 Privacy Browser Android. If not, see . + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . */ package com.stoutner.privacybrowser.activities import android.content.Intent -import android.content.pm.PackageManager import android.net.Uri import android.os.Bundle import android.os.Handler @@ -236,12 +235,8 @@ class ImportExportActivity : AppCompatActivity() { // Display the home arrow on the support action bar. actionBar.setDisplayHomeAsUpEnabled(true) - // Find out if OpenKeychain is installed. - openKeychainInstalled = try { - packageManager.getPackageInfo("org.sufficientlysecure.keychain", 0).versionName.isNotEmpty() - } catch (exception: PackageManager.NameNotFoundException) { - false - } + // Find out if OpenKeychain is installed. If the safe call (`?.`) is null, the Elvis operator (`?"`) returns the following value instead, which is `false`. + openKeychainInstalled = packageManager.getPackageInfo("org.sufficientlysecure.keychain", 0).versionName?.isNotEmpty() ?: false // Get handles for the views. scrollView = findViewById(R.id.scrollview) diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.kt b/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.kt index 4adec9e5..418fb47e 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.kt +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.kt @@ -1,22 +1,22 @@ -/* - * Copyright 2015-2024 Soren Stoutner . +/* SPDX-License-Identifier: GPL-3.0-or-later + * SPDX-FileCopyrightText: 2015-2024 Soren Stoutner * * Download cookie code contributed 2017 Hendrik Knackstedt. Copyright assigned to Soren Stoutner . * * This file is part of Privacy Browser Android . * - * Privacy Browser Android 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 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. * - * Privacy Browser Android 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. + * 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 Privacy Browser Android. If not, see . + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . */ package com.stoutner.privacybrowser.activities @@ -369,6 +369,7 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook private var defaultUltraPrivacy = true private var defaultWideViewport = true private var displayAdditionalAppBarIcons = false + private var displayUnderCutouts = false private var displayingFullScreenVideo = false private var domainsDatabaseHelper: DomainsDatabaseHelper? = null private var downloadWithExternalApp = false @@ -515,14 +516,19 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook val allowScreenshots = sharedPreferences.getBoolean(getString(R.string.allow_screenshots_key), false) bottomAppBar = sharedPreferences.getBoolean(getString(R.string.bottom_app_bar_key), false) displayAdditionalAppBarIcons = sharedPreferences.getBoolean(getString(R.string.display_additional_app_bar_icons_key), false) - val displayUnderCutouts = sharedPreferences.getBoolean(getString(R.string.display_under_cutouts_key), false) - - // Display under cutouts if specified. This must be done here as it doesn't appear to work correctly if handled after the app is fully initialized. - if (displayUnderCutouts) { - if (Build.VERSION.SDK_INT >= 30) - window.attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS - else if (Build.VERSION.SDK_INT >= 28) - window.attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES + + // Displaying under cutouts currently only works on API < 35. + if (Build.VERSION.SDK_INT < 35) { + // Get the display under cutouts preference. + displayUnderCutouts = sharedPreferences.getBoolean(getString(R.string.display_under_cutouts_key), false) + + // Set the display under cutouts mode. This must be done here as it doesn't appear to work correctly if handled after the app is fully initialized. + if (displayUnderCutouts) { + if (Build.VERSION.SDK_INT >= 30) + window.attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS + else if (Build.VERSION.SDK_INT >= 28) + window.attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES + } } // Get the entry values string arrays. @@ -3610,13 +3616,21 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook // Set the default app bar and status bar backgrounds. appBarLayout.setBackgroundColor(colorBackgroundInt) - window.statusBarColor = colorBackgroundInt + + // Set the background color if the API < 35 (Android 15). https://redmine.stoutner.com/issues/1169 + @Suppress("DEPRECATION") + if (Build.VERSION.SDK_INT < 35) + window.statusBarColor = colorBackgroundInt } ProxyHelper.TOR -> { // Set the app bar and status bar backgrounds to indicate proxying is enabled. appBarLayout.setBackgroundResource(R.color.blue_background) - window.statusBarColor = getColor(R.color.blue_background) + + // Set the background color if the API < 35 (Android 15). https://redmine.stoutner.com/issues/1169 + @Suppress("DEPRECATION") + if (Build.VERSION.SDK_INT < 35) + window.statusBarColor = getColor(R.color.blue_background) // Check to see if Orbot is installed. try { @@ -3667,7 +3681,11 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook ProxyHelper.I2P -> { // Set the app bar and status bar backgrounds to indicate proxying is enabled. appBarLayout.setBackgroundResource(R.color.blue_background) - window.statusBarColor = getColor(R.color.blue_background) + + // Set the background color if the API < 35 (Android 15). https://redmine.stoutner.com/issues/1169 + @Suppress("DEPRECATION") + if (Build.VERSION.SDK_INT < 35) + window.statusBarColor = getColor(R.color.blue_background) // Check to see if I2P is installed. try { @@ -3699,7 +3717,11 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook ProxyHelper.CUSTOM -> { // Set the app bar and status bar backgrounds to indicate proxying is enabled. appBarLayout.setBackgroundResource(R.color.blue_background) - window.statusBarColor = getColor(R.color.blue_background) + + // Set the background color if the API < 35 (Android 15). https://redmine.stoutner.com/issues/1169 + @Suppress("DEPRECATION") + if (Build.VERSION.SDK_INT < 35) + window.statusBarColor = getColor(R.color.blue_background) } } @@ -4091,6 +4113,13 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook // Apply the appropriate full screen mode flags. if (fullScreenBrowsingModeEnabled && inFullScreenBrowsingMode) { // Privacy Browser is currently in full screen browsing mode. + // Handle display under cutouts for API < 35. + if (Build.VERSION.SDK_INT < 35) { + // Disable fits system windows if display under cutouts is enabled. + if (displayUnderCutouts) + rootFrameLayout.fitsSystemWindows = false + } + // Hide the app bar if specified. if (hideAppBar) { // Hide the tab linear layout. @@ -4111,6 +4140,13 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook @Suppress("DEPRECATION") rootFrameLayout.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY } else { // Switch to normal viewing mode. + // Handle display under cutouts for API < 35. + if (Build.VERSION.SDK_INT < 35) { + // Enable fits system windows if display under cutouts is enabled. + if (displayUnderCutouts) + rootFrameLayout.fitsSystemWindows = true + } + // Remove the `SYSTEM_UI` flags from the root frame layout. The deprecated command can be switched to `WindowInsetsController` once the minimum API >= 30. @Suppress("DEPRECATION") rootFrameLayout.systemUiVisibility = 0 @@ -4708,6 +4744,13 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook // Toggle the full screen browsing mode. if (inFullScreenBrowsingMode) { // Switch to full screen mode. + // Handle display under cutouts for API < 35. + if (Build.VERSION.SDK_INT < 35) { + // Disable fits system windows if display under cutouts is enabled. + if (displayUnderCutouts) + rootFrameLayout.fitsSystemWindows = false + } + // Hide the app bar if specified. if (hideAppBar) { // App bar hiding is enabled. // Close the find on page bar if it is visible. @@ -4764,6 +4807,13 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook @Suppress("DEPRECATION") rootFrameLayout.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY } else { // Switch to normal viewing mode. + // Handle display under cutouts for API < 35. + if (Build.VERSION.SDK_INT < 35) { + // Enable fits system windows if display under cutouts is enabled. + if (displayUnderCutouts) + rootFrameLayout.fitsSystemWindows = true + } + // Show the app bar if it was hidden. if (hideAppBar) { // Show the tab linear layout. @@ -5033,6 +5083,13 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook // Enter full screen video. override fun onShowCustomView(video: View, callback: CustomViewCallback) { + // Handle display under cutouts for API < 35. + if (Build.VERSION.SDK_INT < 35) { + // Disable fits system windows if display under cutouts is enabled. + if (displayUnderCutouts) + rootFrameLayout.fitsSystemWindows = false + } + // Set the full screen video flag. displayingFullScreenVideo = true diff --git a/app/src/main/java/com/stoutner/privacybrowser/fragments/AboutVersionFragment.kt b/app/src/main/java/com/stoutner/privacybrowser/fragments/AboutVersionFragment.kt index 4c8da568..ad884b81 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/fragments/AboutVersionFragment.kt +++ b/app/src/main/java/com/stoutner/privacybrowser/fragments/AboutVersionFragment.kt @@ -1,20 +1,20 @@ -/* - * Copyright 2016-2024 Soren Stoutner . +/* SPDX-License-Identifier: GPL-3.0-or-later + * SPDX-FileCopyrightText: 2016-2024 Soren Stoutner * * This file is part of Privacy Browser Android . * - * Privacy Browser Android 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 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. * - * Privacy Browser Android 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. + * 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 Privacy Browser Android. If not, see . + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . */ package com.stoutner.privacybrowser.fragments @@ -397,14 +397,8 @@ class AboutVersionFragment : Fragment() { val webViewPackageName = webViewPackageInfo.packageName val webViewVersion = webViewPackageInfo.versionName - // Get the Orbot version name if Orbot is installed. - val orbot: String = try { - // Store the version name. - requireContext().packageManager.getPackageInfo("org.torproject.android", 0).versionName - } catch (exception: PackageManager.NameNotFoundException) { // Orbot is not installed. - // Store an empty string. - "" - } + // Get the Orbot version name if Orbot is installed. If the safe call (`?.`) is null, the Elvis operator (`?"`) returns the following value instead, which is an empty string. + val orbot: String = requireContext().packageManager.getPackageInfo("org.torproject.android", 0)?.versionName ?: "" // Get the I2P version name if I2P is installed. val i2p: String = try { @@ -420,14 +414,8 @@ class AboutVersionFragment : Fragment() { } } - // Get the OpenKeychain version name if it is installed. - val openKeychain: String = try { - // Store the version name. - requireContext().packageManager.getPackageInfo("org.sufficientlysecure.keychain", 0).versionName - } catch (exception: PackageManager.NameNotFoundException) { // OpenKeychain is not installed. - // Store an empty string. - "" - } + // Get the OpenKeychain version name if it is installed. If the safe call (`?.`) is null, the Elvis operator (`?"`) returns the following value instead, which is an empty string. + val openKeychain: String = requireContext().packageManager.getPackageInfo("org.sufficientlysecure.keychain", 0)?.versionName ?: "" // Create a spannable string builder for the hardware and software text views that need multiple colors of text. val brandStringBuilder = SpannableStringBuilder(brandLabel + brand) @@ -568,8 +556,7 @@ class AboutVersionFragment : Fragment() { // Get the first package signature. Suppress the lint warning about the need to be careful in implementing comparison of certificates for security purposes. // Once the minimum API >= 28, `GET_SIGNING_CERTIFICATES` can be used instead. Once the minimum API >= 33, the newer `getPackageInfo()` may be used. @Suppress("DEPRECATION") - @SuppressLint("PackageManagerGetSignatures") val packageSignature = requireContext().packageManager.getPackageInfo(requireContext().packageName,PackageManager.GET_SIGNATURES) - .signatures[0] + @SuppressLint("PackageManagerGetSignatures") val packageSignature = requireContext().packageManager.getPackageInfo(requireContext().packageName,PackageManager.GET_SIGNATURES).signatures!![0] // Convert the signature to a byte array input stream. val certificateByteArrayInputStream: InputStream = ByteArrayInputStream(packageSignature.toByteArray()) diff --git a/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.kt b/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.kt index 7333aff1..490faf46 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.kt +++ b/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.kt @@ -1,20 +1,20 @@ -/* - * Copyright 2016-2024 Soren Stoutner . +/* SPDX-License-Identifier: GPL-3.0-or-later + * SPDX-FileCopyrightText: 2016-2024 Soren Stoutner * * This file is part of Privacy Browser Android . * - * Privacy Browser Android 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 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. * - * Privacy Browser Android 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. + * 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 Privacy Browser Android. If not, see . + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . */ package com.stoutner.privacybrowser.fragments @@ -33,6 +33,7 @@ import android.widget.ArrayAdapter import androidx.appcompat.app.AppCompatDelegate import androidx.preference.Preference +import androidx.preference.PreferenceCategory import androidx.preference.PreferenceFragmentCompat import com.stoutner.privacybrowser.R @@ -181,6 +182,15 @@ class SettingsFragment : PreferenceFragmentCompat() { val fullScreenBrowsingMode = sharedPreferences.getBoolean(getString(R.string.full_screen_browsing_mode_key), false) val clearEverything = sharedPreferences.getBoolean(getString(R.string.clear_everything_key), true) + // Remove the display under cutouts preferences if the API is >= 35 as Google broke this functionality. + if (Build.VERSION.SDK_INT >= 35) { + // Get a handle for the full screen category. + val fullScreenCategory = findPreference(getString(R.string.full_screen_category_key))!! + + // Remove the display under cutouts preferences. + fullScreenCategory.removePreference(displayUnderCutoutsPreference) + } + // Only enable Fanboy's social blocking list preference if Fanboy's annoyance list is disabled. fanboySocialBlockingListPreference.isEnabled = !fanboyAnnoyanceListEnabled diff --git a/app/src/main/res/layout/about_bottom_appbar.xml b/app/src/main/res/layout/about_bottom_appbar.xml index c231b078..e6752ae8 100644 --- a/app/src/main/res/layout/about_bottom_appbar.xml +++ b/app/src/main/res/layout/about_bottom_appbar.xml @@ -1,29 +1,32 @@ + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> + + android:layout_width="match_parent" + android:fitsSystemWindows="true" > diff --git a/app/src/main/res/layout/about_top_appbar.xml b/app/src/main/res/layout/about_top_appbar.xml index 47144216..63db2dcb 100644 --- a/app/src/main/res/layout/about_top_appbar.xml +++ b/app/src/main/res/layout/about_top_appbar.xml @@ -1,29 +1,32 @@ + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> + + android:layout_width="match_parent" + android:fitsSystemWindows="true" > + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> + + android:layout_width="match_parent" + android:fitsSystemWindows="true" > + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> + + android:layout_width="match_parent" + android:fitsSystemWindows="true" > + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> + + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> + + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> + + android:layout_width="match_parent" + android:fitsSystemWindows="true" > diff --git a/app/src/main/res/layout/guide_top_appbar.xml b/app/src/main/res/layout/guide_top_appbar.xml index f3a3d1ef..66d632fb 100644 --- a/app/src/main/res/layout/guide_top_appbar.xml +++ b/app/src/main/res/layout/guide_top_appbar.xml @@ -1,29 +1,32 @@ + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> + + android:layout_width="match_parent" + android:fitsSystemWindows="true" > + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> + + android:layout_width="match_parent" + android:fitsSystemWindows="true" > + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> + + android:layout_width="match_parent" + android:fitsSystemWindows="true" > + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> + + android:layout_width="match_parent" + android:fitsSystemWindows="true" > + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> + + android:layout_width="match_parent" + android:fitsSystemWindows="true" > + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> + + android:layout_width="match_parent" + android:fitsSystemWindows="true" > + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> + + android:layout_width="match_parent" + android:fitsSystemWindows="true" > + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> + + android:layout_width="match_parent" + android:fitsSystemWindows="true" > + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> + + android:layout_width="match_parent" + android:fitsSystemWindows="true" > + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> + + android:layout_width="match_parent" + android:fitsSystemWindows="true" > + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> + + android:layout_width="match_parent" + android:fitsSystemWindows="true" > + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> - + + android:fitsSystemWindows="true" > + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> - + + android:focusableInTouchMode="true" + android:fitsSystemWindows="true" > Ausgewählt:\u0020 %1$d Nach oben verschieben Nach unten verschieben + Nach oben bewegen + Nach unten bewegen Bearbeiten Löschen Alle auswählen @@ -351,8 +353,11 @@ Domain hinzufügen Domain existiert bereits Hinzufügen + Alle löschen + Alle Domain-Einstellungen löschen? Domainname Domain gelöscht + Alle Domains gelöscht *. kann als Wildcard-Subdomain verwendet werden (z.B. *.stoutner.com) Systemeinstellung diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 37717b41..65bcc8d3 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -350,8 +350,11 @@ Añadir dominio El nombre de dominio ya existe Añadir + Borrar todo + ¿Borrar todas las configuraciones de dominio? Nombre de dominio Dominio borrado + Todos los dominios eliminados *. puede ser añadido a un dominio para incluir todos los subdominios (p.ej. *.stoutner.com) Por defecto del sistema diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 12bc57e2..3cb6f38f 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -18,7 +18,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with Privacy Browser Android. If not, see . --> + along with Privacy Browser Android. If not, see . --> @@ -278,6 +278,8 @@ Selectionnés : %1$d Monter Descendre + Déplacer en haut + Déplacer en bas Modifier Supprimer Tout sélectionner diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index b0f0d5d7..90f62100 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -349,8 +349,11 @@ Aggiungi Dominio Il nome del Dominio è già esistente Aggiungi + Elimina tutto + Eliminare tutte le impostaizoni dei domini? Nome del Dominio Dominio Eliminato + Eliminati tutti i domini è possibile anteporre *. a un dominio per includere tutti i sottodomini (es. *.stoutner.com) Default di Sistema diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index ed71aba3..aae2a01c 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -346,8 +346,11 @@ Добавление домена Доменное имя уже существует Добавить + Удалить все + Удалить все настройки домена? Имя домена Домен удален + Все домены удалены добавьте *. для включения всех поддоменов (напр. *.stoutner.com) По умолчанию diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 20b18f86..2208ef7d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,22 +1,23 @@ + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> fanboys_social_blocking_list font_size full_screen_browsing_mode + full_screen general hide_app_bar display_under_cutouts diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 1b21b9da..fa9737a7 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -1,22 +1,23 @@ + You should have received a copy of the GNU General Public License along with + this program. If not, see . --> . +/* SPDX-License-Identifier: GPL-3.0-or-later + * SPDX-FileCopyrightText: 2016-2024 Soren Stoutner * * This file is part of Privacy Browser Android . * - * Privacy Browser Android 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 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. * - * Privacy Browser Android 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. + * 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 Privacy Browser Android. If not, see . + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . */ // Top-level build file where you can add configuration options common to all sub-projects/modules. @@ -26,7 +26,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:8.7.1' + classpath 'com.android.tools.build:gradle:8.7.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.20" // NOTE: Do not place your application dependencies here; they belong