/*
- * Copyright 2017-2023 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2017-2024 Soren Stoutner <soren@stoutner.com>.
*
* This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
*
import android.view.View.OnFocusChangeListener
import android.view.WindowManager
import android.view.inputmethod.InputMethodManager
-import android.widget.Button
import android.widget.EditText
import android.widget.ProgressBar
import android.widget.TextView
import androidx.appcompat.app.ActionBar
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
+import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.app.NavUtils
import androidx.lifecycle.ViewModelProvider
import androidx.preference.PreferenceManager
private lateinit var urlEditText: EditText
private lateinit var sslInformationTitleTextView: TextView
private lateinit var sslInformationTextView: TextView
- private lateinit var ciphersButton: Button
- private lateinit var certificateButton: Button
+ private lateinit var sslButtonsConstraintLayout: ConstraintLayout
private lateinit var requestHeadersTitleTextView: TextView
private lateinit var requestHeadersTextView: TextView
private lateinit var responseMessageTitleTextView: TextView
private val saveTextActivityResultLauncher = registerForActivityResult(ActivityResultContracts.CreateDocument("text/plain")) { fileUri ->
// Only save the file if the URI is not null, which happens if the user exited the file picker by pressing back.
if (fileUri != null) {
- // Initialize the file name string from the file URI last path segment.
- var fileNameString = fileUri.lastPathSegment
+ // Get a cursor from the content resolver.
+ val contentResolverCursor = contentResolver.query(fileUri, null, null, null)!!
- // Query the exact file name if the API >= 26.
- if (Build.VERSION.SDK_INT >= 26) {
- // Get a cursor from the content resolver.
- val contentResolverCursor = contentResolver.query(fileUri, null, null, null)!!
+ // Move to the first row.
+ contentResolverCursor.moveToFirst()
- // Move to the first row.
- contentResolverCursor.moveToFirst()
+ // Get the file name from the cursor.
+ val fileNameString = contentResolverCursor.getString(contentResolverCursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME))
- // Get the file name from the cursor.
- fileNameString = contentResolverCursor.getString(contentResolverCursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME))
-
- // Close the cursor.
- contentResolverCursor.close()
- }
+ // Close the cursor.
+ contentResolverCursor.close()
try {
// Get the about version string.
val swipeRefreshLayout = findViewById<SwipeRefreshLayout>(R.id.swiperefreshlayout)
sslInformationTitleTextView = findViewById(R.id.ssl_information_title_textview)
sslInformationTextView = findViewById(R.id.ssl_information_textview)
- ciphersButton = findViewById(R.id.ciphers_button)
- certificateButton = findViewById(R.id.certificate_button)
+ sslButtonsConstraintLayout = findViewById(R.id.ssl_buttons_constraintlayout)
requestHeadersTitleTextView = findViewById(R.id.request_headers_title_textview)
requestHeadersTextView = findViewById(R.id.request_headers_textview)
responseMessageTitleTextView = findViewById(R.id.response_message_title_textview)
// Display a snackbar if the API <= 32 (Android 12L). Beginning in Android 13 the OS displays a notification that covers up the snackbar.
if (Build.VERSION.SDK_INT <= 32)
- Snackbar.make(urlEditText, R.string.version_info_copied, Snackbar.LENGTH_SHORT).show()
+ Snackbar.make(urlEditText, R.string.headers_copied, Snackbar.LENGTH_SHORT).show()
// Consume the event.
return true
// Hide the unused views.
sslInformationTitleTextView.visibility = View.GONE
sslInformationTextView.visibility = View.GONE
- ciphersButton.visibility = View.GONE
- certificateButton.visibility = View.GONE
+ sslButtonsConstraintLayout.visibility = View.GONE
requestHeadersTitleTextView.visibility = View.GONE
requestHeadersTextView.visibility = View.GONE
responseMessageTitleTextView.visibility = View.GONE
// Hide the SSL information views.
sslInformationTitleTextView.visibility = View.GONE
sslInformationTextView.visibility = View.GONE
- ciphersButton.visibility = View.GONE
- certificateButton.visibility = View.GONE
+ sslButtonsConstraintLayout.visibility = View.GONE
} else { // This is not an HTTP URL.
// Show the SSL information views.
sslInformationTitleTextView.visibility = View.VISIBLE
sslInformationTextView.visibility = View.VISIBLE
- ciphersButton.visibility = View.VISIBLE
- certificateButton.visibility = View.VISIBLE
+ sslButtonsConstraintLayout.visibility = View.VISIBLE
}
// Show the other views.