From: Soren Stoutner <soren@stoutner.com> Date: Wed, 15 Aug 2018 06:21:19 +0000 (-0700) Subject: Bump the target API to 28. X-Git-Tag: v2.13~10 X-Git-Url: https://gitweb.stoutner.com/?a=commitdiff_plain;h=06f516f2f5c745981e292451d01b9df7d1fd57eb;p=PrivacyBrowserAndroid.git Bump the target API to 28. --- diff --git a/app/build.gradle b/app/build.gradle index a98b368d..8710e38d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,12 +20,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 27 - buildToolsVersion '27.0.3' + compileSdkVersion 28 + buildToolsVersion '28.0.2' defaultConfig { minSdkVersion 19 - targetSdkVersion 27 + targetSdkVersion 28 versionCode 35 versionName "2.12" } @@ -71,7 +71,7 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'com.android.support:design:27.0.2' + implementation 'com.android.support:design:28.0.0-rc01' // Only compile Firebase ads for the free flavor. freeImplementation 'com.google.firebase:firebase-ads:15.0.1' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index de72063f..fc0dc95a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -43,7 +43,9 @@ android:roundIcon="@mipmap/privacy_browser_round" android:allowBackup="false" android:fullBackupContent="false" - android:supportsRtl="true" > + android:supportsRtl="true" + android:networkSecurityConfig="@xml/network_security_config" + tools:ignore="UnusedAttribute" > <!-- If `android:name="android.webkit.WebView.MetricsOptOut"` is not `true` then `WebViews` will upload metrics to Google. <https://developer.android.com/reference/android/webkit/WebView.html> --> <meta-data diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java b/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java index cc232311..36b855a4 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java @@ -1545,15 +1545,18 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook cookieManager.flush(); } - // Reset the Refresh title. - refreshMenuItem.setTitle(R.string.refresh); - - // If the icon is displayed in the AppBar, reset it according to the theme. - if (displayAdditionalAppBarIcons) { - if (darkTheme) { - refreshMenuItem.setIcon(R.drawable.refresh_enabled_dark); - } else { - refreshMenuItem.setIcon(R.drawable.refresh_enabled_light); + // Update the Refresh menu item if it has been created. + if (refreshMenuItem != null) { + // Reset the Refresh title. + refreshMenuItem.setTitle(R.string.refresh); + + // If the icon is displayed in the AppBar, reset it according to the theme. + if (displayAdditionalAppBarIcons) { + if (darkTheme) { + refreshMenuItem.setIcon(R.drawable.refresh_enabled_dark); + } else { + refreshMenuItem.setIcon(R.drawable.refresh_enabled_light); + } } } diff --git a/app/src/main/res/layout/main_drawerlayout.xml b/app/src/main/res/layout/main_drawerlayout.xml index f5801791..f87741ca 100644 --- a/app/src/main/res/layout/main_drawerlayout.xml +++ b/app/src/main/res/layout/main_drawerlayout.xml @@ -26,7 +26,8 @@ android:layout_width="match_parent" > <!-- `android:fitsSystemWindows="true"` moves `root_coordinatorlayout` below the system status bar. When it is specified, the theme should include `<item name="android:windowTranslucentStatus">true</item>`. - Setting the CoordinatorLayout to be `focusableInTouchMode` prevents the URL text box from stealing focus on launch and opening the keyboard. --> + Setting the CoordinatorLayout to be `focusableInTouchMode` prevents the URL text box from stealing focus on launch and opening the keyboard. + `android:background` sets the background color of the status bar, which is then overlaid with a scrim. --> <android.support.design.widget.CoordinatorLayout android:id="@+id/root_coordinatorlayout" xmlns:tools="http://schemas.android.com/tools" @@ -35,7 +36,8 @@ android:layout_width="match_parent" android:fitsSystemWindows="true" android:focusable="true" - android:focusableInTouchMode="true" > + android:focusableInTouchMode="true" + android:background="?attr/mainStatusBarBackground" > <!-- The purpose of the `LinearLayout` is to place the included `main_webview` below `app_bar_layout`. --> <LinearLayout diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index b2629d0a..3a46aebf 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -152,6 +152,7 @@ <string name="privacy_browser_web_page">Página web de Navegador Privado</string> <string name="add_to_home_screen">Añadir a la ventana de inicio</string> <string name="refresh">Actualizar</string> + <string name="stop">Parar</string> <!-- Context Menus. --> <string name="load_url">Cargar URL</string> diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index da628811..37b1f3ad 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -152,6 +152,7 @@ <string name="privacy_browser_web_page">Pagina web di Privacy Browser</string> <string name="add_to_home_screen">Aggiungi collegamento</string> <string name="refresh">Aggiorna</string> + <string name="stop">Stop</string> <!-- Context Menus. --> <string name="load_url">Apri URL</string> @@ -455,7 +456,7 @@ <!-- Download Location --> <string name="download_location">Cartella di Download</string> <string name="download_location_message">Privacy Browser necessita del permesso di accesso alla memoria di storage per utilizzare la cartella pubblica di download. - Nel caso in cui il permesso sia negato sarà utilizzata la cartella di download dell'applicazione.</string> + Nel caso in cui il permesso sia negato sarà utilizzata la cartella di download dell\'applicazione.</string> <string name="ok">OK</string> <!-- Orbot. --> diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index b3f7cd3d..9f0b3990 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -153,6 +153,7 @@ <string name="privacy_browser_web_page">Privacy Browser веб-ÑÑÑаниÑа</string> <string name="add_to_home_screen">ÐобавиÑÑ Ð½Ð° главнÑй ÑкÑан</string> <string name="refresh">ÐбновиÑÑ</string> + <string name="stop">ÐÑÑановиÑÑ</string> <!-- Context Menus. --> <string name="load_url">ÐÑкÑÑÑÑ URL</string> diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml new file mode 100644 index 00000000..6854a106 --- /dev/null +++ b/app/src/main/res/values-v21/styles.xml @@ -0,0 +1,213 @@ +<?xml version="1.0" encoding="utf-8"?> + +<!-- + Copyright © 2015-2017 Soren Stoutner <soren@stoutner.com>. + + This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>. + + Privacy Browser 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 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. If not, see <http://www.gnu.org/licenses/>. --> + +<resources> + <!-- Light theme styles. --> + + <!-- `android:windowTranslucentStatus` makes the system status bar translucent. When it is specified the root layout should include `android:fitsSystemWindows="true"`. --> + <style name="PrivacyBrowserLight" parent="Theme.AppCompat.Light.NoActionBar" > + <item name="android:windowTranslucentStatus">true</item> + <item name="mainStatusBarBackground">@color/gray_500</item> + <item name="android:textColorPrimary">@color/primary_text_color_selector_light</item> + <item name="colorAccent">@color/blue_700</item> + <item name="android:textColorHighlight">@color/blue_200</item> + <item name="navigationHeaderBackground">@color/blue_700</item> + <item name="navigationHeaderTextColor">@color/white</item> + <item name="appBarTheme">@style/PrivacyBrowserAppBarLight</item> + <item name="progressTintColor">@color/blue_700</item> + <item name="navigationIconTintColor">@color/blue_800</item> + <item name="findOnPageIconTintColor">@color/blue_800</item> + <item name="viewSourceIconTintColor">@color/black</item> + <item name="sslHeader">@color/blue_700</item> + <item name="sslTitle">@color/blue_900</item> + <item name="urlHistoryText">@color/black</item> + <item name="redText">@color/red_a700</item> + <item name="aboutIcon">@drawable/about_light</item> + <item name="dialogTabLayoutTheme">@style/PrivacyBrowserTabLayoutDialogLight</item> + </style> + + <!-- `windowActionModeOverlay` makes the contextual app bar cover the support app bar. --> + <style name="PrivacyBrowserLight.SecondaryActivity" > + <item name="windowActionModeOverlay">true</item> + <item name="android:windowTranslucentStatus">false</item> + <item name="colorPrimaryDark">@color/blue_700</item> + <item name="android:statusBarColor">@color/blue_900</item> + <item name="android:textColorHighlight">@color/blue_200</item> + <item name="android:actionModeBackground">@color/blue_700</item> + <item name="bookmarksSpinnerHeaderTextColor">@color/white</item> + <item name="bookmarksSpinnerTextColorSelector">@color/bookmarks_spinner_color_selector_light</item> + <item name="bookmarksSpinnerBackground">@color/blue_750</item> + <item name="editBookmarkSpinnerTextColorSelector">@color/edit_bookmark_spinner_color_selector_light</item> + <item name="requestsSpinnerHeaderTextColor">@color/white</item> + <item name="requestsSpinnerTextColorSelector">@color/requests_spinner_color_selector_light</item> + <item name="requestsSpinnerBackground">@color/blue_750</item> + <item name="listSelectorDrawable">@drawable/list_selector_light</item> + <item name="aboutTitle">@color/blue_900</item> + <item name="aboutText">@color/blue_700</item> + <item name="aboutBackground">@color/white</item> + <item name="domainSettingsIconTintColor">@color/blue_800</item> + <item name="deleteIcon">@drawable/delete_light</item> + <item name="addIcon">@drawable/add_light</item> + <item name="addBookmarkIcon">@drawable/create_bookmark_light</item> + <item name="addFolderIcon">@drawable/create_folder_light</item> + <item name="selectAllIcon">@drawable/select_all_light</item> + <item name="editIcon">@drawable/edit_light</item> + <item name="moveToFolderIcon">@drawable/move_to_folder_light</item> + <item name="actionBarPopupTheme">@style/PrivacyBrowserPopupsLight</item> + <item name="appBarTextTheme">@style/PrivacyBrowserAppBarWhiteText</item> + <item name="tabLayoutTheme">@style/PrivacyBrowserTabLayoutLight</item> + <item name="popupsTheme">@style/PrivacyBrowserPopupsLight</item> + </style> + + <!-- `colorPrimaryDark` is the color of the status bar. --> + <style name="PrivacyBrowserSettingsLight" parent="Theme.AppCompat.Light.DarkActionBar" > + <item name="colorPrimary">@color/blue_700</item> + <item name="colorPrimaryDark">@color/blue_900</item> + <item name="colorAccent">@color/blue_700</item> + <item name="userAgentIcon">@drawable/user_agent_light</item> + <item name="searchIcon">@drawable/search_enabled_light</item> + <item name="homepageIcon">@drawable/home_enabled_light</item> + <item name="fontSizeIcon">@drawable/font_size_light</item> + </style> + + <!-- `ThemeOverlay.AppCompat.ActionBar` makes the hamburger icons dark. --> + <style name="PrivacyBrowserAppBarLight" parent="ThemeOverlay.AppCompat.ActionBar" /> + + <!-- `ThemeOverlay.AppCompat.Dark.ActionBar` makes the text and the icons in the AppBar white. --> + <style name="PrivacyBrowserAppBarWhiteText" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> + + <!-- `ThemeOverlay.AppCompat.Light` makes the popups have a light background with dark text. --> + <style name="PrivacyBrowserPopupsLight" parent="ThemeOverlay.AppCompat.Light" /> + + <!-- Configure the About and Guide `TabLayouts`. --> + <style name="PrivacyBrowserTabLayoutLight" parent="Widget.Design.TabLayout" > + <item name="android:textColorPrimary">@color/white</item> + <item name="android:textColorSecondary">@color/blue_100</item> + <item name="tabIndicatorColor">@color/white</item> + </style> + + <style name="PrivacyBrowserTabLayoutDialogLight" parent="Widget.Design.TabLayout" > + <item name="android:textColorPrimary">@color/blue_700</item> + <item name="android:textColorSecondary">@color/blue_700_50</item> + </style> + + <style name="PrivacyBrowserAlertDialogLight" parent="Theme.AppCompat.Light.Dialog.Alert" > + <item name="colorAccent">@color/blue_700</item> + </style> + + <style name="PrivacyBrowserProgressBar" parent="Widget.AppCompat.ProgressBar.Horizontal" > + <item name="android:indeterminateDrawable">@android:drawable/progress_horizontal</item> + </style> + + + <!-- Dark theme styles. --> + + <!-- `android:windowTranslucentStatus` makes the system status bar translucent. When it is specified the root layout should include `android:fitsSystemWindows="true"`. --> + <style name="PrivacyBrowserDark" parent="Theme.AppCompat.NoActionBar" > + <item name="android:windowTranslucentStatus">true</item> + <item name="mainStatusBarBackground">@color/black</item> + <item name="android:textColorPrimary">@color/primary_text_color_selector_dark</item> + <item name="colorAccent">@color/blue_600</item> + <item name="android:textColorHighlight">@color/blue_800</item> + <item name="navigationHeaderBackground">@color/blue_800</item> + <item name="navigationHeaderTextColor">@color/gray_300</item> + <item name="appBarTheme">@style/PrivacyBrowserAppBarDark</item> + <item name="progressTintColor">@color/blue_600</item> + <item name="navigationIconTintColor">@color/blue_600</item> + <item name="findOnPageIconTintColor">@color/blue_600</item> + <item name="viewSourceIconTintColor">@color/gray_300</item> + <item name="sslHeader">@color/blue_400</item> + <item name="sslTitle">@color/blue_700</item> + <item name="urlHistoryText">@color/gray_200</item> + <item name="redText">@color/red_900</item> + <item name="aboutIcon">@drawable/about_dark</item> + </style> + + <!-- `windowActionModeOverlay` makes the contextual app bar cover the support app bar. `colorPrimaryDark` goes behind the status bar, which is then darkened by the overlay.--> + <style name="PrivacyBrowserDark.SecondaryActivity" > + <item name="windowActionModeOverlay">true</item> + <item name="android:windowTranslucentStatus">false</item> + <item name="colorPrimaryDark">@color/blue_800</item> + <item name="android:statusBarColor">@color/blue_900</item> + <item name="android:actionModeBackground">@color/blue_800</item> + <item name="bookmarksSpinnerHeaderTextColor">@color/gray_300</item> + <item name="bookmarksSpinnerTextColorSelector">@color/bookmarks_spinner_color_selector_dark</item> + <item name="bookmarksSpinnerBackground">@color/blue_830</item> + <item name="editBookmarkSpinnerTextColorSelector">@color/edit_bookmark_spinner_color_selector_dark</item> + <item name="requestsSpinnerHeaderTextColor">@color/gray_300</item> + <item name="requestsSpinnerTextColorSelector">@color/requests_spinner_color_selector_dark</item> + <item name="requestsSpinnerBackground">@color/blue_830</item> + <item name="aboutTitle">@color/blue_600</item> + <item name="aboutText">@color/blue_400</item> + <item name="aboutBackground">@color/gray_850</item> + <item name="listSelectorDrawable">@drawable/list_selector_dark</item> + <item name="domainSettingsIconTintColor">@color/blue_600</item> + <item name="deleteIcon">@drawable/delete_dark</item> + <item name="addIcon">@drawable/add_dark</item> + <item name="addBookmarkIcon">@drawable/create_bookmark_dark</item> + <item name="addFolderIcon">@drawable/create_folder_dark</item> + <item name="selectAllIcon">@drawable/select_all_dark</item> + <item name="editIcon">@drawable/edit_dark</item> + <item name="moveToFolderIcon">@drawable/move_to_folder_dark</item> + <item name="appBarTextTheme">@style/PrivacyBrowserAppBarDark</item> + <item name="tabLayoutTheme">@style/PrivacyBrowserTabLayoutDark</item> + <item name="popupsTheme">@style/PrivacyBrowserPopupsDark</item> + <item name="android:spinnerDropDownItemStyle">@style/PrivacyBrowserSpinnerDropDownItemStyleDark</item> + </style> + + <style name="PrivacyBrowserSettingsDark" parent="Theme.AppCompat" > + <item name="colorPrimary">@color/blue_800</item> + <item name="colorPrimaryDark">@color/blue_900</item> + <item name="android:textColorPrimary">@color/primary_text_color_selector_dark</item> + <item name="colorAccent">@color/blue_600</item> + <item name="userAgentIcon">@drawable/user_agent_dark</item> + <item name="searchIcon">@drawable/search_enabled_dark</item> + <item name="homepageIcon">@drawable/home_enabled_dark</item> + <item name="fontSizeIcon">@drawable/font_size_dark</item> + </style> + + <!-- `ThemeOverlay.AppCompat.Dark.ActionBar` makes the text and the icons in the AppBar white. --> + <style name="PrivacyBrowserAppBarDark" parent="ThemeOverlay.AppCompat.Dark.ActionBar" > + <item name="android:textColorPrimary">@color/gray_300</item> + </style> + + <!-- Configure the About and Guide `TabLayouts`. --> + <style name="PrivacyBrowserTabLayoutDark" parent="Widget.Design.TabLayout" > + <item name="tabBackground">@color/blue_800</item> + <item name="android:textColorSecondary">@color/blue_300</item> + <item name="tabIndicatorColor">@color/gray_300</item> + </style> + + <style name="PrivacyBrowserAlertDialogDark" parent="Theme.AppCompat.Dialog.Alert" > + <item name="android:windowBackground">@color/gray_850</item> + <item name="android:textColorPrimary">@color/gray_300</item> + <item name="android:textColorSecondary">@color/gray_300</item> + <item name="colorAccent">@color/blue_600</item> + </style> + + <style name="PrivacyBrowserSpinnerDropDownItemStyleDark" parent="Base.Widget.AppCompat.TextView.SpinnerItem" > + <item name="android:textColor">@color/gray_300</item> + </style> + + <!-- `ThemeOverlay.AppCompat.Dark` makes the popups have a dark background with light text. --> + <style name="PrivacyBrowserPopupsDark" parent="ThemeOverlay.AppCompat.Dark" > + <item name="android:textColorPrimary">@color/primary_text_color_selector_dark</item> + </style> +</resources> \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 06f63c00..c04bceb5 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -25,6 +25,7 @@ <attr name="tabLayoutTheme" format="reference" /> <attr name="dialogTabLayoutTheme" format="reference" /> + <attr name="mainStatusBarBackground" format="reference" /> <attr name="aboutTitle" format="reference" /> <attr name="aboutText" format="reference" /> <attr name="aboutBackground" format="reference" /> diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index b785fde0..da59ae58 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -24,6 +24,7 @@ <!-- `android:windowTranslucentStatus` makes the system status bar translucent. When it is specified the root layout should include `android:fitsSystemWindows="true"`. --> <style name="PrivacyBrowserLight" parent="Theme.AppCompat.Light.NoActionBar" > <item name="android:windowTranslucentStatus">true</item> + <item name="mainStatusBarBackground">@color/gray_500</item> <item name="android:textColorPrimary">@color/primary_text_color_selector_light</item> <item name="colorAccent">@color/blue_700</item> <item name="android:textColorHighlight">@color/blue_200</item> @@ -42,7 +43,7 @@ <item name="dialogTabLayoutTheme">@style/PrivacyBrowserTabLayoutDialogLight</item> </style> - <!-- `windowActionModeOverlay` makes the contextual app bar cover the support app bar. `colorPrimaryDark` goes behind the status bar, which is then darkened by the overlay.--> + <!-- `windowActionModeOverlay` makes the contextual app bar cover the support app bar. --> <style name="PrivacyBrowserLight.SecondaryActivity" > <item name="windowActionModeOverlay">true</item> <item name="colorPrimaryDark">@color/blue_700</item> @@ -119,6 +120,7 @@ <!-- `android:windowTranslucentStatus` makes the system status bar translucent. When it is specified the root layout should include `android:fitsSystemWindows="true"`. --> <style name="PrivacyBrowserDark" parent="Theme.AppCompat.NoActionBar" > <item name="android:windowTranslucentStatus">true</item> + <item name="mainStatusBarBackground">@color/black</item> <item name="android:textColorPrimary">@color/primary_text_color_selector_dark</item> <item name="colorAccent">@color/blue_600</item> <item name="android:textColorHighlight">@color/blue_800</item> @@ -139,7 +141,7 @@ <!-- `windowActionModeOverlay` makes the contextual app bar cover the support app bar. `colorPrimaryDark` goes behind the status bar, which is then darkened by the overlay.--> <style name="PrivacyBrowserDark.SecondaryActivity" > <item name="windowActionModeOverlay">true</item> - <item name="colorPrimaryDark">@color/blue_800</item> + <item name="colorPrimaryDark">@color/blue_900</item> <item name="android:actionModeBackground">@color/blue_800</item> <item name="bookmarksSpinnerHeaderTextColor">@color/gray_300</item> <item name="bookmarksSpinnerTextColorSelector">@color/bookmarks_spinner_color_selector_dark</item> diff --git a/app/src/main/res/xml/network_security_config.xml b/app/src/main/res/xml/network_security_config.xml new file mode 100644 index 00000000..e7ed677f --- /dev/null +++ b/app/src/main/res/xml/network_security_config.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> + +<!-- + Copyright © 2018 Soren Stoutner <soren@stoutner.com>. + + This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>. + + Privacy Browser 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 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. If not, see <http://www.gnu.org/licenses/>. --> + +<!-- Allow HTTP traffic. --> +<network-security-config> + <base-config cleartextTrafficPermitted="true" /> +</network-security-config> \ No newline at end of file