From: Soren Stoutner Date: Wed, 23 Jan 2019 22:51:43 +0000 (-0700) Subject: Display the IP Address in the View SSL Certificate dialog. https://redmine.stoutner... X-Git-Tag: v2.16~3 X-Git-Url: https://gitweb.stoutner.com/?a=commitdiff_plain;h=892e8297ba8d23a37c091fb38325929dcf7d17c9;p=PrivacyBrowserAndroid.git Display the IP Address in the View SSL Certificate dialog. https://redmine.stoutner.com/issues/211 --- diff --git a/.idea/dictionaries/soren.xml b/.idea/dictionaries/soren.xml index 6bd3f77e..87f9d7ec 100644 --- a/.idea/dictionaries/soren.xml +++ b/.idea/dictionaries/soren.xml @@ -80,6 +80,7 @@ homescreen huawei imageview + inet intl ipleak isfolder diff --git a/app/src/free/res/values-tr/strings.xml b/app/src/free/res/values-tr/strings.xml new file mode 100644 index 00000000..58048a99 --- /dev/null +++ b/app/src/free/res/values-tr/strings.xml @@ -0,0 +1,31 @@ + + + + + + + Privacy Browser Ücretsiz + + + Privacy Browser Ücretsiz ekranın altında bir banner reklam gösterir. + Bu reklamlar, Google\'ın sık kullanılan sağlayıcılarından gelmektedir ve kişiselleştirilmeyecek şekilde yapılandırılmıştır. + \n\nPrivacy Browser standart versiyonu uygulama reklamları içermez. + Tarayıcıyı kapat + Reklamları kabul et + \ No newline at end of file diff --git a/app/src/main/assets/it/about_licenses_dark.html b/app/src/main/assets/it/about_licenses_dark.html index b9244d9d..caba0d32 100644 --- a/app/src/main/assets/it/about_licenses_dark.html +++ b/app/src/main/assets/it/about_licenses_dark.html @@ -51,14 +51,14 @@

Librerie

Privacy Browser è sviluppato con la Android Support Library, che è rilasciata con Licenza Apache 2.0.

-

The free flavor of Privacy Browser is built with Firebase Ads, - which is released under the Android Software Development Kit License.

- -

Classes

-

com.stoutner.privacybrowser.views.CheckedLinearLayout is a modified version of a class contained in the - Android Camera source code. - The original file was released under the Apache License 2.0. - The modified file is released under the GPLv3+ license.

+

La versione gratuita di Privacy Browser è compilata con Firebase Ads, + che è rilasciato sotto la Licenza Android Software Development Kit.

+ +

Classi

+

com.stoutner.privacybrowser.views.CheckedLinearLayout è la versione modificata di una classe contenuta nel codice sorgente della + Fotocamera Android. + Il file originale è stato rilasciato sotto la Licenza Apache 2.0. + Il file modificato è rilasciato sotto la Licenza GPLv3+.

Icone

diff --git a/app/src/main/assets/it/about_licenses_light.html b/app/src/main/assets/it/about_licenses_light.html index 6759c412..3b92019e 100644 --- a/app/src/main/assets/it/about_licenses_light.html +++ b/app/src/main/assets/it/about_licenses_light.html @@ -51,14 +51,14 @@

Librerie

Privacy Browser è sviluppato con la Android Support Library, che è rilasciata con Licenza Apache 2.0.

-

The free flavor of Privacy Browser is built with Firebase Ads, - which is released under the Android Software Development Kit License.

- -

Classes

-

com.stoutner.privacybrowser.views.CheckedLinearLayout is a modified version of a class contained in the - Android Camera source code. - The original file was released under the Apache License 2.0. - The modified file is released under the GPLv3+ license.

+

La versione gratuita di Privacy Browser è compilata con Firebase Ads, + che è rilasciato sotto la Licenza Android Software Development Kit.

+ +

Classi

+

com.stoutner.privacybrowser.views.CheckedLinearLayout è la versione modificata di una classe contenuta nel codice sorgente della + Fotocamera Android. + Il file originale è stato rilasciato sotto la Licenza Apache 2.0. + Il file modificato è rilasciato sotto la Licenza GPLv3+.

