├── .gitattributes
├── .github
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ ├── config.yml
│ ├── default.md
│ └── feature_request.md
└── workflows
│ ├── android_ci.yml
│ ├── android_test_ci.yml
│ ├── codeql-analysis.yml
│ └── stale.yml
├── .gitignore
├── CONTRIBUTING.md
├── ISSUE_TEMPLATE.md
├── LICENSE
├── PULL_REQUEST_TEMPLATE.md
├── README.md
├── _config.yml
├── app
├── build.gradle
├── build.properties
├── jacoco.gradle
├── lint.xml
└── src
│ ├── androidTest
│ └── kotlin
│ │ └── com
│ │ └── vrem
│ │ └── wifianalyzer
│ │ ├── FilterInstrumentedTest.kt
│ │ ├── InstrumentedTestUtils.kt
│ │ ├── MainInstrumentedTest.kt
│ │ ├── NavigationInstrumentedTest.kt
│ │ └── ScannerInstrumentedTest.kt
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ │ └── jjoe64
│ │ │ └── graphview
│ │ │ └── series
│ │ │ └── TitleLineGraphSeries.java
│ ├── kotlin
│ │ └── com
│ │ │ └── vrem
│ │ │ ├── annotation
│ │ │ └── OpenClass.kt
│ │ │ ├── util
│ │ │ ├── BuildUtils.kt
│ │ │ ├── CompatUtils.kt
│ │ │ ├── EnumUtils.kt
│ │ │ ├── FileUtils.kt
│ │ │ ├── LocaleUtils.kt
│ │ │ └── StringUtils.kt
│ │ │ └── wifianalyzer
│ │ │ ├── ActivityUtils.kt
│ │ │ ├── Configuration.kt
│ │ │ ├── DrawerNavigation.kt
│ │ │ ├── MainAcitvityBackPressed.kt
│ │ │ ├── MainActivity.kt
│ │ │ ├── MainContext.kt
│ │ │ ├── MainReload.kt
│ │ │ ├── about
│ │ │ └── AboutFragment.kt
│ │ │ ├── export
│ │ │ ├── Export.kt
│ │ │ └── ExportIntent.kt
│ │ │ ├── navigation
│ │ │ ├── NavigationGroup.kt
│ │ │ ├── NavigationMenu.kt
│ │ │ ├── NavigationMenuControl.kt
│ │ │ ├── NavigationMenuController.kt
│ │ │ ├── availability
│ │ │ │ ├── BottomNav.kt
│ │ │ │ ├── Filter.kt
│ │ │ │ ├── NavigationOption.kt
│ │ │ │ ├── NavigationOptions.kt
│ │ │ │ ├── ScannerSwitch.kt
│ │ │ │ └── WiFiSwitch.kt
│ │ │ ├── items
│ │ │ │ ├── ExportItem.kt
│ │ │ │ ├── FragmentItem.kt
│ │ │ │ ├── NavigationItem.kt
│ │ │ │ └── NavigationItems.kt
│ │ │ └── options
│ │ │ │ ├── OptionAction.kt
│ │ │ │ └── OptionMenu.kt
│ │ │ ├── permission
│ │ │ ├── ApplicationPermission.kt
│ │ │ ├── LocationPermission.kt
│ │ │ ├── PermissionDialog.kt
│ │ │ └── PermissionService.kt
│ │ │ ├── settings
│ │ │ ├── CountryPreference.kt
│ │ │ ├── CustomPreference.kt
│ │ │ ├── Data.kt
│ │ │ ├── LanguagePreference.kt
│ │ │ ├── Repository.kt
│ │ │ ├── Settings.kt
│ │ │ ├── SettingsFragment.kt
│ │ │ └── ThemeStyle.kt
│ │ │ ├── vendor
│ │ │ ├── VendorAdapter.kt
│ │ │ ├── VendorFragment.kt
│ │ │ └── model
│ │ │ │ ├── VendorService.kt
│ │ │ │ └── VendorUtils.kt
│ │ │ └── wifi
│ │ │ ├── accesspoint
│ │ │ ├── AccessPointDetail.kt
│ │ │ ├── AccessPointPopup.kt
│ │ │ ├── AccessPointViewType.kt
│ │ │ ├── AccessPointsAdapter.kt
│ │ │ ├── AccessPointsAdapterData.kt
│ │ │ ├── AccessPointsAdapterGroup.kt
│ │ │ ├── AccessPointsFragment.kt
│ │ │ ├── ConnectionView.kt
│ │ │ ├── ConnectionViewType.kt
│ │ │ └── WarningView.kt
│ │ │ ├── band
│ │ │ ├── WiFiBand.kt
│ │ │ ├── WiFiChannel.kt
│ │ │ ├── WiFiChannelCountry.kt
│ │ │ ├── WiFiChannels.kt
│ │ │ └── WiFiInfo.kt
│ │ │ ├── channelavailable
│ │ │ └── ChannelAvailableFragment.kt
│ │ │ ├── channelgraph
│ │ │ ├── ChannelAxisLabel.kt
│ │ │ ├── ChannelGraphAdapter.kt
│ │ │ ├── ChannelGraphFragment.kt
│ │ │ ├── ChannelGraphView.kt
│ │ │ └── DataManager.kt
│ │ │ ├── channelrating
│ │ │ ├── ChannelRatingAdapter.kt
│ │ │ ├── ChannelRatingAdapterBinding.kt
│ │ │ └── ChannelRatingFragment.kt
│ │ │ ├── filter
│ │ │ ├── EnumFilter.kt
│ │ │ ├── Filter.kt
│ │ │ ├── SSIDFilter.kt
│ │ │ ├── SecurityFilter.kt
│ │ │ ├── StrengthFilter.kt
│ │ │ ├── WiFiBandFilter.kt
│ │ │ └── adapter
│ │ │ │ ├── BasicFilterAdapter.kt
│ │ │ │ ├── EnumFilterAdapter.kt
│ │ │ │ ├── FiltersAdapter.kt
│ │ │ │ ├── SSIDAdapter.kt
│ │ │ │ ├── SecurityAdapter.kt
│ │ │ │ ├── StrengthAdapter.kt
│ │ │ │ └── WiFiBandAdapter.kt
│ │ │ ├── graphutils
│ │ │ ├── GraphAdapter.kt
│ │ │ ├── GraphColors.kt
│ │ │ ├── GraphConstants.kt
│ │ │ ├── GraphDataPoint.kt
│ │ │ ├── GraphLegend.kt
│ │ │ ├── GraphViewBuilder.kt
│ │ │ ├── GraphViewNotifier.kt
│ │ │ ├── GraphViewWrapper.kt
│ │ │ ├── SeriesCache.kt
│ │ │ └── SeriesOptions.kt
│ │ │ ├── manager
│ │ │ ├── WiFiManagerWrapper.kt
│ │ │ └── WiFiSwitch.kt
│ │ │ ├── model
│ │ │ ├── ChannelAPCount.kt
│ │ │ ├── ChannelRating.kt
│ │ │ ├── FastRoaming.kt
│ │ │ ├── GroupBy.kt
│ │ │ ├── SortBy.kt
│ │ │ ├── Strength.kt
│ │ │ ├── WiFiAdditional.kt
│ │ │ ├── WiFiConnection.kt
│ │ │ ├── WiFiData.kt
│ │ │ ├── WiFiDetail.kt
│ │ │ ├── WiFiIdentifier.kt
│ │ │ ├── WiFiSecurity.kt
│ │ │ ├── WiFiSignal.kt
│ │ │ ├── WiFiStandard.kt
│ │ │ ├── WiFiUtils.kt
│ │ │ ├── WiFiVirtual.kt
│ │ │ └── WiFiWidth.kt
│ │ │ ├── predicate
│ │ │ └── Predicate.kt
│ │ │ ├── scanner
│ │ │ ├── Cache.kt
│ │ │ ├── PeriodicScan.kt
│ │ │ ├── ScanResultsReceiver.kt
│ │ │ ├── Scanner.kt
│ │ │ ├── ScannerCallback.kt
│ │ │ ├── ScannerService.kt
│ │ │ └── Transformer.kt
│ │ │ └── timegraph
│ │ │ ├── DataManager.kt
│ │ │ ├── TimeAxisLabel.kt
│ │ │ ├── TimeGraphCache.kt
│ │ │ ├── TimeGraphFragment.kt
│ │ │ └── TimeGraphView.kt
│ └── res
│ │ ├── 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
│ │ ├── drawable
│ │ ├── ic_brightness_low.xml
│ │ ├── ic_check.xml
│ │ ├── ic_close.xml
│ │ ├── ic_color_lens.xml
│ │ ├── ic_expand_less.xml
│ │ ├── ic_expand_more.xml
│ │ ├── ic_fast_forward.xml
│ │ ├── ic_filter_list.xml
│ │ ├── ic_group.xml
│ │ ├── ic_import_export.xml
│ │ ├── ic_info_outline.xml
│ │ ├── ic_insert_chart.xml
│ │ ├── ic_language.xml
│ │ ├── ic_launcher_background.xml
│ │ ├── ic_launcher_foreground.xml
│ │ ├── ic_launcher_monochrome.xml
│ │ ├── ic_list.xml
│ │ ├── ic_location_on.xml
│ │ ├── ic_lock.xml
│ │ ├── ic_lock_open.xml
│ │ ├── ic_lock_outline.xml
│ │ ├── ic_menu.xml
│ │ ├── ic_network_wifi.xml
│ │ ├── ic_pause.xml
│ │ ├── ic_play_arrow.xml
│ │ ├── ic_reset.xml
│ │ ├── ic_settings.xml
│ │ ├── ic_show_chart.xml
│ │ ├── ic_signal_wifi_0_bar.xml
│ │ ├── ic_signal_wifi_1_bar.xml
│ │ ├── ic_signal_wifi_2_bar.xml
│ │ ├── ic_signal_wifi_3_bar.xml
│ │ ├── ic_signal_wifi_4_bar.xml
│ │ ├── ic_signal_wifi_off.xml
│ │ ├── ic_sort.xml
│ │ ├── ic_splash.xml
│ │ ├── ic_view_carousel.xml
│ │ ├── ic_wifi_tethering.xml
│ │ ├── menu_selector.xml
│ │ └── splash_inset.xml
│ │ ├── layout
│ │ ├── about_content.xml
│ │ ├── access_point_view_compact.xml
│ │ ├── access_point_view_complete.xml
│ │ ├── access_point_view_hide.xml
│ │ ├── access_point_view_popup.xml
│ │ ├── access_points_content.xml
│ │ ├── channel_available_content.xml
│ │ ├── channel_rating_best.xml
│ │ ├── channel_rating_content.xml
│ │ ├── channel_rating_details.xml
│ │ ├── channel_rating_header.xml
│ │ ├── filter_popup.xml
│ │ ├── filter_security.xml
│ │ ├── filter_ssid.xml
│ │ ├── filter_strength.xml
│ │ ├── filter_wifi_band.xml
│ │ ├── graph_content.xml
│ │ ├── info_faq.xml
│ │ ├── info_location.xml
│ │ ├── info_permission.xml
│ │ ├── info_throttling.xml
│ │ ├── main_activity.xml
│ │ ├── main_connection.xml
│ │ ├── main_content.xml
│ │ ├── main_navigation.xml
│ │ ├── main_toolbar.xml
│ │ ├── main_warning.xml
│ │ ├── main_wifi_support.xml
│ │ ├── main_wifi_throttling.xml
│ │ ├── separator_line.xml
│ │ ├── vendor_content.xml
│ │ └── vendor_details.xml
│ │ ├── menu
│ │ └── optionmenu.xml
│ │ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ │ ├── 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
│ │ ├── raw
│ │ ├── al.txt
│ │ ├── contributors.txt
│ │ ├── data.txt
│ │ └── gpl.txt
│ │ ├── values-bg
│ │ └── strings.xml
│ │ ├── values-de
│ │ └── strings.xml
│ │ ├── values-el
│ │ └── strings.xml
│ │ ├── values-es
│ │ └── strings.xml
│ │ ├── values-fr
│ │ └── strings.xml
│ │ ├── values-it
│ │ └── strings.xml
│ │ ├── values-ja
│ │ └── strings.xml
│ │ ├── values-nl
│ │ └── strings.xml
│ │ ├── values-pl
│ │ └── strings.xml
│ │ ├── values-pt-rBR
│ │ └── strings.xml
│ │ ├── values-pt
│ │ └── strings.xml
│ │ ├── values-ru
│ │ └── strings.xml
│ │ ├── values-tr
│ │ └── strings.xml
│ │ ├── values-uk
│ │ └── strings.xml
│ │ ├── values-zh-rCN
│ │ └── strings.xml
│ │ ├── values-zh-rTW
│ │ └── strings.xml
│ │ ├── values
│ │ ├── arrays.xml
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ │ └── xml
│ │ └── settings.xml
│ └── test
│ └── kotlin
│ └── com
│ └── vrem
│ ├── util
│ ├── CompatUtilsTest.kt
│ ├── EnumUtilsTest.kt
│ ├── FileUtilsTest.kt
│ ├── LocaleUtilsTest.kt
│ └── StringUtilsTest.kt
│ └── wifianalyzer
│ ├── ActivityUtilsTest.kt
│ ├── ConfigurationTest.kt
│ ├── DrawerNavigationTest.kt
│ ├── MainActivityBackPressedTest.kt
│ ├── MainActivityTest.kt
│ ├── MainContextHelper.kt
│ ├── MainReloadTest.kt
│ ├── RobolectricUtil.kt
│ ├── about
│ ├── AboutFragment2Test.kt
│ └── AboutFragmentTest.kt
│ ├── export
│ ├── ExportIntentTest.kt
│ └── ExportTest.kt
│ ├── navigation
│ ├── NavigationGroupTest.kt
│ ├── NavigationMenuControllerTest.kt
│ ├── NavigationMenuTest.kt
│ ├── availability
│ │ ├── BottomNavTest.kt
│ │ ├── FilterOffTest.kt
│ │ ├── FilterOnTest.kt
│ │ ├── NavigationOptionsTest.kt
│ │ ├── ScannerSwitchOffTest.kt
│ │ ├── ScannerSwitchOnTest.kt
│ │ ├── WiFiSwitchOffTest.kt
│ │ └── WiFiSwitchOnTest.kt
│ ├── items
│ │ ├── ExportItemTest.kt
│ │ ├── FragmentItemTest.kt
│ │ └── NavigationItemsTest.kt
│ └── options
│ │ ├── OptionActionTest.kt
│ │ └── OptionMenuTest.kt
│ ├── permission
│ ├── ApplicationPermissionTest.kt
│ ├── LocationPermissionTest.kt
│ ├── PermissionDialogTest.kt
│ └── PermissionServiceTest.kt
│ ├── settings
│ ├── CountryPreferenceTest.kt
│ ├── DataTest.kt
│ ├── LanguagePreferenceTest.kt
│ ├── RepositoryTest.kt
│ ├── SettingsFragmentTest.kt
│ ├── SettingsTest.kt
│ └── ThemeStyleTest.kt
│ ├── vendor
│ ├── VendorAdapterTest.kt
│ ├── VendorFragmentTest.kt
│ └── model
│ │ ├── VendorServiceTest.kt
│ │ └── VendorUtilsTest.kt
│ └── wifi
│ ├── accesspoint
│ ├── AccessPointDetailTest.kt
│ ├── AccessPointPopupTest.kt
│ ├── AccessPointViewTypeTest.kt
│ ├── AccessPointsAdapterDataTest.kt
│ ├── AccessPointsAdapterGroupTest.kt
│ ├── AccessPointsAdapterTest.kt
│ ├── AccessPointsFragmentTest.kt
│ ├── ConnectionViewTest.kt
│ ├── ConnectionViewTypeTest.kt
│ └── WarningViewTest.kt
│ ├── band
│ ├── WiFiBandTest.kt
│ ├── WiFiChannelCountryParameterizedTest.kt
│ ├── WiFiChannelCountryTest.kt
│ ├── WiFiChannelTest.kt
│ ├── WiFiChannelsParameterizedTest.kt
│ └── WiFiExpected.kt
│ ├── channelavailable
│ └── ChannelAvailableFragmentTest.kt
│ ├── channelgraph
│ ├── ChannelAxisLabelTest.kt
│ ├── ChannelGraphAdapterTest.kt
│ ├── ChannelGraphFragmentTest.kt
│ ├── ChannelGraphViewTest.kt
│ └── DataManagerTest.kt
│ ├── channelrating
│ ├── ChannelRatingAdapterBindingTest.kt
│ ├── ChannelRatingAdapterParameterizedTest.kt
│ ├── ChannelRatingAdapterTest.kt
│ └── ChannelRatingFragmentTest.kt
│ ├── filter
│ ├── FilterTest.kt
│ ├── SSIDFilterTest.kt
│ └── adapter
│ │ ├── FiltersAdapterTest.kt
│ │ ├── SSIDAdapterTest.kt
│ │ ├── SecurityAdapterTest.kt
│ │ ├── StrengthAdapterTest.kt
│ │ └── WiFiBandAdapterTest.kt
│ ├── graphutils
│ ├── GraphAdapterTest.kt
│ ├── GraphColorsTest.kt
│ ├── GraphLegendTest.kt
│ ├── GraphViewBuilderTest.kt
│ ├── GraphViewWrapperTest.kt
│ ├── SeriesCacheTest.kt
│ └── SeriesOptionsTest.kt
│ ├── manager
│ ├── WiFiManagerWrapperTest.kt
│ └── WiFiSwitchTest.kt
│ ├── model
│ ├── ChannelAPCountTest.kt
│ ├── ChannelRatingTest.kt
│ ├── FastRoamingParameterizedTest.kt
│ ├── FastRoamingTest.kt
│ ├── GroupByTest.kt
│ ├── SecurityTest.kt
│ ├── SortByChannelTest.kt
│ ├── SortByDefaultTest.kt
│ ├── SortBySSIDTest.kt
│ ├── SortByStrengthTest.kt
│ ├── SortByTest.kt
│ ├── StrengthTest.kt
│ ├── WiFiAdditionalTest.kt
│ ├── WiFiConnectionTest.kt
│ ├── WiFiDataTest.kt
│ ├── WiFiDetailTest.kt
│ ├── WiFiIdentifierTest.kt
│ ├── WiFiSecurityParameterized1Test.kt
│ ├── WiFiSecurityParameterized2Test.kt
│ ├── WiFiSecurityTest.kt
│ ├── WiFiSecurityTypeTest.kt
│ ├── WiFiSignalExtraTest.kt
│ ├── WiFiSignalTest.kt
│ ├── WiFiStandardParameterizedTest.kt
│ ├── WiFiStandardTest.kt
│ ├── WiFiUtilsTest.kt
│ ├── WiFiVirtualTest.kt
│ └── WiFiWidthTest.kt
│ ├── predicate
│ ├── AllPredicateTest.kt
│ ├── AnyPredicateTest.kt
│ ├── MakePredicateTest.kt
│ ├── PredicateTest.kt
│ ├── SSIDPredicateTest.kt
│ ├── SecurityPredicateTest.kt
│ ├── StrengthPredicateTest.kt
│ └── WiFiBandPredicateTest.kt
│ ├── scanner
│ ├── CacheTest.kt
│ ├── PeriodicScanTest.kt
│ ├── ScanResultsReceiverTest.kt
│ ├── ScannerCallbackTest.kt
│ ├── ScannerServiceTest.kt
│ ├── ScannerTest.kt
│ ├── SsidTestUtil.kt
│ └── TransformerTest.kt
│ └── timegraph
│ ├── DataManagerTest.kt
│ ├── TimeAxisLabelTest.kt
│ ├── TimeGraphAdapterTest.kt
│ ├── TimeGraphCacheTest.kt
│ ├── TimeGraphFragmentTest.kt
│ └── TimeGraphViewTest.kt
├── build.gradle
├── codecov.yml
├── fastlane
└── metadata
│ └── android
│ ├── bg
│ ├── full_description.txt
│ └── short_description.txt
│ ├── de
│ ├── full_description.txt
│ └── short_description.txt
│ ├── en-US
│ ├── full_description.txt
│ ├── images
│ │ ├── featureGraphic.png
│ │ └── icon.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
│ └── short_description.txt
│ ├── es
│ ├── full_description.txt
│ └── short_description.txt
│ ├── fr
│ ├── full_description.txt
│ └── short_description.txt
│ ├── it
│ ├── full_description.txt
│ └── short_description.txt
│ ├── nl
│ ├── full_description.txt
│ └── short_description.txt
│ ├── pl
│ ├── full_description.txt
│ └── short_description.txt
│ ├── pt-BR
│ ├── full_description.txt
│ └── short_description.txt
│ ├── pt
│ ├── full_description.txt
│ └── short_description.txt
│ ├── ru
│ ├── full_description.txt
│ └── short_description.txt
│ ├── tr
│ ├── full_description.txt
│ └── short_description.txt
│ ├── uk
│ ├── full_description.txt
│ └── short_description.txt
│ ├── zh-CN
│ ├── full_description.txt
│ └── short_description.txt
│ └── zh-TW
│ ├── full_description.txt
│ └── short_description.txt
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── images
├── feature-graphic-light.png
├── feature-graphic.png
├── ic_lock_black_18dp.png
├── ic_lock_open_black_18dp.png
├── ic_lock_outline_black_18dp.png
├── ic_wifi_4.png
├── ic_wifi_5.png
├── ic_wifi_6.png
├── ic_wifi_7.png
├── ic_wifi_legacy.png
├── icon.png
└── svg
│ ├── background.svg
│ ├── foreground.svg
│ ├── icon-circle-large.svg
│ ├── icon-circle.svg
│ └── icon-square.svg
└── settings.gradle
/.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 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: 'Create a report to help us fix the issue'
4 | ---
5 |
6 | [How to report a bug](https://github.com/VREMSoftwareDevelopment/WiFiAnalyzer/wiki/Feedback)
7 |
8 | **Please search issues (open and closed) to see the issues has already been reported.**
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 |
16 | 1. Go to '...'
17 | 2. Click on '....'
18 | 3. Scroll down to '....'
19 | 4. See error
20 |
21 | **Expected behavior**
22 | A clear and concise description of what you expected to happen.
23 |
24 | **Screenshots**
25 | If applicable, add screenshots to help explain your problem.
26 |
27 | **Note**
28 | Some behaviour only occurs on certain devices or versions of Android, please provide the following screenshots/information Device/Android OS (Settings → About Phone) and WiFiAnalyzer version (Menu -> About)
29 |
30 | **Additional context**
31 | Add any other context about the problem here.
32 |
33 | **Provide Device/Android OS information**
34 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 |
3 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/default.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Default
3 | about: Create a report to help us fix the issue
4 |
5 | ---
6 |
7 | [How to report a bug](https://github.com/VREMSoftwareDevelopment/WiFiAnalyzer/wiki/Feedback)
8 |
9 | **Please search issues (open and closed) to see the issues has already been reported.**
10 |
11 | **Describe the bug**
12 | A clear and concise description of what the bug is.
13 |
14 | **To Reproduce**
15 | Steps to reproduce the behavior:
16 |
17 | 1. Go to '...'
18 | 2. Click on '....'
19 | 3. Scroll down to '....'
20 | 4. See error
21 |
22 | **Expected behavior**
23 | A clear and concise description of what you expected to happen.
24 |
25 | **Screenshots**
26 | If applicable, add screenshots to help explain your problem.
27 |
28 | **Note**
29 | Some behaviour only occurs on certain devices or versions of Android, please provide the following screenshots/information Device/Android OS (Settings → About Phone) and WiFiAnalyzer version (Menu -> About)
30 |
31 | **Additional context**
32 | Add any other context about the problem here.
33 |
34 | **Provide Device/Android OS information**
35 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 |
5 | ---
6 |
7 | **Please search issues (open and closed) to see the issues has already been reported.**
8 |
9 | **Is your feature request related to a problem? Please describe.**
10 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
11 |
12 | **Describe the solution you'd like**
13 | A clear and concise description of what you want to happen.
14 |
15 | **Describe alternatives you've considered**
16 | A clear and concise description of any alternative solutions or features you've considered.
17 |
18 | **How I can help**
19 | A clear and concise description of what you can do to help.
20 |
21 | **Additional context**
22 | Add any other context or screenshots about the feature request here.
23 |
24 | **Provide Device/Android OS information**
25 |
--------------------------------------------------------------------------------
/.github/workflows/android_ci.yml:
--------------------------------------------------------------------------------
1 | name: "Android CI"
2 | on: [ push, pull_request ]
3 | jobs:
4 | test:
5 | if: "!contains(github.event.head_commit.message, 'skip ci')"
6 | runs-on: ubuntu-latest
7 | steps:
8 | - name: checkout repository
9 | uses: actions/checkout@v4
10 | - name: set up JDK 21
11 | uses: actions/setup-java@v4
12 | with:
13 | distribution: 'zulu'
14 | java-version: '21'
15 | - name: lint
16 | run: bash ./gradlew lintDebug --stacktrace
17 | - name: unit tests
18 | run: bash ./gradlew testDebugUnitTest --stacktrace
19 | - name: coverage
20 | run: bash ./gradlew jacocoTestCoverageVerification --stacktrace
21 | - name: artifact reports
22 | uses: actions/upload-artifact@v4
23 | with:
24 | name: artifact-reports
25 | path: app/build/reports
26 | - name: upload coverage to Codecov
27 | uses: codecov/codecov-action@v4
28 | with:
29 | token: ${{ secrets.CODECOV_TOKEN }}
30 | file: ./app/build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml
31 | - name: build apk
32 | run: bash ./gradlew assembleDebug --stacktrace
33 | - name: artifact apk
34 | uses: actions/upload-artifact@v4
35 | with:
36 | name: artifact-apk
37 | path: app/build/outputs/apk/debug
38 |
--------------------------------------------------------------------------------
/.github/workflows/android_test_ci.yml:
--------------------------------------------------------------------------------
1 | name: "Android Instrumentation Tests"
2 | on:
3 | push:
4 | branches:
5 | - release
6 | jobs:
7 | instrumentation_tests:
8 | if: "!contains(github.event.head_commit.message, 'skip ci')"
9 | runs-on: ubuntu-latest
10 | steps:
11 | - name: checkout repository
12 | uses: actions/checkout@v4
13 | - name: set up JDK 21
14 | uses: actions/setup-java@v4
15 | with:
16 | distribution: 'zulu'
17 | java-version: '21'
18 | - name: build apks
19 | run: bash ./gradlew assembleDebug assembleAndroidTest
20 | - name: run tests
21 | uses: emulator-wtf/run-tests@v0
22 | with:
23 | api-token: ${{ secrets.EW_API_TOKEN }}
24 | app: app/build/outputs/apk/debug/app-debug.apk
25 | test: app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
26 | outputs-dir: build/test-results
27 | - name: publish test results
28 | uses: mikepenz/action-junit-report@v5
29 | if: always()
30 | with:
31 | report_paths: 'build/test-results/**/*.xml'
32 |
--------------------------------------------------------------------------------
/.github/workflows/codeql-analysis.yml:
--------------------------------------------------------------------------------
1 | name: "CodeQL Analyze"
2 | on: [ push, pull_request ]
3 | jobs:
4 | analyze:
5 | if: "!contains(github.event.head_commit.message, 'skip ci')"
6 | runs-on: ubuntu-latest
7 | timeout-minutes: 360
8 | permissions:
9 | actions: read
10 | contents: read
11 | security-events: write
12 | strategy:
13 | fail-fast: false
14 | matrix:
15 | language: [ 'java-kotlin' ]
16 | steps:
17 | - name: Checkout repository
18 | uses: actions/checkout@v4
19 | - name: set up JDK 21
20 | uses: actions/setup-java@v4
21 | with:
22 | distribution: 'zulu'
23 | java-version: '21'
24 | - name: Initialize CodeQL
25 | uses: github/codeql-action/init@v3
26 | with:
27 | languages: ${{ matrix.language }}
28 | - name: Auto build
29 | uses: github/codeql-action/autobuild@v3
30 | - name: Perform CodeQL Analysis
31 | uses: github/codeql-action/analyze@v3
32 | with:
33 | category: "/language:${{matrix.language}}"
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/.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*
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # How to report a bug
2 |
3 | - Please search issues (open and closed) to see the issues has already been reported. - If an issue has already been reported, feel free to add more information to it. Oherwise, create a new issue.
4 | - Describe the problem as detailed as possible.
5 | - Please add instructions on how to reproduce the problem.
6 | - Please provide a screenshot of the issue you are reporting (To take a screenshot on your smartphone press [Power] + [Volume down] at the same time for a few seconds)
7 |
8 | ## Note
9 |
10 | - Some bugs only occur on certain devices or versions of Android, please provide the following information Device/Android OS (`Settings → About Phone`) and WiFiAnalyzer version (`Menu -> About`)
11 |
12 | # How to submit a feature request
13 |
14 | - Make sure you are using the latest version of WiFiAnalyzer.
15 | - Please search issues to see if the same feature has already been submitted.
16 | - If an feature has already been opened, feel free to add more useful information to it. Otherwise, open a new feature
17 | request (one feature per request).
18 | - Please provide an explanation how the feature solves the problem you are having.
19 | - UI feature request, please describe what the UI would look like and how the user would interact with it.
20 |
21 | # Submit a pull request
22 |
23 | - When starting to work on a feature or bug that has been reported, please add a comment to it that you are working on it.
24 | - Fork the repository
25 | - To close a feature or a bug automatically, once pull request has been merged, please mention it in the [commit comment](https://help.github.com/articles/closing-issues-via-commit-messages/) or [pull request text](https://github.com/blog/1506-closing-issues-via-pull-requests).
26 | - Please avoid if possible large change sets.
27 | - Please do not forget to add unit tests.
28 |
--------------------------------------------------------------------------------
/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: 'Create a report to help us fix the issue'
4 | ---
5 |
6 | [How to report a bug](https://github.com/VREMSoftwareDevelopment/WiFiAnalyzer/wiki/Feedback)
7 |
8 | **Please search issues (open and closed) to see the issues has already been reported.**
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 |
16 | 1. Go to '...'
17 | 2. Click on '....'
18 | 3. Scroll down to '....'
19 | 4. See error
20 |
21 | **Expected behavior**
22 | A clear and concise description of what you expected to happen.
23 |
24 | **Screenshots**
25 | If applicable, add screenshots to help explain your problem.
26 |
27 | **Note**
28 | Some behaviour only occurs on certain devices or versions of Android, please provide the following screenshots/information Device/Android OS (Settings → About Phone) and WiFiAnalyzer version (Menu -> About)
29 |
30 | **Additional context**
31 | Add any other context about the problem here.
32 |
33 | **Provide Device/Android OS information**
34 |
--------------------------------------------------------------------------------
/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | Thanks for sending a pull request!
2 |
3 | [How to submit a pull request](https://github.com/VREMSoftwareDevelopment/WiFiAnalyzer/wiki/Pull-Request)
4 |
5 | **What does this implement/fix? Please describe.**
6 |
7 | - A clear and concise description of the changes.
8 |
9 | **Does this close any currently open issues?**
10 |
11 | - Please provide issue(s) number.
12 |
13 | **Additional context**
14 |
15 | - Add any other context about the pull request.
16 |
17 | **Where has this been tested?**
18 |
19 | - Operating System:
20 | - Platform:
21 | - Target Platform:
22 | - Toolchain Version:
23 | - SDK Version:
24 |
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | theme: jekyll-theme-cayman
--------------------------------------------------------------------------------
/app/build.properties:
--------------------------------------------------------------------------------
1 | #Build Properties
2 | #Fri May 30 08:39:14 EDT 2025
3 | version_build=18
4 | version_major=3
5 | version_minor=2
6 | version_patch=0
7 | version_store=69
8 |
--------------------------------------------------------------------------------
/app/lint.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/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/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.*
23 | import com.vrem.wifianalyzer.R.id.action_scanner
24 | import org.hamcrest.Matchers.allOf
25 |
26 | private const val PAUSE = "Pause"
27 | private const val PLAY = "Play"
28 |
29 | internal class ScannerInstrumentedTest : Runnable {
30 |
31 | override fun run() {
32 | onView(allOf(withId(action_scanner), withContentDescription(PAUSE), isDisplayed())).perform(click())
33 | onView(allOf(withId(action_scanner), withContentDescription(PLAY), isDisplayed())).perform(click())
34 | }
35 |
36 | }
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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/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(values: EnumEntries, indexes: Set, defaultValue: T): Set {
23 | val results: Set = indexes.map { findOne(values, it.toInt(), defaultValue) }.toSet()
24 | return results.ifEmpty { values.toSet() }
25 | }
26 |
27 | fun > findOne(values: EnumEntries, index: Int, defaultValue: T): T =
28 | if (index in values.indices) values[index] else defaultValue
29 |
30 | fun > ordinals(values: EnumEntries): Set =
31 | ordinals(values.toSet())
32 |
33 | fun > ordinals(values: Set): Set =
34 | values.map { it.ordinal.toString() }.toSet()
35 |
--------------------------------------------------------------------------------
/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.io.InputStream
23 |
24 | fun readFile(resources: Resources, @RawRes id: Int): String {
25 | return try {
26 | resources.openRawResource(id).use { read(it) }
27 | } catch (e: Exception) {
28 | String.EMPTY
29 | }
30 | }
31 |
32 | private fun read(inputStream: InputStream): String {
33 | val size = inputStream.available()
34 | val bytes = ByteArray(size)
35 | val count = inputStream.read(bytes)
36 | return if (count == size) String(bytes).replace("\r", "") else String.EMPTY
37 | }
38 |
--------------------------------------------------------------------------------
/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 | fun String.Companion.nullToEmpty(value: String?): String = value ?: String.EMPTY
25 | fun String.specialTrim(): String = this.trim { it <= ' ' }.replace(" +".toRegex(), String.SPACE_SEPARATOR)
26 | fun String.toCapitalize(locale: Locale): String = this.replaceFirstChar { word -> word.uppercase(locale) }
27 |
--------------------------------------------------------------------------------
/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(val largeScreen: Boolean) {
27 | var size = SIZE_MAX
28 |
29 | val sizeAvailable: Boolean get() = size == SIZE_MAX
30 | }
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/MainAcitvityBackPressed.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(val mainActivity: MainActivity) : OnBackPressedCallback(true) {
24 | override fun handleOnBackPressed() {
25 | if (!mainActivity.closeDrawer()) {
26 | val selectedMenu = MainContext.INSTANCE.settings.selectedMenu()
27 | if (selectedMenu == mainActivity.currentNavigationMenu()) {
28 | mainActivity.finish()
29 | } else {
30 | mainActivity.currentNavigationMenu(selectedMenu)
31 | mainActivity.onNavigationItemSelected(mainActivity.currentMenuItem())
32 | }
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/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 |
27 | internal fun intent(title: String, data: String): Intent {
28 | val intentSend: Intent = intentSend()
29 | intentSend.flags = Intent.FLAG_ACTIVITY_NEW_TASK
30 | intentSend.type = "text/plain"
31 | intentSend.putExtra(Intent.EXTRA_TITLE, title)
32 | intentSend.putExtra(Intent.EXTRA_SUBJECT, title)
33 | intentSend.putExtra(Intent.EXTRA_TEXT, data)
34 | return intentChooser(intentSend, title)
35 | }
36 |
37 | internal fun intentSend(): Intent = Intent(Intent.ACTION_SEND)
38 |
39 | internal fun intentChooser(intent: Intent, title: String): Intent = Intent.createChooser(intent, title)
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 : NavigationView.OnNavigationItemSelectedListener,
27 | NavigationBarView.OnItemSelectedListener {
28 | fun currentMenuItem(): MenuItem
29 | fun currentNavigationMenu(): NavigationMenu
30 | fun currentNavigationMenu(navigationMenu: NavigationMenu)
31 | fun navigationView(): NavigationView
32 | fun findViewById(@IdRes id: Int): T
33 | }
--------------------------------------------------------------------------------
/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/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/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/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 = listOf(
21 | navigationOptionWiFiSwitchOff,
22 | navigationOptionScannerSwitchOn,
23 | navigationOptionFilterOn,
24 | navigationOptionBottomNavOn
25 | )
26 |
27 | val navigationOptionOff = listOf(
28 | navigationOptionWiFiSwitchOff,
29 | navigationOptionScannerSwitchOff,
30 | navigationOptionFilterOff,
31 | navigationOptionBottomNavOff
32 | )
33 |
34 | val navigationOptionOther = listOf(
35 | navigationOptionWiFiSwitchOn,
36 | navigationOptionScannerSwitchOn,
37 | navigationOptionFilterOn,
38 | navigationOptionBottomNavOn
39 | )
40 |
41 | val navigationOptionRating = listOf(
42 | navigationOptionWiFiSwitchOn,
43 | navigationOptionScannerSwitchOn,
44 | navigationOptionFilterOff,
45 | navigationOptionBottomNavOn
46 | )
47 |
48 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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(mainActivity: MainActivity, visible: Boolean) {
33 | mainActivity.optionMenu.menu?.let {
34 | val menuItem = it.findItem(R.id.action_wifi_band)
35 | menuItem.isVisible = visible
36 | if (visible) {
37 | val wiFiBand = MainContext.INSTANCE.settings.wiFiBand()
38 | val title = mainActivity.getString(wiFiBand.textResource)
39 | menuItem.title = title.replace(' ', '\n')
40 | }
41 | }
42 | }
43 |
44 |
--------------------------------------------------------------------------------
/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 android.view.MenuItem
21 | import com.vrem.wifianalyzer.MainActivity
22 | import com.vrem.wifianalyzer.navigation.NavigationMenu
23 |
24 | interface NavigationItem {
25 | fun activate(mainActivity: MainActivity, menuItem: MenuItem, navigationMenu: NavigationMenu)
26 | val registered: Boolean get() = false
27 | val visibility: Int get() = android.view.View.GONE
28 | }
--------------------------------------------------------------------------------
/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(activity: Activity, menu: Menu) {
33 | activity.menuInflater.inflate(R.menu.optionmenu, menu)
34 | this.menu = menu
35 | iconsVisible(menu)
36 | }
37 |
38 | fun select(item: MenuItem): Unit = OptionAction.findOptionAction(item.itemId).action()
39 |
40 | @SuppressLint("RestrictedApi")
41 | private fun iconsVisible(menu: Menu) {
42 | try {
43 | (menu as MenuBuilder).setOptionalIconsVisible(true)
44 | } catch (e: Exception) {
45 | // do nothing
46 | }
47 | }
48 | }
--------------------------------------------------------------------------------
/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 |
30 | fun enabled(): Boolean = locationEnabled() && permissionGranted()
31 |
32 | fun locationEnabled(): Boolean = locationPermission.enabled()
33 |
34 | fun check(): Unit = applicationPermission.check()
35 |
36 | fun granted(requestCode: Int, grantResults: IntArray): Boolean =
37 | applicationPermission.granted(requestCode, grantResults)
38 |
39 | fun permissionGranted(): Boolean = applicationPermission.granted()
40 | }
--------------------------------------------------------------------------------
/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.findAll()
30 | .map { Data(it.countryCode, it.countryName(currentLocale)) }
31 | .sorted()
32 | }
33 |
34 | class CountryPreference(context: Context, attrs: AttributeSet) :
35 | CustomPreference(context, attrs, data(), defaultCountryCode())
36 |
--------------------------------------------------------------------------------
/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(context: Context, attrs: AttributeSet, values: List, defaultValue: String) :
25 | ListPreference(context, attrs) {
26 | init {
27 | this.entries = names(values)
28 | this.entryValues = codes(values)
29 | this.setDefaultValue(defaultValue)
30 | }
31 |
32 | private fun codes(data: List): Array {
33 | return data.map { it.code }.toTypedArray()
34 | }
35 |
36 | private fun names(data: List): Array {
37 | return data.map { it.name }.toTypedArray()
38 | }
39 |
40 | }
--------------------------------------------------------------------------------
/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(val code: String, val name: String) : Comparable {
21 |
22 | override fun compareTo(other: Data): Int =
23 | compareBy { it.name }.thenBy { it.code }.compare(this, other)
24 |
25 | }
--------------------------------------------------------------------------------
/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 = supportedLanguages()
29 | .map { map(it) }
30 | .sorted()
31 |
32 | private fun map(it: Locale): Data =
33 | Data(toLanguageTag(it), it.getDisplayName(it).toCapitalize(Locale.getDefault()))
34 |
35 | class LanguagePreference(context: Context, attrs: AttributeSet) :
36 | CustomPreference(context, attrs, data(), defaultLanguageTag())
--------------------------------------------------------------------------------
/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(@param:StyleRes val theme: Int, @param:StyleRes val themeNoActionBar: Int, @param:ColorInt val colorGraphText: Int) {
26 | DARK(R.style.ThemeDark, R.style.ThemeDarkNoActionBar, Color.WHITE),
27 | LIGHT(R.style.ThemeLight, R.style.ThemeLightNoActionBar, Color.BLACK),
28 | SYSTEM(R.style.ThemeSystem, R.style.ThemeSystemNoActionBar, Color.GRAY);
29 | }
30 |
--------------------------------------------------------------------------------
/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/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 = AlertDialog.Builder(view.context)
29 | .setView(view)
30 | .setPositiveButton(android.R.string.ok) { dialog, _ -> dialog.cancel(); }
31 | .create()
32 | alertDialog.show()
33 | return alertDialog
34 | }
35 |
36 | fun attach(view: View, wiFiDetail: WiFiDetail) {
37 | view.setOnClickListener {
38 | try {
39 | show(AccessPointDetail().makeViewDetailed(wiFiDetail))
40 | } catch (e: Exception) {
41 | // do nothing
42 | }
43 | }
44 | }
45 |
46 | }
--------------------------------------------------------------------------------
/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(@LayoutRes val layout: Int) {
24 | COMPLETE(R.layout.access_point_view_complete),
25 | COMPACT(R.layout.access_point_view_compact);
26 | }
--------------------------------------------------------------------------------
/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(@LayoutRes val layout: Int) {
24 | COMPLETE(R.layout.access_point_view_complete),
25 | COMPACT(R.layout.access_point_view_compact),
26 | HIDE(R.layout.access_point_view_hide);
27 |
28 | val hide: Boolean get() = HIDE == this
29 | }
30 |
--------------------------------------------------------------------------------
/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(val channel: Int = 0, val frequency: Int = 0) : Comparable {
23 | fun inRange(value: Int): Boolean =
24 | value in frequency - ALLOWED_RANGE..frequency + ALLOWED_RANGE
25 |
26 | override fun compareTo(other: WiFiChannel): Int =
27 | compareBy { it.channel }.thenBy { it.frequency }.compare(this, other)
28 |
29 | companion object {
30 | val UNKNOWN = WiFiChannel()
31 | }
32 |
33 | }
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/channelgraph/ChannelGraphAdapter.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.channelgraph
19 |
20 | import com.vrem.annotation.OpenClass
21 | import com.vrem.wifianalyzer.wifi.band.WiFiBand
22 | import com.vrem.wifianalyzer.wifi.graphutils.GraphAdapter
23 | import com.vrem.wifianalyzer.wifi.model.WiFiData
24 |
25 | private fun channelGraphViews(): List =
26 | WiFiBand.entries.map { wiFiBand -> ChannelGraphView(wiFiBand) }
27 |
28 | @OpenClass
29 | class ChannelGraphAdapter() : GraphAdapter(channelGraphViews()) {
30 | override fun update(wiFiData: WiFiData) {
31 | super.update(wiFiData)
32 | }
33 | }
34 |
35 |
--------------------------------------------------------------------------------
/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(securityAdapter: SecurityAdapter, alertDialog: AlertDialog) :
26 | EnumFilter(
27 | mapOf(
28 | Security.NONE to R.id.filterSecurityNone,
29 | Security.WPS to R.id.filterSecurityWPS,
30 | Security.WEP to R.id.filterSecurityWEP,
31 | Security.WPA to R.id.filterSecurityWPA,
32 | Security.WPA2 to R.id.filterSecurityWPA2,
33 | Security.WPA3 to R.id.filterSecurityWPA3
34 | ),
35 | securityAdapter,
36 | alertDialog,
37 | R.id.filterSecurity
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(strengthAdapter: StrengthAdapter, alertDialog: AlertDialog) :
26 | EnumFilter(
27 | mapOf(
28 | Strength.ZERO to R.id.filterStrength0,
29 | Strength.ONE to R.id.filterStrength1,
30 | Strength.TWO to R.id.filterStrength2,
31 | Strength.THREE to R.id.filterStrength3,
32 | Strength.FOUR to R.id.filterStrength4
33 | ),
34 | strengthAdapter,
35 | alertDialog,
36 | R.id.filterStrength
37 | )
--------------------------------------------------------------------------------
/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(wiFiBandAdapter: WiFiBandAdapter, alertDialog: AlertDialog) :
26 | EnumFilter(
27 | mapOf(
28 | WiFiBand.GHZ2 to R.id.filterWifiBand2,
29 | WiFiBand.GHZ5 to R.id.filterWifiBand5,
30 | WiFiBand.GHZ6 to R.id.filterWifiBand6
31 | ),
32 | wiFiBandAdapter,
33 | alertDialog,
34 | R.id.filterWiFiBand
35 | )
--------------------------------------------------------------------------------
/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(var selections: Set) {
25 | fun selections(selections: Set) {
26 | this.selections = selections
27 | }
28 |
29 | abstract fun isActive(): Boolean
30 | abstract fun reset()
31 | abstract fun save(settings: Settings)
32 | }
--------------------------------------------------------------------------------
/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(selections: Set) : BasicFilterAdapter(selections) {
23 | override var selections: Set
24 | get() = super.selections
25 | set(values) {
26 | super.selections = values.filter { it.isNotBlank() }.toSet()
27 | }
28 |
29 | override fun isActive(): Boolean = selections.isNotEmpty()
30 |
31 | override fun reset() {
32 | selections = setOf()
33 | }
34 |
35 | override fun save(settings: Settings): Unit =
36 | settings.saveSSIDs(selections)
37 |
38 | }
--------------------------------------------------------------------------------
/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(selections: Set) : EnumFilterAdapter(selections, Security.entries) {
24 | override fun save(settings: Settings) {
25 | settings.saveSecurities(selections)
26 | }
27 | }
--------------------------------------------------------------------------------
/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(selections: Set) : EnumFilterAdapter(selections, Strength.entries) {
25 | override fun color(selection: Strength): Int =
26 | if (selections.contains(selection)) selection.colorResource else R.color.regular
27 |
28 | override fun save(settings: Settings): Unit =
29 | settings.saveStrengths(selections)
30 | }
--------------------------------------------------------------------------------
/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(values: Set) : EnumFilterAdapter(values, WiFiBand.entries) {
24 | override fun save(settings: Settings): Unit =
25 | settings.saveWiFiBands(selections)
26 | }
--------------------------------------------------------------------------------
/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(private val graphViewNotifiers: List) : UpdateNotifier {
25 | fun graphViews(): List = graphViewNotifiers.map { it.graphView() }
26 |
27 | override fun update(wiFiData: WiFiData) = graphViewNotifiers.forEach { it.update(wiFiData) }
28 |
29 | fun graphViewNotifiers(): List = graphViewNotifiers
30 |
31 | }
--------------------------------------------------------------------------------
/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/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(val x: Int, val y: Int) : DataPoint(x.toDouble(), y.toDouble())
24 |
--------------------------------------------------------------------------------
/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(val legendDisplay: LegendDisplay) {
37 | LEFT(legendDisplayLeft),
38 | RIGHT(legendDisplayRight),
39 | HIDE(legendDisplayNone);
40 |
41 | fun display(legendRenderer: LegendRenderer) {
42 | legendDisplay(legendRenderer)
43 | }
44 |
45 | }
--------------------------------------------------------------------------------
/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 | fun update(wiFiData: WiFiData)
26 | }
--------------------------------------------------------------------------------
/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(val wiFiChannel: WiFiChannel, val wiFiWidth: WiFiWidth, val count: Int) : Comparable {
23 | override fun compareTo(other: ChannelAPCount): Int =
24 | compareBy { it.count }.thenBy { it.wiFiChannel }.compare(this, other)
25 | }
--------------------------------------------------------------------------------
/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(val sort: Comparator, val group: GroupByKey) {
29 | NONE(sortByDefault(), groupBySSID),
30 | SSID(sortBySSID(), groupBySSID),
31 | CHANNEL(sortByChannel(), groupByChannel),
32 | VIRTUAL(sortBySSID(), groupByVirtual);
33 |
34 | val none: Boolean get() = NONE == this
35 |
36 | }
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/vrem/wifianalyzer/wifi/model/Strength.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 androidx.annotation.ColorRes
21 | import androidx.annotation.DrawableRes
22 | import com.vrem.wifianalyzer.R
23 |
24 | enum class Strength(@DrawableRes val imageResource: Int, @ColorRes val colorResource: Int) {
25 | ZERO(R.drawable.ic_signal_wifi_0_bar, R.color.error),
26 | ONE(R.drawable.ic_signal_wifi_1_bar, R.color.warning),
27 | TWO(R.drawable.ic_signal_wifi_2_bar, R.color.warning),
28 | THREE(R.drawable.ic_signal_wifi_3_bar, R.color.success),
29 | FOUR(R.drawable.ic_signal_wifi_4_bar, R.color.success);
30 |
31 | fun weak(): Boolean = ZERO == this
32 |
33 | companion object {
34 | fun calculate(level: Int): Strength {
35 | return entries[calculateSignalLevel(level, entries.size)]
36 | }
37 |
38 | fun reverse(strength: Strength): Strength {
39 | return entries[entries.size - strength.ordinal - 1]
40 | }
41 | }
42 |
43 | }
--------------------------------------------------------------------------------
/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 |
27 | companion object {
28 | val EMPTY = WiFiAdditional()
29 | }
30 |
31 | }
--------------------------------------------------------------------------------
/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 | ) :
28 | Comparable {
29 |
30 | val connected: Boolean get() = EMPTY != this
31 |
32 | override fun equals(other: Any?): Boolean {
33 | if (this === other) return true
34 | if (javaClass != other?.javaClass) return false
35 | other as WiFiConnection
36 | return wiFiIdentifier == other.wiFiIdentifier
37 | }
38 |
39 | override fun hashCode(): Int = wiFiIdentifier.hashCode()
40 |
41 | override fun compareTo(other: WiFiConnection): Int = wiFiIdentifier.compareTo(other.wiFiIdentifier)
42 |
43 | companion object {
44 | const val LINK_SPEED_INVALID = -1
45 | val EMPTY = WiFiConnection()
46 | }
47 | }
48 |
49 |
--------------------------------------------------------------------------------
/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(val ssidRaw: SSID = String.EMPTY, val bssid: BSSID = String.EMPTY) : Comparable {
26 |
27 | val ssid = when {
28 | ssidRaw.isEmpty() -> "*hidden*"
29 | else -> ssidRaw
30 | }
31 |
32 | val title: String get() = "$ssid ($bssid)"
33 |
34 | fun equals(other: WiFiIdentifier, ignoreCase: Boolean = false): Boolean =
35 | ssid.equals(other.ssidRaw, ignoreCase) && bssid.equals(other.bssid, ignoreCase)
36 |
37 | override fun compareTo(other: WiFiIdentifier): Int =
38 | compareBy { it.ssidRaw }.thenBy { it.bssid }.compare(this, other)
39 |
40 | companion object {
41 | val EMPTY = WiFiIdentifier()
42 | }
43 | }
--------------------------------------------------------------------------------
/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(val bssid: String, val frequency: Int) {
24 | val key: String get() = "$bssid-$frequency"
25 | }
26 |
27 | val WiFiDetail.wiFiVirtual: WiFiVirtual
28 | get() =
29 | if (BSSID_LENGTH == wiFiIdentifier.bssid.length)
30 | WiFiVirtual(
31 | this.wiFiIdentifier.bssid.substring(2, BSSID_LENGTH - 1),
32 | this.wiFiSignal.primaryFrequency
33 | )
34 | else
35 | WiFiVirtual(
36 | wiFiIdentifier.bssid,
37 | wiFiSignal.primaryFrequency
38 | )
39 |
40 |
41 |
--------------------------------------------------------------------------------
/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(private val wiFiManagerWrapper: WiFiManagerWrapper, private val cache: Cache) :
25 | Callback {
26 |
27 | override fun onSuccess() {
28 | cache.add(wiFiManagerWrapper.scanResults())
29 | cache.wifiInfo = wiFiManagerWrapper.wiFiInfo()
30 | }
31 |
32 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/app/src/main/res/drawable-hdpi/ic_app.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/app/src/main/res/drawable-mdpi/ic_app.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/app/src/main/res/drawable-xhdpi/ic_app.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/app/src/main/res/drawable-xxhdpi/ic_app.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/ic_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/app/src/main/res/drawable-xxxhdpi/ic_app.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_brightness_low.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_check.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_close.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_color_lens.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/res/drawable/ic_fast_forward.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_filter_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_group.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_import_export.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_info_outline.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_insert_chart.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/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/res/drawable/ic_location_on.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/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/res/drawable/ic_lock_outline.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_menu.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_network_wifi.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
29 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_pause.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_play_arrow.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_reset.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_show_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_signal_wifi_1_bar.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
29 |
32 |
33 |
--------------------------------------------------------------------------------
/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_3_bar.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
29 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_signal_wifi_4_bar.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_signal_wifi_off.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_view_carousel.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_wifi_tethering.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/menu_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/splash_inset.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/access_point_view_hide.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
24 |
--------------------------------------------------------------------------------
/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/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/filter_ssid.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
27 |
28 |
32 |
33 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/graph_content.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
23 |
24 |
29 |
30 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/info_faq.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
24 |
25 |
31 |
32 |
38 |
39 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/info_location.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
26 |
31 |
32 |
40 |
41 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/info_permission.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
25 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/info_throttling.xml:
--------------------------------------------------------------------------------
1 |
18 |
19 |
24 |
25 |
34 |
35 |
--------------------------------------------------------------------------------
/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/separator_line.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
24 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/vendor_details.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
24 |
25 |
31 |
32 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/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/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 | #616161
43 |
44 |
--------------------------------------------------------------------------------
/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/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 | }
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 | val activity: MainActivity = Robolectric.buildActivity(MainActivity::class.java).create().resume().get()
29 |
30 | fun startFragment(fragment: Fragment) {
31 | val fragmentManager = activity.supportFragmentManager
32 | val fragmentTransaction = fragmentManager.beginTransaction()
33 | fragmentTransaction.add(fragment, null)
34 | fragmentTransaction.commit()
35 | clearLooper()
36 | }
37 |
38 | fun clearLooper() {
39 | Shadows.shadowOf(Looper.getMainLooper()).idle()
40 | }
41 |
42 | }
--------------------------------------------------------------------------------
/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 accessPointViewCount() {
27 | assertThat(AccessPointViewType.entries).hasSize(2)
28 | }
29 |
30 | @Test
31 | fun getLayout() {
32 | assertThat(AccessPointViewType.COMPLETE.layout).isEqualTo(R.layout.access_point_view_complete)
33 | assertThat(AccessPointViewType.COMPACT.layout).isEqualTo(R.layout.access_point_view_compact)
34 | }
35 |
36 | }
--------------------------------------------------------------------------------
/app/src/test/kotlin/com/vrem/wifianalyzer/wifi/accesspoint/ConnectionViewTypeTest.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 ConnectionViewTypeTest {
25 | @Test
26 | fun connectionViewTypeCount() {
27 | assertThat(ConnectionViewType.entries).hasSize(3)
28 | }
29 |
30 | @Test
31 | fun getLayout() {
32 | assertThat(ConnectionViewType.COMPLETE.layout).isEqualTo(R.layout.access_point_view_complete)
33 | assertThat(ConnectionViewType.COMPACT.layout).isEqualTo(R.layout.access_point_view_compact)
34 | assertThat(ConnectionViewType.HIDE.layout).isEqualTo(R.layout.access_point_view_hide)
35 | }
36 |
37 | @Test
38 | fun isHide() {
39 | assertThat(ConnectionViewType.COMPLETE.hide).isFalse()
40 | assertThat(ConnectionViewType.COMPACT.hide).isFalse()
41 | assertThat(ConnectionViewType.HIDE.hide).isTrue()
42 | }
43 |
44 | }
--------------------------------------------------------------------------------
/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 | }
--------------------------------------------------------------------------------
/app/src/test/kotlin/com/vrem/wifianalyzer/wifi/model/SortByTest.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 org.assertj.core.api.Assertions.assertThat
21 | import org.junit.Test
22 |
23 | class SortByTest {
24 | @Test
25 | fun sortByNumber() {
26 | assertThat(SortBy.entries).hasSize(3)
27 | }
28 |
29 | @Test
30 | fun comparator() {
31 | assertThat(SortBy.STRENGTH.sort.javaClass.isInstance(sortByStrength())).isTrue()
32 | assertThat(SortBy.SSID.sort.javaClass.isInstance(sortBySSID())).isTrue()
33 | assertThat(SortBy.CHANNEL.sort.javaClass.isInstance(sortByChannel())).isTrue()
34 | }
35 | }
--------------------------------------------------------------------------------
/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 |
26 | @Test
27 | fun allPredicateIsTrue() {
28 | // setup
29 | val wiFiDetail = WiFiDetail.EMPTY
30 | val fixture = listOf(truePredicate, truePredicate, truePredicate).allPredicate()
31 | // execute
32 | val actual = fixture(wiFiDetail)
33 | // validate
34 | assertThat(actual).isTrue()
35 | }
36 |
37 | @Test
38 | fun allPredicateIsFalse() {
39 | // setup
40 | val wiFiDetail = WiFiDetail.EMPTY
41 | val fixture = listOf(falsePredicate, truePredicate, falsePredicate).allPredicate()
42 | // execute
43 | val actual = fixture(wiFiDetail)
44 | // validate
45 | assertThat(actual).isFalse()
46 | }
47 |
48 | }
--------------------------------------------------------------------------------
/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 AmyPredicateTest {
25 |
26 | @Test
27 | fun anyPredicateIsTrue() {
28 | // setup
29 | val wiFiDetail = WiFiDetail.EMPTY
30 | val fixture = listOf(falsePredicate, truePredicate, falsePredicate).anyPredicate()
31 | // execute
32 | val actual = fixture(wiFiDetail)
33 | // validate
34 | assertThat(actual).isTrue()
35 | }
36 |
37 | @Test
38 | fun anyPredicateIsFalse() {
39 | // setup
40 | val wiFiDetail = WiFiDetail.EMPTY
41 | val fixture = listOf(falsePredicate, falsePredicate, falsePredicate).anyPredicate()
42 | // execute
43 | val actual = fixture(wiFiDetail)
44 | // validate
45 | assertThat(actual).isFalse()
46 | }
47 |
48 | }
--------------------------------------------------------------------------------
/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 | }
--------------------------------------------------------------------------------
/app/src/test/kotlin/com/vrem/wifianalyzer/wifi/predicate/StrengthPredicateTest.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.*
21 | import org.assertj.core.api.Assertions.assertThat
22 | import org.junit.Test
23 |
24 | class StrengthPredicateTest {
25 | @Test
26 | fun strengthPredicate() {
27 | // setup
28 | val wiFiDetail = makeWiFiDetail()
29 | // execute & validate
30 | assertThat(Strength.THREE.predicate()(wiFiDetail)).isTrue()
31 | assertThat(Strength.FOUR.predicate()(wiFiDetail)).isFalse()
32 | }
33 |
34 | private fun makeWiFiDetail(): WiFiDetail =
35 | WiFiDetail(
36 | WiFiIdentifier("ssid", "bssid"),
37 | WiFiSecurity("wpa"),
38 | WiFiSignal(2445, 2445, WiFiWidth.MHZ_20, -60)
39 | )
40 | }
--------------------------------------------------------------------------------
/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(scanResult: ScanResult, ssid: String) {
27 | if (buildMinVersionT()) {
28 | val wifiSsid: WifiSsid = mock()
29 | whenever(scanResult.wifiSsid).thenReturn(wifiSsid)
30 | whenever(wifiSsid.toString()).thenReturn(ssid)
31 | } else {
32 | scanResult.SSID = ssid
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/build.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 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
20 |
21 | buildscript {
22 | ext {
23 | kotlin_version = '2.1.21'
24 | }
25 | repositories {
26 | google()
27 | mavenCentral()
28 | }
29 | dependencies {
30 | classpath 'com.android.tools.build:gradle:8.10.1'
31 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
32 | classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
33 | }
34 | }
35 |
36 | allprojects {
37 | repositories {
38 | google()
39 | maven { url 'https://maven.google.com' }
40 | mavenCentral()
41 | }
42 | tasks.withType(JavaCompile).tap {
43 | configureEach {
44 | options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
45 | }
46 | }
47 | }
48 |
49 | tasks.register('clean', Delete) {
50 | delete rootProject.layout.buildDirectory
51 | }
52 |
--------------------------------------------------------------------------------
/codecov.yml:
--------------------------------------------------------------------------------
1 | comment:
2 | layout: header, diff, changes, sunburst, uncovered
3 | coverage:
4 | status: { }
5 |
6 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/bg/full_description.txt:
--------------------------------------------------------------------------------
1 | Оптимизирайте своята Wi-Fi мрежа, като проверите състоянието на Wi-Fi мрежата, силата на сигнала и идентифицирате пренаселените канали, използвайки WiFiAnalyzer с отворен код за Android
--------------------------------------------------------------------------------
/fastlane/metadata/android/bg/short_description.txt:
--------------------------------------------------------------------------------
1 | Оптимизирайте своята Wi-Fi мрежа
--------------------------------------------------------------------------------
/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
--------------------------------------------------------------------------------
/fastlane/metadata/android/de/short_description.txt:
--------------------------------------------------------------------------------
1 | Verbesseren Sie Ihr WLAN-Netzwerk
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/featureGraphic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/fastlane/metadata/android/en-US/images/featureGraphic.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/fastlane/metadata/android/en-US/images/icon.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/phoneScreenshots/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/fastlane/metadata/android/en-US/phoneScreenshots/01.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/phoneScreenshots/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/fastlane/metadata/android/en-US/phoneScreenshots/02.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/phoneScreenshots/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/fastlane/metadata/android/en-US/phoneScreenshots/03.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/phoneScreenshots/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/fastlane/metadata/android/en-US/phoneScreenshots/04.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/phoneScreenshots/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/fastlane/metadata/android/en-US/phoneScreenshots/06.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/phoneScreenshots/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/fastlane/metadata/android/en-US/phoneScreenshots/07.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/phoneScreenshots/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/fastlane/metadata/android/en-US/phoneScreenshots/08.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/sevenInchScreenshots/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/fastlane/metadata/android/en-US/sevenInchScreenshots/01.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/sevenInchScreenshots/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/fastlane/metadata/android/en-US/sevenInchScreenshots/02.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/sevenInchScreenshots/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/fastlane/metadata/android/en-US/sevenInchScreenshots/03.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/sevenInchScreenshots/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/fastlane/metadata/android/en-US/sevenInchScreenshots/04.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/sevenInchScreenshots/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/fastlane/metadata/android/en-US/sevenInchScreenshots/06.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/sevenInchScreenshots/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/fastlane/metadata/android/en-US/sevenInchScreenshots/07.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/sevenInchScreenshots/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/fastlane/metadata/android/en-US/sevenInchScreenshots/08.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/sevenInchScreenshots/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/fastlane/metadata/android/en-US/sevenInchScreenshots/09.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | Optimize your Wi-Fi network
--------------------------------------------------------------------------------
/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
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/short_description.txt:
--------------------------------------------------------------------------------
1 | Optimiza tu red Wi-Fi
--------------------------------------------------------------------------------
/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.
--------------------------------------------------------------------------------
/fastlane/metadata/android/fr/short_description.txt:
--------------------------------------------------------------------------------
1 | Optimisez vos réseaux Wi-Fi
--------------------------------------------------------------------------------
/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
--------------------------------------------------------------------------------
/fastlane/metadata/android/it/short_description.txt:
--------------------------------------------------------------------------------
1 | Ottimizza la tua rete Wi-Fi
--------------------------------------------------------------------------------
/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.
--------------------------------------------------------------------------------
/fastlane/metadata/android/nl/short_description.txt:
--------------------------------------------------------------------------------
1 | Optimaliseer uw Wifi netwerk
--------------------------------------------------------------------------------
/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
--------------------------------------------------------------------------------
/fastlane/metadata/android/pl/short_description.txt:
--------------------------------------------------------------------------------
1 | Zoptymalizuj twoją sieć Wi-Fi
--------------------------------------------------------------------------------
/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
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt-BR/short_description.txt:
--------------------------------------------------------------------------------
1 | Otimize a sua rede Wi-Fi
--------------------------------------------------------------------------------
/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/pt/short_description.txt:
--------------------------------------------------------------------------------
1 | Otimize a sua rede Wi-Fi
--------------------------------------------------------------------------------
/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/ru/short_description.txt:
--------------------------------------------------------------------------------
1 | Оптимизация сети Wi-Fi путем проверки состояния Wi-Fi
--------------------------------------------------------------------------------
/fastlane/metadata/android/tr/full_description.txt:
--------------------------------------------------------------------------------
1 | WiFiAnalyzer'ı kullanarak Wi-Fi ağ durumunu, sinyal gücünü kontrol ederek ve kalabalık kanalları belirleyerek Wi-Fi ağınızı iyileştirin
2 |
3 | Özellikler:
4 |
5 | * Yakındaki Erişim Noktalarını belirleyin
6 | * Kanalların sinyal gücü grafiği
7 | * Zaman içinde Erişim Noktası sinyal gücü grafiği
8 | * Kanalları derecelendirmek için Wi-Fi ağlarını analiz edin
9 | * HT/VHT Algılama - 40/80/160/320 MHz (Donanım desteği gerektirir)
10 | * 2,4 GHz, 5 GHz ve 6 GHz Wi-Fi bantları (Donanı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 noktaları ayrıntılarını dışa aktarma
14 | * Koyu, Açık ve Sistem teması mevcut
15 | * Taramayı Duraklat/Sürdür
16 | * Mevcut filtreler: Wi-Fi bandı, Sinyal gücü, Güvenlik ve SSID
17 | * Satıcı/OUI Veritabanı Arama
--------------------------------------------------------------------------------
/fastlane/metadata/android/tr/short_description.txt:
--------------------------------------------------------------------------------
1 | Wi-Fi ağınızı en iyi hale getirin
--------------------------------------------------------------------------------
/fastlane/metadata/android/uk/full_description.txt:
--------------------------------------------------------------------------------
1 | Оптимізація мережі Wi-Fi шляхом перевірки стану Wi-Fi, рівня сигналу і визначення переповнених каналів використовуючи WiFiAnalyzer для Android
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/uk/short_description.txt:
--------------------------------------------------------------------------------
1 | Оптимізація мережі Wi-Fi
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/full_description.txt:
--------------------------------------------------------------------------------
1 | 使用适用于Android的开源应用WiFiAnalyzer,通过检查Wi-Fi网络状态,信号强度和识别拥挤的频道来优化您的Wi-Fi网络
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/short_description.txt:
--------------------------------------------------------------------------------
1 | 优化您的Wi-Fi网络
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-TW/full_description.txt:
--------------------------------------------------------------------------------
1 | 使用本開放原始碼的 Android WiFiAnalyzer 應用程式來檢查 Wi-Fi 狀態、訊號強度並識別擁擠的頻道從而最佳化您的 Wi-Fi 網路
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-TW/short_description.txt:
--------------------------------------------------------------------------------
1 | 最佳化您的 Wi-Fi 網路
2 |
--------------------------------------------------------------------------------
/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
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/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.11.1-bin.zip
7 |
--------------------------------------------------------------------------------
/images/feature-graphic-light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/images/feature-graphic-light.png
--------------------------------------------------------------------------------
/images/feature-graphic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/images/feature-graphic.png
--------------------------------------------------------------------------------
/images/ic_lock_black_18dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/images/ic_lock_black_18dp.png
--------------------------------------------------------------------------------
/images/ic_lock_open_black_18dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/images/ic_lock_open_black_18dp.png
--------------------------------------------------------------------------------
/images/ic_lock_outline_black_18dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/images/ic_lock_outline_black_18dp.png
--------------------------------------------------------------------------------
/images/ic_wifi_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/images/ic_wifi_4.png
--------------------------------------------------------------------------------
/images/ic_wifi_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/images/ic_wifi_5.png
--------------------------------------------------------------------------------
/images/ic_wifi_6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/images/ic_wifi_6.png
--------------------------------------------------------------------------------
/images/ic_wifi_7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/images/ic_wifi_7.png
--------------------------------------------------------------------------------
/images/ic_wifi_legacy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/images/ic_wifi_legacy.png
--------------------------------------------------------------------------------
/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VREMSoftwareDevelopment/WiFiAnalyzer/1a1c11ce690982b4b9e6b81c44621a53f51035b6/images/icon.png
--------------------------------------------------------------------------------
/images/svg/background.svg:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
25 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------