├── _config.yml
├── fastlane
└── metadata
│ └── android
│ ├── zh-CN
│ ├── short_description.txt
│ └── full_description.txt
│ ├── zh-TW
│ ├── short_description.txt
│ └── full_description.txt
│ ├── es
│ ├── short_description.txt
│ └── full_description.txt
│ ├── en-US
│ ├── short_description.txt
│ ├── images
│ │ ├── icon.png
│ │ └── featureGraphic.png
│ ├── phoneScreenshots
│ │ ├── 01.png
│ │ ├── 02.png
│ │ ├── 03.png
│ │ ├── 04.png
│ │ ├── 06.png
│ │ ├── 07.png
│ │ └── 08.png
│ ├── sevenInchScreenshots
│ │ ├── 01.png
│ │ ├── 02.png
│ │ ├── 03.png
│ │ ├── 04.png
│ │ ├── 06.png
│ │ ├── 07.png
│ │ ├── 08.png
│ │ └── 09.png
│ └── full_description.txt
│ ├── fr
│ ├── short_description.txt
│ └── full_description.txt
│ ├── it
│ ├── short_description.txt
│ └── full_description.txt
│ ├── nl
│ ├── short_description.txt
│ └── full_description.txt
│ ├── pt-BR
│ ├── short_description.txt
│ └── full_description.txt
│ ├── pt
│ ├── short_description.txt
│ └── full_description.txt
│ ├── uk
│ ├── short_description.txt
│ └── full_description.txt
│ ├── bg
│ ├── short_description.txt
│ └── full_description.txt
│ ├── de
│ ├── short_description.txt
│ └── full_description.txt
│ ├── pl
│ ├── short_description.txt
│ └── full_description.txt
│ ├── tr
│ ├── short_description.txt
│ └── full_description.txt
│ ├── hu
│ ├── short_description.txt
│ └── full_description.txt
│ └── ru
│ ├── short_description.txt
│ └── full_description.txt
├── .github
├── ISSUE_TEMPLATE
│ └── config.yml
├── actions
│ └── common-setup
│ │ └── action.yml
├── workflows
│ ├── stale.yml
│ ├── codeql-analysis.yml
│ └── android-test-ci.yml
└── PULL_REQUEST_TEMPLATE.md
├── images
├── icon.png
├── ic_wifi_4.png
├── ic_wifi_5.png
├── ic_wifi_6.png
├── ic_wifi_7.png
├── ic_wifi_legacy.png
├── feature-graphic.png
├── ic_lock_black_18dp.png
├── feature-graphic-light.png
├── ic_lock_open_black_18dp.png
├── ic_lock_outline_black_18dp.png
└── svg
│ └── background.svg
├── codecov.yml
├── app
├── src
│ ├── main
│ │ ├── res
│ │ │ ├── raw
│ │ │ │ ├── data.zip
│ │ │ │ └── contributors.txt
│ │ │ ├── drawable-hdpi
│ │ │ │ └── ic_app.png
│ │ │ ├── drawable-mdpi
│ │ │ │ └── ic_app.png
│ │ │ ├── drawable-xhdpi
│ │ │ │ └── ic_app.png
│ │ │ ├── drawable-xxhdpi
│ │ │ │ └── ic_app.png
│ │ │ ├── drawable-xxxhdpi
│ │ │ │ └── ic_app.png
│ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ ├── xml
│ │ │ │ └── test_attrs.xml
│ │ │ ├── layout
│ │ │ │ ├── separator_line.xml
│ │ │ │ ├── access_point_view_hide.xml
│ │ │ │ ├── info_permission.xml
│ │ │ │ ├── info_throttling.xml
│ │ │ │ ├── graph_content.xml
│ │ │ │ ├── info_faq.xml
│ │ │ │ ├── filter_popup.xml
│ │ │ │ ├── main_toolbar.xml
│ │ │ │ ├── access_points_content.xml
│ │ │ │ ├── vendor_details.xml
│ │ │ │ ├── filter_ssid.xml
│ │ │ │ └── info_location.xml
│ │ │ ├── drawable
│ │ │ │ ├── menu_selector.xml
│ │ │ │ ├── splash_inset.xml
│ │ │ │ ├── ic_check.xml
│ │ │ │ ├── ic_play_arrow.xml
│ │ │ │ ├── ic_reset.xml
│ │ │ │ ├── ic_close.xml
│ │ │ │ ├── ic_menu.xml
│ │ │ │ ├── ic_pause.xml
│ │ │ │ ├── ic_fast_forward.xml
│ │ │ │ ├── ic_sort.xml
│ │ │ │ ├── ic_expand_less.xml
│ │ │ │ ├── ic_expand_more.xml
│ │ │ │ ├── ic_filter_list.xml
│ │ │ │ ├── ic_view_carousel.xml
│ │ │ │ ├── ic_show_chart.xml
│ │ │ │ ├── ic_import_export.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── ic_list.xml
│ │ │ │ ├── ic_signal_wifi_4_bar.xml
│ │ │ │ ├── ic_insert_chart.xml
│ │ │ │ ├── ic_signal_wifi_0_bar.xml
│ │ │ │ ├── ic_brightness_low.xml
│ │ │ │ ├── ic_info_outline.xml
│ │ │ │ ├── ic_location_on.xml
│ │ │ │ ├── ic_signal_wifi_off.xml
│ │ │ │ ├── ic_lock.xml
│ │ │ │ ├── ic_lock_open.xml
│ │ │ │ ├── ic_lock_outline.xml
│ │ │ │ ├── ic_group.xml
│ │ │ │ ├── ic_signal_wifi_2_bar.xml
│ │ │ │ ├── ic_signal_wifi_1_bar.xml
│ │ │ │ ├── ic_network_wifi.xml
│ │ │ │ ├── ic_signal_wifi_3_bar.xml
│ │ │ │ ├── ic_wifi_tethering.xml
│ │ │ │ └── ic_color_lens.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ ├── values
│ │ │ │ ├── dimens.xml
│ │ │ │ └── colors.xml
│ │ │ └── menu
│ │ │ │ └── nav_bottom_menu.xml
│ │ └── kotlin
│ │ │ └── com
│ │ │ └── vrem
│ │ │ ├── annotation
│ │ │ └── OpenClass.kt
│ │ │ ├── wifianalyzer
│ │ │ ├── navigation
│ │ │ │ ├── availability
│ │ │ │ │ ├── NavigationOption.kt
│ │ │ │ │ ├── BottomNav.kt
│ │ │ │ │ ├── Filter.kt
│ │ │ │ │ ├── ScannerSwitch.kt
│ │ │ │ │ ├── WiFiSwitch.kt
│ │ │ │ │ └── NavigationOptions.kt
│ │ │ │ ├── items
│ │ │ │ │ └── NavigationItem.kt
│ │ │ │ ├── NavigationMenuControl.kt
│ │ │ │ └── options
│ │ │ │ │ └── OptionMenu.kt
│ │ │ ├── wifi
│ │ │ │ ├── graphutils
│ │ │ │ │ ├── GraphDataPoint.kt
│ │ │ │ │ ├── GraphViewNotifier.kt
│ │ │ │ │ ├── GraphAdapter.kt
│ │ │ │ │ ├── GraphConstants.kt
│ │ │ │ │ └── GraphLegend.kt
│ │ │ │ ├── model
│ │ │ │ │ ├── WiFiAdditional.kt
│ │ │ │ │ ├── ChannelAPCount.kt
│ │ │ │ │ ├── WiFiVirtual.kt
│ │ │ │ │ ├── GroupBy.kt
│ │ │ │ │ ├── WiFiIdentifier.kt
│ │ │ │ │ └── WiFiConnection.kt
│ │ │ │ ├── accesspoint
│ │ │ │ │ ├── AccessPointViewType.kt
│ │ │ │ │ ├── ConnectionViewType.kt
│ │ │ │ │ └── AccessPointPopup.kt
│ │ │ │ ├── filter
│ │ │ │ │ ├── adapter
│ │ │ │ │ │ ├── WiFiBandAdapter.kt
│ │ │ │ │ │ ├── SecurityAdapter.kt
│ │ │ │ │ │ ├── BasicFilterAdapter.kt
│ │ │ │ │ │ ├── StrengthAdapter.kt
│ │ │ │ │ │ └── SSIDAdapter.kt
│ │ │ │ │ ├── WiFiBandFilter.kt
│ │ │ │ │ ├── StrengthFilter.kt
│ │ │ │ │ └── SecurityFilter.kt
│ │ │ │ ├── scanner
│ │ │ │ │ └── ScannerCallback.kt
│ │ │ │ └── band
│ │ │ │ │ └── WiFiChannel.kt
│ │ │ ├── settings
│ │ │ │ ├── Data.kt
│ │ │ │ ├── ThemeStyle.kt
│ │ │ │ ├── LanguagePreference.kt
│ │ │ │ ├── CountryPreference.kt
│ │ │ │ └── CustomPreference.kt
│ │ │ ├── Configuration.kt
│ │ │ ├── vendor
│ │ │ │ └── model
│ │ │ │ │ └── VendorUtils.kt
│ │ │ ├── MainActivityBackPressed.kt
│ │ │ ├── permission
│ │ │ │ └── PermissionService.kt
│ │ │ └── export
│ │ │ │ └── ExportIntent.kt
│ │ │ └── util
│ │ │ ├── StringUtils.kt
│ │ │ ├── BuildUtils.kt
│ │ │ ├── EnumUtils.kt
│ │ │ └── FileUtils.kt
│ ├── test
│ │ ├── res
│ │ │ └── xml
│ │ │ │ └── test_attrs.xml
│ │ └── kotlin
│ │ │ └── com
│ │ │ └── vrem
│ │ │ └── wifianalyzer
│ │ │ ├── wifi
│ │ │ ├── graphutils
│ │ │ │ └── GraphDataPointTest.kt
│ │ │ ├── scanner
│ │ │ │ └── SsidTestUtil.kt
│ │ │ ├── model
│ │ │ │ └── FastRoamingTest.kt
│ │ │ ├── predicate
│ │ │ │ ├── AllPredicateTest.kt
│ │ │ │ ├── AnyPredicateTest.kt
│ │ │ │ └── SSIDPredicateTest.kt
│ │ │ └── accesspoint
│ │ │ │ └── AccessPointViewTypeTest.kt
│ │ │ ├── ConfigurationTest.kt
│ │ │ ├── navigation
│ │ │ └── items
│ │ │ │ └── NavigationItemTest.kt
│ │ │ └── RobolectricUtil.kt
│ └── androidTest
│ │ └── kotlin
│ │ └── com
│ │ └── vrem
│ │ └── wifianalyzer
│ │ ├── FilterInstrumentedTest.kt
│ │ └── ScannerInstrumentedTest.kt
├── build.properties
└── lint.xml
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── .gitattributes
├── .gitignore
├── gradle.properties
├── settings.gradle
├── .editorconfig
└── dependencyUpdates.gradle
/_config.yml:
--------------------------------------------------------------------------------
1 | theme: jekyll-theme-cayman
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/short_description.txt:
--------------------------------------------------------------------------------
1 | 优化您的 Wi-Fi 网络
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-TW/short_description.txt:
--------------------------------------------------------------------------------
1 | 最佳化您的 Wi-Fi 網路
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/short_description.txt:
--------------------------------------------------------------------------------
1 | Optimiza tu red Wi-Fi
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | Optimize your Wi-Fi network
--------------------------------------------------------------------------------
/fastlane/metadata/android/fr/short_description.txt:
--------------------------------------------------------------------------------
1 | Optimisez vos réseaux Wi-Fi
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/it/short_description.txt:
--------------------------------------------------------------------------------
1 | Ottimizza la tua rete Wi-Fi
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/nl/short_description.txt:
--------------------------------------------------------------------------------
1 | Optimaliseer uw Wifi netwerk
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt-BR/short_description.txt:
--------------------------------------------------------------------------------
1 | Otimize a sua rede Wi-Fi
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt/short_description.txt:
--------------------------------------------------------------------------------
1 | Otimize a sua rede Wi-Fi
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/uk/short_description.txt:
--------------------------------------------------------------------------------
1 | Оптимізація мережі Wi-Fi
2 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links: []
3 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/bg/short_description.txt:
--------------------------------------------------------------------------------
1 | Оптимизирайте своята Wi-Fi мрежа
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de/short_description.txt:
--------------------------------------------------------------------------------
1 | Verbesseren Sie Ihr WLAN-Netzwerk
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pl/short_description.txt:
--------------------------------------------------------------------------------
1 | Zoptymalizuj twoją sieć Wi-Fi
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/tr/short_description.txt:
--------------------------------------------------------------------------------
1 | Wi-Fi ağınızı en iyi hale getirin
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/hu/short_description.txt:
--------------------------------------------------------------------------------
1 | Optimalizálja Wi‑Fi-hálózatát
2 |
3 |
--------------------------------------------------------------------------------
/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/images/icon.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/short_description.txt:
--------------------------------------------------------------------------------
1 | Оптимизация сети Wi-Fi путем проверки состояния Wi-Fi
2 |
--------------------------------------------------------------------------------
/images/ic_wifi_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/images/ic_wifi_4.png
--------------------------------------------------------------------------------
/images/ic_wifi_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/images/ic_wifi_5.png
--------------------------------------------------------------------------------
/images/ic_wifi_6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/images/ic_wifi_6.png
--------------------------------------------------------------------------------
/images/ic_wifi_7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/images/ic_wifi_7.png
--------------------------------------------------------------------------------
/codecov.yml:
--------------------------------------------------------------------------------
1 | comment:
2 | layout: header, diff, changes, sunburst, uncovered
3 | coverage:
4 | status: { }
5 |
6 |
--------------------------------------------------------------------------------
/images/ic_wifi_legacy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/images/ic_wifi_legacy.png
--------------------------------------------------------------------------------
/images/feature-graphic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/images/feature-graphic.png
--------------------------------------------------------------------------------
/app/src/main/res/raw/data.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/app/src/main/res/raw/data.zip
--------------------------------------------------------------------------------
/images/ic_lock_black_18dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/images/ic_lock_black_18dp.png
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/images/feature-graphic-light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/images/feature-graphic-light.png
--------------------------------------------------------------------------------
/images/ic_lock_open_black_18dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/images/ic_lock_open_black_18dp.png
--------------------------------------------------------------------------------
/images/ic_lock_outline_black_18dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/images/ic_lock_outline_black_18dp.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/app/src/main/res/drawable-hdpi/ic_app.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/app/src/main/res/drawable-mdpi/ic_app.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/app/src/main/res/drawable-xhdpi/ic_app.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/app/src/main/res/drawable-xxhdpi/ic_app.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/ic_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/app/src/main/res/drawable-xxxhdpi/ic_app.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/fastlane/metadata/android/en-US/images/icon.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/build.properties:
--------------------------------------------------------------------------------
1 | #Build Properties
2 | #Sun Dec 14 12:21:54 EST 2025
3 | version_build=37
4 | version_major=3
5 | version_minor=2
6 | version_patch=1
7 | version_store=70
8 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/phoneScreenshots/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/fastlane/metadata/android/en-US/phoneScreenshots/01.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/phoneScreenshots/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/fastlane/metadata/android/en-US/phoneScreenshots/02.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/phoneScreenshots/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/fastlane/metadata/android/en-US/phoneScreenshots/03.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/phoneScreenshots/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/fastlane/metadata/android/en-US/phoneScreenshots/04.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/phoneScreenshots/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/fastlane/metadata/android/en-US/phoneScreenshots/06.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/phoneScreenshots/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/fastlane/metadata/android/en-US/phoneScreenshots/07.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/phoneScreenshots/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/fastlane/metadata/android/en-US/phoneScreenshots/08.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/featureGraphic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/fastlane/metadata/android/en-US/images/featureGraphic.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/sevenInchScreenshots/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/fastlane/metadata/android/en-US/sevenInchScreenshots/01.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/sevenInchScreenshots/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/fastlane/metadata/android/en-US/sevenInchScreenshots/02.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/sevenInchScreenshots/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/fastlane/metadata/android/en-US/sevenInchScreenshots/03.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/sevenInchScreenshots/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/fastlane/metadata/android/en-US/sevenInchScreenshots/04.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/sevenInchScreenshots/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/fastlane/metadata/android/en-US/sevenInchScreenshots/06.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/sevenInchScreenshots/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/fastlane/metadata/android/en-US/sevenInchScreenshots/07.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/sevenInchScreenshots/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/fastlane/metadata/android/en-US/sevenInchScreenshots/08.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/sevenInchScreenshots/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/HEAD/fastlane/metadata/android/en-US/sevenInchScreenshots/09.png
--------------------------------------------------------------------------------
/app/src/main/res/xml/test_attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/test/res/xml/test_attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Set the default behavior, in case people don't have core.autocrlf set.
2 | * text eol=lf
3 |
4 | # Denote all files that are truly binary and should not be modified.
5 | *.png binary
6 | *.jpg binary
7 | *.ico binary
8 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | .idea
4 | .kotlin
5 | .run
6 | .navigation
7 | local.properties
8 | .DS_Store
9 | build
10 | coverage
11 | libs
12 | release
13 | *IntegrationTest.java
14 | *IntegrationTest.kt
15 | androidkeystore*
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Thu Oct 15 16:36:01 EDT 2020
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip
7 |
--------------------------------------------------------------------------------
/.github/actions/common-setup/action.yml:
--------------------------------------------------------------------------------
1 | name: 'Setup Java and Gradle'
2 | description: 'Composite action to set up Java and Gradle for Android builds.'
3 | runs:
4 | using: 'composite'
5 | steps:
6 | - name: Set up JDK
7 | uses: actions/setup-java@v4
8 | with:
9 | distribution: zulu
10 | java-version: 21
11 | - name: Set up Gradle
12 | uses: gradle/actions/setup-gradle@v4
13 |
14 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/full_description.txt:
--------------------------------------------------------------------------------
1 | 使用 WiFiAnalyzer 检查 Wi-Fi 网络状态、信号强度以及识别拥挤信道,从而优化您的 Wi-Fi 网络。
2 |
3 | 功能:
4 |
5 | * 识别附近的接入点
6 | * 以图表形式显示信道信号强度
7 | * 以图表形式显示接入点信号强度随时间的变化
8 | * 分析 Wi-Fi 网络,对信道进行评级
9 | * HT/VHT 检测——40/80/160/320 MHz(需要硬件/软件支持)
10 | * 2.4 GHz、5 GHz 和 6 GHz Wi-Fi 频段(需要硬件/软件支持)
11 | * 完整或紧凑的接入点视图
12 | * 估算到接入点的距离
13 | * 导出接入点详细信息
14 | * 提供深色、浅色和系统主题
15 | * 暂停/恢复扫描
16 | * 可用筛选条件:Wi-Fi 频段、信号强度、安全性和 SSID
17 | * 制造商/OUI 数据库查询
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-TW/full_description.txt:
--------------------------------------------------------------------------------
1 | 使用本開放原始碼的 Android WiFiAnalyzer 應用程式來檢查 Wi-Fi 狀態、訊號強度並識別擁擠的頻道從而最佳化您的 Wi-Fi 網路
2 |
3 | 功能:
4 |
5 | * 識別附近的存取點
6 | * 頻道訊號強度圖表
7 | * 存取點訊號強度隨時間變化的圖表
8 | * 分析 Wi-Fi 網路以評估頻道
9 | * HT/VHT 偵測 - 40/80/160/320 MHz (需要硬體/軟體支援)
10 | * 2.4 GHz、5 GHz 和 6 GHz Wi-Fi 頻段 (需要硬體/軟體支援)
11 | * 完整或精簡的存取點視圖
12 | * 估計與存取點的距離
13 | * 匯出存取點詳細資訊
14 | * 提供深色、淺色和系統主題
15 | * 暫停/繼續掃描
16 | * 可用篩選器:Wi-Fi 頻段、訊號強度、安全性和 SSID
17 | * 供應商/OUI 資料庫查詢
--------------------------------------------------------------------------------
/app/src/test/kotlin/com/vrem/wifianalyzer/wifi/graphutils/GraphDataPointTest.kt:
--------------------------------------------------------------------------------
1 | package com.vrem.wifianalyzer.wifi.graphutils
2 |
3 | import org.assertj.core.api.Assertions.assertThat
4 | import org.junit.Test
5 |
6 | class GraphDataPointTest {
7 | private val fixture: GraphDataPoint = GraphDataPoint(111, 222)
8 |
9 | @Test
10 | fun getX() {
11 | // Validate
12 | assertThat(fixture.x).isEqualTo(111)
13 | }
14 |
15 | @Test
16 | fun getY() {
17 | // Validate
18 | assertThat(fixture.y).isEqualTo(222)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/lint.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/raw/contributors.txt:
--------------------------------------------------------------------------------
1 | Abuzer Rafey
2 | Alex Orchard
3 | Alexei Guevara
4 | Andreas Ziegler
5 | Caren DesBrisay
6 | Dan Light
7 | David Jones
8 | Dmitriy Bershadskiy
9 | Gina Chaves
10 | Graham Foster
11 | Gordon Wallace
12 | Jean Bourgeois
13 | Karol Kosek
14 | Kendra Borutski
15 | Kevin Jiang
16 | Lee McCallum
17 | Lukas Winkler
18 | Marco Santinelli
19 | Mateus B. Cassiano
20 | Michael Melo
21 | Michael Pickard
22 | Nikolas Rimikis
23 | Peter Dave Hello
24 | Silviu Marcu
25 | Simon Doppler
26 | Steve Riddle
27 | Tomasz Wrobel
28 | Vadim Karantayer
29 | Wei McCallum
30 | William Gathoye
31 | Yuriy Timofeev
32 | 'Akira
33 | akillcool
34 | Dtorner
35 | Genghis
36 | Nam
37 | TaiXiong
38 | Tobaloidee
39 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Gradle settings
2 |
3 | # JVM arguments for Gradle
4 | org.gradle.jvmargs=-Xmx4096m -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParallelGC -Dfile.encoding=UTF-8
5 |
6 | # Enable parallel task execution and Gradle daemon
7 | org.gradle.parallel=true
8 | org.gradle.daemon=true
9 | org.gradle.daemon.idletimeout=10800000
10 |
11 | # Configuration cache settings
12 | org.gradle.configuration-cache=true
13 |
14 | # Show all warnings
15 | org.gradle.warning.mode=all
16 |
17 | # AndroidX and Jetifier settings
18 | android.useAndroidX=true
19 | android.enableJetifier=true
20 | android.nonFinalResIds=true
21 | android.jetifier.ignorelist=bcprov-jdk15on
22 |
23 | # Kotlin code style
24 | kotlin.code.style=official
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/full_description.txt:
--------------------------------------------------------------------------------
1 | Optimize your Wi-Fi network, by checking Wi-Fi network status, signal strength and identifying crowded channels using WiFiAnalyzer
2 |
3 | Features:
4 |
5 | * Identify nearby Access Points
6 | * Graph channels signal strength
7 | * Graph Access Point signal strength over time
8 | * Analyze Wi-Fi networks to rate channels
9 | * HT/VHT Detection - 40/80/160/320 MHz (Requires hardware/software support)
10 | * 2.4 GHz, 5 GHz and 6 GHz Wi-Fi bands (Requires hardware/software support)
11 | * Access Point view complete or compact
12 | * Estimated Distance to the Access Points
13 | * Export access points details
14 | * Dark, Light and System theme available
15 | * Pause/Resume scanning
16 | * Available filters: Wi-Fi band, Signal strength, Security and SSID
17 | * Vendor/OUI Database Lookup
18 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2019 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 |
19 | include ':app'
20 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt-BR/full_description.txt:
--------------------------------------------------------------------------------
1 | Otimize sua rede Wi-Fi ao conferir o estado da rede, a força do sinal, e ao identificar canais congestionados usando o WiFiAnalyzer
2 |
3 | Recursos:
4 |
5 | * Identifique redes por perto
6 | * Gráfico da força do sinal nos canais
7 | * Gráfico da força do sinal das redes ao longo do tempo
8 | * Analise as redes Wi-Fi para avaliar os canais
9 | * Detecção HT/VHT - 40/80/160/320 MHz (requer suporte pelo hardware)
10 | * Frequências de Wi-Fi 2.4 GHz, 5 GHz, e 6 GHz. (requer suporte pelo hardware)
11 | * Tela de redes completa ou compacta
12 | * Distância estimada até as redes
13 | * Exporte os detalhes das redes
14 | * Tema escuro, claro, e automático disponíveis
15 | * Pause ou retome a busca por redes
16 | * Filtros disponíveis: Frequência do Wi-Fi, força do sinal, segurança e SSID
17 | * Pesquisa no banco de dados de fabricantes/OUI
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt/full_description.txt:
--------------------------------------------------------------------------------
1 | Otimize sua rede Wi-Fi ao conferir o estado da rede, a força do sinal, e ao identificar canais congestionados usando o WiFiAnalyzer
2 |
3 | Recursos:
4 |
5 | * Identifique redes por perto
6 | * Gráfico da intensidade do sinal nos canais
7 | * Gráfico da intensidade do sinal das redes ao longo do tempo
8 | * Analise as redes Wi-Fi para avaliar os canais
9 | * Detecção HT/VHT - 40/80/160/320 MHz (requer suporte pelo hardware)
10 | * Frequências de Wi-Fi 2.4 GHz, 5 GHz, e 6 GHz. (requer suporte pelo hardware)
11 | * Ecrã de redes completo ou compacto
12 | * Distância estimada até as redes
13 | * Exporte os detalhes das redes
14 | * Tema escuro, claro, e automático disponíveis
15 | * Pause ou retome a procura de redes
16 | * Filtros disponíveis: Frequência do Wi-Fi, intensidade do sinal, segurança e SSID
17 | * Pesquisa na base de dados de fabricantes/OUI
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/uk/full_description.txt:
--------------------------------------------------------------------------------
1 | Оптимізація мережі Wi-Fi шляхом перевірки стану Wi-Fi, рівня сигналу і визначення переповнених каналів використовуючи WiFiAnalyzer для Android
2 |
3 | Функції:
4 |
5 | * Визначення найближчих точок доступу
6 | * Графік потужності сигналу каналів
7 | * Графік потужності сигналу точки доступу в часі
8 | * Аналіз мереж Wi-Fi для оцінки каналів
9 | * Виявлення HT/VHT - 40/80/160/320 МГц (Потребує апаратної/програмної підтримки)
10 | * Діапазони Wi-Fi 2,4 ГГц, 5 ГГц та 6 ГГц (Потребує апаратної/програмної підтримки)
11 | * Повний або компактний вигляд точки доступу
12 | * Орієнтовна відстань до точок доступу
13 | * Експорт деталей точок доступу
14 | * Доступні темна, світла та системна теми
15 | * Призупинити/відновити сканування
16 | * Доступні фільтри: діапазон Wi-Fi, потужність сигналу, безпека та SSID
17 | * Пошук у базі даних виробників/OUI
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/full_description.txt:
--------------------------------------------------------------------------------
1 | Оптимизация сети Wi-Fi путем проверки состояния Wi-Fi, уровня сигнала и определения переполненных каналов используя WiFiAnalyzer для Android
2 |
3 | Возможности:
4 |
5 | * Определить ближайшие точки доступа (Access Points, AP)
6 | * График уровня сигнала каналов
7 | * График уровня сигнала точки доступа с течением времени
8 | * Анализ сети Wi-Fi для оценки каналов
9 | * Обнаружение HT/VHT — 40/80/160/320 МГц (требуется аппаратная поддержка)
10 | * Диапазоны Wi-Fi 2,4 ГГц, 5 ГГц и 6 ГГц (требуется аппаратная поддержка)
11 | * Полное или компактное представление точки доступа
12 | * Предполагаемое расстояние до точек доступа
13 | * Экспортировать информацию точек доступа
14 | * Доступны темная, светлая и системная темы.
15 | * Пауза/возобновление сканирования
16 | * Доступные фильтры: диапазон Wi-Fi, уровень сигнала, безопасность и SSID.
17 | * Поиск в базе данных поставщиков/OUI
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/tr/full_description.txt:
--------------------------------------------------------------------------------
1 | WiFiAnalyzer ile Wi-Fi ağınızı optimize edin; Wi-Fi ağ durumu, sinyal gücü kontrolü yapın ve yoğun kanalları tespit edin
2 |
3 | Özellikler:
4 |
5 | * Yakındaki Erişim Noktalarını (Access Point) tanımlama
6 | * Kanalların sinyal gücünü grafikle gösterme
7 | * Erişim Noktalarının sinyal gücünü zaman içinde grafikle gösterme
8 | * Wi-Fi ağlarını analiz ederek kanalları derecelendirme
9 | * HT/VHT Algılama - 40/80/160/320 MHz (Donanım/yazılım desteği gerektirir)
10 | * 2.4 GHz, 5 GHz ve 6 GHz Wi-Fi bantları (Donanım/yazılım desteği gerektirir)
11 | * Erişim Noktası görünümü: tam veya kompakt
12 | * Erişim Noktalarına tahmini mesafe
13 | * Erişim noktası detaylarını dışa aktarma
14 | * Karanlık, Aydınlık ve Sistem temaları mevcut
15 | * Tarama işlemini duraklatma/devam ettirme
16 | * Mevcut filtreler: Wi-Fi bandı, Sinyal gücü, Güvenlik ve SSID
17 | * Satıcı/OUI veritabanı sorgulama
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/hu/full_description.txt:
--------------------------------------------------------------------------------
1 | Optimalizálja Wi‑Fi hálózatát: ellenőrizze a hálózat állapotát, a jelerősséget és azonosítsa a túlterhelt csatornákat a WiFiAnalyzer segítségével.
2 |
3 | Funkciók:
4 |
5 | * Közeli hozzáférési pontok (Access Point, AP) azonosítása
6 | * Csatornák jelerősségének grafikonja
7 | * Hozzáférési pontok jelerősségének ábrázolása az idő függvényében
8 | * Wi‑Fi hálózatok elemzése és csatornák értékelése
9 | * HT/VHT észlelés — 40/80/160/320 MHz (hardver/szoftver támogatást igényel)
10 | * 2,4 GHz, 5 GHz és 6 GHz Wi‑Fi sávok (hardver/szoftver támogatást igényel)
11 | * Hozzáférési pont nézet: részletes vagy tömör
12 | * Becsült távolság a hozzáférési pontoktól
13 | * Hozzáférési pontok adatainak exportálása
14 | * Sötét, világos és rendszer témák támogatása
15 | * Szkennelés szüneteltetése/folytatása
16 | * Elérhető szűrők: Wi‑Fi sáv, jelerősség, titkosítás és SSID
17 | * Gyártó/OUI adatbázis keresés
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pl/full_description.txt:
--------------------------------------------------------------------------------
1 | Zoptymalizuj twoją sieć Wi-Fi, poprzez sprawdzanie statusu sieci Wi-Fi, siłę sygnały i indentyfikowanie zatłoczonych kanałów używając otwartoźródłowej aplikacji WiFiAnalyzer dla Androida
2 |
3 | Funkcje:
4 |
5 | * Identyfikuj pobliskie punkty dostępowe
6 | * Wykres siły sygnału kanałów
7 | * Wykres siły sygnału punktu dostępowego w czasie
8 | * Analizuj sieci Wi-Fi, aby ocenić kanały
9 | * Wykrywanie HT/VHT - 40/80/160/320 MHz (Wymaga wsparcia sprzętowego/programowego)
10 | * Pasma Wi-Fi 2,4 GHz, 5 GHz i 6 GHz (Wymaga wsparcia sprzętowego/programowego)
11 | * Widok punktu dostępowego pełny lub kompaktowy
12 | * Szacowana odległość do punktów dostępowych
13 | * Eksportuj szczegóły punktów dostępowych
14 | * Dostępny motyw ciemny, jasny i systemowy
15 | * Wstrzymaj/Wznów skanowanie
16 | * Dostępne filtry: pasmo Wi-Fi, siła sygnału, zabezpieczenia i SSID
17 | * Wyszukiwanie w bazie danych dostawców/OUI
--------------------------------------------------------------------------------
/.github/workflows/stale.yml:
--------------------------------------------------------------------------------
1 | name: Mark stale issues and pull requests
2 | on:
3 | schedule:
4 | - cron: '30 6 1 * *'
5 | jobs:
6 | stale:
7 | runs-on: ubuntu-latest
8 | permissions:
9 | issues: write
10 | pull-requests: write
11 | steps:
12 | - uses: actions/stale@v9
13 | with:
14 | repo-token: ${{ secrets.GITHUB_TOKEN }}
15 | stale-issue-message: 'This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.'
16 | stale-pr-message: 'This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.'
17 | stale-issue-label: 'stale'
18 | stale-pr-label: 'stale'
19 | exempt-issue-labels: 'bug,high-priority'
20 | days-before-stale: 365
21 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/bg/full_description.txt:
--------------------------------------------------------------------------------
1 | Оптимизирайте своята Wi-Fi мрежа, като проверите състоянието на Wi-Fi мрежата, силата на сигнала и идентифицирате пренаселените канали, използвайки WiFiAnalyzer с отворен код за Android
2 |
3 | Функции:
4 |
5 | * Идентифициране на близки точки за достъп
6 | * Графика на силата на сигнала по канали
7 | * Графика на силата на сигнала на точките за достъп във времето
8 | * Анализ на Wi-Fi мрежи за оценка на каналите
9 | * HT/VHT откриване - 40/80/160/320 MHz (Изисква хардуерна/софтуерна поддръжка)
10 | * 2.4 GHz, 5 GHz и 6 GHz Wi-Fi ленти (Изисква хардуерна/софтуерна поддръжка)
11 | * Пълен или компактен изглед на точките за достъп
12 | * Оценка на разстоянието до точките за достъп
13 | * Експортиране на детайли за точките за достъп
14 | * Тъмна, светла и системна тема
15 | * Пауза/възобновяване на сканирането
16 | * Налични филтри: Wi-Fi лента, сила на сигнала, сигурност и SSID
17 | * Търсене в база данни на производители/OUI
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/annotation/OpenClass.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 |
19 | package com.vrem.annotation
20 |
21 | @Target(AnnotationTarget.CLASS)
22 | annotation class OpenClass
23 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de/full_description.txt:
--------------------------------------------------------------------------------
1 | Verbesseren Sie Ihr WLAN-Netzwerk, indem Sie den Netzwerkstatus und die Signalstärke Ihres WLANs messen und erkennnen Sie überlastete Kanäle mithilfe einer freien Open-Source App für Android
2 |
3 | Funktionen:
4 | * Identifizieren Sie nahegelegene Zugangspunkte
5 | * Grafische Darstellung der Signalstärke der Kanäle
6 | * Grafische Darstellung der Signalstärke des Zugangspunkts im Zeitverlauf
7 | * Analysieren Sie Wi-Fi-Netzwerke, um Kanäle zu bewerten
8 | * HT/VHT-Erkennung - 40/80/160/320 MHz (erfordert Hardware-/Software-Unterstützung)
9 | * 2,4-GHz-, 5-GHz- und 6-GHz-Wi-Fi-Bänder (erfordert Hardware-/Software-Unterstützung)
10 | * Zugangspunktansicht vollständig oder kompakt
11 | * Geschätzte Entfernung zu den Zugangspunkten
12 | * Details der Zugangspunkte exportieren
13 | * Dunkles, helles und System-Design verfügbar
14 | * Scannen anhalten/fortsetzen
15 | * Verfügbare Filter: Wi-Fi-Band, Signalstärke, Sicherheit und SSID
16 | * Hersteller/OUI-Datenbanksuche
--------------------------------------------------------------------------------
/fastlane/metadata/android/it/full_description.txt:
--------------------------------------------------------------------------------
1 | Ottimizza la tua rete Wi-Fi, controllando lo stato, la potenza del segnale e identificando i canali affollati, usando un WiFiAnalyzer per Android
2 |
3 | Caratteristiche:
4 |
5 | * Identifica i punti di accesso vicini
6 | * Grafico della potenza del segnale dei canali
7 | * Grafico della potenza del segnale del punto di accesso nel tempo
8 | * Analizza le reti Wi-Fi per valutare i canali
9 | * Rilevamento HT/VHT - 40/80/160/320 MHz (Richiede Android OS 6+)
10 | * Bande Wi-Fi a 2,4 GHz, 5 GHz e 6 GHz (Richiede supporto hardware)
11 | * Visualizzazione completa o compatta dei punti di accesso
12 | * Distanza stimata dai punti di accesso
13 | * Esporta i dettagli dei punti di accesso
14 | * Tema Scuro, Chiaro e di Sistema disponibili
15 | * Metti in pausa/Riprendi la scansione
16 | * Filtri disponibili: banda Wi-Fi, potenza del segnale, sicurezza e SSID
17 | * Ricerca nel database dei fornitori/OUI
18 | * L'applicazione ha troppe funzionalità per menzionarle tutte
--------------------------------------------------------------------------------
/fastlane/metadata/android/nl/full_description.txt:
--------------------------------------------------------------------------------
1 | Optimaliseer uw Wifi netwerk door het controleren van de Wifi netwerkstatus, signaalsterkte en het indentificeren van drukke kanalen met gebruik van een open-source WiFiAnalyzer voor Android.
2 |
3 | Functies:
4 |
5 | * Identificeer nabijgelegen Access Points
6 | * Grafiek van de signaalsterkte van kanalen
7 | * Grafiek van de signaalsterkte van een Access Point over tijd
8 | * Analyseer wifi-netwerken om kanalen te beoordelen
9 | * HT/VHT-detectie - 40/80/160/320 MHz (Vereist hardware-/softwareondersteuning)
10 | * 2,4 GHz, 5 GHz en 6 GHz wifi-banden (Vereist hardware-/softwareondersteuning)
11 | * Volledige of compacte weergave van Access Points
12 | * Geschatte afstand tot de Access Points
13 | * Exporteer details van Access Points
14 | * Donker, licht en systeemthema beschikbaar
15 | * Pauzeer/hervat scannen
16 | * Beschikbare filters: wifi-band, signaalsterkte, beveiliging en SSID
17 | * Opzoeken in de database van leveranciers/OUI
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/full_description.txt:
--------------------------------------------------------------------------------
1 | Optimiza tu red Wi-Fi, mediante la comprobación de estado de red, intensidad de señal e identificación de los canales llenos usando la aplicación de código abierto WiFiAnalyzer para Android
2 |
3 | Funciones:
4 |
5 | * Identifica los puntos de acceso cercanos
6 | * Grafica la intensidad de la señal por canales
7 | * Grafica la intensidad de la señal de los puntos de acceso a lo largo del tiempo
8 | * Analiza las redes Wi-Fi para calificar los canales
9 | * Detección HT/VHT - 40/80/160/320 MHz (requiere soporte de hardware/software)
10 | * Bandas Wi-Fi de 2.4 GHz, 5 GHz y 6 GHz (requiere soporte de hardware/software)
11 | * Vista de puntos de acceso completa o compacta
12 | * Distancia estimada a los puntos de acceso
13 | * Exporta los detalles de los puntos de acceso
14 | * Tema oscuro, claro y del sistema disponible
15 | * Pausar/reanudar el escaneo
16 | * Filtros disponibles: banda Wi-Fi, intensidad de la señal, seguridad y SSID
17 | * Búsqueda en la base de datos de fabricantes/OUI
--------------------------------------------------------------------------------
/fastlane/metadata/android/fr/full_description.txt:
--------------------------------------------------------------------------------
1 | Optimisez vos réseaux Wi-Fi, en vérifiant l\'état du réseau, la force du signal et en identifiant les canaux surchargés grâce à WiFiAnalyzer pour Android.
2 |
3 |
4 | Fonctionnalités :
5 |
6 | * Identifier les points d'accès à proximité
7 | * Graphique de la force du signal des canaux
8 | * Graphique de la force du signal du point d'accès dans le temps
9 | * Analyser les réseaux Wi-Fi pour évaluer les canaux
10 | * Détection HT/VHT - 40/80/160/320 MHz (Nécessite Android OS 6+)
11 | * Bandes Wi-Fi 2,4 GHz, 5 GHz et 6 GHz (Nécessite un support matériel)
12 | * Vue des points d'accès complète ou compacte
13 | * Distance estimée aux points d'accès
14 | * Exporter les détails des points d'accès
15 | * Thèmes Sombre, Clair et Système disponibles
16 | * Mettre en pause/Reprendre l'analyse
17 | * Filtres disponibles : bande Wi-Fi, force du signal, sécurité et SSID
18 | * Recherche dans la base de données des vendeurs/OUI
19 | * L'application a trop de fonctionnalités pour toutes les mentionner
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # Coding Conventions style guide
2 | root = true
3 |
4 | [*]
5 | indent_style = space
6 | indent_size = 4
7 | tab_width = 4
8 | continuation_indent_size = 4
9 | insert_final_newline = true
10 | charset = utf-8
11 | trim_trailing_whitespace = true
12 | max_line_length = 120
13 | end_of_line = lf
14 |
15 | [*.{kt,kts}]
16 | indent_size = 4
17 | continuation_indent_size = 4
18 | insert_final_newline = true
19 | max_line_length = 120
20 |
21 | [*.java]
22 | indent_size = 4
23 | continuation_indent_size = 4
24 | max_line_length = 120
25 |
26 | [*.gradle]
27 | indent_size = 4
28 |
29 | [*.xml]
30 | indent_size = 4
31 |
32 | [*.md]
33 | indent_size = 2
34 | trim_trailing_whitespace = false
35 | insert_final_newline = true
36 | charset = utf-8
37 |
38 | [*.properties]
39 | charset = utf-8
40 | end_of_line = lf
41 | insert_final_newline = true
42 | trim_trailing_whitespace = true
43 |
44 | [*.json]
45 | indent_size = 2
46 | insert_final_newline = true
47 | charset = utf-8
48 |
49 | [*.{yml,yaml}]
50 | indent_size = 2
51 | insert_final_newline = true
52 | charset = utf-8
53 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/navigation/availability/NavigationOption.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.navigation.availability
19 |
20 | import com.vrem.wifianalyzer.MainActivity
21 |
22 | typealias NavigationOption = (mainActivity: MainActivity) -> Unit
23 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/graphutils/GraphDataPoint.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 |
19 | package com.vrem.wifianalyzer.wifi.graphutils
20 |
21 | import com.jjoe64.graphview.series.DataPoint
22 |
23 | data class GraphDataPoint(
24 | val x: Int,
25 | val y: Int,
26 | ) : DataPoint(x.toDouble(), y.toDouble())
27 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/separator_line.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
24 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/access_point_view_hide.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
24 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/settings/Data.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.settings
19 |
20 | data class Data(
21 | val code: String,
22 | val name: String,
23 | ) : Comparable {
24 | override fun compareTo(other: Data): Int = compareBy { it.name }.thenBy { it.code }.compare(this, other)
25 | }
26 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/menu_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/graphutils/GraphViewNotifier.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.graphutils
19 |
20 | import com.jjoe64.graphview.GraphView
21 | import com.vrem.wifianalyzer.wifi.model.WiFiData
22 |
23 | interface GraphViewNotifier {
24 | fun graphView(): GraphView
25 |
26 | fun update(wiFiData: WiFiData)
27 | }
28 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/splash_inset.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
25 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/model/WiFiAdditional.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.model
19 |
20 | import com.vrem.util.EMPTY
21 |
22 | class WiFiAdditional(
23 | val vendorName: String = String.EMPTY,
24 | val wiFiConnection: WiFiConnection = WiFiConnection.EMPTY,
25 | ) {
26 | companion object {
27 | val EMPTY = WiFiAdditional()
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/Configuration.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer
19 |
20 | import com.vrem.annotation.OpenClass
21 |
22 | const val SIZE_MIN = 1024
23 | const val SIZE_MAX = 4096
24 |
25 | @OpenClass
26 | class Configuration(
27 | val largeScreen: Boolean,
28 | ) {
29 | var size = SIZE_MAX
30 |
31 | val sizeAvailable: Boolean get() = size == SIZE_MAX
32 | }
33 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/accesspoint/AccessPointViewType.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.accesspoint
19 |
20 | import androidx.annotation.LayoutRes
21 | import com.vrem.wifianalyzer.R
22 |
23 | enum class AccessPointViewType(
24 | @LayoutRes val layout: Int,
25 | ) {
26 | COMPLETE(R.layout.access_point_view_complete),
27 | COMPACT(R.layout.access_point_view_compact),
28 | }
29 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_check.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/.github/workflows/codeql-analysis.yml:
--------------------------------------------------------------------------------
1 | name: "CodeQL Analyze"
2 | on:
3 | push:
4 | paths-ignore:
5 | - '.github/workflows/compare-src.yml'
6 | pull_request:
7 | paths-ignore:
8 | - '.github/workflows/compare-src.yml'
9 | jobs:
10 | analyze:
11 | if: "!contains(github.event.head_commit.message, 'skip ci')"
12 | runs-on: ubuntu-latest
13 | timeout-minutes: 360
14 | permissions:
15 | actions: read
16 | contents: read
17 | security-events: write
18 | strategy:
19 | fail-fast: false
20 | matrix:
21 | language: [ 'java-kotlin' ]
22 | steps:
23 | - name: Checkout repository
24 | uses: actions/checkout@v4
25 | - name: set up JDK 21
26 | uses: actions/setup-java@v4
27 | with:
28 | distribution: 'zulu'
29 | java-version: '21'
30 | - name: Initialize CodeQL
31 | uses: github/codeql-action/init@v3
32 | with:
33 | languages: ${{ matrix.language }}
34 | - name: Auto build
35 | uses: github/codeql-action/autobuild@v3
36 | - name: Perform CodeQL Analysis
37 | uses: github/codeql-action/analyze@v3
38 | with:
39 | category: "/language:${{matrix.language}}"
40 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_play_arrow.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/images/svg/background.svg:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/filter/adapter/WiFiBandAdapter.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.filter.adapter
19 |
20 | import com.vrem.wifianalyzer.settings.Settings
21 | import com.vrem.wifianalyzer.wifi.band.WiFiBand
22 |
23 | class WiFiBandAdapter(
24 | values: Set,
25 | ) : EnumFilterAdapter(values, WiFiBand.entries) {
26 | override fun save(settings: Settings): Unit = settings.saveWiFiBands(selections)
27 | }
28 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_reset.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_close.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_menu.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_pause.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_fast_forward.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_sort.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_expand_less.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_expand_more.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/filter/adapter/SecurityAdapter.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.filter.adapter
19 |
20 | import com.vrem.wifianalyzer.settings.Settings
21 | import com.vrem.wifianalyzer.wifi.model.Security
22 |
23 | class SecurityAdapter(
24 | selections: Set,
25 | ) : EnumFilterAdapter(selections, Security.entries) {
26 | override fun save(settings: Settings) {
27 | settings.saveSecurities(selections)
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_filter_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_view_carousel.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_show_chart.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/navigation/availability/BottomNav.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.navigation.availability
19 |
20 | import android.view.View
21 | import com.vrem.wifianalyzer.R
22 |
23 | internal val navigationOptionBottomNavOff: NavigationOption = {
24 | it.findViewById(R.id.nav_bottom).visibility = View.GONE
25 | }
26 |
27 | internal val navigationOptionBottomNavOn: NavigationOption = {
28 | it.findViewById(R.id.nav_bottom).visibility = View.VISIBLE
29 | }
30 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/navigation/items/NavigationItem.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.navigation.items
19 |
20 | import com.vrem.wifianalyzer.MainActivity
21 | import com.vrem.wifianalyzer.navigation.NavigationMenu
22 |
23 | interface NavigationItem {
24 | fun activate(
25 | mainActivity: MainActivity,
26 | navigationMenu: NavigationMenu,
27 | )
28 |
29 | val registered: Boolean get() = false
30 | val visibility: Int get() = android.view.View.GONE
31 | }
32 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/model/ChannelAPCount.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.model
19 |
20 | import com.vrem.wifianalyzer.wifi.band.WiFiChannel
21 |
22 | data class ChannelAPCount(
23 | val wiFiChannel: WiFiChannel,
24 | val wiFiWidth: WiFiWidth,
25 | val count: Int,
26 | ) : Comparable {
27 | override fun compareTo(other: ChannelAPCount): Int =
28 | compareBy { it.count }.thenBy { it.wiFiChannel }.compare(this, other)
29 | }
30 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_import_export.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/accesspoint/ConnectionViewType.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.accesspoint
19 |
20 | import androidx.annotation.LayoutRes
21 | import com.vrem.wifianalyzer.R
22 |
23 | enum class ConnectionViewType(
24 | @LayoutRes val layout: Int,
25 | ) {
26 | COMPLETE(R.layout.access_point_view_complete),
27 | COMPACT(R.layout.access_point_view_compact),
28 | HIDE(R.layout.access_point_view_hide),
29 | ;
30 |
31 | val hide: Boolean get() = HIDE == this
32 | }
33 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
27 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/util/StringUtils.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.util
19 |
20 | import java.util.Locale
21 |
22 | val String.Companion.EMPTY: String get() = ""
23 | val String.Companion.SPACE_SEPARATOR: String get() = " "
24 |
25 | fun String.Companion.nullToEmpty(value: String?): String = value ?: String.EMPTY
26 |
27 | fun String.specialTrim(): String = this.trim { it <= ' ' }.replace(" +".toRegex(), String.SPACE_SEPARATOR)
28 |
29 | fun String.toCapitalize(locale: Locale): String = this.replaceFirstChar { word -> word.uppercase(locale) }
30 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_signal_wifi_4_bar.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/util/BuildUtils.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 |
19 | package com.vrem.util
20 |
21 | import android.os.Build
22 |
23 | fun buildMinVersionT(): Boolean = Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU
24 |
25 | fun buildMinVersionR(): Boolean = Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
26 |
27 | fun buildMinVersionQ(): Boolean = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q
28 |
29 | fun buildMinVersionP(): Boolean = Build.VERSION.SDK_INT >= Build.VERSION_CODES.P
30 |
31 | fun buildVersionP(): Boolean = Build.VERSION.SDK_INT == Build.VERSION_CODES.P
32 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/scanner/ScannerCallback.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.scanner
19 |
20 | import com.vrem.annotation.OpenClass
21 | import com.vrem.wifianalyzer.wifi.manager.WiFiManagerWrapper
22 |
23 | @OpenClass
24 | internal class ScannerCallback(
25 | private val wiFiManagerWrapper: WiFiManagerWrapper,
26 | private val cache: Cache,
27 | ) : Callback {
28 | override fun onSuccess() {
29 | cache.add(wiFiManagerWrapper.scanResults())
30 | cache.wifiInfo = wiFiManagerWrapper.wiFiInfo()
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/filter/adapter/BasicFilterAdapter.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.filter.adapter
19 |
20 | import com.vrem.annotation.OpenClass
21 | import com.vrem.wifianalyzer.settings.Settings
22 |
23 | @OpenClass
24 | abstract class BasicFilterAdapter(
25 | var selections: Set,
26 | ) {
27 | fun selections(selections: Set) {
28 | this.selections = selections
29 | }
30 |
31 | abstract fun isActive(): Boolean
32 |
33 | abstract fun reset()
34 |
35 | abstract fun save(settings: Settings)
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_insert_chart.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_signal_wifi_0_bar.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
29 |
30 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_brightness_low.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_info_outline.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_location_on.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/band/WiFiChannel.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.band
19 |
20 | private const val ALLOWED_RANGE = FREQUENCY_SPREAD / 2
21 |
22 | data class WiFiChannel(
23 | val channel: Int = 0,
24 | val frequency: Int = 0,
25 | ) : Comparable {
26 | fun inRange(value: Int): Boolean = value in frequency - ALLOWED_RANGE..frequency + ALLOWED_RANGE
27 |
28 | override fun compareTo(other: WiFiChannel): Int =
29 | compareBy { it.channel }.thenBy { it.frequency }.compare(this, other)
30 |
31 | companion object {
32 | val UNKNOWN = WiFiChannel()
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/filter/adapter/StrengthAdapter.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.filter.adapter
19 |
20 | import com.vrem.wifianalyzer.R
21 | import com.vrem.wifianalyzer.settings.Settings
22 | import com.vrem.wifianalyzer.wifi.model.Strength
23 |
24 | class StrengthAdapter(
25 | selections: Set,
26 | ) : EnumFilterAdapter(selections, Strength.entries) {
27 | override fun color(selection: Strength): Int =
28 | if (selections.contains(selection)) selection.colorResource else R.color.regular
29 |
30 | override fun save(settings: Settings): Unit = settings.saveStrengths(selections)
31 | }
32 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/vendor/model/VendorUtils.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.vendor.model
19 |
20 | import com.vrem.util.EMPTY
21 | import java.util.Locale
22 |
23 | internal const val MAX_SIZE = 6
24 | private const val SEPARATOR = ":"
25 |
26 | internal fun String.clean(): String =
27 | orEmpty().replace(SEPARATOR, String.EMPTY).take(MAX_SIZE).uppercase(Locale.getDefault())
28 |
29 | internal fun String.toMacAddress(): String =
30 | when {
31 | isEmpty() -> String.EMPTY
32 | length < MAX_SIZE -> "*$this*"
33 | else -> substring(0, 2) + SEPARATOR + substring(2, 4) + SEPARATOR + substring(4, 6)
34 | }
35 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_signal_wifi_off.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/test/kotlin/com/vrem/wifianalyzer/wifi/scanner/SsidTestUtil.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.scanner
19 |
20 | import android.net.wifi.ScanResult
21 | import android.net.wifi.WifiSsid
22 | import com.vrem.util.buildMinVersionT
23 | import org.mockito.kotlin.mock
24 | import org.mockito.kotlin.whenever
25 |
26 | fun whenSsid(
27 | scanResult: ScanResult,
28 | ssid: String,
29 | ) {
30 | if (buildMinVersionT()) {
31 | val wifiSsid: WifiSsid = mock()
32 | whenever(scanResult.wifiSsid).thenReturn(wifiSsid)
33 | whenever(wifiSsid.toString()).thenReturn(ssid)
34 | } else {
35 | scanResult.SSID = ssid
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/graphutils/GraphAdapter.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.graphutils
19 |
20 | import com.jjoe64.graphview.GraphView
21 | import com.vrem.wifianalyzer.wifi.model.WiFiData
22 | import com.vrem.wifianalyzer.wifi.scanner.UpdateNotifier
23 |
24 | open class GraphAdapter(
25 | private val graphViewNotifiers: List,
26 | ) : UpdateNotifier {
27 | fun graphViews(): List = graphViewNotifiers.map { it.graphView() }
28 |
29 | override fun update(wiFiData: WiFiData) = graphViewNotifiers.forEach { it.update(wiFiData) }
30 |
31 | fun graphViewNotifiers(): List = graphViewNotifiers
32 | }
33 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_lock.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_lock_open.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/graphutils/GraphConstants.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.graphutils
19 |
20 | const val AXIS_TEXT_SIZE_ADJUSTMENT = 0.90f
21 | const val TEXT_SIZE_ADJUSTMENT = 0.80f
22 | const val MAX_SCAN_COUNT = 200
23 | const val MAX_Y = 0
24 | const val MAX_Y_DEFAULT = -20
25 | const val MIN_Y = -100
26 | const val MIN_Y_OFFSET = -1
27 | const val MIN_Y_HALF = MIN_Y / 2
28 | const val MAX_NOT_SEEN_COUNT = 20
29 | const val THICKNESS_INVISIBLE = 0
30 | const val THICKNESS_REGULAR = 5
31 | const val THICKNESS_CONNECTED = THICKNESS_REGULAR * 2
32 | const val TYPE1 = 1147798476
33 | const val TYPE2 = 535509942
34 | const val TYPE3 = 1256180258
35 | const val TYPE4 = 1546740952
36 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_lock_outline.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/androidTest/kotlin/com/vrem/wifianalyzer/FilterInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer
19 |
20 | import androidx.test.espresso.Espresso.onView
21 | import androidx.test.espresso.action.ViewActions.click
22 | import androidx.test.espresso.action.ViewActions.scrollTo
23 | import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
24 | import androidx.test.espresso.matcher.ViewMatchers.withId
25 | import org.hamcrest.Matchers.allOf
26 |
27 | internal class FilterInstrumentedTest : Runnable {
28 | override fun run() {
29 | onView(allOf(withId(R.id.action_filter), isDisplayed())).perform(click())
30 | onView(allOf(withId(android.R.id.button3), isDisplayed())).perform(scrollTo(), click())
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/filter/adapter/SSIDAdapter.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.filter.adapter
19 |
20 | import com.vrem.wifianalyzer.settings.Settings
21 |
22 | class SSIDAdapter(
23 | selections: Set,
24 | ) : BasicFilterAdapter(selections) {
25 | override var selections: Set
26 | get() = super.selections
27 | set(values) {
28 | super.selections = values.filter { it.isNotBlank() }.toSet()
29 | }
30 |
31 | override fun isActive(): Boolean = selections.isNotEmpty()
32 |
33 | override fun reset() {
34 | selections = setOf()
35 | }
36 |
37 | override fun save(settings: Settings): Unit = settings.saveSSIDs(selections)
38 | }
39 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_group.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/info_permission.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
25 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/settings/ThemeStyle.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.settings
19 |
20 | import android.graphics.Color
21 | import androidx.annotation.ColorInt
22 | import androidx.annotation.StyleRes
23 | import com.vrem.wifianalyzer.R
24 |
25 | enum class ThemeStyle(
26 | @param:StyleRes val theme: Int,
27 | @param:StyleRes val themeNoActionBar: Int,
28 | @param:ColorInt val colorGraphText: Int,
29 | ) {
30 | DARK(R.style.ThemeDark, R.style.ThemeDarkNoActionBar, Color.WHITE),
31 | LIGHT(R.style.ThemeLight, R.style.ThemeLightNoActionBar, Color.BLACK),
32 | SYSTEM(R.style.ThemeSystem, R.style.ThemeSystemNoActionBar, Color.GRAY),
33 | BLACK(R.style.ThemeBlack, R.style.ThemeBlackNoActionBar, Color.WHITE),
34 | }
35 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_signal_wifi_2_bar.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
29 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_signal_wifi_1_bar.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
29 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/filter/WiFiBandFilter.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.filter
19 |
20 | import android.app.AlertDialog
21 | import com.vrem.wifianalyzer.R
22 | import com.vrem.wifianalyzer.wifi.band.WiFiBand
23 | import com.vrem.wifianalyzer.wifi.filter.adapter.WiFiBandAdapter
24 |
25 | internal class WiFiBandFilter(
26 | wiFiBandAdapter: WiFiBandAdapter,
27 | alertDialog: AlertDialog,
28 | ) : EnumFilter(
29 | mapOf(
30 | WiFiBand.GHZ2 to R.id.filterWifiBand2,
31 | WiFiBand.GHZ5 to R.id.filterWifiBand5,
32 | WiFiBand.GHZ6 to R.id.filterWifiBand6,
33 | ),
34 | wiFiBandAdapter,
35 | alertDialog,
36 | R.id.filterWiFiBand,
37 | )
38 |
--------------------------------------------------------------------------------
/app/src/test/kotlin/com/vrem/wifianalyzer/ConfigurationTest.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 |
19 | package com.vrem.wifianalyzer
20 |
21 | import org.assertj.core.api.Assertions.assertThat
22 | import org.junit.Test
23 |
24 | class ConfigurationTest {
25 | private val fixture = Configuration(true)
26 |
27 | @Test
28 | fun sizeAvailable() {
29 | // execute & validate
30 | assertThat(fixture.sizeAvailable).isTrue
31 | }
32 |
33 | @Test
34 | fun sizeIsNotAvailable() {
35 | // execute
36 | fixture.size = SIZE_MIN
37 | // validate
38 | assertThat(fixture.sizeAvailable).isFalse
39 | }
40 |
41 | @Test
42 | fun largeScreen() {
43 | // execute & validate
44 | assertThat(fixture.largeScreen).isTrue
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_network_wifi.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
29 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_signal_wifi_3_bar.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
29 |
32 |
33 |
--------------------------------------------------------------------------------
/dependencyUpdates.gradle:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 |
19 | apply plugin: "com.github.ben-manes.versions"
20 |
21 | // Determines if a version string is non-stable (alpha, beta, etc.)
22 | def STABLE_KEYWORDS = ['RELEASE', 'FINAL', 'GA']
23 | def NON_STABLE_REGEX = /(?i)[.-](alpha|beta|rc|cr|m|preview|b|ea)[.\d-]*/
24 |
25 | def isNonStable = { String version ->
26 | if (!version) return true // Treat null/empty as non-stable
27 | def upperVersion = version.toUpperCase()
28 | if (STABLE_KEYWORDS.any { upperVersion.contains(it) }) {
29 | return false
30 | }
31 | version ==~ NON_STABLE_REGEX
32 | }
33 |
34 | dependencyUpdates {
35 | revision = 'release' // Only show stable versions in the report
36 | rejectVersionIf {
37 | isNonStable(it.candidate.version)
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/info_throttling.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
25 |
34 |
35 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/settings/LanguagePreference.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.settings
19 |
20 | import android.content.Context
21 | import android.util.AttributeSet
22 | import com.vrem.util.defaultLanguageTag
23 | import com.vrem.util.supportedLanguages
24 | import com.vrem.util.toCapitalize
25 | import com.vrem.util.toLanguageTag
26 | import java.util.Locale
27 |
28 | private fun data(): List =
29 | supportedLanguages()
30 | .map { map(it) }
31 | .sorted()
32 |
33 | private fun map(it: Locale): Data = Data(toLanguageTag(it), it.getDisplayName(it).toCapitalize(Locale.getDefault()))
34 |
35 | class LanguagePreference(
36 | context: Context,
37 | attrs: AttributeSet,
38 | ) : CustomPreference(context, attrs, data(), defaultLanguageTag())
39 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/util/EnumUtils.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.util
19 |
20 | import kotlin.enums.EnumEntries
21 |
22 | fun > findSet(
23 | values: EnumEntries,
24 | indexes: Set,
25 | defaultValue: T,
26 | ): Set {
27 | val results: Set = indexes.map { findOne(values, it.toInt(), defaultValue) }.toSet()
28 | return results.ifEmpty { values.toSet() }
29 | }
30 |
31 | fun > findOne(
32 | values: EnumEntries,
33 | index: Int,
34 | defaultValue: T,
35 | ): T = if (index in values.indices) values[index] else defaultValue
36 |
37 | fun > ordinals(values: EnumEntries): Set = ordinals(values.toSet())
38 |
39 | fun > ordinals(values: Set): Set = values.map { it.ordinal.toString() }.toSet()
40 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/MainActivityBackPressed.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 |
19 | package com.vrem.wifianalyzer
20 |
21 | import androidx.activity.OnBackPressedCallback
22 |
23 | class MainActivityBackPressed(
24 | val mainActivity: MainActivity,
25 | ) : OnBackPressedCallback(true) {
26 | override fun handleOnBackPressed() {
27 | if (!mainActivity.closeDrawer()) {
28 | val selectedMenu = MainContext.INSTANCE.settings.selectedMenu()
29 | if (selectedMenu == mainActivity.currentNavigationMenu()) {
30 | mainActivity.finish()
31 | } else {
32 | mainActivity.currentNavigationMenu(selectedMenu)
33 | mainActivity.onNavigationItemSelected(mainActivity.currentMenuItem())
34 | }
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/model/WiFiVirtual.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 |
19 | package com.vrem.wifianalyzer.wifi.model
20 |
21 | private const val BSSID_LENGTH = 17
22 |
23 | data class WiFiVirtual(
24 | val bssid: String,
25 | val frequency: Int,
26 | ) {
27 | val key: String get() = "$bssid-$frequency"
28 | }
29 |
30 | val WiFiDetail.wiFiVirtual: WiFiVirtual
31 | get() =
32 | if (BSSID_LENGTH == wiFiIdentifier.bssid.length) {
33 | WiFiVirtual(
34 | this.wiFiIdentifier.bssid.substring(2, BSSID_LENGTH - 1),
35 | this.wiFiSignal.primaryFrequency,
36 | )
37 | } else {
38 | WiFiVirtual(
39 | wiFiIdentifier.bssid,
40 | wiFiSignal.primaryFrequency,
41 | )
42 | }
43 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/settings/CountryPreference.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.settings
19 |
20 | import android.content.Context
21 | import android.util.AttributeSet
22 | import com.vrem.util.defaultCountryCode
23 | import com.vrem.wifianalyzer.MainContext
24 | import com.vrem.wifianalyzer.wifi.band.WiFiChannelCountry
25 | import java.util.Locale
26 |
27 | private fun data(): List {
28 | val currentLocale: Locale = MainContext.INSTANCE.settings.languageLocale()
29 | return WiFiChannelCountry
30 | .findAll()
31 | .map { Data(it.countryCode, it.countryName(currentLocale)) }
32 | .sorted()
33 | }
34 |
35 | class CountryPreference(
36 | context: Context,
37 | attrs: AttributeSet,
38 | ) : CustomPreference(context, attrs, data(), defaultCountryCode())
39 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/settings/CustomPreference.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.settings
19 |
20 | import android.content.Context
21 | import android.util.AttributeSet
22 | import androidx.preference.ListPreference
23 |
24 | abstract class CustomPreference(
25 | context: Context,
26 | attrs: AttributeSet,
27 | values: List,
28 | defaultValue: String,
29 | ) : ListPreference(context, attrs) {
30 | init {
31 | this.entries = names(values)
32 | this.entryValues = codes(values)
33 | this.setDefaultValue(defaultValue)
34 | }
35 |
36 | private fun codes(data: List): Array = data.map { it.code }.toTypedArray()
37 |
38 | private fun names(data: List): Array = data.map { it.name }.toTypedArray()
39 | }
40 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/model/GroupBy.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.model
19 |
20 | typealias GroupByKey = (T) -> String
21 |
22 | internal val groupByChannel: GroupByKey = { it.wiFiSignal.primaryFrequency.toString() }
23 |
24 | internal val groupBySSID: GroupByKey = { it.wiFiIdentifier.ssid }
25 |
26 | internal val groupByVirtual: GroupByKey = { it.wiFiVirtual.key }
27 |
28 | enum class GroupBy(
29 | val sort: Comparator,
30 | val group: GroupByKey,
31 | ) {
32 | NONE(sortByDefault(), groupBySSID),
33 | SSID(sortBySSID(), groupBySSID),
34 | CHANNEL(sortByChannel(), groupByChannel),
35 | VIRTUAL(sortBySSID(), groupByVirtual),
36 | ;
37 |
38 | val none: Boolean get() = NONE == this
39 | }
40 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/navigation/NavigationMenuControl.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.navigation
19 |
20 | import android.view.MenuItem
21 | import android.view.View
22 | import androidx.annotation.IdRes
23 | import com.google.android.material.navigation.NavigationBarView
24 | import com.google.android.material.navigation.NavigationView
25 |
26 | interface NavigationMenuControl :
27 | NavigationView.OnNavigationItemSelectedListener,
28 | NavigationBarView.OnItemSelectedListener {
29 | fun currentMenuItem(): MenuItem
30 |
31 | fun currentNavigationMenu(): NavigationMenu
32 |
33 | fun currentNavigationMenu(navigationMenu: NavigationMenu)
34 |
35 | fun navigationView(): NavigationView
36 |
37 | fun findViewById(
38 | @IdRes id: Int,
39 | ): T
40 | }
41 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/graph_content.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
23 |
24 |
29 |
30 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/navigation/availability/Filter.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.navigation.availability
19 |
20 | import androidx.core.content.ContextCompat
21 | import com.vrem.wifianalyzer.MainContext
22 | import com.vrem.wifianalyzer.R
23 |
24 | internal val navigationOptionFilterOff: NavigationOption = {
25 | it.optionMenu.menu?.let { menu -> menu.findItem(R.id.action_filter).isVisible = false }
26 | }
27 |
28 | internal val navigationOptionFilterOn: NavigationOption = {
29 | it.optionMenu.menu?.let { menu ->
30 | val color = if (MainContext.INSTANCE.filtersAdapter.isActive()) R.color.selected else R.color.regular
31 | val menuItem = menu.findItem(R.id.action_filter)
32 | menuItem.isVisible = true
33 | menuItem.icon?.setTint(ContextCompat.getColor(it, color))
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/info_faq.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
24 |
25 |
31 |
32 |
38 |
39 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/filter/StrengthFilter.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.filter
19 |
20 | import android.app.AlertDialog
21 | import com.vrem.wifianalyzer.R
22 | import com.vrem.wifianalyzer.wifi.filter.adapter.StrengthAdapter
23 | import com.vrem.wifianalyzer.wifi.model.Strength
24 |
25 | internal class StrengthFilter(
26 | strengthAdapter: StrengthAdapter,
27 | alertDialog: AlertDialog,
28 | ) : EnumFilter(
29 | mapOf(
30 | Strength.ZERO to R.id.filterStrength0,
31 | Strength.ONE to R.id.filterStrength1,
32 | Strength.TWO to R.id.filterStrength2,
33 | Strength.THREE to R.id.filterStrength3,
34 | Strength.FOUR to R.id.filterStrength4,
35 | ),
36 | strengthAdapter,
37 | alertDialog,
38 | R.id.filterStrength,
39 | )
40 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_wifi_tethering.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/test/kotlin/com/vrem/wifianalyzer/navigation/items/NavigationItemTest.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.navigation.items
19 |
20 | import android.view.View
21 | import com.vrem.wifianalyzer.MainActivity
22 | import com.vrem.wifianalyzer.navigation.NavigationMenu
23 | import org.assertj.core.api.Assertions.assertThat
24 | import org.junit.Test
25 |
26 | class NavigationItemTest {
27 | private val fixture: NavigationItem =
28 | object : NavigationItem {
29 | override fun activate(
30 | mainActivity: MainActivity,
31 | navigationMenu: NavigationMenu,
32 | ) = Unit
33 | }
34 |
35 | @Test
36 | fun registered() {
37 | assertThat(fixture.registered).isFalse
38 | }
39 |
40 | @Test
41 | fun visibility() {
42 | assertThat(fixture.visibility).isEqualTo(View.GONE)
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/filter_popup.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
26 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/main_toolbar.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
24 |
25 |
29 |
30 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/access_points_content.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
24 |
25 |
30 |
31 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/vendor_details.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
24 |
25 |
31 |
32 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/app/src/test/kotlin/com/vrem/wifianalyzer/wifi/model/FastRoamingTest.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.model
19 |
20 | import android.net.wifi.ScanResult
21 | import android.os.Build
22 | import androidx.test.ext.junit.runners.AndroidJUnit4
23 | import org.assertj.core.api.Assertions.assertThat
24 | import org.junit.Test
25 | import org.junit.runner.RunWith
26 | import org.mockito.kotlin.mock
27 | import org.mockito.kotlin.verifyNoMoreInteractions
28 | import org.robolectric.annotation.Config
29 |
30 | @RunWith(AndroidJUnit4::class)
31 | @Config(sdk = [Build.VERSION_CODES.Q])
32 | class FastRoamingTest {
33 | @Test
34 | fun findLegacy() {
35 | // setup
36 | val scanResult: ScanResult = mock()
37 | // execute
38 | val actual = FastRoaming.find(scanResult)
39 | // validate
40 | assertThat(actual).isEmpty()
41 | verifyNoMoreInteractions(scanResult)
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/app/src/androidTest/kotlin/com/vrem/wifianalyzer/ScannerInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer
19 |
20 | import androidx.test.espresso.Espresso.onView
21 | import androidx.test.espresso.action.ViewActions.click
22 | import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
23 | import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
24 | import androidx.test.espresso.matcher.ViewMatchers.withId
25 | import com.vrem.wifianalyzer.R.id.action_scanner
26 | import org.hamcrest.Matchers.allOf
27 |
28 | private const val PAUSE = "Pause"
29 | private const val PLAY = "Play"
30 |
31 | internal class ScannerInstrumentedTest : Runnable {
32 | override fun run() {
33 | onView(allOf(withId(action_scanner), withContentDescription(PAUSE), isDisplayed())).perform(click())
34 | onView(allOf(withId(action_scanner), withContentDescription(PLAY), isDisplayed())).perform(click())
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/graphutils/GraphLegend.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.graphutils
19 |
20 | import com.jjoe64.graphview.LegendRenderer
21 |
22 | internal typealias LegendDisplay = (legendRenderer: LegendRenderer) -> Unit
23 |
24 | internal val legendDisplayNone: LegendDisplay = { it.isVisible = false }
25 |
26 | internal val legendDisplayLeft: LegendDisplay = {
27 | it.isVisible = true
28 | it.setFixedPosition(0, 0)
29 | }
30 |
31 | internal val legendDisplayRight: LegendDisplay = {
32 | it.isVisible = true
33 | it.align = LegendRenderer.LegendAlign.TOP
34 | }
35 |
36 | enum class GraphLegend(
37 | val legendDisplay: LegendDisplay,
38 | ) {
39 | LEFT(legendDisplayLeft),
40 | RIGHT(legendDisplayRight),
41 | HIDE(legendDisplayNone),
42 | ;
43 |
44 | fun display(legendRenderer: LegendRenderer) {
45 | legendDisplay(legendRenderer)
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/app/src/test/kotlin/com/vrem/wifianalyzer/RobolectricUtil.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer
19 |
20 | import android.os.Looper
21 | import androidx.fragment.app.Fragment
22 | import org.robolectric.Robolectric
23 | import org.robolectric.Shadows
24 |
25 | enum class RobolectricUtil {
26 | INSTANCE,
27 | ;
28 |
29 | val activity: MainActivity =
30 | Robolectric
31 | .buildActivity(MainActivity::class.java)
32 | .create()
33 | .resume()
34 | .get()
35 |
36 | fun startFragment(fragment: Fragment) {
37 | val fragmentManager = activity.supportFragmentManager
38 | val fragmentTransaction = fragmentManager.beginTransaction()
39 | fragmentTransaction.add(fragment, null)
40 | fragmentTransaction.commit()
41 | clearLooper()
42 | }
43 |
44 | fun clearLooper() {
45 | Shadows.shadowOf(Looper.getMainLooper()).idle()
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/filter/SecurityFilter.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.filter
19 |
20 | import android.app.AlertDialog
21 | import com.vrem.wifianalyzer.R
22 | import com.vrem.wifianalyzer.wifi.filter.adapter.SecurityAdapter
23 | import com.vrem.wifianalyzer.wifi.model.Security
24 |
25 | internal class SecurityFilter(
26 | securityAdapter: SecurityAdapter,
27 | alertDialog: AlertDialog,
28 | ) : EnumFilter(
29 | mapOf(
30 | Security.NONE to R.id.filterSecurityNone,
31 | Security.WPS to R.id.filterSecurityWPS,
32 | Security.WEP to R.id.filterSecurityWEP,
33 | Security.WPA to R.id.filterSecurityWPA,
34 | Security.WPA2 to R.id.filterSecurityWPA2,
35 | Security.WPA3 to R.id.filterSecurityWPA3,
36 | ),
37 | securityAdapter,
38 | alertDialog,
39 | R.id.filterSecurity,
40 | )
41 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_color_lens.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/permission/PermissionService.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.permission
19 |
20 | import android.app.Activity
21 | import com.vrem.annotation.OpenClass
22 |
23 | @OpenClass
24 | class PermissionService(
25 | private val activity: Activity,
26 | private val locationPermission: LocationPermission = LocationPermission(activity),
27 | private val applicationPermission: ApplicationPermission = ApplicationPermission(activity),
28 | ) {
29 | fun enabled(): Boolean = locationEnabled() && permissionGranted()
30 |
31 | fun locationEnabled(): Boolean = locationPermission.enabled()
32 |
33 | fun check(): Unit = applicationPermission.check()
34 |
35 | fun granted(
36 | requestCode: Int,
37 | grantResults: IntArray,
38 | ): Boolean = applicationPermission.granted(requestCode, grantResults)
39 |
40 | fun permissionGranted(): Boolean = applicationPermission.granted()
41 | }
42 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
21 | 0dp
22 |
23 | 16dp
24 | 16dp
25 |
26 | 8dp
27 |
28 | 4dp
29 | 24dp
30 |
31 | 110dp
32 |
33 | 12dp
34 | 36dp
35 |
36 | 10sp
37 |
38 | 12sp
39 | 12sp
40 |
41 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/util/FileUtils.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.util
19 |
20 | import android.content.res.Resources
21 | import androidx.annotation.RawRes
22 | import java.util.zip.ZipInputStream
23 |
24 | fun readFile(
25 | resources: Resources,
26 | @RawRes id: Int,
27 | ): String =
28 | runCatching {
29 | resources
30 | .openRawResource(id)
31 | .bufferedReader()
32 | .use { it.readText() }
33 | .replace("\r", String.EMPTY)
34 | }.getOrDefault(String.EMPTY)
35 |
36 | fun readZipFile(
37 | resources: Resources,
38 | @RawRes id: Int,
39 | ): List =
40 | runCatching {
41 | resources.openRawResource(id).use { inputStream ->
42 | ZipInputStream(inputStream).use { zipInputStream ->
43 | zipInputStream.nextEntry
44 | zipInputStream.bufferedReader().readLines()
45 | }
46 | }
47 | }.getOrDefault(emptyList())
48 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/export/ExportIntent.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 |
19 | package com.vrem.wifianalyzer.export
20 |
21 | import android.content.Intent
22 | import com.vrem.annotation.OpenClass
23 |
24 | @OpenClass
25 | class ExportIntent {
26 | internal fun intent(
27 | title: String,
28 | data: String,
29 | ): Intent {
30 | val intentSend: Intent = intentSend()
31 | intentSend.flags = Intent.FLAG_ACTIVITY_NEW_TASK
32 | intentSend.type = "text/plain"
33 | intentSend.putExtra(Intent.EXTRA_TITLE, title)
34 | intentSend.putExtra(Intent.EXTRA_SUBJECT, title)
35 | intentSend.putExtra(Intent.EXTRA_TEXT, data)
36 | return intentChooser(intentSend, title)
37 | }
38 |
39 | internal fun intentSend(): Intent = Intent(Intent.ACTION_SEND)
40 |
41 | internal fun intentChooser(
42 | intent: Intent,
43 | title: String,
44 | ): Intent = Intent.createChooser(intent, title)
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/navigation/availability/ScannerSwitch.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.navigation.availability
19 |
20 | import com.vrem.wifianalyzer.MainContext
21 | import com.vrem.wifianalyzer.R
22 |
23 | internal val navigationOptionScannerSwitchOff: NavigationOption = {
24 | it.optionMenu.menu?.let { menu ->
25 | menu.findItem(R.id.action_scanner).isVisible = false
26 | }
27 | }
28 |
29 | internal val navigationOptionScannerSwitchOn: NavigationOption = {
30 | it.optionMenu.menu?.let { menu ->
31 | val menuItem = menu.findItem(R.id.action_scanner)
32 | menuItem.isVisible = true
33 | if (MainContext.INSTANCE.scannerService.running()) {
34 | menuItem.setTitle(R.string.scanner_pause)
35 | menuItem.setIcon(R.drawable.ic_pause)
36 | } else {
37 | menuItem.setTitle(R.string.scanner_play)
38 | menuItem.setIcon(R.drawable.ic_play_arrow)
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | Thanks for sending a pull request!
2 |
3 | See CONTRIBUTING.md for details: https://github.com/VREMSoftwareDevelopment/WiFiAnalyzer/blob/main/CONTRIBUTING.md
4 |
5 | ## Summary
6 | - One-line summary of the change.
7 | - Brief explanation of why this change is needed.
8 |
9 | ## What does this implement/fix?
10 | - Describe the scope of the change (key files, classes, public API).
11 | - Mention if the change is small and focused or broad.
12 |
13 | ## Does this close any issues?
14 | - Closes # (if applicable)
15 | - Related to # (if applicable)
16 |
17 | ## How was this tested?
18 | - Devices / OS (e.g. Android 13 emulator, Pixel 6):
19 | - Platform / Build variant (e.g. debug/release):
20 | - Toolchain / Gradle / SDK version(s):
21 | - Steps to reproduce / test (provide exact steps so reviewers can verify):
22 |
23 | Example test commands:
24 | ```bash
25 | ./gradlew ktlintCheck
26 | ./gradlew lintDebug
27 | ./gradlew testDebugUnitTest
28 | ```
29 |
30 | ## Checklist (required before marking ready)
31 | - [ ] I added or updated unit tests (see `app/src/test/`)
32 | - [ ] I followed the project's coding style (ktlint) and formatting
33 | - [ ] I ran lint and addressed or documented any warnings
34 | - [ ] CI checks pass (unit tests, coverage, lint)
35 | - [ ] No sensitive data, keys, or secrets are included
36 |
37 | ## Additional context
38 | - Screenshots, logs, or other context that helps reviewers understand the change.
39 | - Migration notes or compatibility considerations (if applicable).
40 |
41 | ## Reviewer notes
42 | - Call out anything reviewers should pay special attention to (performance, API changes, backwards compatibility, security).
43 | - Suggested reviewers or teams (optional): @maintainers
44 |
45 | Thank you for contributing!
46 |
47 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/navigation/options/OptionMenu.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.navigation.options
19 |
20 | import android.annotation.SuppressLint
21 | import android.app.Activity
22 | import android.view.Menu
23 | import android.view.MenuItem
24 | import androidx.appcompat.view.menu.MenuBuilder
25 | import com.vrem.annotation.OpenClass
26 | import com.vrem.wifianalyzer.R
27 |
28 | @OpenClass
29 | class OptionMenu {
30 | var menu: Menu? = null
31 |
32 | fun create(
33 | activity: Activity,
34 | menu: Menu,
35 | ) {
36 | activity.menuInflater.inflate(R.menu.optionmenu, menu)
37 | this.menu = menu
38 | iconsVisible(menu)
39 | }
40 |
41 | fun select(item: MenuItem): Unit = OptionAction.findOptionAction(item.itemId).action()
42 |
43 | @SuppressLint("RestrictedApi")
44 | private fun iconsVisible(menu: Menu): Result =
45 | runCatching { (menu as MenuBuilder).setOptionalIconsVisible(true) }
46 | }
47 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/navigation/availability/WiFiSwitch.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.navigation.availability
19 |
20 | import com.vrem.wifianalyzer.MainActivity
21 | import com.vrem.wifianalyzer.MainContext
22 | import com.vrem.wifianalyzer.R
23 |
24 | internal val navigationOptionWiFiSwitchOff: NavigationOption = {
25 | updateMenuItem(it, false)
26 | }
27 |
28 | internal val navigationOptionWiFiSwitchOn: NavigationOption = {
29 | updateMenuItem(it, true)
30 | }
31 |
32 | private fun updateMenuItem(
33 | mainActivity: MainActivity,
34 | visible: Boolean,
35 | ) {
36 | mainActivity.optionMenu.menu?.let {
37 | val menuItem = it.findItem(R.id.action_wifi_band)
38 | menuItem.isVisible = visible
39 | if (visible) {
40 | val wiFiBand = MainContext.INSTANCE.settings.wiFiBand()
41 | val title = mainActivity.getString(wiFiBand.textResource)
42 | menuItem.title = title.replace(' ', '\n')
43 | }
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/accesspoint/AccessPointPopup.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.accesspoint
19 |
20 | import android.app.AlertDialog
21 | import android.view.View
22 | import com.vrem.annotation.OpenClass
23 | import com.vrem.wifianalyzer.wifi.model.WiFiDetail
24 |
25 | @OpenClass
26 | class AccessPointPopup {
27 | fun show(view: View): AlertDialog {
28 | val alertDialog: AlertDialog =
29 | AlertDialog
30 | .Builder(view.context)
31 | .setView(view)
32 | .setPositiveButton(android.R.string.ok) { dialog, _ ->
33 | dialog.cancel()
34 | }.create()
35 | alertDialog.show()
36 | return alertDialog
37 | }
38 |
39 | fun attach(
40 | view: View,
41 | wiFiDetail: WiFiDetail,
42 | ) {
43 | view.setOnClickListener {
44 | runCatching { show(AccessPointDetail().makeViewDetailed(wiFiDetail)) }
45 | }
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/model/WiFiIdentifier.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.model
19 |
20 | import com.vrem.util.EMPTY
21 |
22 | typealias SSID = String
23 | typealias BSSID = String
24 |
25 | data class WiFiIdentifier(
26 | val ssidRaw: SSID = String.EMPTY,
27 | val bssid: BSSID = String.EMPTY,
28 | ) : Comparable {
29 | val ssid =
30 | when {
31 | ssidRaw.isEmpty() -> "*hidden*"
32 | else -> ssidRaw
33 | }
34 |
35 | val title: String get() = "$ssid ($bssid)"
36 |
37 | fun equals(
38 | other: WiFiIdentifier,
39 | ignoreCase: Boolean = false,
40 | ): Boolean = ssid.equals(other.ssidRaw, ignoreCase) && bssid.equals(other.bssid, ignoreCase)
41 |
42 | override fun compareTo(other: WiFiIdentifier): Int =
43 | compareBy { it.ssidRaw }.thenBy { it.bssid }.compare(this, other)
44 |
45 | companion object {
46 | val EMPTY = WiFiIdentifier()
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/filter_ssid.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
27 |
28 |
32 |
33 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/app/src/test/kotlin/com/vrem/wifianalyzer/wifi/predicate/AllPredicateTest.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.predicate
19 |
20 | import com.vrem.wifianalyzer.wifi.model.WiFiDetail
21 | import org.assertj.core.api.Assertions.assertThat
22 | import org.junit.Test
23 |
24 | class AllPredicateTest {
25 | @Test
26 | fun allPredicateIsTrue() {
27 | // setup
28 | val wiFiDetail = WiFiDetail.EMPTY
29 | val fixture = listOf(truePredicate, truePredicate, truePredicate).allPredicate()
30 | // execute
31 | val actual = fixture(wiFiDetail)
32 | // validate
33 | assertThat(actual).isTrue
34 | }
35 |
36 | @Test
37 | fun allPredicateIsFalse() {
38 | // setup
39 | val wiFiDetail = WiFiDetail.EMPTY
40 | val fixture = listOf(falsePredicate, truePredicate, falsePredicate).allPredicate()
41 | // execute
42 | val actual = fixture(wiFiDetail)
43 | // validate
44 | assertThat(actual).isFalse
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/app/src/test/kotlin/com/vrem/wifianalyzer/wifi/predicate/AnyPredicateTest.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.predicate
19 |
20 | import com.vrem.wifianalyzer.wifi.model.WiFiDetail
21 | import org.assertj.core.api.Assertions.assertThat
22 | import org.junit.Test
23 |
24 | class AnyPredicateTest {
25 | @Test
26 | fun anyPredicateIsTrue() {
27 | // setup
28 | val wiFiDetail = WiFiDetail.EMPTY
29 | val fixture = listOf(falsePredicate, truePredicate, falsePredicate).anyPredicate()
30 | // execute
31 | val actual = fixture(wiFiDetail)
32 | // validate
33 | assertThat(actual).isTrue
34 | }
35 |
36 | @Test
37 | fun anyPredicateIsFalse() {
38 | // setup
39 | val wiFiDetail = WiFiDetail.EMPTY
40 | val fixture = listOf(falsePredicate, falsePredicate, falsePredicate).anyPredicate()
41 | // execute
42 | val actual = fixture(wiFiDetail)
43 | // validate
44 | assertThat(actual).isFalse
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
21 |
22 | #9E9E9E
23 |
24 | #2196F3
25 |
26 | @color/regular
27 |
28 | #00BCD4
29 |
30 | #0097A7
31 |
32 | #607D8B
33 |
34 | #009688
35 |
36 | #F44336
37 |
38 | #FFC107
39 |
40 | #4CAF50
41 |
42 | #757575
43 |
44 | #000000
45 |
46 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/model/WiFiConnection.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 |
19 | package com.vrem.wifianalyzer.wifi.model
20 |
21 | import com.vrem.util.EMPTY
22 |
23 | data class WiFiConnection(
24 | val wiFiIdentifier: WiFiIdentifier = WiFiIdentifier.EMPTY,
25 | val ipAddress: String = String.EMPTY,
26 | val linkSpeed: Int = LINK_SPEED_INVALID,
27 | ) : Comparable {
28 | val connected: Boolean get() = EMPTY != this
29 |
30 | override fun equals(other: Any?): Boolean {
31 | if (this === other) return true
32 | if (javaClass != other?.javaClass) return false
33 | other as WiFiConnection
34 | return wiFiIdentifier == other.wiFiIdentifier
35 | }
36 |
37 | override fun hashCode(): Int = wiFiIdentifier.hashCode()
38 |
39 | override fun compareTo(other: WiFiConnection): Int = wiFiIdentifier.compareTo(other.wiFiIdentifier)
40 |
41 | companion object {
42 | const val LINK_SPEED_INVALID = -1
43 | val EMPTY = WiFiConnection()
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/test/kotlin/com/vrem/wifianalyzer/wifi/accesspoint/AccessPointViewTypeTest.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.accesspoint
19 |
20 | import com.vrem.wifianalyzer.R
21 | import org.assertj.core.api.Assertions.assertThat
22 | import org.junit.Test
23 |
24 | class AccessPointViewTypeTest {
25 | @Test
26 | fun accessPointViewType() {
27 | assertThat(AccessPointViewType.entries)
28 | .hasSize(2)
29 | .containsExactly(AccessPointViewType.COMPLETE, AccessPointViewType.COMPACT)
30 | }
31 |
32 | @Test
33 | fun accessPointViewTypeOrdinal() {
34 | assertThat(AccessPointViewType.COMPLETE.ordinal).isEqualTo(0)
35 | assertThat(AccessPointViewType.COMPACT.ordinal).isEqualTo(1)
36 | }
37 |
38 | @Test
39 | fun accessPointViewTypeLayout() {
40 | assertThat(AccessPointViewType.COMPLETE.layout).isEqualTo(R.layout.access_point_view_complete)
41 | assertThat(AccessPointViewType.COMPACT.layout).isEqualTo(R.layout.access_point_view_compact)
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/info_location.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
26 |
31 |
32 |
40 |
41 |
--------------------------------------------------------------------------------
/app/src/test/kotlin/com/vrem/wifianalyzer/wifi/predicate/SSIDPredicateTest.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.wifi.predicate
19 |
20 | import com.vrem.wifianalyzer.wifi.model.WiFiDetail
21 | import com.vrem.wifianalyzer.wifi.model.WiFiIdentifier
22 | import com.vrem.wifianalyzer.wifi.model.WiFiSecurity
23 | import org.assertj.core.api.Assertions.assertThat
24 | import org.junit.Test
25 |
26 | class SSIDPredicateTest {
27 | @Test
28 | fun sSIDPredicate() {
29 | // setup
30 | val wiFiDetail = WiFiDetail(WiFiIdentifier("ssid", "bssid"), WiFiSecurity("wpa"))
31 | // execute & validate
32 | assertThat("ssid".predicate()(wiFiDetail)).isTrue
33 | assertThat("id".predicate()(wiFiDetail)).isTrue
34 | assertThat("ss".predicate()(wiFiDetail)).isTrue
35 | assertThat("s".predicate()(wiFiDetail)).isTrue
36 | assertThat("".predicate()(wiFiDetail)).isTrue
37 | assertThat("SSID".predicate()(wiFiDetail)).isFalse
38 | assertThat("B".predicate()(wiFiDetail)).isFalse
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/.github/workflows/android-test-ci.yml:
--------------------------------------------------------------------------------
1 | name: Android Instrumentation Tests
2 | on:
3 | push:
4 | branches:
5 | - release
6 | paths-ignore:
7 | - '**/*.md'
8 | - '.github/workflows/android-ci.yml'
9 | - '.github/workflows/codeql-analysis.yml'
10 | - '.github/workflows/close-empty-xml.yml'
11 | - '.github/workflows/stale.yml'
12 | - '.github/workflows/compare-src.yml'
13 | workflow_dispatch: {}
14 |
15 | jobs:
16 | build:
17 | runs-on: ubuntu-22.04
18 | steps:
19 | - uses: actions/checkout@v4
20 | - uses: ./.github/actions/common-setup
21 | - name: Build APKs
22 | run: ./gradlew assembleDebug assembleAndroidTest
23 | - name: Upload APKs
24 | uses: actions/upload-artifact@v4
25 | with:
26 | name: apks
27 | path: |
28 | app/build/outputs/apk/debug/app-debug.apk
29 | app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
30 |
31 | test:
32 | runs-on: ubuntu-22.04
33 | needs: build
34 | steps:
35 | - uses: actions/checkout@v4
36 | - name: Download APKs
37 | uses: actions/download-artifact@v4
38 | with:
39 | name: apks
40 | - name: Run tests
41 | uses: emulator-wtf/run-tests@v0
42 | with:
43 | api-token: ${{ secrets.EW_API_TOKEN }}
44 | app: app-debug.apk
45 | test: app-debug-androidTest.apk
46 | outputs-dir: build/test-results
47 | - name: Upload test results
48 | uses: actions/upload-artifact@v4
49 | with:
50 | path: |
51 | build/test-results
52 | app/build/reports/androidTests
53 | - name: Publish test results
54 | uses: mikepenz/action-junit-report@v5
55 | if: always()
56 | with:
57 | report_paths: 'build/test-results/**/*.xml'
58 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/navigation/availability/NavigationOptions.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WiFiAnalyzer
3 | * Copyright (C) 2015 - 2025 VREM Software Development
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU General Public License as published by
7 | * the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program. If not, see
17 | */
18 | package com.vrem.wifianalyzer.navigation.availability
19 |
20 | val navigationOptionAp =
21 | listOf(
22 | navigationOptionWiFiSwitchOff,
23 | navigationOptionScannerSwitchOn,
24 | navigationOptionFilterOn,
25 | navigationOptionBottomNavOn,
26 | )
27 |
28 | val navigationOptionOff =
29 | listOf(
30 | navigationOptionWiFiSwitchOff,
31 | navigationOptionScannerSwitchOff,
32 | navigationOptionFilterOff,
33 | navigationOptionBottomNavOff,
34 | )
35 |
36 | val navigationOptionOther =
37 | listOf(
38 | navigationOptionWiFiSwitchOn,
39 | navigationOptionScannerSwitchOn,
40 | navigationOptionFilterOn,
41 | navigationOptionBottomNavOn,
42 | )
43 |
44 | val navigationOptionRating =
45 | listOf(
46 | navigationOptionWiFiSwitchOn,
47 | navigationOptionScannerSwitchOn,
48 | navigationOptionFilterOff,
49 | navigationOptionBottomNavOn,
50 | )
51 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/nav_bottom_menu.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
44 |
--------------------------------------------------------------------------------