Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -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
53 changes: 53 additions & 0 deletions src/main/java/com/wifiscanner/adapter/WifiNetworkAdapter.kt
Original file line number Diff line number Diff line change
@@ -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<WifiNetwork>) :
RecyclerView.Adapter<WifiNetworkAdapter.WifiNetworkViewHolder>() {

/**
* 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
}
39 changes: 39 additions & 0 deletions src/main/java/com/wifiscanner/model/WifiNetwork.kt
Original file line number Diff line number Diff line change
@@ -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
}
}
31 changes: 31 additions & 0 deletions src/main/res/layout/wifi_network_item.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp"
android:background="?attr/selectableItemBackground">

<TextView
android:id="@+id/network_ssid"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textStyle="bold"
android:text="Network Name"/>

<TextView
android:id="@+id/network_strength"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="14sp"
android:text="Signal Strength"/>

<TextView
android:id="@+id/network_security"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="14sp"
android:text="Security Type"/>

</LinearLayout>
60 changes: 60 additions & 0 deletions src/test/java/com/wifiscanner/model/WifiNetworkTest.kt
Original file line number Diff line number Diff line change
@@ -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())
}
}