diff options
Diffstat (limited to 'app/src/main/java')
| -rw-r--r-- | app/src/main/java/net/rctt/netmon/MainActivity.kt | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/app/src/main/java/net/rctt/netmon/MainActivity.kt b/app/src/main/java/net/rctt/netmon/MainActivity.kt index 53c6f05..7111922 100644 --- a/app/src/main/java/net/rctt/netmon/MainActivity.kt +++ b/app/src/main/java/net/rctt/netmon/MainActivity.kt @@ -1,12 +1,34 @@ package net.rctt.netmon +import android.Manifest +import android.annotation.SuppressLint import android.os.Bundle +import android.os.Handler +import android.os.Looper +import android.telephony.CellInfoGsm +import android.telephony.CellInfoLte +import android.telephony.CellInfoNr +import android.telephony.CellInfoTdscdma +import android.telephony.CellInfoWcdma +import android.telephony.TelephonyManager +import android.util.Log +import android.widget.LinearLayout +import android.widget.TextView import androidx.activity.enableEdgeToEdge +import androidx.annotation.RequiresPermission import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat +import java.text.SimpleDateFormat +import java.util.Date class MainActivity : AppCompatActivity() { + lateinit var statusView: LinearLayout + lateinit var cellView: LinearLayout + + lateinit var tel: TelephonyManager + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() @@ -16,5 +38,87 @@ class MainActivity : AppCompatActivity() { v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) insets } + + statusView = findViewById(R.id.statusView) + cellView = findViewById(R.id.cellView) + + val pLoc = ContextCompat.checkSelfPermission(applicationContext, Manifest.permission.ACCESS_FINE_LOCATION) + if (pLoc == -1) { + log("Location permission required") + } else { + log("Ready") + tel = getSystemService(TELEPHONY_SERVICE) as TelephonyManager + + val mainHandler = Handler(Looper.getMainLooper()) + + mainHandler.post(object : Runnable { + @RequiresPermission(Manifest.permission.ACCESS_FINE_LOCATION) + override fun run() { + refresh() + mainHandler.postDelayed(this, 1000) + } + }) + } + } + + @RequiresPermission(Manifest.permission.ACCESS_FINE_LOCATION) + fun refresh() { + log("refreshing") + + val cellList = tel.allCellInfo + cellView.removeAllViews() + for (cell in cellList) { + when (cell) { + is CellInfoGsm -> { + logDetected("GSM") + } + is CellInfoLte -> { + val id = cell.cellIdentity + if (id.ci == 2147483647) { + continue + } + + logDetected("LTE") + logCell("CID: ${id.ci}") + logCell("PCI: ${id.pci}") + logCell("TAC: ${id.tac}") + logCell("EARFCN ${id.earfcn}") + logCell("BANDWIDTH: ${id.bandwidth}") + logCell("RSRP: ${cell.cellSignalStrength.rsrp}") + logCell("DBM: ${cell.cellSignalStrength.dbm}") + logCell("STATUS: ${cell.cellConnectionStatus}") + logCell("") + } + is CellInfoNr -> { + logDetected("NR") + } + is CellInfoTdscdma -> { + logDetected("TDSCDMA") + } + is CellInfoWcdma -> { + logDetected("WCDMA") + } + } + } + } + + @SuppressLint("SimpleDateFormat", "SetTextI18n") + fun log(text: String) { + val sdf = SimpleDateFormat("hh:mm:ss") + val date = sdf.format(Date()) + val msg = TextView(this) + msg.text = "$date $text" + statusView.addView(msg) + } + + fun logDetected(text: String) { + log("detected $text cell") + } + + fun logCell(text: String) { + val msg = TextView(this) + msg.text = text + cellView.addView(msg) + Log.d("NETMON", text) } }
\ No newline at end of file |
