/*
- * Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
*
* This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
*
* along with Privacy Cell. If not, see <http://www.gnu.org/licenses/>.
*/
+// The suppression of deprecation lint can be removed once the minimum API >= 31.
+@file:Suppress("DEPRECATION")
+
package com.stoutner.privacycell.activities
import android.Manifest
+import android.annotation.SuppressLint
import android.app.ActivityManager
import android.content.Context
import android.content.Intent
// Declare the class views.
private lateinit var drawerLayout: DrawerLayout
- private lateinit var stingrayTextView: TextView
+ private lateinit var summaryTextView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
// Run the default commands.
// Get the preferences.
val realtimeMonitoring = sharedPreferences.getBoolean(getString(R.string.realtime_monitoring_key), false)
+ val consider3gAntiquated = sharedPreferences.getBoolean(getString(R.string.consider_3g_antiquated_key), false)
val bottomAppBar = sharedPreferences.getBoolean(getString(R.string.bottom_app_bar_key), false)
// Set the content view.
val toolbar = findViewById<Toolbar>(R.id.toolbar)
val stingrayLinearLayout = findViewById<LinearLayout>(R.id.stingray_linearlayout)
val stingrayImageView = findViewById<ImageView>(R.id.stingray_imageview)
- stingrayTextView = findViewById(R.id.stingray_textview)
+ summaryTextView = findViewById(R.id.summary_textview)
val voiceNetworkLinearLayout = findViewById<LinearLayout>(R.id.voice_network_linearlayout)
val voiceNetworkTextView = findViewById<TextView>(R.id.voice_network)
val voiceNetworkDetailsTextView = findViewById<TextView>(R.id.voice_network_details)
// Define the phone state listener. The `PhoneStateListener` can be replaced by `TelephonyCallback` once the minimum API >= 31.
phoneStateListener = object : PhoneStateListener() {
+ @Deprecated("Deprecated in Java")
+ @SuppressLint("SwitchIntDef")
override fun onDisplayInfoChanged(telephonyDisplayInfo: TelephonyDisplayInfo) {
+ // Declare the stingray dialog type integer.
+ val summaryDialogTypeInteger: Int
+
// Populate the stingray security information. <https://source.android.com/devices/tech/connect/acts-5g-testing>
- if (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_NR) { // This is a secure 5G NR SA network.
+ if ((telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_NR) || (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_IWLAN) ||
+ (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_UNKNOWN)) { // This is a secure network.
// Populate the image view.
- stingrayImageView.setImageDrawable(AppCompatResources.getDrawable(applicationContext, R.drawable.secure_5g_nr_sa))
+ stingrayImageView.setImageDrawable(AppCompatResources.getDrawable(applicationContext, R.drawable.secure))
// Set the text.
- stingrayTextView.text = getString(R.string.secure_from_stingray)
+ summaryTextView.text = getString(R.string.secure_protocols)
// Set the text color.
- stingrayTextView.setTextColor(getColor(R.color.blue_text))
- } else { // This is not a secure 5G NR SA network.
+ summaryTextView.setTextColor(getColor(R.color.blue_text))
+
+ // Set the stingray dialog type integer.
+ summaryDialogTypeInteger = WebViewDialog.STINGRAY
+ } else if ((telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_LTE) || (!consider3gAntiquated && (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_1xRTT ||
+ (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_EVDO_0) || (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_EVDO_A) ||
+ (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_EVDO_B) || (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_EHRPD) ||
+ (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_UMTS) || (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_TD_SCDMA) ||
+ (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_HSDPA) || (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_HSUPA) ||
+ (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_HSPA) || (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_HSPAP)))) {
+ // This is an insecure network.
// Populate the image view.
- stingrayImageView.setImageDrawable(AppCompatResources.getDrawable(applicationContext, R.drawable.not_secure))
+ stingrayImageView.setImageDrawable(AppCompatResources.getDrawable(applicationContext, R.drawable.insecure))
// Set the text.
- stingrayTextView.text = getString(R.string.not_secure_from_stingray)
+ summaryTextView.text = getString(R.string.insecure_protocols)
// Set the text color.
- stingrayTextView.setTextColor(getColor(R.color.red_text))
+ summaryTextView.setTextColor(getColor(R.color.yellow_900))
+
+ // Set the stingray dialog type integer.
+ summaryDialogTypeInteger = WebViewDialog.STINGRAY
+ } else { // This is an antiquated network.
+ // Populate the image view.
+ stingrayImageView.setImageDrawable(AppCompatResources.getDrawable(applicationContext, R.drawable.antiquated))
+
+ // Set the text.
+ summaryTextView.text = getString(R.string.antiquated_protocols)
+
+ // Set the text color.
+ summaryTextView.setTextColor(getColor(R.color.red_text))
+
+ // Set the stingray dialog type integer.
+ summaryDialogTypeInteger = WebViewDialog.ANTIQUATED_NETWORK
}
// Get the strings that correspond to the network information.
// Set the stingray click listener.
stingrayLinearLayout.setOnClickListener {
// Instantiate the stingray dialog fragment.
- val stingrayDialogFragment = WebViewDialog().type(WebViewDialog.STINGRAY)
+ val stingrayDialogFragment = WebViewDialog().type(summaryDialogTypeInteger)
// Show the alert dialog.
stingrayDialogFragment.show(supportFragmentManager, getString(R.string.stingrays))
}
}
+ @Deprecated("Deprecated in Java")
override fun onServiceStateChanged(serviceState: ServiceState) {
// Get the network registration info for the voice network, which is the second of the three entries (the first appears to be Wi-Fi and the third appears to be the cell data network).
val networkRegistrationInfo = serviceState.networkRegistrationInfoList[1]
startActivity(settingsIntent)
}
+ R.id.protocols -> {
+ // Create an intent to load the Protocols activity.
+ val protocolsIntent = Intent(this, ProtocolsActivity::class.java)
+
+ // Make it so.
+ startActivity(protocolsIntent)
+ }
+
R.id.logcat -> { // Logcat.
// Create an intent to load the Logcat activity.
val logcatIntent = Intent(this, LogcatActivity::class.java)
registerTelephonyManagerListener()
} else { // The read phone state permission was denied.
// Display the phone permission text on the main activity.
- stingrayTextView.text = getString(R.string.phone_permission_text)
+ summaryTextView.text = getString(R.string.phone_permission_text)
}
}
}