*
* Download cookie code contributed 2017 Hendrik Knackstedt. Copyright assigned to Soren Stoutner <soren@stoutner.com>.
*
- * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
+ * This file is part of Privacy Browser Android <https://www.stoutner.com/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
private lateinit var findOnPageLinearLayout: LinearLayout
private lateinit var fullScreenVideoFrameLayout: FrameLayout
private lateinit var initialGrayColorSpan: ForegroundColorSpan
+ private lateinit var inputMethodManager: InputMethodManager
private lateinit var navigationBackMenuItem: MenuItem
private lateinit var navigationForwardMenuItem: MenuItem
private lateinit var navigationHistoryMenuItem: MenuItem
private var ultraPrivacy: ArrayList<List<Array<String>>>? = null
private var waitingForProxy = false
- // Define the save webpage image activity result launcher. It must be defined before `onCreate()` is run or the app will crash.
+ // Define the browse file upload activity result launcher. It must be defined before `onCreate()` is run or the app will crash.
private val browseFileUploadActivityResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { activityResult ->
// Pass the file to the WebView.
fileChooserCallback.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(activityResult.resultCode, activityResult.data))
}
// Define the save URL activity result launcher. It must be defined before `onCreate()` is run or the app will crash.
- private val saveUrlActivityResultLauncher = registerForActivityResult<String, Uri>(ActivityResultContracts.CreateDocument("*/*")) { fileUri ->
+ private val saveUrlActivityResultLauncher = registerForActivityResult(ActivityResultContracts.CreateDocument("*/*")) { 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) {
// Instantiate the save URL coroutine.
}
// Define the save webpage archive activity result launcher. It must be defined before `onCreate()` is run or the app will crash.
- private val saveWebpageArchiveActivityResultLauncher = registerForActivityResult<String, Uri>(ActivityResultContracts.CreateDocument("multipart/related")) { fileUri ->
+ private val saveWebpageArchiveActivityResultLauncher = registerForActivityResult(ActivityResultContracts.CreateDocument("multipart/related")) { fileUri ->
// Only save the webpage archive if the file URI is not null, which happens if the user exited the file picker by pressing back.
if (fileUri != null) {
// Get a cursor from the content resolver.
}
// Define the save webpage image activity result launcher. It must be defined before `onCreate()` is run or the app will crash.
- private val saveWebpageImageActivityResultLauncher = registerForActivityResult<String, Uri>(ActivityResultContracts.CreateDocument("image/png")) { fileUri ->
+ private val saveWebpageImageActivityResultLauncher = registerForActivityResult(ActivityResultContracts.CreateDocument("image/png")) { 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.
pendingDialogsArrayList.clear()
}
- public override fun onSaveInstanceState(savedInstanceState: Bundle) {
+ public override fun onSaveInstanceState(outState: Bundle) {
// Run the default commands.
- super.onSaveInstanceState(savedInstanceState)
+ super.onSaveInstanceState(outState)
// Only save the instance state if the WebView state adapter is not null, which will be the case if the app is restarting to change the initial app theme.
if (webViewStateAdapter != null) {
val currentTabPosition = tabLayout.selectedTabPosition
// Store the saved states in the bundle.
- savedInstanceState.putBoolean(BOOKMARKS_DRAWER_PINNED, bookmarksDrawerPinned)
- savedInstanceState.putString(PROXY_MODE, proxyMode)
- savedInstanceState.putParcelableArrayList(SAVED_NESTED_SCROLL_WEBVIEW_STATE_ARRAY_LIST, savedNestedScrollWebViewStateArrayList)
- savedInstanceState.putParcelableArrayList(SAVED_STATE_ARRAY_LIST, savedStateArrayList)
- savedInstanceState.putInt(SAVED_TAB_POSITION, currentTabPosition)
+ outState.putBoolean(BOOKMARKS_DRAWER_PINNED, bookmarksDrawerPinned)
+ outState.putString(PROXY_MODE, proxyMode)
+ outState.putParcelableArrayList(SAVED_NESTED_SCROLL_WEBVIEW_STATE_ARRAY_LIST, savedNestedScrollWebViewStateArrayList)
+ outState.putParcelableArrayList(SAVED_STATE_ARRAY_LIST, savedStateArrayList)
+ outState.putInt(SAVED_TAB_POSITION, currentTabPosition)
}
}
// Set the focus on the find on page edit text.
findOnPageEditText.requestFocus()
- // Get a handle for the input method manager.
- val inputMethodManager = (getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager)
-
// Display the keyboard. `0` sets no input flags.
inputMethodManager.showSoftInput(findOnPageEditText, 0)
}, 200)
// Show the toolbar.
toolbar.visibility = View.VISIBLE
- // Get a handle for the input method manager.
- val inputMethodManager = (getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager)
-
// Hide the keyboard.
inputMethodManager.hideSoftInputFromWindow(toolbar.windowToken, 0)
}
@SuppressLint("ClickableViewAccessibility")
private fun initializeApp() {
// Get a handle for the input method.
- val inputMethodManager = (getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager)
+ inputMethodManager = (getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager)
// Initialize the color spans for highlighting the URLs.
initialGrayColorSpan = ForegroundColorSpan(getColor(R.color.gray_500))
// Search for the string on the page whenever a character changes in the find on page edit text.
findOnPageEditText.addTextChangedListener(object : TextWatcher {
- override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
+ override fun beforeTextChanged(charSequence: CharSequence, start: Int, count: Int, after: Int) {
+ // Do nothing.
+ }
- override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
+ override fun onTextChanged(charSequence: CharSequence, start: Int, before: Int, count: Int) {
+ // Do nothing.
+ }
- override fun afterTextChanged(s: Editable) {
+ override fun afterTextChanged(editable: Editable) {
// Search for the text in the WebView if it is not null. Sometimes on resume after a period of non-use the WebView will be null.
currentWebView?.findAllAsync(findOnPageEditText.text.toString())
}
}
}
- // Get a handle for the input method manager.
- val inputMethodManager = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
-
// Set the app bar scrolling.
nestedScrollWebView.isNestedScrollingEnabled = scrollAppBar
// Store the file path callback.
fileChooserCallback = filePathCallback
- // Create an intent to open a chooser based on the file chooser parameters.
- val fileChooserIntent = fileChooserParams.createIntent()
+ // Create a file chooser intent.
+ val fileChooserIntent = Intent(Intent.ACTION_GET_CONTENT)
- // Check to see if the file chooser intent resolves to an installed package.
- if (fileChooserIntent.resolveActivity(packageManager) != null) { // The file chooser intent is fine.
- // Launch the file chooser intent.
- browseFileUploadActivityResultLauncher.launch(fileChooserIntent)
- } else { // The file chooser intent will cause a crash.
- // Create a generic intent to open a chooser.
- val genericFileChooserIntent = Intent(Intent.ACTION_GET_CONTENT)
+ // Request an openable file.
+ fileChooserIntent.addCategory(Intent.CATEGORY_OPENABLE)
- // Request an openable file.
- genericFileChooserIntent.addCategory(Intent.CATEGORY_OPENABLE)
+ // Set the file type to everything. The file chooser params cannot be used to create the intent because it only selects the first specified file type. See <https://redmine.stoutner.com/issues/1197>.
+ fileChooserIntent.type = "*/*"
- // Set the file type to everything.
- genericFileChooserIntent.type = "*/*"
-
- // Launch the generic file chooser intent.
- browseFileUploadActivityResultLauncher.launch(genericFileChooserIntent)
- }
+ // Launch the file chooser intent.
+ browseFileUploadActivityResultLauncher.launch(fileChooserIntent)
// Handle the event.
return true
// Update the privacy icons. `true` redraws the icons in the app bar.
updatePrivacyIcons(true)
- // Get a handle for the input method manager.
- val inputMethodManager = (getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager)
-
// Get the current URL.
val urlString = currentWebView!!.url