From 6d57af39a8c0d99d6dece9c0d600107b103d082f Mon Sep 17 00:00:00 2001 From: ryanp7272 Date: Wed, 25 Jun 2025 14:10:04 +0000 Subject: [PATCH 1/6] Start draft PR From ccd28e44de5251916545f2e20ee1ea15ccb074df Mon Sep 17 00:00:00 2001 From: ryanp7272 Date: Wed, 25 Jun 2025 14:10:24 +0000 Subject: [PATCH 2/6] Add comprehensive .gitignore for Android/Kotlin project --- .gitignore | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..03d7501 --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +# Android Studio +*.iml +.gradle/ +build/ +local.properties +.idea/ + +# Kotlin +*.class +*.kotlin_module + +# Gradle +gradlew +gradlew.bat +gradle/ + +# Build directories +bin/ +out/ +target/ + +# Logs +*.log + +# System files +.DS_Store +Thumbs.db + +# Dependencies +node_modules/ + +# Sensitive information +.env \ No newline at end of file From 9f633a5645463d3e4d37c8dddd56d0c22c353921 Mon Sep 17 00:00:00 2001 From: ryanp7272 Date: Wed, 25 Jun 2025 14:10:34 +0000 Subject: [PATCH 3/6] Create WifiNetwork data model with signal strength utilities --- .../java/com/wifiscanner/model/WifiNetwork.kt | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/main/java/com/wifiscanner/model/WifiNetwork.kt diff --git a/src/main/java/com/wifiscanner/model/WifiNetwork.kt b/src/main/java/com/wifiscanner/model/WifiNetwork.kt new file mode 100644 index 0000000..b017448 --- /dev/null +++ b/src/main/java/com/wifiscanner/model/WifiNetwork.kt @@ -0,0 +1,39 @@ +package com.wifiscanner.model + +/** + * Data class representing a WiFi network with its key attributes + * @property ssid The network's Service Set Identifier (network name) + * @property bssid The network's Basic Service Set Identifier (MAC address) + * @property signalStrength The signal strength of the WiFi network in dBm + * @property securityType The security protocol of the network (e.g., WPA2, Open) + * @property frequency The frequency of the WiFi network in MHz + */ +data class WifiNetwork( + val ssid: String, + val bssid: String, + val signalStrength: Int, + val securityType: String, + val frequency: Int +) { + /** + * Converts signal strength to a human-readable format + * @return A string representation of signal strength quality + */ + fun getSignalQuality(): String = when { + signalStrength >= -50 -> "Excellent" + signalStrength >= -60 -> "Good" + signalStrength >= -70 -> "Fair" + else -> "Poor" + } + + /** + * Provides a color resource based on signal strength + * @return Resource ID for signal strength color + */ + fun getSignalColor(): Int = when { + signalStrength >= -50 -> android.R.color.holo_green_light + signalStrength >= -60 -> android.R.color.holo_green_dark + signalStrength >= -70 -> android.R.color.holo_orange_light + else -> android.R.color.holo_red_light + } +} \ No newline at end of file From 13a03051ad1186ab06013db443ece6561020520d Mon Sep 17 00:00:00 2001 From: ryanp7272 Date: Wed, 25 Jun 2025 14:10:46 +0000 Subject: [PATCH 4/6] Create WifiNetworkAdapter for RecyclerView display --- .../wifiscanner/adapter/WifiNetworkAdapter.kt | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/main/java/com/wifiscanner/adapter/WifiNetworkAdapter.kt diff --git a/src/main/java/com/wifiscanner/adapter/WifiNetworkAdapter.kt b/src/main/java/com/wifiscanner/adapter/WifiNetworkAdapter.kt new file mode 100644 index 0000000..5d9663b --- /dev/null +++ b/src/main/java/com/wifiscanner/adapter/WifiNetworkAdapter.kt @@ -0,0 +1,53 @@ +package com.wifiscanner.adapter + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.RecyclerView +import com.wifiscanner.R +import com.wifiscanner.model.WifiNetwork + +/** + * RecyclerView adapter for displaying WiFi networks + * @property networks List of WiFi networks to display + */ +class WifiNetworkAdapter(private val networks: List) : + RecyclerView.Adapter() { + + /** + * ViewHolder for WiFi network items in the RecyclerView + * @param view The view for a single network item + */ + class WifiNetworkViewHolder(view: View) : RecyclerView.ViewHolder(view) { + private val ssidTextView: TextView = view.findViewById(R.id.network_ssid) + private val strengthTextView: TextView = view.findViewById(R.id.network_strength) + private val securityTextView: TextView = view.findViewById(R.id.network_security) + + /** + * Bind WiFi network data to the view + * @param network The WiFi network to display + */ + fun bind(network: WifiNetwork) { + ssidTextView.text = network.ssid + strengthTextView.apply { + text = "${network.signalStrength} dBm (${network.getSignalQuality()})" + setTextColor(ContextCompat.getColor(context, network.getSignalColor())) + } + securityTextView.text = network.securityType + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): WifiNetworkViewHolder { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.wifi_network_item, parent, false) + return WifiNetworkViewHolder(view) + } + + override fun onBindViewHolder(holder: WifiNetworkViewHolder, position: Int) { + holder.bind(networks[position]) + } + + override fun getItemCount() = networks.size +} \ No newline at end of file From 6ad5a699c1a3a6276d52a4319d656e47034120c4 Mon Sep 17 00:00:00 2001 From: ryanp7272 Date: Wed, 25 Jun 2025 14:10:56 +0000 Subject: [PATCH 5/6] Create WiFi network list item layout --- src/main/res/layout/wifi_network_item.xml | 31 +++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/main/res/layout/wifi_network_item.xml diff --git a/src/main/res/layout/wifi_network_item.xml b/src/main/res/layout/wifi_network_item.xml new file mode 100644 index 0000000..d9d31fe --- /dev/null +++ b/src/main/res/layout/wifi_network_item.xml @@ -0,0 +1,31 @@ + + + + + + + + + + \ No newline at end of file From b3dd058f10bf062807eb9a397a81543309585ea0 Mon Sep 17 00:00:00 2001 From: ryanp7272 Date: Wed, 25 Jun 2025 14:11:17 +0000 Subject: [PATCH 6/6] Add unit tests for WifiNetwork model --- .../com/wifiscanner/model/WifiNetworkTest.kt | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/test/java/com/wifiscanner/model/WifiNetworkTest.kt diff --git a/src/test/java/com/wifiscanner/model/WifiNetworkTest.kt b/src/test/java/com/wifiscanner/model/WifiNetworkTest.kt new file mode 100644 index 0000000..090bd49 --- /dev/null +++ b/src/test/java/com/wifiscanner/model/WifiNetworkTest.kt @@ -0,0 +1,60 @@ +package com.wifiscanner.model + +import android.R +import org.junit.Assert.* +import org.junit.Test + +class WifiNetworkTest { + + @Test + fun `test signal quality for excellent signal`() { + val network = WifiNetwork( + ssid = "TestNetwork", + bssid = "00:00:00:00:00", + signalStrength = -40, + securityType = "WPA2", + frequency = 2400 + ) + assertEquals("Excellent", network.getSignalQuality()) + assertEquals(R.color.holo_green_light, network.getSignalColor()) + } + + @Test + fun `test signal quality for good signal`() { + val network = WifiNetwork( + ssid = "TestNetwork", + bssid = "00:00:00:00:00", + signalStrength = -55, + securityType = "WPA2", + frequency = 2400 + ) + assertEquals("Good", network.getSignalQuality()) + assertEquals(R.color.holo_green_dark, network.getSignalColor()) + } + + @Test + fun `test signal quality for fair signal`() { + val network = WifiNetwork( + ssid = "TestNetwork", + bssid = "00:00:00:00:00", + signalStrength = -65, + securityType = "WPA2", + frequency = 2400 + ) + assertEquals("Fair", network.getSignalQuality()) + assertEquals(R.color.holo_orange_light, network.getSignalColor()) + } + + @Test + fun `test signal quality for poor signal`() { + val network = WifiNetwork( + ssid = "TestNetwork", + bssid = "00:00:00:00:00", + signalStrength = -80, + securityType = "WPA2", + frequency = 2400 + ) + assertEquals("Poor", network.getSignalQuality()) + assertEquals(R.color.holo_red_light, network.getSignalColor()) + } +} \ No newline at end of file