├── .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 | 21 | 22 | 23 | 24 | 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 | --------------------------------------------------------------------------------