import android.telephony.PhoneStateListener
import android.telephony.TelephonyDisplayInfo
import android.telephony.TelephonyManager
+import android.widget.ImageView
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
+import androidx.appcompat.content.res.AppCompatResources
import androidx.core.app.ActivityCompat
import com.stoutner.privacycell.R
setContentView(R.layout.privacy_cell_linearlayout)
// Get handles for the views.
+ val secureFromStingrayImageView = findViewById<ImageView>(R.id.secure_from_stingray_imageview)
+ val secureFromStingrayTextView = findViewById<TextView>(R.id.secure_from_stingray_textview)
val voiceNetworkTextView = findViewById<TextView>(R.id.voice_network)
+ val voiceNetworkDetailsTextView = findViewById<TextView>(R.id.voice_network_details)
val dataNetworkTextView = findViewById<TextView>(R.id.data_network)
+ val dataNetworkDetailsTextView = findViewById<TextView>(R.id.data_network_details)
val additionalNetworkInfoTextView = findViewById<TextView>(R.id.additional_network_info)
- val secureFromStingrayTextView = findViewById<TextView>(R.id.secure_from_stingray)
+ val additionalNetworkInfoDetailsTextView = findViewById<TextView>(R.id.additional_network_info_details)
// TODO.
if (ActivityCompat.checkSelfPermission(
return
}
- // Get a handle for the the telephone Manager.
+ // Get a handle for the the telephone Manager and the context.
val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
+ val context: Context = this
// Get the voice network type.
val voiceNetworkType = getNetworkType(telephonyManager.voiceNetworkType)
- // Populate the voice network text view.
- voiceNetworkTextView.text = getString(R.string.voice_network, voiceNetworkType)
+ // Populate the voice network text views.
+ voiceNetworkTextView.text = getString(R.string.voice_network, voiceNetworkType[0])
+ voiceNetworkDetailsTextView.text = voiceNetworkType[1]
// Listen to changes in the cell network state.
telephonyManager.listen(object : PhoneStateListener() {
- override fun onDisplayInfoChanged(telephonyDisplayInfo: TelephonyDisplayInfo) {
+ override fun onDisplayInfoChanged(telephonyDisplayInfo: TelephonyDisplayInfo) {// Populate the secure from stingray text view. <https://source.android.com/devices/tech/connect/acts-5g-testing>
+ // Populate the stingray security information.
+ if (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_NR) { // This is a secure 5G NR SA network.
+ // Populate the image view.
+ secureFromStingrayImageView.setImageDrawable(AppCompatResources.getDrawable(context, R.drawable.secure_5g_nr_sa))
+
+ // Set the text.
+ secureFromStingrayTextView.text = getString(R.string.secure_from_stingray)
+
+ // Set the text color.
+ secureFromStingrayTextView.setTextColor(getColor(R.color.blue_700))
+ } else { // This is not a secure 5G NR SA network.
+ // Populate the image view.
+ secureFromStingrayImageView.setImageDrawable(AppCompatResources.getDrawable(context, R.drawable.not_secure))
+
+ // Set the text.
+ secureFromStingrayTextView.text = getString(R.string.not_secure_from_stingray)
+
+ // Set the text color.
+ secureFromStingrayTextView.setTextColor(getColor(R.color.red_700))
+
// Get the strings that correspond to the network information.
val dataNetworkType = getNetworkType(telephonyDisplayInfo.networkType)
val additionalNetworkInfo = getAdditionalNetworkInfo(telephonyDisplayInfo.overrideNetworkType)
- // Populate the network text views.
- dataNetworkTextView.text = getString(R.string.data_network, dataNetworkType)
- additionalNetworkInfoTextView.text = getString(R.string.additional_network_info, additionalNetworkInfo)
-
- // Populate the secure from stingray text view. <https://source.android.com/devices/tech/connect/acts-5g-testing>
- if (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_NR) {
- secureFromStingrayTextView.text = getString(R.string.secure_from_stingray)
- } else {
- secureFromStingrayTextView.text = getString(R.string.not_secure_from_stingray)
+ // Populate the data network text views.
+ dataNetworkTextView.text = getString(R.string.data_network, dataNetworkType[0])
+ dataNetworkDetailsTextView.text = dataNetworkType[1]
+ additionalNetworkInfoTextView.text = getString(R.string.additional_network_info, additionalNetworkInfo[0])
+ additionalNetworkInfoDetailsTextView.text = additionalNetworkInfo[1]
}
}
}, PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED)
}
- private fun getNetworkType(networkType: Int) : String {
+ private fun getNetworkType(networkType: Int) : Array<String> {
// Return the string that corresponds to the network type.
return when(networkType) {
- TelephonyManager.NETWORK_TYPE_UNKNOWN -> getString(R.string.unknown)
- TelephonyManager.NETWORK_TYPE_GPRS -> getString(R.string.gprs)
- TelephonyManager.NETWORK_TYPE_EDGE -> getString(R.string.edge)
- TelephonyManager.NETWORK_TYPE_UMTS -> getString(R.string.umts)
- TelephonyManager.NETWORK_TYPE_CDMA -> getString(R.string.cdma)
- TelephonyManager.NETWORK_TYPE_EVDO_0 -> getString(R.string.evdo_0)
- TelephonyManager.NETWORK_TYPE_EVDO_A -> getString(R.string.evdo_a)
- TelephonyManager.NETWORK_TYPE_1xRTT -> getString(R.string.rtt)
- TelephonyManager.NETWORK_TYPE_HSDPA -> getString(R.string.hsdpa)
- TelephonyManager.NETWORK_TYPE_HSUPA -> getString(R.string.hsupa)
- TelephonyManager.NETWORK_TYPE_HSPA -> getString(R.string.hspa)
- TelephonyManager.NETWORK_TYPE_IDEN -> getString(R.string.iden)
- TelephonyManager.NETWORK_TYPE_EVDO_B -> getString(R.string.evdo_b)
- TelephonyManager.NETWORK_TYPE_LTE -> getString(R.string.lte)
- TelephonyManager.NETWORK_TYPE_EHRPD -> getString(R.string.ehrpd)
- TelephonyManager.NETWORK_TYPE_HSPAP -> getString(R.string.hspap)
- TelephonyManager.NETWORK_TYPE_GSM -> getString(R.string.gsm)
- TelephonyManager.NETWORK_TYPE_TD_SCDMA -> getString(R.string.td_scdma)
- TelephonyManager.NETWORK_TYPE_IWLAN -> getString(R.string.iwlan)
- TelephonyManager.NETWORK_TYPE_NR -> getString(R.string.nr)
- else -> getString(R.string.error)
+ TelephonyManager.NETWORK_TYPE_UNKNOWN -> arrayOf(getString(R.string.unknown), getString(R.string.unknown))
+ TelephonyManager.NETWORK_TYPE_GPRS -> arrayOf(getString(R.string.gprs), getString(R.string.gprs_detal))
+ TelephonyManager.NETWORK_TYPE_EDGE -> arrayOf(getString(R.string.edge), getString(R.string.edge_detail))
+ TelephonyManager.NETWORK_TYPE_UMTS -> arrayOf(getString(R.string.umts), getString(R.string.umts_detail))
+ TelephonyManager.NETWORK_TYPE_CDMA -> arrayOf(getString(R.string.cdma), getString(R.string.cdma_detail))
+ TelephonyManager.NETWORK_TYPE_EVDO_0 -> arrayOf(getString(R.string.evdo_0), getString(R.string.evdo_0_detail))
+ TelephonyManager.NETWORK_TYPE_EVDO_A -> arrayOf(getString(R.string.evdo_a), getString(R.string.evdo_a_detail))
+ TelephonyManager.NETWORK_TYPE_1xRTT -> arrayOf(getString(R.string.rtt), getString(R.string.rtt_detail))
+ TelephonyManager.NETWORK_TYPE_HSDPA -> arrayOf(getString(R.string.hsdpa), getString(R.string.hsdpa_detail))
+ TelephonyManager.NETWORK_TYPE_HSUPA -> arrayOf(getString(R.string.hsupa), getString(R.string.hsupa_detail))
+ TelephonyManager.NETWORK_TYPE_HSPA -> arrayOf(getString(R.string.hspa), getString(R.string.hspa_detail))
+ TelephonyManager.NETWORK_TYPE_IDEN -> arrayOf(getString(R.string.iden), getString(R.string.iden_detail))
+ TelephonyManager.NETWORK_TYPE_EVDO_B -> arrayOf(getString(R.string.evdo_b), getString(R.string.evdo_b_detail))
+ TelephonyManager.NETWORK_TYPE_LTE -> arrayOf(getString(R.string.lte), getString(R.string.lte_detail))
+ TelephonyManager.NETWORK_TYPE_EHRPD -> arrayOf(getString(R.string.ehrpd), getString(R.string.ehrpd_detail))
+ TelephonyManager.NETWORK_TYPE_HSPAP -> arrayOf(getString(R.string.hspap), getString(R.string.hspap_detail))
+ TelephonyManager.NETWORK_TYPE_GSM -> arrayOf(getString(R.string.gsm), getString(R.string.gsm_detail))
+ TelephonyManager.NETWORK_TYPE_TD_SCDMA -> arrayOf(getString(R.string.td_scdma), getString(R.string.td_scdma_detail))
+ TelephonyManager.NETWORK_TYPE_IWLAN -> arrayOf(getString(R.string.iwlan), getString(R.string.iwlan_detail))
+ TelephonyManager.NETWORK_TYPE_NR -> arrayOf(getString(R.string.nr), getString(R.string.nr_detail))
+ else -> arrayOf(getString(R.string.error), getString(R.string.error))
}
}
- private fun getAdditionalNetworkInfo(overrideNetworkType: Int) : String {
+ private fun getAdditionalNetworkInfo(overrideNetworkType: Int) : Array<String> {
// Return the string that corresponds to the override network type.
return when(overrideNetworkType) {
- TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE -> getString(R.string.none)
- TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_CA -> getString(R.string.lte_ca)
- TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO -> getString(R.string.lte_advanced_pro)
- TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA -> getString(R.string.lte_nr_nsa)
- TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE -> getString(R.string.lte_nr_nsa_mmwave)
- else -> getString(R.string.error)
+ TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE -> arrayOf(getString(R.string.none), "")
+ TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_CA -> arrayOf(getString(R.string.lte_ca), getString(R.string.lte_ca_detail))
+ TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO -> arrayOf(getString(R.string.lte_advanced_pro), getString(R.string.lte_advanced_pro_detail))
+ TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA -> arrayOf(getString(R.string.lte_nr_nsa), getString(R.string.lte_nr_nsa_detail))
+ TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE -> arrayOf(getString(R.string.lte_nr_nsa_mmwave), getString(R.string.lte_nr_nsa_mmwave_detail))
+ else -> arrayOf(getString(R.string.error), "")
}
}
}
\ No newline at end of file