import com.stoutner.privacybrowser.R
import com.stoutner.privacybrowser.dialogs.AboutViewSourceDialog
+import com.stoutner.privacybrowser.dialogs.UntrustedSslCertificateDialog
+import com.stoutner.privacybrowser.dialogs.UntrustedSslCertificateDialog.UntrustedSslCertificateListener
import com.stoutner.privacybrowser.helpers.ProxyHelper
import com.stoutner.privacybrowser.viewmodelfactories.WebViewSourceFactory
import com.stoutner.privacybrowser.viewmodels.WebViewSource
const val CURRENT_URL = "current_url"
const val USER_AGENT = "user_agent"
-class ViewSourceActivity: AppCompatActivity() {
+class ViewSourceActivity: AppCompatActivity(), UntrustedSslCertificateListener {
// Declare the class variables.
private lateinit var initialGrayColorSpan: ForegroundColorSpan
private lateinit var finalGrayColorSpan: ForegroundColorSpan
private lateinit var redColorSpan: ForegroundColorSpan
+ private lateinit var webViewSource: WebViewSource
// Declare the class views.
+ private lateinit var urlEditText: EditText
private lateinit var requestHeadersTitleTextView: TextView
private lateinit var requestHeadersTextView: TextView
private lateinit var responseMessageTitleTextView: TextView
// Get a handle for the shared preferences.
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(applicationContext)
- // Get the screenshot preference.
+ // Get the preferences.
val allowScreenshots = sharedPreferences.getBoolean(getString(R.string.allow_screenshots_key), false)
+ val bottomAppBar = sharedPreferences.getBoolean(getString(R.string.bottom_app_bar_key), false)
// Disable screenshots if not allowed.
if (!allowScreenshots) {
val userAgent = intent.getStringExtra(USER_AGENT)!!
// Set the content view.
- setContentView(R.layout.view_source_coordinatorlayout)
+ if (bottomAppBar) {
+ setContentView(R.layout.view_source_coordinatorlayout_bottom_appbar)
+ } else {
+ setContentView(R.layout.view_source_coordinatorlayout_top_appbar)
+ }
// Get a handle for the toolbar.
val toolbar = findViewById<Toolbar>(R.id.view_source_toolbar)
actionBar.displayOptions = ActionBar.DISPLAY_SHOW_CUSTOM
// Get handles for the views.
- val urlEditText = findViewById<EditText>(R.id.url_edittext)
+ urlEditText = findViewById(R.id.url_edittext)
val progressBar = findViewById<ProgressBar>(R.id.progress_bar)
val swipeRefreshLayout = findViewById<SwipeRefreshLayout>(R.id.view_source_swiperefreshlayout)
requestHeadersTitleTextView = findViewById(R.id.request_headers_title_textview)
val webViewSourceFactory: ViewModelProvider.Factory = WebViewSourceFactory(currentUrl, userAgent, localeString, proxy, contentResolver, MainWebViewActivity.executorService)
// Instantiate the WebView source view model class.
- val webViewSource = ViewModelProvider(this, webViewSourceFactory).get(WebViewSource::class.java)
+ webViewSource = ViewModelProvider(this, webViewSourceFactory).get(WebViewSource::class.java)
// Create a source observer.
webViewSource.observeSource().observe(this, { sourceStringArray: Array<SpannableStringBuilder> ->
webViewSource.observeErrors().observe(this, { errorString: String ->
// Display an error snackbar if the string is not `""`.
if (errorString != "") {
- Snackbar.make(swipeRefreshLayout, errorString, Snackbar.LENGTH_LONG).show()
+ if (errorString.startsWith("javax.net.ssl.SSLHandshakeException")) {
+ // Instantiate the untrusted SSL certificate dialog.
+ val untrustedSslCertificateDialog = UntrustedSslCertificateDialog()
+
+ // Show the untrusted SSL certificate dialog.
+ untrustedSslCertificateDialog.show(supportFragmentManager, getString(R.string.invalid_certificate))
+ } else {
+ // Display a snackbar with the error message.
+ Snackbar.make(swipeRefreshLayout, errorString, Snackbar.LENGTH_LONG).show()
+ }
}
})
updateLayout(urlString)
// Get the updated source.
- webViewSource.updateSource(urlString)
+ webViewSource.updateSource(urlString, false)
}
// Set the go button on the keyboard to request new source data.
updateLayout(urlString)
// Get the updated source.
- webViewSource.updateSource(urlString)
+ webViewSource.updateSource(urlString, false)
// Consume the key press.
return@setOnKeyListener true
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
- // Inflate the menu. This adds items to the action bar if it is present.
+ // Inflate the menu.
menuInflater.inflate(R.menu.view_source_options_menu, menu)
// Display the menu.
}
override fun onOptionsItemSelected(menuItem: MenuItem): Boolean {
- // Get a handle for the about alert dialog.
+ // Instantiate the about dialog fragment.
val aboutDialogFragment: DialogFragment = AboutViewSourceDialog()
// Show the about alert dialog.
NavUtils.navigateUpFromSameTask(this)
}
+ override fun loadAnyway() {
+ // Load the URL anyway.
+ webViewSource.updateSource(urlEditText.text.toString(), true)
+ }
+
private fun highlightUrlText() {
// Get a handle for the URL edit text.
val urlEditText = findViewById<EditText>(R.id.url_edittext)