</head>
<body>
- <h3>3.5 (version code 50)</h3>
- <p>18. August 2020 - Mindest-API 19, Ziel-API 29</p>
+ <h3><a href="https://www.stoutner.com/privacy-browser-3-5/">3.5</a> (version code 50)</h3>
+ <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=379ae3eabfd9ee949151b7b218b875ffcc627c5a">18. August 2020</a> - Mindest-API 19, Ziel-API 29</p>
<ul>
<li>Androids <a href="https://redmine.stoutner.com/issues/572">relativ</a> <a href="https://redmine.stoutner.com/issues/523">neues</a>
<a href="https://redmine.stoutner.com/issues/522">Tag/Nacht-</a><a href="https://redmine.stoutner.com/issues/506">Theme</a> wurde implementiert.</li>
</head>
<body>
- <h3>3.5 (version code 50)</h3>
- <p>18. August 2020 - Mindest-API 19, Ziel-API 29</p>
+ <h3><a href="https://www.stoutner.com/privacy-browser-3-5/">3.5</a> (version code 50)</h3>
+ <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=379ae3eabfd9ee949151b7b218b875ffcc627c5a">18. August 2020</a> - Mindest-API 19, Ziel-API 29</p>
<ul>
<li>Androids <a href="https://redmine.stoutner.com/issues/572">relativ</a> <a href="https://redmine.stoutner.com/issues/523">neues</a>
<a href="https://redmine.stoutner.com/issues/522">Tag/Nacht-</a><a href="https://redmine.stoutner.com/issues/506">Theme</a> wurde implementiert.</li>
</head>
<body>
- <h3>3.5 (version code 50)</h3>
- <p>18 August 2020 - minimum API 19, target API 29</p>
+ <h3><a href="https://www.stoutner.com/privacy-browser-3-5/">3.5</a> (version code 50)</h3>
+ <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=379ae3eabfd9ee949151b7b218b875ffcc627c5a">18 August 2020</a> - minimum API 19, target API 29</p>
<ul>
<li>Implement Android’s <a href="https://redmine.stoutner.com/issues/572">relatively</a> <a href="https://redmine.stoutner.com/issues/523">new</a>
<a href="https://redmine.stoutner.com/issues/522">Day/Night</a> <a href="https://redmine.stoutner.com/issues/506">theme</a>.</li>
</head>
<body>
- <h3>3.5 (version code 50)</h3>
- <p>18 August 2020 - minimum API 19, target API 29</p>
+ <h3><a href="https://www.stoutner.com/privacy-browser-3-5/">3.5</a> (version code 50)</h3>
+ <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=379ae3eabfd9ee949151b7b218b875ffcc627c5a">18 August 2020</a> - minimum API 19, target API 29</p>
<ul>
<li>Implement Android’s <a href="https://redmine.stoutner.com/issues/572">relatively</a> <a href="https://redmine.stoutner.com/issues/523">new</a>
<a href="https://redmine.stoutner.com/issues/522">Day/Night</a> <a href="https://redmine.stoutner.com/issues/506">theme</a>.</li>
</head>
<body>
- <h3>3.5 (código de versión 50)</h3>
- <p>18 de agosto de 2020 - API mínimo 19, API dirigido 29</p>
+ <h3><a href="https://www.stoutner.com/privacy-browser-3-5/">3.5</a> (código de versión 50)</h3>
+ <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=379ae3eabfd9ee949151b7b218b875ffcc627c5a">18 de agosto de 2020</a> - API mínimo 19, API dirigido 29</p>
<ul>
<li>Implementar el relativamente <a href="https://redmine.stoutner.com/issues/572">nuevo</a> <a href="https://redmine.stoutner.com/issues/523">tema</a>
<a href="https://redmine.stoutner.com/issues/522">Día/Noche</a> <a href="https://redmine.stoutner.com/issues/506">de Android</a>.</li>
</head>
<body>
- <h3>3.5 (código de versión 50)</h3>
- <p>18 de agosto de 2020 - API mínimo 19, API dirigido 29</p>
+ <h3><a href="https://www.stoutner.com/privacy-browser-3-5/">3.5</a> (código de versión 50)</h3>
+ <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=379ae3eabfd9ee949151b7b218b875ffcc627c5a">18 de agosto de 2020</a> - API mínimo 19, API dirigido 29</p>
<ul>
<li>Implementar el relativamente <a href="https://redmine.stoutner.com/issues/572">nuevo</a> <a href="https://redmine.stoutner.com/issues/523">tema</a>
<a href="https://redmine.stoutner.com/issues/522">Día/Noche</a> <a href="https://redmine.stoutner.com/issues/506">de Android</a>.</li>
</head>
<body>
- <h3>3.5 (version du code 50)</h3>
- <p>18 Août 2020 - API minimale : 19, API optimale : 29</p>
+ <h3><a href="https://www.stoutner.com/privacy-browser-3-5/">3.5</a> (version du code 50)</h3>
+ <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=379ae3eabfd9ee949151b7b218b875ffcc627c5a">18 Août 2020</a> - API minimale : 19, API optimale : 29</p>
<ul>
<li>Implement Android’s <a href="https://redmine.stoutner.com/issues/572">relatively</a> <a href="https://redmine.stoutner.com/issues/523">new</a>
<a href="https://redmine.stoutner.com/issues/522">Day/Night</a> <a href="https://redmine.stoutner.com/issues/506">theme</a>.</li>
</head>
<body>
- <h3>3.5 (version du code 50)</h3>
- <p>18 Août 2020 - API minimale : 19, API optimale : 29</p>
+ <h3><a href="https://www.stoutner.com/privacy-browser-3-5/">3.5</a> (version du code 50)</h3>
+ <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=379ae3eabfd9ee949151b7b218b875ffcc627c5a">18 Août 2020</a> - API minimale : 19, API optimale : 29</p>
<ul>
<li>Implement Android’s <a href="https://redmine.stoutner.com/issues/572">relatively</a> <a href="https://redmine.stoutner.com/issues/523">new</a>
<a href="https://redmine.stoutner.com/issues/522">Day/Night</a> <a href="https://redmine.stoutner.com/issues/506">theme</a>.</li>
</head>
<body>
- <h3>3.5 (versione codice 50)</h3>
- <p>18 Agosto 2020 - minima API 19, target API 29</p>
- <ul>
- <li>Implement Android’s <a href="https://redmine.stoutner.com/issues/572">relatively</a> <a href="https://redmine.stoutner.com/issues/523">new</a>
- <a href="https://redmine.stoutner.com/issues/522">Day/Night</a> <a href="https://redmine.stoutner.com/issues/506">theme</a>.</li>
- <li>Switch to using WebView relatively new built-in <a href="https://redmine.stoutner.com/issues/366">dark theme</a>.</li>
- <li><a href="https://redmine.stoutner.com/issues/461">Save and restore the state</a> if Privacy Browser is restarted in the background by the OS.</li>
- <li>Use the Content-Disposition header to get <a href="https://redmine.stoutner.com/issues/547">file names for downloads</a>.</li>
- <li>Fix <a href="https://redmine.stoutner.com/issues/556">uploading files</a> to some sites.</li>
- <li>Add <a href="https://redmine.stoutner.com/issues/576">Mojeek</a> and remove <a href="https://redmine.stoutner.com/issues/569">Qwant</a> and
- <a href="https://redmine.stoutner.com/issues/571">Searx</a> from the list of search engines.</li>
- <li>Fix a bug that sometimes caused swipe-to-refresh to operate <a href="https://redmine.stoutner.com/issues/514">even when disabled</a>.</li>
- <li>Reorder the <a href="https://redmine.stoutner.com/issues/544">context menus</a>.</li>
- <li>Apply <a href="https://redmine.stoutner.com/issues/584">custom headers</a> to links loaded from the WebView.</li>
+ <h3><a href="https://www.stoutner.com/privacy-browser-3-5/">3.5</a> (versione codice 50)</h3>
+ <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=379ae3eabfd9ee949151b7b218b875ffcc627c5a">18 Agosto 2020</a> - minima API 19, target API 29</p>
+ <ul>
+ <li>Implementazione del <a href="https://redmine.stoutner.com/issues/572">relativamente</a> <a href="https://redmine.stoutner.com/issues/523">nuovo</a>
+ <a href="https://redmine.stoutner.com/issues/522">tema</a> <a href="https://redmine.stoutner.com/issues/506">Giorno e Notte</a> di
+ Android.</li>
+ <li>Passaggio all'utilizzo del relativamente nuovo <a href="https://redmine.stoutner.com/issues/366">tema scuro</a> nativo di Webview.</li>
+ <li><a href="https://redmine.stoutner.com/issues/461">Salvataggio e ripristino dello stato</a> nel caso in cui Privacy Browser venga riavviato in background dal sistema operativo.</li>
+ <li>Utilizzo del "Content-Disposition header" per ottenere <a href="https://redmine.stoutner.com/issues/547">i nomi dei file nei download</a>.</li>
+ <li>Sistemazione <a href="https://redmine.stoutner.com/issues/556">dell'upload dei file</a> verso alcuni siti web.</li>
+ <li>Aggiunta di <a href="https://redmine.stoutner.com/issues/576">Mojeek</a> ed eliminazione di <a href="https://redmine.stoutner.com/issues/569">Qwant</a> e
+ <a href="https://redmine.stoutner.com/issues/571">Searx</a> dalla lista dei motori di ricerca.</li>
+ <li>Correzione di un baco che talvolta provocava il funzionamento dello swipe per aggiornare la pagina <a href="https://redmine.stoutner.com/issues/514">anche se disabilitato</a>.</li>
+ <li>Riordino dei <a href="https://redmine.stoutner.com/issues/544">menu contestuali</a>.</li>
+ <li>Applicazione di <a href="https://redmine.stoutner.com/issues/584">intestazioni personalizzate</a> ai collegamenti caricati da Webview.</li>
<li>Aggiornamento della traduzione Italiana fornita da Francesco Buratti.</li>
<li>Aggiornamento della traduzione Francese fornita da <a href="mailto:kevinliste@framalistes.org">Kévin LE FLOHIC</a>.</li>
<li>Aggiornamento della traduzione in Russo.</li>
</head>
<body>
- <h3>3.5 (versione codice 50)</h3>
- <p>18 Agosto 2020 - minima API 19, target API 29</p>
- <ul>
- <li>Implement Android’s <a href="https://redmine.stoutner.com/issues/572">relatively</a> <a href="https://redmine.stoutner.com/issues/523">new</a>
- <a href="https://redmine.stoutner.com/issues/522">Day/Night</a> <a href="https://redmine.stoutner.com/issues/506">theme</a>.</li>
- <li>Switch to using WebView relatively new built-in <a href="https://redmine.stoutner.com/issues/366">dark theme</a>.</li>
- <li><a href="https://redmine.stoutner.com/issues/461">Save and restore the state</a> if Privacy Browser is restarted in the background by the OS.</li>
- <li>Use the Content-Disposition header to get <a href="https://redmine.stoutner.com/issues/547">file names for downloads</a>.</li>
- <li>Fix <a href="https://redmine.stoutner.com/issues/556">uploading files</a> to some sites.</li>
- <li>Add <a href="https://redmine.stoutner.com/issues/576">Mojeek</a> and remove <a href="https://redmine.stoutner.com/issues/569">Qwant</a> and
- <a href="https://redmine.stoutner.com/issues/571">Searx</a> from the list of search engines.</li>
- <li>Fix a bug that sometimes caused swipe-to-refresh to operate <a href="https://redmine.stoutner.com/issues/514">even when disabled</a>.</li>
- <li>Reorder the <a href="https://redmine.stoutner.com/issues/544">context menus</a>.</li>
- <li>Apply <a href="https://redmine.stoutner.com/issues/584">custom headers</a> to links loaded from the WebView.</li>
+ <h3><a href="https://www.stoutner.com/privacy-browser-3-5/">3.5</a> (versione codice 50)</h3>
+ <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=379ae3eabfd9ee949151b7b218b875ffcc627c5a">18 Agosto 2020</a> - minima API 19, target API 29</p>
+ <ul>
+ <li>Implementazione del <a href="https://redmine.stoutner.com/issues/572">relativamente</a> <a href="https://redmine.stoutner.com/issues/523">nuovo</a>
+ <a href="https://redmine.stoutner.com/issues/522">tema</a> <a href="https://redmine.stoutner.com/issues/506">Giorno e Notte</a> di
+ Android.</li>
+ <li>Passaggio all'utilizzo del relativamente nuovo <a href="https://redmine.stoutner.com/issues/366">tema scuro</a> nativo di Webview.</li>
+ <li><a href="https://redmine.stoutner.com/issues/461">Salvataggio e ripristino dello stato</a> nel caso in cui Privacy Browser venga riavviato in background dal sistema operativo.</li>
+ <li>Utilizzo del "Content-Disposition header" per ottenere <a href="https://redmine.stoutner.com/issues/547">i nomi dei file nei download</a>.</li>
+ <li>Sistemazione <a href="https://redmine.stoutner.com/issues/556">dell'upload dei file</a> verso alcuni siti web.</li>
+ <li>Aggiunta di <a href="https://redmine.stoutner.com/issues/576">Mojeek</a> ed eliminazione di <a href="https://redmine.stoutner.com/issues/569">Qwant</a> e
+ <a href="https://redmine.stoutner.com/issues/571">Searx</a> dalla lista dei motori di ricerca.</li>
+ <li>Correzione di un baco che talvolta provocava il funzionamento dello swipe per aggiornare la pagina <a href="https://redmine.stoutner.com/issues/514">anche se disabilitato</a>.</li>
+ <li>Riordino dei <a href="https://redmine.stoutner.com/issues/544">menu contestuali</a>.</li>
+ <li>Applicazione di <a href="https://redmine.stoutner.com/issues/584">intestazioni personalizzate</a> ai collegamenti caricati da Webview.</li>
<li>Aggiornamento della traduzione Italiana fornita da Francesco Buratti.</li>
<li>Aggiornamento della traduzione Francese fornita da <a href="mailto:kevinliste@framalistes.org">Kévin LE FLOHIC</a>.</li>
<li>Aggiornamento della traduzione in Russo.</li>
</head>
<body>
- <h3>3.5 (код версии 50)</h3>
- <p>18 августа 2020 года - минимальный API 19, целевой API 29</p>
+ <h3><a href="https://www.stoutner.com/privacy-browser-3-5/">3.5</a> (код версии 50)</h3>
+ <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=379ae3eabfd9ee949151b7b218b875ffcc627c5a">18 августа 2020 года</a> - минимальный API 19, целевой API 29</p>
<ul>
<li>Внедрена <a href="https://redmine.stoutner.com/issues/572">недавно</a> <a href="https://redmine.stoutner.com/issues/523">появившаяся в Android</a>
<a href="https://redmine.stoutner.com/issues/522">тема</a> <a href="https://redmine.stoutner.com/issues/506">День/Ночь</a>.</li>
</head>
<body>
- <h3>3.5 (код версии 50)</h3>
- <p>18 августа 2020 года - минимальный API 19, целевой API 29</p>
+ <h3><a href="https://www.stoutner.com/privacy-browser-3-5/">3.5</a> (код версии 50)</h3>
+ <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=379ae3eabfd9ee949151b7b218b875ffcc627c5a">18 августа 2020 года</a> - минимальный API 19, целевой API 29</p>
<ul>
<li>Внедрена <a href="https://redmine.stoutner.com/issues/572">недавно</a> <a href="https://redmine.stoutner.com/issues/523">появившаяся в Android</a>
<a href="https://redmine.stoutner.com/issues/522">тема</a> <a href="https://redmine.stoutner.com/issues/506">День/Ночь</a>.</li>
</head>
<body>
- <h3>3.5 (version code 50)</h3>
- <p>18 August 2020 - minimum API 19, target API 29</p>
+ <h3><a href="https://www.stoutner.com/privacy-browser-3-5/">3.5</a> (version code 50)</h3>
+ <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=379ae3eabfd9ee949151b7b218b875ffcc627c5a">18 August 2020</a> - minimum API 19, target API 29</p>
<ul>
<li>Implement Android’s <a href="https://redmine.stoutner.com/issues/572">relatively</a> <a href="https://redmine.stoutner.com/issues/523">new</a>
<a href="https://redmine.stoutner.com/issues/522">Day/Night</a> <a href="https://redmine.stoutner.com/issues/506">theme</a>.</li>
</head>
<body>
- <h3>3.5 (version code 50)</h3>
- <p>18 August 2020 - minimum API 19, target API 29</p>
+ <h3><a href="https://www.stoutner.com/privacy-browser-3-5/">3.5</a> (version code 50)</h3>
+ <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=379ae3eabfd9ee949151b7b218b875ffcc627c5a">18 August 2020</a> - minimum API 19, target API 29</p>
<ul>
<li>Implement Android’s <a href="https://redmine.stoutner.com/issues/572">relatively</a> <a href="https://redmine.stoutner.com/issues/523">new</a>
<a href="https://redmine.stoutner.com/issues/522">Day/Night</a> <a href="https://redmine.stoutner.com/issues/506">theme</a>.</li>
private TabLayout tabLayout;
private ViewPager webViewPager;
- // Define the class variables.
- private String newIntentUrl;
-
// The current WebView is used in `onCreate()`, `onPrepareOptionsMenu()`, `onOptionsItemSelected()`, `onNavigationItemSelected()`, `onRestart()`, `onCreateContextMenu()`, `findPreviousOnPage()`,
// `findNextOnPage()`, `closeFindOnPage()`, `loadUrlFromTextBox()`, `onSslMismatchBack()`, `applyProxy()`, and `applyDomainSettings()`.
private NestedScrollWebView currentWebView;
// Replace the intent that started the app with this one.
setIntent(intent);
- // Process the intent here if Privacy Browser is fully initialized. If the process has been killed by the system while sitting in the background, this will be handled in `initializeWebView()`.
- if (ultraPrivacy != null) {
+ // Check to see if the app is being restarted.
+ if (savedStateArrayList == null || savedStateArrayList.size() == 0) { // The activity is running for the first time.
// Get the information from the intent.
String intentAction = intent.getAction();
Uri intentUriData = intent.getData();
String url;
// If the intent action is a web search, perform the search.
- if (isWebSearch) {
+ if (isWebSearch) { // The intent is a web search.
// Create an encoded URL string.
String encodedUrlString;
url = intentUriData.toString();
}
- // Check to see if the app is in the process of restarting
- if (savedStateArrayList == null) { // The app is not in the process of being restarted. Process the new intent.
- // Add a new tab if specified in the preferences.
- if (sharedPreferences.getBoolean("open_intents_in_new_tab", true)) { // Load the URL in a new tab.
- // Set the loading new intent flag.
- loadingNewIntent = true;
-
- // Add a new tab.
- addNewTab(url, true);
- } else { // Load the URL in the current tab.
- // Make it so.
- loadUrl(currentWebView, url);
- }
- } else { // The app is being restarted. Store the URL, which will be processed in `finishedPopulatingBlocklists()`.
- newIntentUrl = url;
+ // Add a new tab if specified in the preferences.
+ if (sharedPreferences.getBoolean("open_intents_in_new_tab", true)) { // Load the URL in a new tab.
+ // Set the loading new intent flag.
+ loadingNewIntent = true;
+
+ // Add a new tab.
+ addNewTab(url, true);
+ } else { // Load the URL in the current tab.
+ // Make it so.
+ loadUrl(currentWebView, url);
}
// Get a handle for the drawer layout.
tab.select();
};
- // Select the tab layout after 150 milliseconds, which leaves enough time for a new tab to be inflated. TODO. Switch to a post command.
+ // Select the tab layout after 150 milliseconds, which leaves enough time for a new tab to be inflated.
selectTabHandler.postDelayed(selectTabRunnable, 150);
}
}
webViewPager.setCurrentItem(savedTabPosition);
}
- // Process the new intent if it exists.
- if (newIntentUrl != null) {
+ // Get the intent that started the app.
+ Intent intent = getIntent();
+
+ // Get the information from the intent.
+ String intentAction = intent.getAction();
+ Uri intentUriData = intent.getData();
+
+ // Determine if this is a web search.
+ boolean isWebSearch = ((intentAction != null) && intentAction.equals(Intent.ACTION_WEB_SEARCH));
+
+ // Only process the URI if it contains data or it is a web search. If the user pressed the desktop icon after the app was already running the URI will be null.
+ if (intentUriData != null || isWebSearch) {
// Get the shared preferences.
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
+ // Create a URL string.
+ String url;
+
+ // If the intent action is a web search, perform the search.
+ if (isWebSearch) { // The intent is a web search.
+ // Create an encoded URL string.
+ String encodedUrlString;
+
+ // Sanitize the search input and convert it to a search.
+ try {
+ encodedUrlString = URLEncoder.encode(intent.getStringExtra(SearchManager.QUERY), "UTF-8");
+ } catch (UnsupportedEncodingException exception) {
+ encodedUrlString = "";
+ }
+
+ // Add the base search URL.
+ url = searchURL + encodedUrlString;
+ } else { // The intent should contain a URL.
+ // Set the intent data as the url.
+ url = intentUriData.toString();
+ }
+
// Add a new tab if specified in the preferences.
if (sharedPreferences.getBoolean("open_intents_in_new_tab", true)) { // Load the URL in a new tab.
// Set the loading new intent flag.
loadingNewIntent = true;
// Add a new tab.
- addNewTab(newIntentUrl, true);
+ addNewTab(url, true);
} else { // Load the URL in the current tab.
// Make it so.
- loadUrl(currentWebView, newIntentUrl);
+ loadUrl(currentWebView, url);
}
-
- // Reset the new intent URL.
- newIntentUrl = null;
}
}
}
} else {
urlRelativeLayout.setBackground(ResourcesCompat.getDrawable(getResources(), R.color.transparent, null));
}
- } else { // The fragment has not been populated. Try again in 100 milliseconds. //TODO try to replace this with a post command.
+ } else { // The fragment has not been populated. Try again in 100 milliseconds.
// Create a handler to set the current WebView.
Handler setCurrentWebViewHandler = new Handler();
// Get the custom view from the tab.
View tabView = tab.getCustomView();
- // Remove the incorrect warning below that the current tab view might be null.
- assert tabView != null;
+ // Only populate the title text view if the tab view has been fully populated.
+ if (tabView != null) {
+ // Get the title text view from the tab.
+ TextView tabTitleTextView = tabView.findViewById(R.id.title_textview);
- // Get the title text view from the tab.
- TextView tabTitleTextView = tabView.findViewById(R.id.title_textview);
-
- // Set the title according to the URL.
- if (title.equals("about:blank")) {
- // Set the title to indicate a new tab.
- tabTitleTextView.setText(R.string.new_tab);
- } else {
- // Set the title as the tab text.
- tabTitleTextView.setText(title);
+ // Set the title according to the URL.
+ if (title.equals("about:blank")) {
+ // Set the title to indicate a new tab.
+ tabTitleTextView.setText(R.string.new_tab);
+ } else {
+ // Set the title as the tab text.
+ tabTitleTextView.setText(title);
+ }
}
}
}