Icone

diff --git a/app/src/main/assets/ru/about_licenses_dark.html b/app/src/main/assets/ru/about_licenses_dark.html index 2fdeef66..d2ed014e 100644 --- a/app/src/main/assets/ru/about_licenses_dark.html +++ b/app/src/main/assets/ru/about_licenses_dark.html @@ -46,14 +46,14 @@

Библиотеки

Privacy Browser создан с использованием Android Support Library, которая выпущена под Apache License 2.0.

-

The free flavor of Privacy Browser is built with Firebase Ads, - which is released under the Android Software Development Kit License.

- -

Classes

-

com.stoutner.privacybrowser.views.CheckedLinearLayout is a modified version of a class contained in the - Android Camera source code. - The original file was released under the Apache License 2.0. - The modified file is released under the GPLv3+ license.

+

Бесплатный вариант Privacy Browser создан с помощью Firebase Ads, + выпущенной по лицензии Android Software Development Kit License.

+ +

Классы

+

com.stoutner.privacybrowser.views.CheckedLinearLayout является модифицированной версией класса, содержащегося в исходном коде + Android Camera. + Оригинальный файл был выпущен под лицензией Apache 2.0. + Модифицированный файл выпущен под лицензией GPLv3+.

Иконки

diff --git a/app/src/main/assets/ru/about_licenses_light.html b/app/src/main/assets/ru/about_licenses_light.html index 3aacc9ac..54089956 100644 --- a/app/src/main/assets/ru/about_licenses_light.html +++ b/app/src/main/assets/ru/about_licenses_light.html @@ -46,14 +46,14 @@

Библиотеки

Privacy Browser создан с использованием Android Support Library, которая выпущена под Apache License 2.0.

-

The free flavor of Privacy Browser is built with Firebase Ads, - which is released under the Android Software Development Kit License.

- -

Classes

-

com.stoutner.privacybrowser.views.CheckedLinearLayout is a modified version of a class contained in the - Android Camera source code. - The original file was released under the Apache License 2.0. - The modified file is released under the GPLv3+ license.

+

Бесплатный вариант Privacy Browser создан с помощью Firebase Ads, + выпущенной по лицензии Android Software Development Kit License.

+ +

Классы

+

com.stoutner.privacybrowser.views.CheckedLinearLayout является модифицированной версией класса, содержащегося в исходном коде + Android Camera. + Оригинальный файл был выпущен под лицензией Apache 2.0. + Модифицированный файл выпущен под лицензией GPLv3+.

Иконки

diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/ViewSourceActivity.java b/app/src/main/java/com/stoutner/privacybrowser/activities/ViewSourceActivity.java index db9bf797..50e7d65c 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/ViewSourceActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/ViewSourceActivity.java @@ -181,7 +181,7 @@ public class ViewSourceActivity extends AppCompatActivity { // Get the URL. String url = urlEditText.getText().toString(); - // Get new source data for the URL if it begins with `http`/ + // Get new source data for the URL if it begins with `http`. if (url.startsWith("http")) { new GetSource(this).execute(url); } else { diff --git a/app/src/main/java/com/stoutner/privacybrowser/dialogs/MoveToFolderDialog.java b/app/src/main/java/com/stoutner/privacybrowser/dialogs/MoveToFolderDialog.java index 51495344..28d0fa55 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/dialogs/MoveToFolderDialog.java +++ b/app/src/main/java/com/stoutner/privacybrowser/dialogs/MoveToFolderDialog.java @@ -165,7 +165,7 @@ public class MoveToFolderDialog extends AppCompatDialogFragment { } } - // Get a `Cursor` containing the folders to display. + // Get a cursor containing the folders to display. foldersCursor = bookmarksDatabaseHelper.getFoldersExcept(exceptFolders.toString()); // Setup `foldersCursorAdaptor` with `this` context. `false` disables autoRequery. diff --git a/app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.java b/app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.java index 90a13271..c236d3a8 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.java +++ b/app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.java @@ -1,5 +1,5 @@ /* - * Copyright © 2016-2018 Soren Stoutner . + * Copyright © 2016-2019 Soren Stoutner . * * This file is part of Privacy Browser . * @@ -20,6 +20,7 @@ package com.stoutner.privacybrowser.dialogs; import android.annotation.SuppressLint; +import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; @@ -27,6 +28,7 @@ import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.net.http.SslCertificate; +import android.os.AsyncTask; import android.os.Bundle; import android.text.SpannableStringBuilder; import android.text.Spanned; @@ -38,6 +40,9 @@ import android.widget.TextView; import com.stoutner.privacybrowser.activities.MainWebViewActivity; import com.stoutner.privacybrowser.R; +import java.lang.ref.WeakReference; +import java.net.InetAddress; +import java.net.UnknownHostException; import java.text.DateFormat; import java.util.Calendar; import java.util.Date; @@ -113,8 +118,9 @@ public class ViewSslCertificateDialog extends DialogFragment { // The alert dialog must be shown before items in the layout can be modified. alertDialog.show(); - // Get handles for the `TextViews`. + // Get handles for the text views. TextView domainTextView = alertDialog.findViewById(R.id.domain); + TextView ipAddressesTextView = alertDialog.findViewById(R.id.ip_addresses); TextView issuedToCNameTextView = alertDialog.findViewById(R.id.issued_to_cname); TextView issuedToONameTextView = alertDialog.findViewById(R.id.issued_to_oname); TextView issuedToUNameTextView = alertDialog.findViewById(R.id.issued_to_uname); @@ -132,43 +138,46 @@ public class ViewSslCertificateDialog extends DialogFragment { String startDateLabel = getString(R.string.start_date) + " "; String endDateLabel = getString(R.string.end_date) + " "; - // Parse `formattedUrlString` to a `URI`. + // Convert the formatted URL string to a URI. Uri uri = Uri.parse(MainWebViewActivity.formattedUrlString); - // Extract the domain name from `uri`. + // Extract the domain name from the URI. String domainString = uri.getHost(); + // Get the IP addresses. + new GetIpAddresses(getActivity(), alertDialog).execute(domainString); + // Get the SSL certificate. SslCertificate sslCertificate = MainWebViewActivity.sslCertificate; // Get the strings from the SSL certificate. - String issuedToCNameString = sslCertificate.getIssuedTo().getCName(); - String issuedToONameString = sslCertificate.getIssuedTo().getOName(); - String issuedToUNameString = sslCertificate.getIssuedTo().getUName(); - String issuedByCNameString = sslCertificate.getIssuedBy().getCName(); - String issuedByONameString = sslCertificate.getIssuedBy().getOName(); - String issuedByUNameString = sslCertificate.getIssuedBy().getUName(); + String issuedToCName = sslCertificate.getIssuedTo().getCName(); + String issuedToOName = sslCertificate.getIssuedTo().getOName(); + String issuedToUName = sslCertificate.getIssuedTo().getUName(); + String issuedByCName = sslCertificate.getIssuedBy().getCName(); + String issuedByOName = sslCertificate.getIssuedBy().getOName(); + String issuedByUName = sslCertificate.getIssuedBy().getUName(); Date startDate = sslCertificate.getValidNotBeforeDate(); Date endDate = sslCertificate.getValidNotAfterDate(); - // Create a `SpannableStringBuilder` for each `TextView` that needs multiple colors of text. + // Create spannable string builders for each text view that needs multiple colors of text. SpannableStringBuilder domainStringBuilder = new SpannableStringBuilder(domainLabel + domainString); - SpannableStringBuilder issuedToCNameStringBuilder = new SpannableStringBuilder(cNameLabel + issuedToCNameString); - SpannableStringBuilder issuedToONameStringBuilder = new SpannableStringBuilder(oNameLabel + issuedToONameString); - SpannableStringBuilder issuedToUNameStringBuilder = new SpannableStringBuilder(uNameLabel + issuedToUNameString); - SpannableStringBuilder issuedByCNameStringBuilder = new SpannableStringBuilder(cNameLabel + issuedByCNameString); - SpannableStringBuilder issuedByONameStringBuilder = new SpannableStringBuilder(oNameLabel + issuedByONameString); - SpannableStringBuilder issuedByUNameStringBuilder = new SpannableStringBuilder(uNameLabel + issuedByUNameString); + SpannableStringBuilder issuedToCNameStringBuilder = new SpannableStringBuilder(cNameLabel + issuedToCName); + SpannableStringBuilder issuedToONameStringBuilder = new SpannableStringBuilder(oNameLabel + issuedToOName); + SpannableStringBuilder issuedToUNameStringBuilder = new SpannableStringBuilder(uNameLabel + issuedToUName); + SpannableStringBuilder issuedByCNameStringBuilder = new SpannableStringBuilder(cNameLabel + issuedByCName); + SpannableStringBuilder issuedByONameStringBuilder = new SpannableStringBuilder(oNameLabel + issuedByOName); + SpannableStringBuilder issuedByUNameStringBuilder = new SpannableStringBuilder(uNameLabel + issuedByUName); SpannableStringBuilder startDateStringBuilder = new SpannableStringBuilder(startDateLabel + DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG).format(startDate)); SpannableStringBuilder endDateStringBuilder = new SpannableStringBuilder(endDateLabel + DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG).format(endDate)); - // Create a red `ForegroundColorSpan`. We have to use the deprecated `getColor` until API >= 23. + // Create a red foreground color span. The deprecated `getColor` must be used until the minimum API >= 23. @SuppressWarnings("deprecation") ForegroundColorSpan redColorSpan = new ForegroundColorSpan(getResources().getColor(R.color.red_a700)); - // Create a blue `ForegroundColorSpan`. + // Create a blue foreground color span. ForegroundColorSpan blueColorSpan; - // Set `blueColorSpan` according to the theme. We have to use the deprecated `getColor()` until API >= 23. + // Set the blue color span according to the theme. The deprecated `getColor()` must be used until the minimum API >= 23. if (MainWebViewActivity.darkTheme) { //noinspection deprecation blueColorSpan = new ForegroundColorSpan(getResources().getColor(R.color.blue_400)); @@ -177,14 +186,17 @@ public class ViewSslCertificateDialog extends DialogFragment { blueColorSpan = new ForegroundColorSpan(getResources().getColor(R.color.blue_700)); } + // Remove the incorrect lint error that `.equals` might produce a NullPointerException. + assert domainString != null; + // Formet the `domainString` and `issuedToCName` colors. - if (domainString.equals(issuedToCNameString)) { // `domainString` and `issuedToCNameString` match. + if (domainString.equals(issuedToCName)) { // `domainString` and `issuedToCName` match. // Set the strings to be blue. domainStringBuilder.setSpan(blueColorSpan, domainLabel.length(), domainStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); issuedToCNameStringBuilder.setSpan(blueColorSpan, cNameLabel.length(), issuedToCNameStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); - } else if(issuedToCNameString.startsWith("*.")){ // `issuedToCNameString` begins with a wildcard. + } else if(issuedToCName.startsWith("*.")){ // `issuedToCName` begins with a wildcard. // Remove the initial `*.`. - String baseCertificateDomain = issuedToCNameString.substring(2); + String baseCertificateDomain = issuedToCName.substring(2); // Setup a copy of `domainString` to test subdomains. String domainStringSubdomain = domainString; @@ -219,7 +231,7 @@ public class ViewSslCertificateDialog extends DialogFragment { issuedToCNameStringBuilder.setSpan(redColorSpan, cNameLabel.length(), issuedToCNameStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); } - // Setup the issued to and issued by spans to display the certificate information in blue. `SPAN_INCLUSIVE_INCLUSIVE` allows the span to grow in either direction. + // Set the issued to and issued by spans to display the certificate information in blue. `SPAN_INCLUSIVE_INCLUSIVE` allows the span to grow in either direction. issuedToONameStringBuilder.setSpan(blueColorSpan, oNameLabel.length(), issuedToONameStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); issuedToUNameStringBuilder.setSpan(blueColorSpan, uNameLabel.length(), issuedToUNameStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); issuedByCNameStringBuilder.setSpan(blueColorSpan, cNameLabel.length(), issuedByCNameStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); @@ -244,6 +256,7 @@ public class ViewSslCertificateDialog extends DialogFragment { // Display the strings. domainTextView.setText(domainStringBuilder); + ipAddressesTextView.setText(getString(R.string.ip_addresses)); issuedToCNameTextView.setText(issuedToCNameStringBuilder); issuedToONameTextView.setText(issuedToONameStringBuilder); issuedToUNameTextView.setText(issuedToUNameStringBuilder); @@ -257,4 +270,97 @@ public class ViewSslCertificateDialog extends DialogFragment { return alertDialog; } } -} + + // This must run asynchronously because it involves a network request. `String` declares the parameters. `Void` does not declare progress units. `String` contains the results. + private static class GetIpAddresses extends AsyncTask { + // The weak references are used to determine if the activity or the alert dialog have disappeared while the AsyncTask is running. + private WeakReference activityWeakReference; + private WeakReference alertDialogWeakReference; + + GetIpAddresses(Activity activity, AlertDialog alertDialog) { + // Populate the weak references. + activityWeakReference = new WeakReference<>(activity); + alertDialogWeakReference = new WeakReference<>(alertDialog); + } + + @Override + protected SpannableStringBuilder doInBackground(String... domainName) { + // Get handles for the activity and the alert dialog. + Activity activity = activityWeakReference.get(); + AlertDialog alertDialog = alertDialogWeakReference.get(); + + // Abort if the activity or the dialog is gone. + if ((activity == null) || (activity.isFinishing()) || (alertDialog == null)) { + return new SpannableStringBuilder(); + } + + // Initialize an IP address string builder. + StringBuilder ipAddresses = new StringBuilder(); + + // Get an array with the IP addresses for the host. + try { + // Get an array with all the IP addresses for the domain. + InetAddress[] inetAddressesArray = InetAddress.getAllByName(domainName[0]); + + // Add each IP address to the string builder. + for (InetAddress inetAddress : inetAddressesArray) { + if (ipAddresses.length() == 0) { // This is the first IP address. + // Add the IP Address to the string builder. + ipAddresses.append(inetAddress.getHostAddress()); + } else { // This is not the first IP address. + // Add a line break to the string builder first. + ipAddresses.append("\n"); + + // Add the IP address to the string builder. + ipAddresses.append(inetAddress.getHostAddress()); + } + } + } catch (UnknownHostException exception) { + // Do nothing. + } + + // Set the label. + String ipAddressesLabel = activity.getString(R.string.ip_addresses) + " "; + + // Create a spannable string builder. + SpannableStringBuilder ipAddressesStringBuilder = new SpannableStringBuilder(ipAddressesLabel + ipAddresses); + + // Create a blue foreground color span. + ForegroundColorSpan blueColorSpan; + + // Set the blue color span according to the theme. The deprecated `getColor()` must be used until the minimum API >= 23. + if (MainWebViewActivity.darkTheme) { + //noinspection deprecation + blueColorSpan = new ForegroundColorSpan(activity.getResources().getColor(R.color.blue_400)); + } else { + //noinspection deprecation + blueColorSpan = new ForegroundColorSpan(activity.getResources().getColor(R.color.blue_700)); + } + + // Set the string builder to display the certificate information in blue. `SPAN_INCLUSIVE_INCLUSIVE` allows the span to grow in either direction. + ipAddressesStringBuilder.setSpan(blueColorSpan, ipAddressesLabel.length(), ipAddressesStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); + + // Return the formatted string. + return ipAddressesStringBuilder; + } + + // `onPostExecute()` operates on the UI thread. + @Override + protected void onPostExecute(SpannableStringBuilder ipAddresses) { + // Get handles for the activity and the alert dialog. + Activity activity = activityWeakReference.get(); + AlertDialog alertDialog = alertDialogWeakReference.get(); + + // Abort if the activity or the alert dialog is gone. + if ((activity == null) || (activity.isFinishing()) || (alertDialog == null)) { + return; + } + + // Get a handle for the IP addresses text view. + TextView ipAddressesTextView = alertDialog.findViewById(R.id.ip_addresses); + + // Populate the IP addresses text view. + ipAddressesTextView.setText(ipAddresses); + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/view_ssl_certificate.xml b/app/src/main/res/layout/view_ssl_certificate.xml index 14038690..89da39cc 100644 --- a/app/src/main/res/layout/view_ssl_certificate.xml +++ b/app/src/main/res/layout/view_ssl_certificate.xml @@ -1,7 +1,7 @@ Bu web sitesiyle bağlantınız şifrelenmemiştir. Bu, üçüncü kişilere bilgilerinizi ele geçirme, bağlantınızı izleme ve zararlı yazılımları yükleme fırsatını verir. SSL Sertifikası Kapat - Etki Alanı - Etki Alanı: + Domain + Domain: Verilen Veren Ortak Ad (CN): @@ -129,8 +129,8 @@ Çerezleri Temizle DOM Depolama Alanını Temizle Form Verisini Temizle - Fanboy’s Annoyance Listesi - Fanboy’s Social Blocking Listesi + Fanboy Rahatsızlık Listesi + Fanboy Sosyal Engelleme Listesi Tüm Üçüncü Taraf İstekleri Engelle Düzen Varsayılan Web Görünümü @@ -252,25 +252,32 @@ Üçüncü Taraf - Engellendi Engellendi Engellendi - Engellenenler - Ana beyaz liste - Final beyaz liste + Engel listesi + Alt liste + Ana beyaz listesi + Son beyaz listesi Domain beyaz listesi Domain başlangıç beyaz listesi - Domain final beyaz listesi + Domain son beyaz listesi Üçüncü taraf beyaz listesi Üçüncü taraf domain beyaz listesi Üçüncü taraf domain başlangıç beyaz listesi - Ana kara liste + Ana kara listesi Başlangıç kara listesi - Final kara liste + Son kara listesi Domain kara listesi Domain başlangıç kara listesi - Domain final kara listesi + Domain son kara listesi + Domain düzenli ifade kara listesi Üçüncü taraf kara listesi Üçüncü taraf başlangıç kara listesi Üçüncü taraf domain kara listesi Üçüncü taraf domain başlangıç kara listesi + Üçüncü taraf düzenli ifade kara listesi + Üçüncü taraf domain düzenli ifade kara listesi + Düzenli ifade kara listesi + Engel listesi girdileri + Engel listesi orijinal girdisi Domainler @@ -280,6 +287,7 @@ Ekle Domain adı Domain silinmiş + *. tüm altdomainleri içeren bir domain başına getirilebilir (örn. *.stoutner.com) Sistem varsayılanı Yenilemek için kaydır etkin @@ -297,9 +305,33 @@ İğneli SSL sertifikası Kayıtlı SSL sertifikası - Geçerli web site SSL sertifikası + Geçerli web sitesi SSL sertifikası + Geçerli web sitesinin SSL sertifikasını doldurmak için Domain Ayarlarını açmadan önce şifrelenmiş bir web sitesi yükleyin. + Şifreleme + + Hiçbiri + Parola + OpenPGP + + Android KitKat sürümünde parola şifrelemesi çalışmaz. + OpenPGP şifrelemesinin çalışması için OpenKeychain yüklü olmalıdır. + Şifresi çözüldükten sonra, şifrelenmemiş dosya ayrı bir adımda içeri aktarılmak zorundadır. + Dosya Konumu + Gözat + Dışarı aktar + İçeri aktar + Şifre Çözmek + Dışa aktarım başarılı. + Dışa aktarım başarısız oldu: + İçe aktarım başarısız oldu: + Ayarlar, depolama alanı izni onaylanmadığından bu konuma aktarılamıyor. + Ayarlar, depolama alanı izni onaylanmadığından bu konumdan aktarılamıyor. + geçerli bir konum değildir. + Depolama Alanı İzni + Privacy Browser, genel dizinlere erişmek için depolama alanı iznine ihtiyaç duymaktadır. Reddedildiği takdirde, uygulamanın dizinleri hala kullanılabilir. + Genel dizinlerdeki dosyalara erişim icin depolama alanı izni gerekmektedir. Aksi takdirde, sadece uygulamanın dizinleri çalışacaktır. Privacy Browser Rehberi @@ -312,9 +344,10 @@ İndirme Konumu Privacy Browser\'ın genel indirme dizinini kullanması için depolama alanı izni gerekmektedir. Eğer reddedilirse, onun yerine uygulamanın indirme dizini kullanılacaktır. + OK - Orbot yüklenmeden Orbot proxy çalışmayacaktır. + Orbot yüklenmeden Orbot vekil sunucusu çalışmayacaktır. Orbot\'un bağlanması bekleniyor... @@ -324,6 +357,7 @@ Donanım Marka: Üretici: + Model: Cihaz: Bootloader: Donanım Yazılımı: @@ -337,8 +371,8 @@ OpenKeychain: EasyList: EasyPrivacy: - Fanboy’s Annoyance Listesi: - Fanboy’s Social Blocking Listesi: + Fanboy Rahatsızlık Listesi: + Fanboy Sosyal Engelleme Listesi: UltraPrivacy: Paket İmzası Yayınlayan DA: @@ -411,20 +445,26 @@ Ana reklam engelleme listesi. EasyPrivacy Ana takipçi engelleme listesi. - Fanboy’s annoyance listesi + Fanboy Rahatsızlık Listesi Rahatsız eden popupları ve linkleri engeller. Fanboy’s social blocking listesini de içerir. - Fanboy’s social blocking listesi + Fanboy Sosyal Engelleme Listesi Üçüncü taraf sosyal medya içeriklerini engeller. UltraPrivacy UltraPrivacy, EasyPrivacy\'de olmayan takipçileri de engeller fakat bu seçenek bazı web sitelerinin çökmesine sebep olabilir. Tüm üçüncü taraf istekleri engelle Tüm üçüncü taraf istekleri engellemek gizliliği arttırır, fakat çoğu web sitesinin çökmesine sebep olur. + Tor + Orbot vasıtasıyla vekil sunucusu + localhost:8118 üzerinden Orbot vasıtasıyla tüm web trafiği vekil sunucusu. + Tor anasayfa + Tor arama Searx DuckDuckGo - JavaScript devre dışı DuckDuckGo - JavaScript etkin Özel + Tor özel URL arama Arama Searx @@ -449,6 +489,8 @@ Yarı saydam gezinti çubuğu Gezinti çubuğunu, tam ekran modunda yarı saydam yapar. Her şeyi temizle + Çerezleri, DOM depolama alanını, form verisini ve Web Görünümü ön belleğini temizler. + Sonrasında, manuel olarak bütün “app_webview” ve “cache” dizinlerini siler. Çerezleri temizle Birinci ve Üçüncü taraf çerezleri temizler Dom Depolama Alanını temizle @@ -486,9 +528,10 @@ Harici uygulamayla indir Android indirme yönetecisi bazı cihazlarda iyi çalışmayabilir. Ek uygulama çubuğu simgelerini göster + Web Görünümünü yenilemek ve yer varsa çerezler ve DOM depolama alanını değiştirmek için uygulama çubuğunda simgeler gösterir. Koyu tema Temayı değiştirmek Privacy Browser\'ı yeniden başlatacak. - Gece mody + Gece modu Gece modunu etkinleştirmek aynı zamanda tüm sitelerde JavaScript\'i etkinleştirecek. Web sitesi resimlerini göster Bant genişliği korumayı devre dışı bırak. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a5dece77..d39bf641 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -75,6 +75,7 @@ Close Domain Domain: + IP Addresses: Issued To Issued By Common Name (CN):