import com.stoutner.privacybrowser.R;
import com.stoutner.privacybrowser.adapters.WebViewPagerAdapter;
-import com.stoutner.privacybrowser.asynctasks.SaveUrl;
-import com.stoutner.privacybrowser.asynctasks.SaveWebpageImage;
import com.stoutner.privacybrowser.coroutines.GetHostIpAddressesCoroutine;
import com.stoutner.privacybrowser.coroutines.PopulateBlocklistsCoroutine;
import com.stoutner.privacybrowser.coroutines.PrepareSaveDialogCoroutine;
+import com.stoutner.privacybrowser.coroutines.SaveUrlCoroutine;
+import com.stoutner.privacybrowser.coroutines.SaveWebpageImageCoroutine;
import com.stoutner.privacybrowser.dataclasses.PendingDialogDataClass;
import com.stoutner.privacybrowser.dialogs.CreateBookmarkDialog;
import com.stoutner.privacybrowser.dialogs.CreateBookmarkFolderDialog;
public void onActivityResult(Uri fileUri) {
// Only save the URL if the file URI is not null, which happens if the user exited the file picker by pressing back.
if (fileUri != null) {
- new SaveUrl(getApplicationContext(), resultLauncherActivityHandle, fileUri, currentWebView.getSettings().getUserAgentString(), currentWebView.getAcceptCookies()).execute(saveUrlString);
+ // Instantiate the save URL coroutine.
+ SaveUrlCoroutine saveUrlCoroutine = new SaveUrlCoroutine();
+
+ // Save the URL.
+ saveUrlCoroutine.save(getApplicationContext(), resultLauncherActivityHandle, saveUrlString, fileUri, currentWebView.getSettings().getUserAgentString(),
+ currentWebView.getAcceptCookies());
}
// Reset the save URL string.
public void onActivityResult(Uri fileUri) {
// Only save the webpage image if the file URI is not null, which happens if the user exited the file picker by pressing back.
if (fileUri != null) {
+ // Instantiate the save webpage image coroutine.
+ SaveWebpageImageCoroutine saveWebpageImageCoroutine = new SaveWebpageImageCoroutine();
+
// Save the webpage image.
- new SaveWebpageImage(resultLauncherActivityHandle, fileUri, currentWebView).execute();
+ saveWebpageImageCoroutine.save(resultLauncherActivityHandle, fileUri, currentWebView);
}
}
});
}
}
} else { // The app has been restarted.
- // Set the saved tab position to be the size of the saved state array list. The tab position is 0 based, meaning the at the new tab will be the tab position that is restored.
- savedTabPosition = savedStateArrayList.size();
+ // Get the information from the intent.
+ String intentAction = intent.getAction();
+ Uri intentUriData = intent.getData();
+ String intentStringExtra = intent.getStringExtra(Intent.EXTRA_TEXT);
+
+ // Determine if this is a web search.
+ boolean isWebSearch = ((intentAction != null) && intentAction.equals(Intent.ACTION_WEB_SEARCH));
+
+ // If the new intent will open a new tab, set the saved tab position to be the size of the saved state array list.
+ // The tab position is 0 based, meaning the at the new tab will be the tab position that is restored.
+ if (intentUriData != null || intentStringExtra != null || isWebSearch)
+ savedTabPosition = savedStateArrayList.size();
// Replace the intent that started the app with this one. This will load the tab after the others have been restored.
setIntent(intent);
startActivity(emailIntent);
} catch (ActivityNotFoundException exception) {
// Display a snackbar.
- Snackbar.make(currentWebView, getString(R.string.error) + " " + exception, Snackbar.LENGTH_INDEFINITE).show();
+ Snackbar.make(currentWebView, getString(R.string.error) + exception, Snackbar.LENGTH_INDEFINITE).show();
}
// Consume the event.
currentWebView.loadUrl(temporaryMhtFile.toString());
} catch (Exception exception) {
// Display a snackbar.
- Snackbar.make(currentWebView, getString(R.string.error) + " " + exception, Snackbar.LENGTH_INDEFINITE).show();
+ Snackbar.make(currentWebView, getString(R.string.error) + exception, Snackbar.LENGTH_INDEFINITE).show();
}
} else { // Let the WebView handle opening of the file.
// Open the file.
startActivity(openWithAppIntent);
} catch (ActivityNotFoundException exception) { // There are no apps available to open the URL.
// Show a snackbar with the error.
- Snackbar.make(currentWebView, getString(R.string.error) + " " + exception, Snackbar.LENGTH_INDEFINITE).show();
+ Snackbar.make(currentWebView, getString(R.string.error) + exception, Snackbar.LENGTH_INDEFINITE).show();
}
}
startActivity(openWithBrowserIntent);
} catch (ActivityNotFoundException exception) { // There are no browsers available to open the URL.
// Show a snackbar with the error.
- Snackbar.make(currentWebView, getString(R.string.error) + " " + exception, Snackbar.LENGTH_INDEFINITE).show();
+ Snackbar.make(currentWebView, getString(R.string.error) + exception, Snackbar.LENGTH_INDEFINITE).show();
}
}
// Add the first tab.
addNewTab("", true);
} else { // The activity has been restarted.
- // Restore each tab. Once the minimum API >= 24, a `forEach()` command can be used.
+ // Restore each tab.
for (int i = 0; i < savedStateArrayList.size(); i++) {
// Add a new tab.
tabLayout.addTab(tabLayout.newTab());
nestedScrollWebView.setWebViewClient(new WebViewClient() {
// `shouldOverrideUrlLoading` makes this WebView the default handler for URLs inside the app, so that links are not kicked out to other apps.
- // The deprecated `shouldOverrideUrlLoading` must be used until API >= 24.
@Override
- public boolean shouldOverrideUrlLoading(WebView view, String url) {
+ public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest webResourceRequest) {
+ // Get the URL from the web resource request.
+ String url = webResourceRequest.getUrl().toString();
+
// Sanitize the url.
url = sanitizeUrl(url);
startActivity(emailIntent);
} catch (ActivityNotFoundException exception) {
// Display a snackbar.
- Snackbar.make(currentWebView, getString(R.string.error) + " " + exception, Snackbar.LENGTH_INDEFINITE).show();
+ Snackbar.make(currentWebView, getString(R.string.error) + exception, Snackbar.LENGTH_INDEFINITE).show();
}
startActivity(dialIntent);
} catch (ActivityNotFoundException exception) {
// Display a snackbar.
- Snackbar.make(currentWebView, getString(R.string.error) + " " + exception, Snackbar.LENGTH_INDEFINITE).show();
+ Snackbar.make(currentWebView, getString(R.string.error) + exception, Snackbar.LENGTH_INDEFINITE).show();
}
// Returning true indicates Privacy Browser is handling the URL by creating an intent.
try {
startActivity(genericIntent);
} catch (ActivityNotFoundException exception) {
- Snackbar.make(nestedScrollWebView, getString(R.string.unrecognized_url) + " " + url, Snackbar.LENGTH_SHORT).show();
+ Snackbar.make(nestedScrollWebView, getString(R.string.unrecognized_url) + url, Snackbar.LENGTH_SHORT).show();
}
// Returning true indicates Privacy Browser is handling the URL by creating an intent.
if ((currentDomainName != null) && !currentDomainName.isEmpty()) {
// Get the IP addresses for the current URI.
- GetHostIpAddressesCoroutine.getAddresses(currentDomainName, nestedScrollWebView, getSupportFragmentManager(), getString(R.string.pinned_mismatch));
+ GetHostIpAddressesCoroutine.checkPinnedMismatch(currentDomainName, nestedScrollWebView, getSupportFragmentManager(), getString(R.string.pinned_mismatch));
}
// Replace Refresh with Stop if the options menu has been created. (The first WebView typically begins loading before the menu items are instantiated.)