/*
- * 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 com.google.android.material.snackbar.Snackbar
import com.stoutner.privacybrowser.R
+import com.stoutner.privacybrowser.dialogs.AddDomainDialog
import com.stoutner.privacybrowser.dialogs.AddDomainDialog.AddDomainListener
-import com.stoutner.privacybrowser.dialogs.AddDomainDialog.Companion.addDomain
import com.stoutner.privacybrowser.fragments.DomainSettingsFragment
import com.stoutner.privacybrowser.fragments.DomainsListFragment
import com.stoutner.privacybrowser.fragments.DomainsListFragment.DismissSnackbarInterface
// Get the status of close-on-back, which is true when the domains activity is called from the options menu.
closeOnBack = intent.getBooleanExtra(CLOSE_ON_BACK, false)
- // Get the current URL.
- val currentUrl = intent.getStringExtra(CURRENT_URL)
-
// Store the current SSL certificate information in class variables.
sslIssuedToCName = intent.getStringExtra(SSL_ISSUED_TO_CNAME)
sslIssuedToOName = intent.getStringExtra(SSL_ISSUED_TO_ONAME)
// Configure the add domain floating action button.
addDomainFAB.setOnClickListener {
// Create an add domain dialog.
- val addDomainDialog: DialogFragment = addDomain(currentUrl)
+ val addDomainDialog: DialogFragment = AddDomainDialog()
// Show the add domain dialog.
addDomainDialog.show(supportFragmentManager, resources.getString(R.string.add_domain))
// Add the extra information to the intent.
domainsIntent.putExtra(LOAD_DOMAIN, currentWebView!!.domainSettingsDatabaseId)
domainsIntent.putExtra(CLOSE_ON_BACK, true)
- domainsIntent.putExtra(CURRENT_URL, currentWebView!!.url)
domainsIntent.putExtra(CURRENT_IP_ADDRESSES, currentWebView!!.currentIpAddresses)
// Get the current certificate.
// Add the extra information to the intent.
domainsIntent.putExtra(LOAD_DOMAIN, newDomainDatabaseId)
domainsIntent.putExtra(CLOSE_ON_BACK, true)
- domainsIntent.putExtra(CURRENT_URL, currentWebView!!.url)
domainsIntent.putExtra(CURRENT_IP_ADDRESSES, currentWebView!!.currentIpAddresses)
// Get the current certificate.
val domainsIntent = Intent(this, DomainsActivity::class.java)
// Add the extra information to the intent.
- domainsIntent.putExtra(CURRENT_URL, currentWebView!!.url)
domainsIntent.putExtra(CURRENT_IP_ADDRESSES, currentWebView!!.currentIpAddresses)
// Get the current certificate.
/*
- * 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.app.Dialog
import android.content.Context
import android.content.DialogInterface
-import android.net.Uri
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import com.stoutner.privacybrowser.R
import com.stoutner.privacybrowser.helpers.DomainsDatabaseHelper
-// Define the class constants.
-private const val URL_STRING = "url_string"
-
class AddDomainDialog : DialogFragment() {
// Declare the class variables
private lateinit var addDomainListener: AddDomainListener
addDomainListener = context as AddDomainListener
}
- companion object {
- fun addDomain(urlString: String?): AddDomainDialog {
- // Create an arguments bundle.
- val argumentsBundle = Bundle()
-
- // Store the URL in the bundle.
- argumentsBundle.putString(URL_STRING, urlString)
-
- // Create a new instance of the dialog.
- val addDomainDialog = AddDomainDialog()
-
- // Add the arguments bundle to the dialog.
- addDomainDialog.arguments = argumentsBundle
-
- // Return the new dialog.
- return addDomainDialog
- }
- }
-
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
- // Get the arguments.
- val arguments = requireArguments()
-
- // Get the URL from the bundle.
- val urlString = arguments.getString(URL_STRING)
-
// Use an alert dialog builder to create the alert dialog.
val dialogBuilder = AlertDialog.Builder(requireContext(), R.style.PrivacyBrowserAlertDialog)
val domainNameAlreadyExistsTextView = alertDialog.findViewById<TextView>(R.id.domain_name_already_exists_textview)!!
val addButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE)
+ // Initially disable the add button.
+ addButton.isEnabled = false
+
// Update the status of the warning text and the add button when the domain name changes.
addDomainEditText.addTextChangedListener(object: TextWatcher {
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {
// Do nothing.
}
- override fun afterTextChanged(s: Editable) {
+ override fun afterTextChanged(editable: Editable) {
if (domainsDatabaseHelper.getCursorForDomainName(addDomainEditText.text.toString()).count > 0) { // The domain already exists.
// Show the warning text.
domainNameAlreadyExistsTextView.visibility = View.VISIBLE
// Hide the warning text.
domainNameAlreadyExistsTextView.visibility = View.GONE
- // Enable the add button.
- addButton.isEnabled = true
+ // Enable the add button if the domain name is not empty.
+ addButton.isEnabled = editable.isNotEmpty()
}
}
})
- // Convert the URL string to a URI.
- val currentUri = Uri.parse(urlString)
-
- // Display the host in the add domain edit text.
- addDomainEditText.setText(currentUri.host)
-
// Allow the enter key on the keyboard to create the domain from the add domain edit text.
addDomainEditText.setOnKeyListener { _: View, keyCode: Int, keyEvent: KeyEvent ->
// Check the key code and event.
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright 2017,2019-2020,2022 Soren Stoutner <soren@stoutner.com>.
+ Copyright 2017, 2019-2020, 2022, 2024 Soren Stoutner <soren@stoutner.com>.
This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
android:selectAllOnFocus="true" />
</com.google.android.material.textfield.TextInputLayout>
+ <!-- The domain name already exists textview is initially not visible. -->
<TextView
android:id="@+id/domain_name_already_exists_textview"
android:layout_height="wrap_content"
android:text="@string/domain_name_already_exists"
android:textColor="@color/red_text"
android:layout_marginStart="8dp"
- android:layout_marginEnd="8dp" />
+ android:layout_marginEnd="8dp"
+ android:visibility="gone" />
</LinearLayout>