summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbt <bt@rctt.net>2026-06-08 21:10:06 +0200
committerbt <bt@rctt.net>2026-06-08 21:10:06 +0200
commit1ab7e928a2a272418df199c8e621b735a708fcff (patch)
treec905de96c5866c5b0515aa03130950abc67a0a59
parent1f216fc3cfd3e3b70bcfb94b157ca253515881ab (diff)
downloadnetmon-1ab7e928a2a272418df199c8e621b735a708fcff.tar.gz
netmon-1ab7e928a2a272418df199c8e621b735a708fcff.zip
Fix map view, remove log viewnew-ui
-rw-r--r--app/src/main/java/net/rctt/netmon/Cell.kt9
-rw-r--r--app/src/main/java/net/rctt/netmon/LogFragment.kt59
-rw-r--r--app/src/main/java/net/rctt/netmon/MainActivity.kt22
-rw-r--r--app/src/main/java/net/rctt/netmon/MapFragment.kt4
-rw-r--r--app/src/main/res/layout/fragment_log.xml14
-rw-r--r--app/src/main/res/menu/nav_menu.xml6
6 files changed, 33 insertions, 81 deletions
diff --git a/app/src/main/java/net/rctt/netmon/Cell.kt b/app/src/main/java/net/rctt/netmon/Cell.kt
index 90d6eda..951c79b 100644
--- a/app/src/main/java/net/rctt/netmon/Cell.kt
+++ b/app/src/main/java/net/rctt/netmon/Cell.kt
@@ -52,6 +52,10 @@ class CellLogItem {
var id: String = ""
val powerHistory: MutableList<Number> = mutableListOf()
+ var timestamp: String = ""
+ var userLat: Double = 0.0
+ var userLon: Double = 0.0
+
constructor(cell: CellInfo) {
when (cell) {
is CellInfoGsm -> {
@@ -96,6 +100,8 @@ class CellLogItem {
power = cell.cellSignalStrength.dbm
powerHistory.removeAt(0)
powerHistory.add(power)
+
+ timestamp = System.currentTimeMillis().toString()
}
fun valid(): Boolean {
@@ -104,6 +110,9 @@ class CellLogItem {
fun serialize(): List<String> {
return listOf(
+ timestamp,
+ userLat.toString(),
+ userLon.toString(),
type,
lac.toString(),
cid.toString(),
diff --git a/app/src/main/java/net/rctt/netmon/LogFragment.kt b/app/src/main/java/net/rctt/netmon/LogFragment.kt
deleted file mode 100644
index 3755b0a..0000000
--- a/app/src/main/java/net/rctt/netmon/LogFragment.kt
+++ /dev/null
@@ -1,59 +0,0 @@
-package net.rctt.netmon
-
-import android.os.Bundle
-import androidx.fragment.app.Fragment
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-
-// TODO: Rename parameter arguments, choose names that match
-// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
-private const val ARG_PARAM1 = "param1"
-private const val ARG_PARAM2 = "param2"
-
-/**
- * A simple [Fragment] subclass.
- * Use the [LogFragment.newInstance] factory method to
- * create an instance of this fragment.
- */
-class LogFragment : Fragment() {
- // TODO: Rename and change types of parameters
- private var param1: String? = null
- private var param2: String? = null
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- arguments?.let {
- param1 = it.getString(ARG_PARAM1)
- param2 = it.getString(ARG_PARAM2)
- }
- }
-
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- // Inflate the layout for this fragment
- return inflater.inflate(R.layout.fragment_log, container, false)
- }
-
- companion object {
- /**
- * Use this factory method to create a new instance of
- * this fragment using the provided parameters.
- *
- * @param param1 Parameter 1.
- * @param param2 Parameter 2.
- * @return A new instance of fragment LogFragment.
- */
- // TODO: Rename and change types and number of parameters
- @JvmStatic
- fun newInstance(param1: String, param2: String) =
- LogFragment().apply {
- arguments = Bundle().apply {
- putString(ARG_PARAM1, param1)
- putString(ARG_PARAM2, param2)
- }
- }
- }
-} \ No newline at end of file
diff --git a/app/src/main/java/net/rctt/netmon/MainActivity.kt b/app/src/main/java/net/rctt/netmon/MainActivity.kt
index a63b220..6cfd838 100644
--- a/app/src/main/java/net/rctt/netmon/MainActivity.kt
+++ b/app/src/main/java/net/rctt/netmon/MainActivity.kt
@@ -1,16 +1,21 @@
package net.rctt.netmon
+import android.Manifest
import android.content.ComponentName
import android.content.Intent
import android.content.ServiceConnection
+import android.location.Location
+import android.location.LocationManager
import android.os.Bundle
import android.os.IBinder
import android.telephony.CellInfo
+import androidx.annotation.RequiresPermission
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import com.google.android.material.bottomnavigation.BottomNavigationView
import org.osmdroid.config.Configuration
+
class MainActivity : AppCompatActivity() {
val cellDb = CellDb()
val cellLogger = CellLogger()
@@ -36,7 +41,6 @@ class MainActivity : AppCompatActivity() {
bottomNav.setOnItemSelectedListener {
when (it.itemId) {
R.id.main -> loadFragment(ScanFragment())
- R.id.log -> loadFragment(LogFragment())
R.id.map -> loadFragment(MapFragment())
}
true
@@ -80,6 +84,7 @@ class MainActivity : AppCompatActivity() {
scannerService = binder.getService()
scannerServiceBound = true
binder.addListener(object : ScannerService.Callback {
+ @RequiresPermission(allOf = [Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION])
override fun onCalled(list: List<CellInfo?>) = handleUpdate(list)
})
}
@@ -89,7 +94,10 @@ class MainActivity : AppCompatActivity() {
}
}
+ @RequiresPermission(allOf = [Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION])
fun handleUpdate(cells: List<CellInfo?>) {
+ val location = getLocation()
+
for (cellInfo in cells) {
if (cellInfo == null) {
continue
@@ -108,6 +116,11 @@ class MainActivity : AppCompatActivity() {
cellLogItem.description = cellDbItem.Description
cellLogItem.latitude = cellDbItem.Latitude
cellLogItem.longitude = cellDbItem.Longitude
+ if (location != null) {
+ cellLogItem.userLat = location.latitude
+ cellLogItem.userLon = location.longitude
+
+ }
}
currentCells[id] = cellLogItem
@@ -130,4 +143,11 @@ class MainActivity : AppCompatActivity() {
fun stopGetCellService() {
scannerService.run = false
}
+
+ @RequiresPermission(allOf = [Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION])
+ fun getLocation(): Location? {
+ val locationManager =
+ applicationContext.getSystemService(LOCATION_SERVICE) as LocationManager
+ return locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)
+ }
} \ No newline at end of file
diff --git a/app/src/main/java/net/rctt/netmon/MapFragment.kt b/app/src/main/java/net/rctt/netmon/MapFragment.kt
index 0ba4a6b..d5f6cd0 100644
--- a/app/src/main/java/net/rctt/netmon/MapFragment.kt
+++ b/app/src/main/java/net/rctt/netmon/MapFragment.kt
@@ -31,8 +31,8 @@ class MapFragment : Fragment() {
val locationOverlay = MyLocationNewOverlay(GpsMyLocationProvider(activity), map)
locationOverlay.enableMyLocation()
locationOverlay.enableFollowLocation()
- this.map.overlays.add(locationOverlay)
-
+ map.overlays.add(locationOverlay)
+ map.setZoomLevel(15.0)
return view
}
diff --git a/app/src/main/res/layout/fragment_log.xml b/app/src/main/res/layout/fragment_log.xml
deleted file mode 100644
index 8df01f3..0000000
--- a/app/src/main/res/layout/fragment_log.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context=".LogFragment">
-
- <!-- TODO: Update blank fragment layout -->
- <TextView
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:text="LOG" />
-
-</FrameLayout> \ No newline at end of file
diff --git a/app/src/main/res/menu/nav_menu.xml b/app/src/main/res/menu/nav_menu.xml
index a4332ae..574205b 100644
--- a/app/src/main/res/menu/nav_menu.xml
+++ b/app/src/main/res/menu/nav_menu.xml
@@ -3,11 +3,7 @@
<item
android:id="@+id/main"
android:icon="@drawable/rounded_bar_chart_24"
- android:title="Scan" />
- <item
- android:id="@+id/log"
- android:icon="@drawable/outline_database_24"
- android:title="Logs" />
+ android:title="Scan" />
<item
android:id="@+id/map"
android:icon="@drawable/baseline_map_24"