Copy disabled (too large)
Download .txt
Showing preview only (11,580K chars total). Download the full file to get everything.
Repository: AdAway/AdAway
Branch: master
Commit: fa16432c3b8f
Files: 2373
Total size: 10.6 MB
Directory structure:
gitextract_5fpoxdv0/
├── .github/
│ ├── CODEOWNERS
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── app_compatibility.yml
│ │ └── bug_report.yml
│ ├── dependabot.yml
│ └── workflows/
│ ├── AndroidLocaleChecker.java
│ ├── android-analysis.yml
│ ├── android-ci.yml
│ ├── android-locale-check.yml
│ └── issues-checker.yml
├── .gitignore
├── .tx/
│ ├── config
│ └── github-integration.yaml
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE.md
├── README.md
├── RELEASING.md
├── Resources/
│ ├── certificate/
│ │ ├── generate.sh
│ │ └── ssl.conf
│ ├── icon.xcf
│ ├── icon_background.xcf
│ ├── icon_foreground.xcf
│ └── test-webserver.sh
├── THIRD_PARTY_LICENSES.md
├── TRANSLATING.md
├── app/
│ ├── .gitignore
│ ├── build.gradle
│ ├── lint.xml
│ ├── proguard-rules.pro
│ ├── schemas/
│ │ └── org.adaway.db.AppDatabase/
│ │ ├── 1.json
│ │ ├── 2.json
│ │ ├── 3.json
│ │ ├── 4.json
│ │ ├── 5.json
│ │ ├── 6.json
│ │ └── 7.json
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── org/
│ │ └── adaway/
│ │ └── db/
│ │ ├── DbTest.java
│ │ ├── HostDbTest.java
│ │ ├── SourceDbTest.java
│ │ └── UserListTest.java
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── assets/
│ │ │ ├── localhost-2410.crt
│ │ │ ├── localhost-2410.key
│ │ │ └── test.html
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── adaway/
│ │ │ ├── AdAwayApplication.java
│ │ │ ├── broadcast/
│ │ │ │ ├── BootReceiver.java
│ │ │ │ ├── Command.java
│ │ │ │ ├── CommandReceiver.java
│ │ │ │ └── UpdateReceiver.java
│ │ │ ├── db/
│ │ │ │ ├── AppDatabase.java
│ │ │ │ ├── Migrations.java
│ │ │ │ ├── converter/
│ │ │ │ │ ├── ListTypeConverter.java
│ │ │ │ │ └── ZonedDateTimeConverter.java
│ │ │ │ ├── dao/
│ │ │ │ │ ├── HostEntryDao.java
│ │ │ │ │ ├── HostListItemDao.java
│ │ │ │ │ └── HostsSourceDao.java
│ │ │ │ └── entity/
│ │ │ │ ├── HostEntry.java
│ │ │ │ ├── HostListItem.java
│ │ │ │ ├── HostsSource.java
│ │ │ │ ├── ListType.java
│ │ │ │ └── SourceType.java
│ │ │ ├── helper/
│ │ │ │ ├── NotificationHelper.java
│ │ │ │ ├── PreferenceHelper.java
│ │ │ │ └── ThemeHelper.java
│ │ │ ├── model/
│ │ │ │ ├── adblocking/
│ │ │ │ │ ├── AdBlockMethod.java
│ │ │ │ │ ├── AdBlockModel.java
│ │ │ │ │ └── UndefinedBlockModel.java
│ │ │ │ ├── backup/
│ │ │ │ │ ├── AppBackupAgent.java
│ │ │ │ │ ├── BackupExporter.java
│ │ │ │ │ ├── BackupFormat.java
│ │ │ │ │ └── BackupImporter.java
│ │ │ │ ├── error/
│ │ │ │ │ ├── HostError.java
│ │ │ │ │ └── HostErrorException.java
│ │ │ │ ├── git/
│ │ │ │ │ ├── GistHostsSource.java
│ │ │ │ │ ├── GitHostsJsonApiSource.java
│ │ │ │ │ ├── GitHostsSource.java
│ │ │ │ │ ├── GitHubHostsSource.java
│ │ │ │ │ └── GitLabHostsSource.java
│ │ │ │ ├── root/
│ │ │ │ │ ├── CommandException.java
│ │ │ │ │ ├── MountType.java
│ │ │ │ │ ├── RootModel.java
│ │ │ │ │ ├── ShellUtils.java
│ │ │ │ │ ├── TcpdumpUtils.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── source/
│ │ │ │ │ ├── SourceLoader.java
│ │ │ │ │ ├── SourceModel.java
│ │ │ │ │ └── SourceUpdateService.java
│ │ │ │ ├── update/
│ │ │ │ │ ├── ApkDownloadReceiver.java
│ │ │ │ │ ├── ApkUpdateService.java
│ │ │ │ │ ├── Manifest.java
│ │ │ │ │ ├── UpdateModel.java
│ │ │ │ │ └── UpdateStore.java
│ │ │ │ └── vpn/
│ │ │ │ └── VpnModel.java
│ │ │ ├── tile/
│ │ │ │ └── AdBlockingTileService.java
│ │ │ ├── ui/
│ │ │ │ ├── Animations.java
│ │ │ │ ├── adblocking/
│ │ │ │ │ └── ApplyConfigurationSnackbar.java
│ │ │ │ ├── adware/
│ │ │ │ │ ├── AdwareFragment.java
│ │ │ │ │ ├── AdwareInstall.java
│ │ │ │ │ ├── AdwareLiveData.java
│ │ │ │ │ └── AdwareViewModel.java
│ │ │ │ ├── dialog/
│ │ │ │ │ ├── AlertDialogValidator.java
│ │ │ │ │ └── MissingAppDialog.java
│ │ │ │ ├── help/
│ │ │ │ │ ├── HelpActivity.java
│ │ │ │ │ └── HelpFragmentHtml.java
│ │ │ │ ├── home/
│ │ │ │ │ ├── HomeActivity.java
│ │ │ │ │ └── HomeViewModel.java
│ │ │ │ ├── hosts/
│ │ │ │ │ ├── HostsSourcesActivity.java
│ │ │ │ │ ├── HostsSourcesAdapter.java
│ │ │ │ │ ├── HostsSourcesFragment.java
│ │ │ │ │ ├── HostsSourcesViewCallback.java
│ │ │ │ │ └── HostsSourcesViewModel.java
│ │ │ │ ├── lists/
│ │ │ │ │ ├── ListsActivity.java
│ │ │ │ │ ├── ListsFilter.java
│ │ │ │ │ ├── ListsFragmentPagerAdapter.java
│ │ │ │ │ ├── ListsViewCallback.java
│ │ │ │ │ ├── ListsViewModel.java
│ │ │ │ │ └── type/
│ │ │ │ │ ├── AbstractListFragment.java
│ │ │ │ │ ├── AllowedHostsFragment.java
│ │ │ │ │ ├── BlockedHostsFragment.java
│ │ │ │ │ ├── ListsAdapter.java
│ │ │ │ │ └── RedirectedHostsFragment.java
│ │ │ │ ├── log/
│ │ │ │ │ ├── LogActivity.java
│ │ │ │ │ ├── LogAdapter.java
│ │ │ │ │ ├── LogEntry.java
│ │ │ │ │ ├── LogEntrySort.java
│ │ │ │ │ ├── LogViewCallback.java
│ │ │ │ │ └── LogViewModel.java
│ │ │ │ ├── prefs/
│ │ │ │ │ ├── PrefsActivity.java
│ │ │ │ │ ├── PrefsBackupRestoreFragment.java
│ │ │ │ │ ├── PrefsMainFragment.java
│ │ │ │ │ ├── PrefsRootFragment.java
│ │ │ │ │ ├── PrefsUpdateFragment.java
│ │ │ │ │ ├── PrefsVpnFragment.java
│ │ │ │ │ └── exclusion/
│ │ │ │ │ ├── ExcludedAppController.java
│ │ │ │ │ ├── PrefsVpnExcludedAppsActivity.java
│ │ │ │ │ ├── UserApp.java
│ │ │ │ │ └── UserAppRecycleViewAdapter.java
│ │ │ │ ├── source/
│ │ │ │ │ └── SourceEditActivity.java
│ │ │ │ ├── support/
│ │ │ │ │ └── SupportActivity.java
│ │ │ │ ├── update/
│ │ │ │ │ ├── CompleteDownloadStatus.java
│ │ │ │ │ ├── DownloadStatus.java
│ │ │ │ │ ├── PendingDownloadStatus.java
│ │ │ │ │ ├── UpdateActivity.java
│ │ │ │ │ └── UpdateViewModel.java
│ │ │ │ └── welcome/
│ │ │ │ ├── WelcomeActivity.java
│ │ │ │ ├── WelcomeFragment.java
│ │ │ │ ├── WelcomeMethodFragment.java
│ │ │ │ ├── WelcomeNavigable.java
│ │ │ │ ├── WelcomePagerAdapter.java
│ │ │ │ ├── WelcomeSupportFragment.java
│ │ │ │ └── WelcomeSyncFragment.java
│ │ │ ├── util/
│ │ │ │ ├── AppExecutors.java
│ │ │ │ ├── Clipboard.java
│ │ │ │ ├── Constants.java
│ │ │ │ ├── RegexUtils.java
│ │ │ │ ├── WebServerUtils.java
│ │ │ │ └── log/
│ │ │ │ ├── ApplicationLog.java
│ │ │ │ └── SentryLog.java
│ │ │ └── vpn/
│ │ │ ├── VpnService.java
│ │ │ ├── VpnServiceControls.java
│ │ │ ├── VpnServiceHeartbeat.java
│ │ │ ├── VpnStatus.java
│ │ │ ├── dns/
│ │ │ │ ├── DnsPacketProxy.java
│ │ │ │ ├── DnsQuery.java
│ │ │ │ ├── DnsQueryQueue.java
│ │ │ │ ├── DnsServerMapper.java
│ │ │ │ ├── DohPacketProxy.java
│ │ │ │ └── Subnet.java
│ │ │ └── worker/
│ │ │ ├── VpnBuilder.java
│ │ │ ├── VpnConnectionMonitor.java
│ │ │ ├── VpnConnectionThrottler.java
│ │ │ ├── VpnNetworkException.java
│ │ │ ├── VpnWatchdog.java
│ │ │ └── VpnWorker.java
│ │ └── res/
│ │ ├── animator/
│ │ │ ├── fragment_close_enter.xml
│ │ │ ├── fragment_close_exit.xml
│ │ │ ├── fragment_open_enter.xml
│ │ │ └── fragment_open_exit.xml
│ │ ├── drawable/
│ │ │ ├── baseline_block_24.xml
│ │ │ ├── baseline_check_24.xml
│ │ │ ├── baseline_clear_all_24.xml
│ │ │ ├── baseline_compare_arrows_24.xml
│ │ │ ├── baseline_edit_24.xml
│ │ │ ├── baseline_favorite_24.xml
│ │ │ ├── baseline_search_24.xml
│ │ │ ├── baseline_sort_by_alpha_24.xml
│ │ │ ├── dot.xml
│ │ │ ├── dot_outline.xml
│ │ │ ├── ic_add_black_24px.xml
│ │ │ ├── ic_add_circle_outline_24dp.xml
│ │ │ ├── ic_brightness_medium_24dp.xml
│ │ │ ├── ic_bug_report_24dp.xml
│ │ │ ├── ic_cloud_off_24dp.xml
│ │ │ ├── ic_collections_bookmark_24dp.xml
│ │ │ ├── ic_error_outline_24dp.xml
│ │ │ ├── ic_get_app_24dp.xml
│ │ │ ├── ic_github_24dp.xml
│ │ │ ├── ic_github_32dp.xml
│ │ │ ├── ic_help_24dp.xml
│ │ │ ├── ic_ipv6_24dp.xml
│ │ │ ├── ic_language_24dp.xml
│ │ │ ├── ic_language_red.xml
│ │ │ ├── ic_list_red.xml
│ │ │ ├── ic_menu_24dp.xml
│ │ │ ├── ic_outline_rule_24.xml
│ │ │ ├── ic_pause_24dp.xml
│ │ │ ├── ic_playlist_add_24dp.xml
│ │ │ ├── ic_record_24dp.xml
│ │ │ ├── ic_remove_circle_outline_24dp.xml
│ │ │ ├── ic_save_24dp.xml
│ │ │ ├── ic_sd_storage_24dp.xml
│ │ │ ├── ic_settings_24dp.xml
│ │ │ ├── ic_settings_backup_restore_24dp.xml
│ │ │ ├── ic_settings_red.xml
│ │ │ ├── ic_superuser_24dp.xml
│ │ │ ├── ic_sync_24dp.xml
│ │ │ ├── ic_vpn_key_24dp.xml
│ │ │ ├── icon_monochrome.xml
│ │ │ ├── logo.xml
│ │ │ ├── notifications_off_24.xml
│ │ │ ├── outline_cloud_upload_24.xml
│ │ │ ├── outline_create_24.xml
│ │ │ ├── outline_delete_24.xml
│ │ │ ├── paypal.xml
│ │ │ └── shadow.xml
│ │ ├── layout/
│ │ │ ├── adware_fragment.xml
│ │ │ ├── checkbox_list_entry.xml
│ │ │ ├── checkbox_list_two_entries.xml
│ │ │ ├── drawer_list_item.xml
│ │ │ ├── help_activity.xml
│ │ │ ├── help_fragment.xml
│ │ │ ├── home_activity.xml
│ │ │ ├── home_content.xml
│ │ │ ├── hosts_content_fragment.xml
│ │ │ ├── hosts_lists_fragment.xml
│ │ │ ├── hosts_sources_activity.xml
│ │ │ ├── hosts_sources_card.xml
│ │ │ ├── hosts_sources_dialog.xml
│ │ │ ├── hosts_sources_fragment.xml
│ │ │ ├── list_two_entries.xml
│ │ │ ├── lists_activity.xml
│ │ │ ├── lists_allowed_dialog.xml
│ │ │ ├── lists_blocked_dialog.xml
│ │ │ ├── lists_fragment.xml
│ │ │ ├── lists_redirected_dialog.xml
│ │ │ ├── log_activity.xml
│ │ │ ├── log_entry.xml
│ │ │ ├── log_redirect_dialog.xml
│ │ │ ├── pref_edittext_dialog.xml
│ │ │ ├── prefs_activity.xml
│ │ │ ├── reboot_dialog.xml
│ │ │ ├── source_edit_activity.xml
│ │ │ ├── support_activity.xml
│ │ │ ├── update_actity.xml
│ │ │ ├── vpn_excluded_app_activity.xml
│ │ │ ├── vpn_excluded_app_entry.xml
│ │ │ ├── welcome_activity.xml
│ │ │ ├── welcome_method_layout.xml
│ │ │ ├── welcome_support_layout.xml
│ │ │ └── welcome_sync_layout.xml
│ │ ├── menu/
│ │ │ ├── checkbox_list_context.xml
│ │ │ ├── home_drawer.xml
│ │ │ ├── list_menu.xml
│ │ │ ├── lists_navigation.xml
│ │ │ ├── log_menu.xml
│ │ │ ├── next_actions.xml
│ │ │ ├── source_edit_menu.xml
│ │ │ └── vpn_excluded_app_menu.xml
│ │ ├── mipmap-anydpi/
│ │ │ ├── icon.xml
│ │ │ ├── icon_round.xml
│ │ │ ├── shortcut_dns_requests.xml
│ │ │ ├── shortcut_preferences.xml
│ │ │ └── shortcut_your_lists.xml
│ │ ├── raw/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-af/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ar/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ast/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-az/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-be/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-bg/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-bn/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ca/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-cs/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-da/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-de/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-el/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-en-rUS/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-eo/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-es/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-es-rMX/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-et/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-eu/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-fa/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-fi/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-fil/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-fr/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-gl/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-hi/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-hr/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-hu/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-in/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-is/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-it/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-iw/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ja/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-km/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ko/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ku/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-lt/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ml/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ms/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-my/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-nb-rNO/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ne/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-nl/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-no/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-pa/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-pl/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ps/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-pt/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-pt-rBR/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ro/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ru/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-si/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-sk/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-sl/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-sq/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-sr/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-sv/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ta/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-th/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-tl/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-tr/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-uk/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ur/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-uz/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-vi/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-zh/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-zh-rTW/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── values/
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── preferences.xml
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_static.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ ├── strings_welcome.xml
│ │ │ └── styles.xml
│ │ ├── values-af/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ar/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ast/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-az/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-be/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-bg/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-bn/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ca/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-cs/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-da/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-de/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-el/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-en-rUS/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-eo/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-es/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-es-rMX/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-et/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-eu/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-fa/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-fi/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-fil/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-fr/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-gl/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-hi/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-hr/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-hu/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-in/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-is/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-it/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-iw/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ja/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-km/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ko/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ku/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-lt/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ml/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ms/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-my/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-nb-rNO/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ne/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-night/
│ │ │ ├── colors.xml
│ │ │ └── styles.xml
│ │ ├── values-nl/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-no/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-pa/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-pl/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ps/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-pt/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-pt-rBR/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ro/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ru/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-si/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-sk/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-sl/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-sq/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-sr/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-sv/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ta/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-th/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-tl/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-tr/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-uk/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ur/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-uz/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-vi/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-zh/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-zh-rTW/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ └── xml/
│ │ ├── list_searchable.xml
│ │ ├── network_security_config.xml
│ │ ├── preferences_backup_restore.xml
│ │ ├── preferences_main.xml
│ │ ├── preferences_root.xml
│ │ ├── preferences_update.xml
│ │ ├── preferences_vpn.xml
│ │ └── shortcuts.xml
│ └── test/
│ └── java/
│ └── org/
│ └── adaway/
│ ├── model/
│ │ ├── git/
│ │ │ └── GitHostsSourceTest.java
│ │ └── source/
│ │ └── SourceLoaderTest.java
│ └── ui/
│ └── log/
│ └── LogEntrySortTest.java
├── build.gradle
├── gradle/
│ ├── libs.versions.toml
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── metadata/
│ ├── af/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ar/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ast/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── az/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── be/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── bg/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── bn/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ca/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── cs/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── da/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── de/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── el/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── en/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── en-US/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── eo/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── es/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── es-MX/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── es-rMX/
│ │ ├── full_description.txt
│ │ └── short_description.txt
│ ├── et/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── eu/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── fa/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── fi/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── fil/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── fr/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── gl/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── he/
│ │ └── short_description.txt
│ ├── hi/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── hr/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── hu/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── id/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── in/
│ │ ├── full_description.txt
│ │ └── short_description.txt
│ ├── is/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── it/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── iw/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ja/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── km/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ko/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ku/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── lt/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ml/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ms/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── my/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── nb-NO/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── nb-rNO/
│ │ ├── full_description.txt
│ │ └── short_description.txt
│ ├── ne/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── nl/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── no/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── pa/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── pl/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ps/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── pt/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── pt-BR/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ro/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ru/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── si/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── sk/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── sl/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── sq/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── sr/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── sv/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ta/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── th/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── tl/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── tr/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── uk/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ur/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── uz/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── vi/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── zh/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── zh-TW/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ └── zh-rTW/
│ ├── full_description.txt
│ └── short_description.txt
├── sentrystub/
│ ├── .gitignore
│ ├── build.gradle
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ └── java/
│ └── io/
│ └── sentry/
│ ├── Breadcrumb.java
│ ├── Integration.java
│ ├── Scope.java
│ ├── ScopeCallback.java
│ ├── Sentry.java
│ ├── SentryLevel.java
│ ├── SentryOptions.java
│ └── android/
│ ├── core/
│ │ └── SentryAndroid.java
│ ├── fragment/
│ │ └── FragmentLifecycleIntegration.java
│ └── timber/
│ └── SentryTimberIntegration.java
├── settings.gradle
├── tcpdump/
│ ├── build.gradle
│ ├── jni/
│ │ ├── Android.mk
│ │ ├── libpcap/
│ │ │ ├── Android.mk
│ │ │ ├── CHANGES
│ │ │ ├── CREDITS
│ │ │ ├── ChmodBPF/
│ │ │ │ ├── ChmodBPF
│ │ │ │ └── StartupParameters.plist
│ │ │ ├── CleanSpec.mk
│ │ │ ├── INSTALL.txt
│ │ │ ├── LICENSE
│ │ │ ├── Makefile-devel-adds
│ │ │ ├── Makefile.in
│ │ │ ├── README
│ │ │ ├── README.Win32
│ │ │ ├── README.aix
│ │ │ ├── README.dag
│ │ │ ├── README.hpux
│ │ │ ├── README.linux
│ │ │ ├── README.macosx
│ │ │ ├── README.septel
│ │ │ ├── README.sita
│ │ │ ├── README.tru64
│ │ │ ├── SUNOS4/
│ │ │ │ ├── nit_if.o.sparc
│ │ │ │ ├── nit_if.o.sun3
│ │ │ │ └── nit_if.o.sun4c.4.0.3c
│ │ │ ├── TODO
│ │ │ ├── VERSION
│ │ │ ├── Win32/
│ │ │ │ ├── Include/
│ │ │ │ │ ├── Gnuc.h
│ │ │ │ │ ├── addrinfo.h
│ │ │ │ │ ├── arpa/
│ │ │ │ │ │ └── nameser.h
│ │ │ │ │ ├── bittypes.h
│ │ │ │ │ ├── cdecl_ext.h
│ │ │ │ │ ├── inetprivate.h
│ │ │ │ │ ├── ip6_misc.h
│ │ │ │ │ ├── net/
│ │ │ │ │ │ ├── if.h
│ │ │ │ │ │ ├── netdb.h
│ │ │ │ │ │ └── paths.h
│ │ │ │ │ └── sockstorage.h
│ │ │ │ ├── Prj/
│ │ │ │ │ ├── libpcap.dsp
│ │ │ │ │ └── libpcap.dsw
│ │ │ │ └── Src/
│ │ │ │ ├── ffs.c
│ │ │ │ ├── gai_strerror.c
│ │ │ │ ├── getaddrinfo.c
│ │ │ │ ├── getnetbynm.c
│ │ │ │ ├── getnetent.c
│ │ │ │ ├── getopt.c
│ │ │ │ ├── getservent.c
│ │ │ │ ├── inet_aton.c
│ │ │ │ ├── inet_net.c
│ │ │ │ └── inet_pton.c
│ │ │ ├── aclocal.m4
│ │ │ ├── arcnet.h
│ │ │ ├── atmuni31.h
│ │ │ ├── bpf/
│ │ │ │ └── net/
│ │ │ │ └── bpf_filter.c
│ │ │ ├── bpf_dump.c
│ │ │ ├── bpf_filter.c
│ │ │ ├── bpf_image.c
│ │ │ ├── chmod_bpf
│ │ │ ├── config.guess
│ │ │ ├── config.h
│ │ │ ├── config.h.in
│ │ │ ├── config.sub
│ │ │ ├── configure
│ │ │ ├── configure.in
│ │ │ ├── dlpisubs.c
│ │ │ ├── dlpisubs.h
│ │ │ ├── doc/
│ │ │ │ ├── pcap.html
│ │ │ │ ├── pcap.txt
│ │ │ │ └── pcap.xml
│ │ │ ├── etherent.c
│ │ │ ├── ethertype.h
│ │ │ ├── fad-getad.c
│ │ │ ├── fad-gifc.c
│ │ │ ├── fad-glifc.c
│ │ │ ├── fad-null.c
│ │ │ ├── fad-sita.c
│ │ │ ├── fad-win32.c
│ │ │ ├── gencode.c
│ │ │ ├── gencode.h
│ │ │ ├── grammar.c
│ │ │ ├── grammar.y
│ │ │ ├── ieee80211.h
│ │ │ ├── inet.c
│ │ │ ├── install-sh
│ │ │ ├── lbl/
│ │ │ │ ├── os-aix4.h
│ │ │ │ ├── os-hpux11.h
│ │ │ │ ├── os-osf4.h
│ │ │ │ ├── os-osf5.h
│ │ │ │ ├── os-solaris2.h
│ │ │ │ ├── os-sunos4.h
│ │ │ │ └── os-ultrix4.h
│ │ │ ├── llc.h
│ │ │ ├── missing/
│ │ │ │ └── snprintf.c
│ │ │ ├── mkdep
│ │ │ ├── msdos/
│ │ │ │ ├── bin2c.c
│ │ │ │ ├── common.dj
│ │ │ │ ├── makefile
│ │ │ │ ├── makefile.dj
│ │ │ │ ├── makefile.wc
│ │ │ │ ├── ndis2.c
│ │ │ │ ├── ndis2.h
│ │ │ │ ├── ndis_0.asm
│ │ │ │ ├── pkt_rx0.asm
│ │ │ │ ├── pkt_rx1.s
│ │ │ │ ├── pktdrvr.c
│ │ │ │ ├── pktdrvr.h
│ │ │ │ └── readme.dos
│ │ │ ├── nametoaddr.c
│ │ │ ├── nlpid.h
│ │ │ ├── optimize.c
│ │ │ ├── org.tcpdump.chmod_bpf.plist
│ │ │ ├── packaging/
│ │ │ │ └── pcap.spec.in
│ │ │ ├── pcap/
│ │ │ │ ├── bluetooth.h
│ │ │ │ ├── bpf.h
│ │ │ │ ├── ipnet.h
│ │ │ │ ├── namedb.h
│ │ │ │ ├── nflog.h
│ │ │ │ ├── pcap.h
│ │ │ │ ├── sll.h
│ │ │ │ ├── usb.h
│ │ │ │ └── vlan.h
│ │ │ ├── pcap-bpf.c
│ │ │ ├── pcap-bpf.h
│ │ │ ├── pcap-bt-linux.c
│ │ │ ├── pcap-bt-linux.h
│ │ │ ├── pcap-bt-monitor-linux.c
│ │ │ ├── pcap-bt-monitor-linux.h
│ │ │ ├── pcap-can-linux.c
│ │ │ ├── pcap-can-linux.h
│ │ │ ├── pcap-canusb-linux.c
│ │ │ ├── pcap-canusb-linux.h
│ │ │ ├── pcap-common.c
│ │ │ ├── pcap-common.h
│ │ │ ├── pcap-config.1
│ │ │ ├── pcap-config.in
│ │ │ ├── pcap-dag.c
│ │ │ ├── pcap-dag.h
│ │ │ ├── pcap-dbus.c
│ │ │ ├── pcap-dbus.h
│ │ │ ├── pcap-dlpi.c
│ │ │ ├── pcap-dos.c
│ │ │ ├── pcap-dos.h
│ │ │ ├── pcap-enet.c
│ │ │ ├── pcap-filter.manmisc.in
│ │ │ ├── pcap-int.h
│ │ │ ├── pcap-libdlpi.c
│ │ │ ├── pcap-linktype.manmisc.in
│ │ │ ├── pcap-linux.c
│ │ │ ├── pcap-namedb.h
│ │ │ ├── pcap-netfilter-linux.c
│ │ │ ├── pcap-netfilter-linux.h
│ │ │ ├── pcap-nit.c
│ │ │ ├── pcap-null.c
│ │ │ ├── pcap-pf.c
│ │ │ ├── pcap-savefile.manfile.in
│ │ │ ├── pcap-septel.c
│ │ │ ├── pcap-septel.h
│ │ │ ├── pcap-sita.c
│ │ │ ├── pcap-sita.h
│ │ │ ├── pcap-sita.html
│ │ │ ├── pcap-snf.c
│ │ │ ├── pcap-snf.h
│ │ │ ├── pcap-snit.c
│ │ │ ├── pcap-snoop.c
│ │ │ ├── pcap-stdinc.h
│ │ │ ├── pcap-tstamp.manmisc.in
│ │ │ ├── pcap-usb-linux.c
│ │ │ ├── pcap-usb-linux.h
│ │ │ ├── pcap-win32.c
│ │ │ ├── pcap.3pcap.in
│ │ │ ├── pcap.c
│ │ │ ├── pcap.h
│ │ │ ├── pcap1.h
│ │ │ ├── pcap_activate.3pcap
│ │ │ ├── pcap_breakloop.3pcap
│ │ │ ├── pcap_can_set_rfmon.3pcap
│ │ │ ├── pcap_close.3pcap
│ │ │ ├── pcap_compile.3pcap.in
│ │ │ ├── pcap_create.3pcap
│ │ │ ├── pcap_datalink.3pcap.in
│ │ │ ├── pcap_datalink_name_to_val.3pcap
│ │ │ ├── pcap_datalink_val_to_name.3pcap
│ │ │ ├── pcap_dump.3pcap
│ │ │ ├── pcap_dump_close.3pcap
│ │ │ ├── pcap_dump_file.3pcap
│ │ │ ├── pcap_dump_flush.3pcap
│ │ │ ├── pcap_dump_ftell.3pcap
│ │ │ ├── pcap_dump_open.3pcap.in
│ │ │ ├── pcap_file.3pcap
│ │ │ ├── pcap_fileno.3pcap
│ │ │ ├── pcap_findalldevs.3pcap
│ │ │ ├── pcap_freecode.3pcap
│ │ │ ├── pcap_get_selectable_fd.3pcap
│ │ │ ├── pcap_get_tstamp_precision.3pcap.in
│ │ │ ├── pcap_geterr.3pcap
│ │ │ ├── pcap_inject.3pcap
│ │ │ ├── pcap_is_swapped.3pcap
│ │ │ ├── pcap_lib_version.3pcap
│ │ │ ├── pcap_list_datalinks.3pcap.in
│ │ │ ├── pcap_list_tstamp_types.3pcap.in
│ │ │ ├── pcap_lookupdev.3pcap
│ │ │ ├── pcap_lookupnet.3pcap
│ │ │ ├── pcap_loop.3pcap
│ │ │ ├── pcap_major_version.3pcap
│ │ │ ├── pcap_next_ex.3pcap
│ │ │ ├── pcap_offline_filter.3pcap
│ │ │ ├── pcap_open_dead.3pcap.in
│ │ │ ├── pcap_open_live.3pcap
│ │ │ ├── pcap_open_offline.3pcap.in
│ │ │ ├── pcap_set_buffer_size.3pcap
│ │ │ ├── pcap_set_datalink.3pcap
│ │ │ ├── pcap_set_immediate_mode.3pcap
│ │ │ ├── pcap_set_promisc.3pcap
│ │ │ ├── pcap_set_rfmon.3pcap
│ │ │ ├── pcap_set_snaplen.3pcap
│ │ │ ├── pcap_set_timeout.3pcap
│ │ │ ├── pcap_set_tstamp_precision.3pcap.in
│ │ │ ├── pcap_set_tstamp_type.3pcap.in
│ │ │ ├── pcap_setdirection.3pcap
│ │ │ ├── pcap_setfilter.3pcap
│ │ │ ├── pcap_setnonblock.3pcap
│ │ │ ├── pcap_snapshot.3pcap
│ │ │ ├── pcap_stats.3pcap
│ │ │ ├── pcap_statustostr.3pcap
│ │ │ ├── pcap_strerror.3pcap
│ │ │ ├── pcap_tstamp_type_name_to_val.3pcap
│ │ │ ├── pcap_tstamp_type_val_to_name.3pcap
│ │ │ ├── ppp.h
│ │ │ ├── runlex.sh
│ │ │ ├── savefile.c
│ │ │ ├── scanner.c
│ │ │ ├── scanner.c.top
│ │ │ ├── scanner.h
│ │ │ ├── scanner.l
│ │ │ ├── sf-pcap-ng.c
│ │ │ ├── sf-pcap-ng.h
│ │ │ ├── sf-pcap.c
│ │ │ ├── sf-pcap.h
│ │ │ ├── sunatmpos.h
│ │ │ ├── tests/
│ │ │ │ ├── BPF/
│ │ │ │ │ ├── 1.txt
│ │ │ │ │ ├── 2.txt
│ │ │ │ │ ├── 3.txt
│ │ │ │ │ ├── 4.txt
│ │ │ │ │ ├── 5.txt
│ │ │ │ │ ├── 6.txt
│ │ │ │ │ └── 7.txt
│ │ │ │ ├── capturetest.c
│ │ │ │ ├── filtertest.c
│ │ │ │ ├── findalldevstest.c
│ │ │ │ ├── nonblocktest.c
│ │ │ │ ├── opentest.c
│ │ │ │ ├── pcap_compile_test.c
│ │ │ │ ├── reactivatetest.c
│ │ │ │ ├── selpolltest.c
│ │ │ │ ├── valgrindtest.c
│ │ │ │ └── visopts.py
│ │ │ ├── tokdefs.h
│ │ │ ├── version.c
│ │ │ └── version.h
│ │ ├── stub/
│ │ │ ├── Android.mk
│ │ │ └── stub.c
│ │ └── tcpdump/
│ │ ├── Android.mk
│ │ ├── CHANGES
│ │ ├── CREDITS
│ │ ├── CleanSpec.mk
│ │ ├── INSTALL.txt
│ │ ├── LICENSE
│ │ ├── Makefile-devel-adds
│ │ ├── Makefile.in
│ │ ├── PLATFORMS
│ │ ├── README
│ │ ├── README.md
│ │ ├── Readme.Win32
│ │ ├── TODO
│ │ ├── VERSION
│ │ ├── aclocal.m4
│ │ ├── addrtoname.c
│ │ ├── addrtoname.h
│ │ ├── af.c
│ │ ├── af.h
│ │ ├── ah.h
│ │ ├── aodv.h
│ │ ├── appletalk.h
│ │ ├── arcnet.h
│ │ ├── atime.awk
│ │ ├── atm.h
│ │ ├── atmuni31.h
│ │ ├── bgp.h
│ │ ├── bootp.h
│ │ ├── bpf_dump.c
│ │ ├── chdlc.h
│ │ ├── checksum.c
│ │ ├── config.guess
│ │ ├── config.h
│ │ ├── config.h.in
│ │ ├── config.sub
│ │ ├── configure
│ │ ├── configure.in
│ │ ├── cpack.c
│ │ ├── cpack.h
│ │ ├── dccp.h
│ │ ├── decnet.h
│ │ ├── decode_prefix.h
│ │ ├── enc.h
│ │ ├── esp.h
│ │ ├── ether.h
│ │ ├── ethertype.h
│ │ ├── extract.h
│ │ ├── fddi.h
│ │ ├── getopt_long.h
│ │ ├── gmpls.c
│ │ ├── gmpls.h
│ │ ├── gmt2local.c
│ │ ├── gmt2local.h
│ │ ├── icmp6.h
│ │ ├── ieee802_11.h
│ │ ├── ieee802_11_radio.h
│ │ ├── igrp.h
│ │ ├── in_cksum.c
│ │ ├── install-sh
│ │ ├── interface.h
│ │ ├── ip.h
│ │ ├── ip6.h
│ │ ├── ipfc.h
│ │ ├── ipnet.h
│ │ ├── ipproto.c
│ │ ├── ipproto.h
│ │ ├── ipsec_doi.h
│ │ ├── ipx.h
│ │ ├── isakmp.h
│ │ ├── l2tp.h
│ │ ├── l2vpn.c
│ │ ├── l2vpn.h
│ │ ├── lane.h
│ │ ├── lbl/
│ │ │ ├── os-osf4.h
│ │ │ ├── os-solaris2.h
│ │ │ ├── os-sunos4.h
│ │ │ └── os-ultrix4.h
│ │ ├── llc.h
│ │ ├── machdep.c
│ │ ├── machdep.h
│ │ ├── makemib
│ │ ├── mib.h
│ │ ├── missing/
│ │ │ ├── addrinfo.h
│ │ │ ├── datalinks.c
│ │ │ ├── dlnames.c
│ │ │ ├── getnameinfo.c
│ │ │ ├── getopt_long.c
│ │ │ ├── inet_aton.c
│ │ │ ├── inet_ntop.c
│ │ │ ├── inet_pton.c
│ │ │ ├── snprintf.c
│ │ │ ├── sockstorage.h
│ │ │ ├── strdup.c
│ │ │ ├── strlcat.c
│ │ │ ├── strlcpy.c
│ │ │ └── strsep.c
│ │ ├── mkdep
│ │ ├── mpls.h
│ │ ├── mptcp.h
│ │ ├── nameser.h
│ │ ├── netbios.h
│ │ ├── netdissect.h
│ │ ├── nfs.h
│ │ ├── nfsfh.h
│ │ ├── nlpid.c
│ │ ├── nlpid.h
│ │ ├── ntp.h
│ │ ├── oakley.h
│ │ ├── openflow.h
│ │ ├── ospf.h
│ │ ├── ospf6.h
│ │ ├── oui.c
│ │ ├── oui.h
│ │ ├── packetdat.awk
│ │ ├── parsenfsfh.c
│ │ ├── pcap-missing.h
│ │ ├── pcap_dump_ftell.c
│ │ ├── pmap_prot.h
│ │ ├── ppi.h
│ │ ├── ppp.h
│ │ ├── print-802_11.c
│ │ ├── print-802_15_4.c
│ │ ├── print-ah.c
│ │ ├── print-ahcp.c
│ │ ├── print-aodv.c
│ │ ├── print-aoe.c
│ │ ├── print-ap1394.c
│ │ ├── print-arcnet.c
│ │ ├── print-arp.c
│ │ ├── print-ascii.c
│ │ ├── print-atalk.c
│ │ ├── print-atm.c
│ │ ├── print-babel.c
│ │ ├── print-beep.c
│ │ ├── print-bfd.c
│ │ ├── print-bgp.c
│ │ ├── print-bootp.c
│ │ ├── print-bt.c
│ │ ├── print-calm-fast.c
│ │ ├── print-carp.c
│ │ ├── print-cdp.c
│ │ ├── print-cfm.c
│ │ ├── print-chdlc.c
│ │ ├── print-cip.c
│ │ ├── print-cnfp.c
│ │ ├── print-dccp.c
│ │ ├── print-decnet.c
│ │ ├── print-dhcp6.c
│ │ ├── print-domain.c
│ │ ├── print-dtp.c
│ │ ├── print-dvmrp.c
│ │ ├── print-eap.c
│ │ ├── print-egp.c
│ │ ├── print-eigrp.c
│ │ ├── print-enc.c
│ │ ├── print-esp.c
│ │ ├── print-ether.c
│ │ ├── print-fddi.c
│ │ ├── print-forces.c
│ │ ├── print-fr.c
│ │ ├── print-frag6.c
│ │ ├── print-ftp.c
│ │ ├── print-geneve.c
│ │ ├── print-geonet.c
│ │ ├── print-gre.c
│ │ ├── print-hsrp.c
│ │ ├── print-http.c
│ │ ├── print-icmp.c
│ │ ├── print-icmp6.c
│ │ ├── print-igmp.c
│ │ ├── print-igrp.c
│ │ ├── print-ip.c
│ │ ├── print-ip6.c
│ │ ├── print-ip6opts.c
│ │ ├── print-ipcomp.c
│ │ ├── print-ipfc.c
│ │ ├── print-ipnet.c
│ │ ├── print-ipx.c
│ │ ├── print-isakmp.c
│ │ ├── print-isoclns.c
│ │ ├── print-juniper.c
│ │ ├── print-krb.c
│ │ ├── print-l2tp.c
│ │ ├── print-lane.c
│ │ ├── print-ldp.c
│ │ ├── print-llc.c
│ │ ├── print-lldp.c
│ │ ├── print-lmp.c
│ │ ├── print-loopback.c
│ │ ├── print-lspping.c
│ │ ├── print-lwapp.c
│ │ ├── print-lwres.c
│ │ ├── print-m3ua.c
│ │ ├── print-mobile.c
│ │ ├── print-mobility.c
│ │ ├── print-mpcp.c
│ │ ├── print-mpls.c
│ │ ├── print-mptcp.c
│ │ ├── print-msdp.c
│ │ ├── print-msnlb.c
│ │ ├── print-netbios.c
│ │ ├── print-nflog.c
│ │ ├── print-nfs.c
│ │ ├── print-ntp.c
│ │ ├── print-null.c
│ │ ├── print-olsr.c
│ │ ├── print-openflow-1.0.c
│ │ ├── print-openflow.c
│ │ ├── print-ospf.c
│ │ ├── print-ospf6.c
│ │ ├── print-otv.c
│ │ ├── print-pflog.c
│ │ ├── print-pgm.c
│ │ ├── print-pim.c
│ │ ├── print-pktap.c
│ │ ├── print-ppi.c
│ │ ├── print-ppp.c
│ │ ├── print-pppoe.c
│ │ ├── print-pptp.c
│ │ ├── print-radius.c
│ │ ├── print-raw.c
│ │ ├── print-rip.c
│ │ ├── print-ripng.c
│ │ ├── print-rpki-rtr.c
│ │ ├── print-rrcp.c
│ │ ├── print-rsvp.c
│ │ ├── print-rt6.c
│ │ ├── print-rtsp.c
│ │ ├── print-rx.c
│ │ ├── print-sctp.c
│ │ ├── print-sflow.c
│ │ ├── print-sip.c
│ │ ├── print-sl.c
│ │ ├── print-sll.c
│ │ ├── print-slow.c
│ │ ├── print-smb.c
│ │ ├── print-smtp.c
│ │ ├── print-snmp.c
│ │ ├── print-stp.c
│ │ ├── print-sunatm.c
│ │ ├── print-sunrpc.c
│ │ ├── print-symantec.c
│ │ ├── print-syslog.c
│ │ ├── print-tcp.c
│ │ ├── print-telnet.c
│ │ ├── print-tftp.c
│ │ ├── print-timed.c
│ │ ├── print-tipc.c
│ │ ├── print-token.c
│ │ ├── print-udld.c
│ │ ├── print-udp.c
│ │ ├── print-usb.c
│ │ ├── print-vjc.c
│ │ ├── print-vqp.c
│ │ ├── print-vrrp.c
│ │ ├── print-vtp.c
│ │ ├── print-vxlan.c
│ │ ├── print-wb.c
│ │ ├── print-zephyr.c
│ │ ├── print-zeromq.c
│ │ ├── route6d.h
│ │ ├── rpc_auth.h
│ │ ├── rpc_msg.h
│ │ ├── rpl.h
│ │ ├── rx.h
│ │ ├── sctpConstants.h
│ │ ├── sctpHeader.h
│ │ ├── send-ack.awk
│ │ ├── setsignal.c
│ │ ├── setsignal.h
│ │ ├── signature.c
│ │ ├── signature.h
│ │ ├── slcompress.h
│ │ ├── slip.h
│ │ ├── sll.h
│ │ ├── smb.h
│ │ ├── smbutil.c
│ │ ├── stime.awk
│ │ ├── strcasecmp.c
│ │ ├── tcp.h
│ │ ├── tcpdump-stdinc.h
│ │ ├── tcpdump.1.in
│ │ ├── tcpdump.c
│ │ ├── telnet.h
│ │ ├── tftp.h
│ │ ├── timed.h
│ │ ├── token.h
│ │ ├── udp.h
│ │ ├── util.c
│ │ ├── version.c
│ │ ├── vfprintf.c
│ │ └── win32/
│ │ ├── Include/
│ │ │ ├── bittypes.h
│ │ │ ├── errno.h
│ │ │ ├── getopt.h
│ │ │ └── w32_fzs.h
│ │ ├── Src/
│ │ │ └── getopt.c
│ │ ├── prj/
│ │ │ ├── GNUmakefile
│ │ │ ├── WinDump.dsp
│ │ │ ├── WinDump.dsw
│ │ │ ├── WinDump.sln
│ │ │ └── WinDump.vcproj
│ │ └── src/
│ │ └── ether_ntohost.c
│ └── src/
│ └── main/
│ └── AndroidManifest.xml
└── webserver/
├── build.gradle
├── jni/
│ ├── Android.mk
│ ├── Application.mk
│ ├── mongoose/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── mongoose.c
│ │ └── mongoose.h
│ ├── stub.c
│ └── webserver.c
└── src/
└── main/
└── AndroidManifest.xml
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/CODEOWNERS
================================================
# General rule for all code base
* @PerfectSlayer
# Translation related files
app/src/main/res/values-*/ @Vankog
app/src/main/res/raw-*/ @Vankog
metadata/android/ @Vankog
.tx/ @Vankog
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: PerfectSlayer # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: # Replace with a single custom sponsorship URL
================================================
FILE: .github/ISSUE_TEMPLATE/app_compatibility.yml
================================================
name: App compatibility
description: Create a report to track third party application compatibility
title: "[app name] compatibility report"
labels: ['specific-app/site-related :iphone:']
body:
- type: checkboxes
attributes:
label: Is there an existing report for this app?
description: Please search to see if an issue already exists for the compatibility issue you encountered.
options:
- label: I have searched the existing issues
required: true
- type: input
attributes:
label: Application Name
description: The application name that have a compatibility issue with AdAway.
placeholder: WhatsApp
validations:
required: true
- type: input
attributes:
label: Application Version
description: The application version that have a compatibility issue with AdAway.
placeholder: 1.12.3
validations:
required: false
- type: textarea
attributes:
label: Compatibility issue
description: A clear and concise description of what the bug is.
validations:
required: true
- type: textarea
attributes:
label: Workaround
description: |
If applicable, describe the whitelist domains to add to fix the issue:
- www.somedomain.com
- *.server.org
Please add tag `workaround-available` if a work around is available.
validations:
required: false
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: Bug report
description: File a bug/issue report
labels: ['bug :bug:']
body:
- type: checkboxes
attributes:
label: Is there an existing issue for this?
description: Please search to see if an issue already exists for the bug you encountered.
options:
- label: I have searched the existing issues
required: true
- type: textarea
attributes:
label: Current Behavior
description: A clear and concise description of what you're experiencing.
validations:
required: true
- type: textarea
attributes:
label: Expected Behavior
description: A clear and concise description of what you expected to happen.
validations:
required: true
- type: textarea
attributes:
label: Steps To Reproduce
description: Steps to reproduce the behavior.
placeholder: |
1. Go to ...
2. Tap on ...
3. Scroll down to ...
4. See error...
validations:
required: false
- type: textarea
attributes:
label: Device Configuration
description: |
Describe your device configuration as precise as possible. For exemple:
- **AdAway version**: 5.1.2
- **Ad-blocker mode**: root or vpn
- **Device**: Pixel 6a
- **Android version**: 12
- **Root version**: Magisk 24.1
value: |
- AdAway version:
- Ad-blocker mode:
- Device:
- Android version:
- Root version:
validations:
required: false
- type: textarea
attributes:
label: Additional context and screenshots
description: |
Add any other context like logcat and screenshots about the problem here.
Use adb logcat if you have developer settings enabled on your device or use any application like [MatLog](https://play.google.com/store/apps/details?id=com.pluscubed.matlog) to save logs.
Include the crash report in the issue in a code block, a file attachment, or put it in a gist and provide link to that gist.
Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
validations:
required: false
================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
labels:
- "github_actions"
- "infrastructure / ops"
commit-message:
prefix: "chore(ci): "
groups:
gh-actions-packages:
patterns:
- "*"
================================================
FILE: .github/workflows/AndroidLocaleChecker.java
================================================
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
import static java.nio.charset.StandardCharsets.UTF_8;
/**
* This class validates Android locale files.
*
* @author Bruce BUJON (bruce.bujon(at)gmail(dot)com)
*/
public class AndroidLocaleChecker {
/**
* The Android resources path.
*/
private static final Path RESOURCES_PATH = Path.of("app/src/main/res/");
/**
* XML file header.
*/
private static final String HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
/**
* Validate Android locale files.
*
* @param args The project files to validate, space-separated.
*/
public static void main(String[] args) {
long patchedFilesCount = Arrays.stream(args)
.map(Path::of)
.filter(AndroidLocaleChecker::isLocalePath)
.filter(Predicate.not(AndroidLocaleChecker::validateLocalePath))
.count();
boolean patchApplied = patchedFilesCount > 0;
if (patchApplied) {
System.out.println(patchedFilesCount + " file(s) patched.");
} else {
System.out.println("No file patched.");
}
System.out.println("::set-output name=patch_applied::" + patchApplied);
}
/**
* Check locale file path.
*
* @param projectFilePath The path to check.
* @return <code>true</code> if the path is a locale file path, <code>false</code> otherwise.
*/
private static boolean isLocalePath(Path projectFilePath) {
try {
Path relativePath = RESOURCES_PATH.relativize(projectFilePath);
Path parent = relativePath.getParent();
return parent.toString().startsWith("values") && relativePath.toString().endsWith(".xml");
} catch (IllegalArgumentException e) {
System.out.println("Skipping file: " + projectFilePath);
}
return false;
}
/**
* Validate an Android locale.
*
* @param localePath The locale path.
*/
private static boolean validateLocalePath(Path localePath) {
try {
System.out.println("Validating " + localePath + ":");
List<String> lines = Files.readAllLines(localePath, UTF_8);
boolean validHeader = validateHeader(lines);
boolean validEllipsis = validateEllipsis(lines);
if (!validHeader || !validEllipsis) {
Files.write(localePath, lines, UTF_8);
System.out.println("- Patched");
return false;
}
return true;
} catch (IOException e) {
System.err.println("Failed to validate locale: " + localePath);
e.printStackTrace();
System.exit(1);
return false;
}
}
private static boolean validateHeader(List<String> lines) {
if (lines.isEmpty()) {
return true;
}
String header = lines.get(0);
if (!header.startsWith("<?xml ")) {
System.err.println("Failed to find header.");
System.exit(1);
}
if (!HEADER.equals(header)) {
System.out.println("- Fixing XML header");
lines.set(0, HEADER);
return false;
}
return true;
}
private static boolean validateEllipsis(List<String> lines) {
boolean valid = true;
for (int i = 0; i < lines.size(); i++) {
String line = lines.get(i);
if (line.contains("...")) {
System.out.println("- Fixing ellipsis in:" + line);
line = line.replaceAll("\\.\\.\\.", "…");
lines.set(i, line);
valid = false;
}
if (line.contains("…")) {
System.out.println("- Fixing ellipsis in:" + line);
line = line.replaceAll("…", "…");
lines.set(i, line);
valid = false;
}
}
return valid;
}
}
================================================
FILE: .github/workflows/android-analysis.yml
================================================
name: "CodeQL"
on:
schedule:
- cron: '0 1 * * 6'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'cpp', 'java' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Use only 'java' to analyze code written in Java, Kotlin or both
# Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
steps:
- name: Checkout repository
uses: actions/checkout@v6
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
- name: set up JDK 21
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: 21
cache: 'gradle'
# Build from command line as Autobuild fails
- run: |
./gradlew assembleRelease
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4
with:
category: "/language:${{matrix.language}}"
================================================
FILE: .github/workflows/android-ci.yml
================================================
name: Android CI
on:
push:
branches:
- master
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: Development build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: set up JDK 21
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: 21
cache: 'gradle'
- name: Restore SonarCloud packages cache
uses: actions/cache@v5
with:
path: ~/.sonar/cache
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar
- name: Run unit tests
run: ./gradlew test --stacktrace
- name: Build with Gradle
run: ./gradlew assembleRelease --stacktrace
# - name: Upload APK
# uses: actions/upload-artifact@v3
# with:
# name: AdAway-dev
# path: app/build/outputs/apk/release/app-release-unsigned.apk
- name: Update dependency graph
uses: mikepenz/gradle-dependency-submission@v1.0.0 # Deprecated: need to be changed
with:
gradle-dependency-path: "app/build.gradle"
gradle-build-module: ":app"
gradle-build-configuration: "releaseCompileClasspath"
- name: Analyze project
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: ./gradlew -Dorg.gradle.jvmargs=-XX:MaxMetaspaceSize=512m sonar
================================================
FILE: .github/workflows/android-locale-check.yml
================================================
name: Android locale validation
on:
pull_request:
branches:
- master
paths:
- 'app/src/main/res/values*/string*.xml'
jobs:
build:
name: Validate locales
runs-on: ubuntu-latest
permissions:
# Give the default GITHUB_TOKEN write permission to commit and push the
# added or changed files to the repository.
contents: write
steps:
- name: Checkout project
uses: actions/checkout@v6
- name: Set up JDK 21
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: 21
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v47.0.1
- name: Validate locale files
id: validation
env:
ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
run: |
cd ${GITHUB_WORKSPACE}
java .github/workflows/AndroidLocaleChecker.java ${ALL_CHANGED_FILES}
- name: Commit patch
uses: stefanzweifel/git-auto-commit-action@v7.1.0
if: steps.validation.outputs.patch_applied == 'true'
with:
message: 'chore(locale): Fix contribution'
================================================
FILE: .github/workflows/issues-checker.yml
================================================
name: Issue checker
on:
issues:
types: [labeled]
jobs:
request-for-bug-context:
name: Request for bug context
runs-on: ubuntu-latest
if: |
github.event.label.name == 'bug :bug:' &&
!contains(github.event.issue.body, 'AdAway version')
steps:
- name: Add context request comment
uses: peter-evans/create-or-update-comment@v5
with:
issue-number: ${{ github.event.issue.number }}
body: |
Hello @${{ github.event.issue.user.login }}
It looks like you report a bug without providing all the context details like the AdAway version you use.
Thanks to update your issue with the most details you can, and use the bug report template instead of free form issue.
Regards
request-app-compat-title-change:
name: Request for application compatibility report title change
runs-on: ubuntu-latest
if: |
github.event.label.name == 'specific-app/site-related :iphone:' &&
github.event.issue.title == '[app name] compatibility report'
steps:
- name: Add title change comment
uses: peter-evans/create-or-update-comment@v5
with:
issue-number: ${{ github.event.issue.number }}
body: |
Hello @${{ github.event.issue.user.login }}
It looks like you left the default report title.
Thanks to update it to with the application name.
Regards
================================================
FILE: .gitignore
================================================
# Android specific
local.properties
# Gradle
.cxx
.externalNativeBuild
.gradle
build
# IntelliJ IDEA
.idea
*.iml
================================================
FILE: .tx/config
================================================
[main]
host = https://www.transifex.com
lang_map = af_ZA: af-rZA, am_ET: am-rET, ar_AE: ar-rAE, ar_BH: ar-rBH, ar_DZ: ar-rDZ, ar_EG: ar-rEG, ar_IQ: ar-rIQ, ar_JO: ar-rJO, ar_KW: ar-rKW, ar_LB: ar-rLB, ar_LY: ar-rLY, ar_MA: ar-rMA, ar_OM: ar-rOM, ar_QA: ar-rQA, ar_SA: ar-rSA, ar_SY: ar-rSY, ar_TN: ar-rTN, ar_YE: ar-rYE, arn_CL: arn-rCL, as_IN: as-rIN, az_AZ: az-rAZ, ba_RU: ba-rRU, be_BY: be-rBY, bg_BG: bg-rBG, bn_BD: bn-rBD, bn_IN: bn-rIN, bo_CN: bo-rCN, br_FR: br-rFR, bs_BA: bs-rBA, ca_ES: ca-rES, co_FR: co-rFR, cs_CZ: cs-rCZ, cy_GB: cy-rGB, da_DK: da-rDK, de_AT: de-rAT, de_CH: de-rCH, de_DE: de-rDE, de_LI: de-rLI, de_LU: de-rLU, dsb_DE: dsb-rDE, dv_MV: dv-rMV, el_GR: el-rGR, en_AU: en-rAU, en_BZ: en-rBZ, en_CA: en-rCA, en_GB: en-rGB, en_IE: en-rIE, en_IN: en-rIN, en_JM: en-rJM, en_MY: en-rMY, en_NZ: en-rNZ, en_PH: en-rPH, en_SG: en-rSG, en_TT: en-rTT, en_US: en-rUS, en_ZA: en-rZA, en_ZW: en-rZW, es_AR: es-rAR, es_BO: es-rBO, es_CL: es-rCL, es_CO: es-rCO, es_CR: es-rCR, es_DO: es-rDO, es_EC: es-rEC, es_ES: es-rES, es_GT: es-rGT, es_HN: es-rHN, es_MX: es-rMX, es_NI: es-rNI, es_PA: es-rPA, es_PE: es-rPE, es_PR: es-rPR, es_PY: es-rPY, es_SV: es-rSV, es_US: es-rUS, es_UY: es-rUY, es_VE: es-rVE, et_EE: et-rEE, eu_ES: eu-rES, fa_IR: fa-rIR, fi_FI: fi-rFI, fil_PH: fil-rPH, fo_FO: fo-rFO, fr_BE: fr-rBE, fr_CA: fr-rCA, fr_CH: fr-rCH, fr_FR: fr-rFR, fr_LU: fr-rLU, fr_MC: fr-rMC, fy_NL: fy-rNL, ga_IE: ga-rIE, gd_GB: gd-rGB, gl_ES: gl-rES, gsw_FR: gsw-rFR, gu_IN: gu-rIN, ha_NG: ha-rNG, hi_IN: hi-rIN, hr_BA: hr-rBA, hr_HR: hr-rHR, hsb_DE: hsb-rDE, hu_HU: hu-rHU, hy_AM: hy-rAM, id_ID: in-rID, ig_NG: ig-rNG, ii_CN: ii-rCN, is_IS: is-rIS, it_CH: it-rCH, it_IT: it-rIT, iu_CA: iu-rCA, ja_JP: ja-rJP, ka_GE: ka-rGE, kk_KZ: kk-rKZ, kl_GL: kl-rGL, km_KH: km-rKH, kn_IN: kn-rIN, ko_KR: ko-rKR, kok_IN: kok-rIN, ky_KG: ky-rKG, lb_LU: lb-rLU, lo_LA: lo-rLA, lt_LT: lt-rLT, lv_LV: lv-rLV, mi_NZ: mi-rNZ, mk_MK: mk-rMK, ml_IN: ml-rIN, mn_CN: mn-rCN, mn_MN: mn-rMN, moh_CA: moh-rCA, mr_IN: mr-rIN, ms_BN: ms-rBN, ms_MY: ms-rMY, mt_MT: mt-rMT, nb_NO: nb-rNO, ne_NP: ne-rNP, nl_BE: nl-rBE, nl_NL: nl-rNL, nn_NO: nn-rNO, nso_ZA: nso-rZA, oc_FR: oc-rFR, or_IN: or-rIN, pa_IN: pa-rIN, pl_PL: pl-rPL, prs_AF: prs-rAF, ps_AF: ps-rAF, pt_BR: pt-rBR, pt_PT: pt-rPT, qut_GT: qut-rGT, quz_BO: quz-rBO, quz_EC: quz-rEC, quz_PE: quz-rPE, rm_CH: rm-rCH, ro_RO: ro-rRO, ru_RU: ru-rRU, rw_RW: rw-rRW, sa_IN: sa-rIN, sah_RU: sah-rRU, se_FI: se-rFI, se_NO: se-rNO, se_SE: se-rSE, si_LK: si-rLK, sk_SK: sk-rSK, sl_SI: sl-rSI, sma_NO: sma-rNO, sma_SE: sma-rSE, smj_NO: smj-rNO, smj_SE: smj-rSE, smn_FI: smn-rFI, sms_FI: sms-rFI, sq_AL: sq-rAL, sr_BA: sr-rBA, sr_CS: sr-rCS, sr_ME: sr-rME, sr_RS: sr-rRS, sv_FI: sv-rFI, sv_SE: sv-rSE, sw_KE: sw-rKE, syr_SY: syr-rSY, ta_IN: ta-rIN, te_IN: te-rIN, tg_TJ: tg-rTJ, th_TH: th-rTH, tk_TM: tk-rTM, tn_ZA: tn-rZA, tr_TR: tr-rTR, tt_RU: tt-rRU, tzm_DZ: tzm-rDZ, ug_CN: ug-rCN, uk_UA: uk-rUA, ur_PK: ur-rPK, uz_UZ: uz-rUZ, vi_VN: vi-rVN, wo_SN: wo-rSN, xh_ZA: xh-rZA, yo_NG: yo-rNG, zh_CN: zh-rCN, zh_HK: zh-rHK, zh_MO: zh-rMO, zh_SG: zh-rSG, zh_TW: zh-rTW, zu_ZA: zu-rZA, no_NO: no-rNO, he_IL: iw-rIL, he: iw, id: in, yi: ji
[adaway.strings-xml--master]
file_filter = app/src/main/res/values-<lang>/strings.xml
minimum_perc = 0
source_file = app/src/main/res/values/strings.xml
source_lang = en
type = ANDROID
[adaway.app-src-main-res-values-strings-app-xml--master]
file_filter = app/src/main/res/values-<lang>/strings_app.xml
minimum_perc = 0
source_file = app/src/main/res/values/strings_app.xml
source_lang = en
type = ANDROID
[adaway.app-src-main-res-values-strings-errors-xml--master]
file_filter = app/src/main/res/values-<lang>/strings_errors.xml
minimum_perc = 0
source_file = app/src/main/res/values/strings_errors.xml
source_lang = en
type = ANDROID
[adaway.app-src-main-res-values-strings-home-xml--master]
file_filter = app/src/main/res/values-<lang>/strings_home.xml
minimum_perc = 0
source_file = app/src/main/res/values/strings_home.xml
source_lang = en
type = ANDROID
[adaway.app-src-main-res-values-strings-hosts-xml--master]
file_filter = app/src/main/res/values-<lang>/strings_hosts.xml
minimum_perc = 0
source_file = app/src/main/res/values/strings_hosts.xml
source_lang = en
type = ANDROID
[adaway.app-src-main-res-values-strings-lists-xml--master]
file_filter = app/src/main/res/values-<lang>/strings_lists.xml
minimum_perc = 0
source_file = app/src/main/res/values/strings_lists.xml
source_lang = en
type = ANDROID
[adaway.app-src-main-res-values-strings-log-xml--master]
file_filter = app/src/main/res/values-<lang>/strings_log.xml
minimum_perc = 0
source_file = app/src/main/res/values/strings_log.xml
source_lang = en
type = ANDROID
[adaway.app-src-main-res-values-strings-notification-xml--master]
file_filter = app/src/main/res/values-<lang>/strings_notification.xml
minimum_perc = 0
source_file = app/src/main/res/values/strings_notification.xml
source_lang = en
type = ANDROID
[adaway.app-src-main-res-values-strings-prefs-backup-restore-xml--master]
file_filter = app/src/main/res/values-<lang>/strings_prefs_backup_restore.xml
minimum_perc = 0
source_file = app/src/main/res/values/strings_prefs_backup_restore.xml
source_lang = en
type = ANDROID
[adaway.app-src-main-res-values-strings-prefs-main-xml--master]
file_filter = app/src/main/res/values-<lang>/strings_prefs_main.xml
minimum_perc = 0
source_file = app/src/main/res/values/strings_prefs_main.xml
source_lang = en
type = ANDROID
[adaway.app-src-main-res-values-strings-prefs-root-xml--master]
file_filter = app/src/main/res/values-<lang>/strings_prefs_root.xml
minimum_perc = 0
source_file = app/src/main/res/values/strings_prefs_root.xml
source_lang = en
type = ANDROID
[adaway.app-src-main-res-values-strings-prefs-update-xml--master]
file_filter = app/src/main/res/values-<lang>/strings_prefs_update.xml
minimum_perc = 0
source_file = app/src/main/res/values/strings_prefs_update.xml
source_lang = en
type = ANDROID
[adaway.app-src-main-res-values-strings-prefs-vpn-xml--master]
file_filter = app/src/main/res/values-<lang>/strings_prefs_vpn.xml
minimum_perc = 0
source_file = app/src/main/res/values/strings_prefs_vpn.xml
source_lang = en
type = ANDROID
[adaway.app-src-main-res-values-strings-source-edit-xml--master]
file_filter = app/src/main/res/values-<lang>/strings_source_edit.xml
minimum_perc = 0
source_file = app/src/main/res/values/strings_source_edit.xml
source_lang = en
type = ANDROID
[adaway.app-src-main-res-values-strings-support-xml--master]
file_filter = app/src/main/res/values-<lang>/strings_support.xml
minimum_perc = 0
source_file = app/src/main/res/values/strings_support.xml
source_lang = en
type = ANDROID
[adaway.app-src-main-res-values-strings-update-xml--master]
file_filter = app/src/main/res/values-<lang>/strings_update.xml
minimum_perc = 0
source_file = app/src/main/res/values/strings_update.xml
source_lang = en
type = ANDROID
[adaway.app-src-main-res-values-strings-welcome-xml--master]
file_filter = app/src/main/res/values-<lang>/strings_welcome.xml
minimum_perc = 0
source_file = app/src/main/res/values/strings_welcome.xml
source_lang = en
type = ANDROID
[adaway.help-faq-html--master]
file_filter = app/src/main/res/raw-<lang>/help_faq.html
minimum_perc = 0
source_file = app/src/main/res/raw/help_faq.html
source_lang = en
type = HTML
[adaway.help-problems-html--master]
file_filter = app/src/main/res/raw-<lang>/help_problems.html
minimum_perc = 0
source_file = app/src/main/res/raw/help_problems.html
source_lang = en
type = HTML
[adaway.help-s-on-s-off-html--master]
file_filter = app/src/main/res/raw-<lang>/help_s_on_s_off.html
minimum_perc = 0
source_file = app/src/main/res/raw/help_s_on_s_off.html
source_lang = en
type = HTML
[adaway.title-txt--master]
file_filter = metadata/<lang>/title.txt
lang_map = af_ZA: af-ZA, am_ET: am-ET, ar_AE: ar-AE, ar_BH: ar-BH, ar_DZ: ar-DZ, ar_EG: ar-EG, ar_IQ: ar-IQ, ar_JO: ar-JO, ar_KW: ar-KW, ar_LB: ar-LB, ar_LY: ar-LY, ar_MA: ar-MA, ar_OM: ar-OM, ar_QA: ar-QA, ar_SA: ar-SA, ar_SY: ar-SY, ar_TN: ar-TN, ar_YE: ar-YE, arn_CL: arn-CL, as_IN: as-IN, az_AZ: az-AZ, ba_RU: ba-RU, be_BY: be-BY, bg_BG: bg-BG, bn_BD: bn-BD, bn_IN: bn-IN, bo_CN: bo-CN, br_FR: br-FR, bs_BA: bs-BA, ca_ES: ca-ES, co_FR: co-FR, cs_CZ: cs-CZ, cy_GB: cy-GB, da_DK: da-DK, de_AT: de-AT, de_CH: de-CH, de_DE: de-DE, de_LI: de-LI, de_LU: de-LU, dsb_DE: dsb-DE, dv_MV: dv-MV, el_GR: el-GR, en_AU: en-AU, en_BZ: en-BZ, en_CA: en-CA, en_GB: en-GB, en_IE: en-IE, en_IN: en-IN, en_JM: en-JM, en_MY: en-MY, en_NZ: en-NZ, en_PH: en-PH, en_SG: en-SG, en_TT: en-TT, en_US: en-US, en_ZA: en-ZA, en_ZW: en-ZW, es_AR: es-AR, es_BO: es-BO, es_CL: es-CL, es_CO: es-CO, es_CR: es-CR, es_DO: es-DO, es_EC: es-EC, es_ES: es-ES, es_GT: es-GT, es_HN: es-HN, es_MX: es-MX, es_NI: es-NI, es_PA: es-PA, es_PE: es-PE, es_PR: es-PR, es_PY: es-PY, es_SV: es-SV, es_US: es-US, es_UY: es-UY, es_VE: es-VE, et_EE: et-EE, eu_ES: eu-ES, fa_IR: fa-IR, fi_FI: fi-FI, fil_PH: fil-PH, fo_FO: fo-FO, fr_BE: fr-BE, fr_CA: fr-CA, fr_CH: fr-CH, fr_FR: fr-FR, fr_LU: fr-LU, fr_MC: fr-MC, fy_NL: fy-NL, ga_IE: ga-IE, gd_GB: gd-GB, gl_ES: gl-ES, gsw_FR: gsw-FR, gu_IN: gu-IN, ha_NG: ha-NG, hi_IN: hi-IN, hr_BA: hr-BA, hr_HR: hr-HR, hsb_DE: hsb-DE, hu_HU: hu-HU, hy_AM: hy-AM, id_ID: in-ID, ig_NG: ig-NG, ii_CN: ii-CN, is_IS: is-IS, it_CH: it-CH, it_IT: it-IT, iu_CA: iu-CA, ja_JP: ja-JP, ka_GE: ka-GE, kk_KZ: kk-KZ, kl_GL: kl-GL, km_KH: km-KH, kn_IN: kn-IN, ko_KR: ko-KR, kok_IN: kok-IN, ky_KG: ky-KG, lb_LU: lb-LU, lo_LA: lo-LA, lt_LT: lt-LT, lv_LV: lv-LV, mi_NZ: mi-NZ, mk_MK: mk-MK, ml_IN: ml-IN, mn_CN: mn-CN, mn_MN: mn-MN, moh_CA: moh-CA, mr_IN: mr-IN, ms_BN: ms-BN, ms_MY: ms-MY, mt_MT: mt-MT, nb_NO: nb-NO, ne_NP: ne-NP, nl_BE: nl-BE, nl_NL: nl-NL, nn_NO: nn-NO, nso_ZA: nso-ZA, oc_FR: oc-FR, or_IN: or-IN, pa_IN: pa-IN, pl_PL: pl-PL, prs_AF: prs-AF, ps_AF: ps-AF, pt_BR: pt-BR, pt_PT: pt-PT, qut_GT: qut-GT, quz_BO: quz-BO, quz_EC: quz-EC, quz_PE: quz-PE, rm_CH: rm-CH, ro_RO: ro-RO, ru_RU: ru-RU, rw_RW: rw-RW, sa_IN: sa-IN, sah_RU: sah-RU, se_FI: se-FI, se_NO: se-NO, se_SE: se-SE, si_LK: si-LK, sk_SK: sk-SK, sl_SI: sl-SI, sma_NO: sma-NO, sma_SE: sma-SE, smj_NO: smj-NO, smj_SE: smj-SE, smn_FI: smn-FI, sms_FI: sms-FI, sq_AL: sq-AL, sr_BA: sr-BA, sr_CS: sr-CS, sr_ME: sr-ME, sr_RS: sr-RS, sv_FI: sv-FI, sv_SE: sv-SE, sw_KE: sw-KE, syr_SY: syr-SY, ta_IN: ta-IN, te_IN: te-IN, tg_TJ: tg-TJ, th_TH: th-TH, tk_TM: tk-TM, tn_ZA: tn-ZA, tr_TR: tr-TR, tt_RU: tt-RU, tzm_DZ: tzm-DZ, ug_CN: ug-CN, uk_UA: uk-UA, ur_PK: ur-PK, uz_UZ: uz-UZ, vi_VN: vi-VN, wo_SN: wo-SN, xh_ZA: xh-ZA, yo_NG: yo-NG, zh_CN: zh-CN, zh_HK: zh-HK, zh_MO: zh-MO, zh_SG: zh-SG, zh_TW: zh-TW, zu_ZA: zu-ZA, no_NO: no-NO, he_IL: iw-IL, he: iw, id: in, yi: ji
minimum_perc = 0
source_file = metadata/en/title.txt
source_lang = en
type = TXT
[adaway.short-description-txt--master]
file_filter = metadata/<lang>/short_description.txt
lang_map = af_ZA: af-ZA, am_ET: am-ET, ar_AE: ar-AE, ar_BH: ar-BH, ar_DZ: ar-DZ, ar_EG: ar-EG, ar_IQ: ar-IQ, ar_JO: ar-JO, ar_KW: ar-KW, ar_LB: ar-LB, ar_LY: ar-LY, ar_MA: ar-MA, ar_OM: ar-OM, ar_QA: ar-QA, ar_SA: ar-SA, ar_SY: ar-SY, ar_TN: ar-TN, ar_YE: ar-YE, arn_CL: arn-CL, as_IN: as-IN, az_AZ: az-AZ, ba_RU: ba-RU, be_BY: be-BY, bg_BG: bg-BG, bn_BD: bn-BD, bn_IN: bn-IN, bo_CN: bo-CN, br_FR: br-FR, bs_BA: bs-BA, ca_ES: ca-ES, co_FR: co-FR, cs_CZ: cs-CZ, cy_GB: cy-GB, da_DK: da-DK, de_AT: de-AT, de_CH: de-CH, de_DE: de-DE, de_LI: de-LI, de_LU: de-LU, dsb_DE: dsb-DE, dv_MV: dv-MV, el_GR: el-GR, en_AU: en-AU, en_BZ: en-BZ, en_CA: en-CA, en_GB: en-GB, en_IE: en-IE, en_IN: en-IN, en_JM: en-JM, en_MY: en-MY, en_NZ: en-NZ, en_PH: en-PH, en_SG: en-SG, en_TT: en-TT, en_US: en-US, en_ZA: en-ZA, en_ZW: en-ZW, es_AR: es-AR, es_BO: es-BO, es_CL: es-CL, es_CO: es-CO, es_CR: es-CR, es_DO: es-DO, es_EC: es-EC, es_ES: es-ES, es_GT: es-GT, es_HN: es-HN, es_MX: es-MX, es_NI: es-NI, es_PA: es-PA, es_PE: es-PE, es_PR: es-PR, es_PY: es-PY, es_SV: es-SV, es_US: es-US, es_UY: es-UY, es_VE: es-VE, et_EE: et-EE, eu_ES: eu-ES, fa_IR: fa-IR, fi_FI: fi-FI, fil_PH: fil-PH, fo_FO: fo-FO, fr_BE: fr-BE, fr_CA: fr-CA, fr_CH: fr-CH, fr_FR: fr-FR, fr_LU: fr-LU, fr_MC: fr-MC, fy_NL: fy-NL, ga_IE: ga-IE, gd_GB: gd-GB, gl_ES: gl-ES, gsw_FR: gsw-FR, gu_IN: gu-IN, ha_NG: ha-NG, hi_IN: hi-IN, hr_BA: hr-BA, hr_HR: hr-HR, hsb_DE: hsb-DE, hu_HU: hu-HU, hy_AM: hy-AM, id_ID: in-ID, ig_NG: ig-NG, ii_CN: ii-CN, is_IS: is-IS, it_CH: it-CH, it_IT: it-IT, iu_CA: iu-CA, ja_JP: ja-JP, ka_GE: ka-GE, kk_KZ: kk-KZ, kl_GL: kl-GL, km_KH: km-KH, kn_IN: kn-IN, ko_KR: ko-KR, kok_IN: kok-IN, ky_KG: ky-KG, lb_LU: lb-LU, lo_LA: lo-LA, lt_LT: lt-LT, lv_LV: lv-LV, mi_NZ: mi-NZ, mk_MK: mk-MK, ml_IN: ml-IN, mn_CN: mn-CN, mn_MN: mn-MN, moh_CA: moh-CA, mr_IN: mr-IN, ms_BN: ms-BN, ms_MY: ms-MY, mt_MT: mt-MT, nb_NO: nb-NO, ne_NP: ne-NP, nl_BE: nl-BE, nl_NL: nl-NL, nn_NO: nn-NO, nso_ZA: nso-ZA, oc_FR: oc-FR, or_IN: or-IN, pa_IN: pa-IN, pl_PL: pl-PL, prs_AF: prs-AF, ps_AF: ps-AF, pt_BR: pt-BR, pt_PT: pt-PT, qut_GT: qut-GT, quz_BO: quz-BO, quz_EC: quz-EC, quz_PE: quz-PE, rm_CH: rm-CH, ro_RO: ro-RO, ru_RU: ru-RU, rw_RW: rw-RW, sa_IN: sa-IN, sah_RU: sah-RU, se_FI: se-FI, se_NO: se-NO, se_SE: se-SE, si_LK: si-LK, sk_SK: sk-SK, sl_SI: sl-SI, sma_NO: sma-NO, sma_SE: sma-SE, smj_NO: smj-NO, smj_SE: smj-SE, smn_FI: smn-FI, sms_FI: sms-FI, sq_AL: sq-AL, sr_BA: sr-BA, sr_CS: sr-CS, sr_ME: sr-ME, sr_RS: sr-RS, sv_FI: sv-FI, sv_SE: sv-SE, sw_KE: sw-KE, syr_SY: syr-SY, ta_IN: ta-IN, te_IN: te-IN, tg_TJ: tg-TJ, th_TH: th-TH, tk_TM: tk-TM, tn_ZA: tn-ZA, tr_TR: tr-TR, tt_RU: tt-RU, tzm_DZ: tzm-DZ, ug_CN: ug-CN, uk_UA: uk-UA, ur_PK: ur-PK, uz_UZ: uz-UZ, vi_VN: vi-VN, wo_SN: wo-SN, xh_ZA: xh-ZA, yo_NG: yo-NG, zh_CN: zh-CN, zh_HK: zh-HK, zh_MO: zh-MO, zh_SG: zh-SG, zh_TW: zh-TW, zu_ZA: zu-ZA, no_NO: no-NO, he_IL: iw-IL, he: iw, id: in, yi: ji
minimum_perc = 0
source_file = metadata/en/short_description.txt
source_lang = en
type = TXT
[adaway.full-description-txt--master]
file_filter = metadata/<lang>/full_description.txt
lang_map = af_ZA: af-ZA, am_ET: am-ET, ar_AE: ar-AE, ar_BH: ar-BH, ar_DZ: ar-DZ, ar_EG: ar-EG, ar_IQ: ar-IQ, ar_JO: ar-JO, ar_KW: ar-KW, ar_LB: ar-LB, ar_LY: ar-LY, ar_MA: ar-MA, ar_OM: ar-OM, ar_QA: ar-QA, ar_SA: ar-SA, ar_SY: ar-SY, ar_TN: ar-TN, ar_YE: ar-YE, arn_CL: arn-CL, as_IN: as-IN, az_AZ: az-AZ, ba_RU: ba-RU, be_BY: be-BY, bg_BG: bg-BG, bn_BD: bn-BD, bn_IN: bn-IN, bo_CN: bo-CN, br_FR: br-FR, bs_BA: bs-BA, ca_ES: ca-ES, co_FR: co-FR, cs_CZ: cs-CZ, cy_GB: cy-GB, da_DK: da-DK, de_AT: de-AT, de_CH: de-CH, de_DE: de-DE, de_LI: de-LI, de_LU: de-LU, dsb_DE: dsb-DE, dv_MV: dv-MV, el_GR: el-GR, en_AU: en-AU, en_BZ: en-BZ, en_CA: en-CA, en_GB: en-GB, en_IE: en-IE, en_IN: en-IN, en_JM: en-JM, en_MY: en-MY, en_NZ: en-NZ, en_PH: en-PH, en_SG: en-SG, en_TT: en-TT, en_US: en-US, en_ZA: en-ZA, en_ZW: en-ZW, es_AR: es-AR, es_BO: es-BO, es_CL: es-CL, es_CO: es-CO, es_CR: es-CR, es_DO: es-DO, es_EC: es-EC, es_ES: es-ES, es_GT: es-GT, es_HN: es-HN, es_MX: es-MX, es_NI: es-NI, es_PA: es-PA, es_PE: es-PE, es_PR: es-PR, es_PY: es-PY, es_SV: es-SV, es_US: es-US, es_UY: es-UY, es_VE: es-VE, et_EE: et-EE, eu_ES: eu-ES, fa_IR: fa-IR, fi_FI: fi-FI, fil_PH: fil-PH, fo_FO: fo-FO, fr_BE: fr-BE, fr_CA: fr-CA, fr_CH: fr-CH, fr_FR: fr-FR, fr_LU: fr-LU, fr_MC: fr-MC, fy_NL: fy-NL, ga_IE: ga-IE, gd_GB: gd-GB, gl_ES: gl-ES, gsw_FR: gsw-FR, gu_IN: gu-IN, ha_NG: ha-NG, hi_IN: hi-IN, hr_BA: hr-BA, hr_HR: hr-HR, hsb_DE: hsb-DE, hu_HU: hu-HU, hy_AM: hy-AM, id_ID: in-ID, ig_NG: ig-NG, ii_CN: ii-CN, is_IS: is-IS, it_CH: it-CH, it_IT: it-IT, iu_CA: iu-CA, ja_JP: ja-JP, ka_GE: ka-GE, kk_KZ: kk-KZ, kl_GL: kl-GL, km_KH: km-KH, kn_IN: kn-IN, ko_KR: ko-KR, kok_IN: kok-IN, ky_KG: ky-KG, lb_LU: lb-LU, lo_LA: lo-LA, lt_LT: lt-LT, lv_LV: lv-LV, mi_NZ: mi-NZ, mk_MK: mk-MK, ml_IN: ml-IN, mn_CN: mn-CN, mn_MN: mn-MN, moh_CA: moh-CA, mr_IN: mr-IN, ms_BN: ms-BN, ms_MY: ms-MY, mt_MT: mt-MT, nb_NO: nb-NO, ne_NP: ne-NP, nl_BE: nl-BE, nl_NL: nl-NL, nn_NO: nn-NO, nso_ZA: nso-ZA, oc_FR: oc-FR, or_IN: or-IN, pa_IN: pa-IN, pl_PL: pl-PL, prs_AF: prs-AF, ps_AF: ps-AF, pt_BR: pt-BR, pt_PT: pt-PT, qut_GT: qut-GT, quz_BO: quz-BO, quz_EC: quz-EC, quz_PE: quz-PE, rm_CH: rm-CH, ro_RO: ro-RO, ru_RU: ru-RU, rw_RW: rw-RW, sa_IN: sa-IN, sah_RU: sah-RU, se_FI: se-FI, se_NO: se-NO, se_SE: se-SE, si_LK: si-LK, sk_SK: sk-SK, sl_SI: sl-SI, sma_NO: sma-NO, sma_SE: sma-SE, smj_NO: smj-NO, smj_SE: smj-SE, smn_FI: smn-FI, sms_FI: sms-FI, sq_AL: sq-AL, sr_BA: sr-BA, sr_CS: sr-CS, sr_ME: sr-ME, sr_RS: sr-RS, sv_FI: sv-FI, sv_SE: sv-SE, sw_KE: sw-KE, syr_SY: syr-SY, ta_IN: ta-IN, te_IN: te-IN, tg_TJ: tg-TJ, th_TH: th-TH, tk_TM: tk-TM, tn_ZA: tn-ZA, tr_TR: tr-TR, tt_RU: tt-RU, tzm_DZ: tzm-DZ, ug_CN: ug-CN, uk_UA: uk-UA, ur_PK: ur-PK, uz_UZ: uz-UZ, vi_VN: vi-VN, wo_SN: wo-SN, xh_ZA: xh-ZA, yo_NG: yo-NG, zh_CN: zh-CN, zh_HK: zh-HK, zh_MO: zh-MO, zh_SG: zh-SG, zh_TW: zh-TW, zu_ZA: zu-ZA, no_NO: no-NO, he_IL: iw-IL, he: iw, id: in, yi: ji
minimum_perc = 0
source_file = metadata/en/full_description.txt
source_lang = en
type = TXT
================================================
FILE: .tx/github-integration.yaml
================================================
filters:
- filter_type: file
source_file: app/src/main/res/values/strings.xml
file_format: ANDROID
source_language: en
translation_files_expression: 'app/src/main/res/values-<lang>/strings.xml'
- filter_type: file
source_file: app/src/main/res/values/strings_app.xml
file_format: ANDROID
source_language: en
translation_files_expression: 'app/src/main/res/values-<lang>/strings_app.xml'
- filter_type: file
source_file: app/src/main/res/values/strings_errors.xml
file_format: ANDROID
source_language: en
translation_files_expression: 'app/src/main/res/values-<lang>/strings_errors.xml'
- filter_type: file
source_file: app/src/main/res/values/strings_home.xml
file_format: ANDROID
source_language: en
translation_files_expression: 'app/src/main/res/values-<lang>/strings_home.xml'
- filter_type: file
source_file: app/src/main/res/values/strings_hosts.xml
file_format: ANDROID
source_language: en
translation_files_expression: 'app/src/main/res/values-<lang>/strings_hosts.xml'
- filter_type: file
source_file: app/src/main/res/values/strings_lists.xml
file_format: ANDROID
source_language: en
translation_files_expression: 'app/src/main/res/values-<lang>/strings_lists.xml'
- filter_type: file
source_file: app/src/main/res/values/strings_log.xml
file_format: ANDROID
source_language: en
translation_files_expression: 'app/src/main/res/values-<lang>/strings_log.xml'
- filter_type: file
source_file: app/src/main/res/values/strings_notification.xml
file_format: ANDROID
source_language: en
translation_files_expression: 'app/src/main/res/values-<lang>/strings_notification.xml'
- filter_type: file
source_file: app/src/main/res/values/strings_prefs_backup_restore.xml
file_format: ANDROID
source_language: en
translation_files_expression: 'app/src/main/res/values-<lang>/strings_prefs_backup_restore.xml'
- filter_type: file
source_file: app/src/main/res/values/strings_prefs_main.xml
file_format: ANDROID
source_language: en
translation_files_expression: 'app/src/main/res/values-<lang>/strings_prefs_main.xml'
- filter_type: file
source_file: app/src/main/res/values/strings_prefs_root.xml
file_format: ANDROID
source_language: en
translation_files_expression: 'app/src/main/res/values-<lang>/strings_prefs_root.xml'
- filter_type: file
source_file: app/src/main/res/values/strings_prefs_update.xml
file_format: ANDROID
source_language: en
translation_files_expression: 'app/src/main/res/values-<lang>/strings_prefs_update.xml'
- filter_type: file
source_file: app/src/main/res/values/strings_prefs_vpn.xml
file_format: ANDROID
source_language: en
translation_files_expression: 'app/src/main/res/values-<lang>/strings_prefs_vpn.xml'
- filter_type: file
source_file: app/src/main/res/values/strings_source_edit.xml
file_format: ANDROID
source_language: en
translation_files_expression: 'app/src/main/res/values-<lang>/strings_source_edit.xml'
- filter_type: file
source_file: app/src/main/res/values/strings_support.xml
file_format: ANDROID
source_language: en
translation_files_expression: 'app/src/main/res/values-<lang>/strings_support.xml'
- filter_type: file
source_file: app/src/main/res/values/strings_update.xml
file_format: ANDROID
source_language: en
translation_files_expression: 'app/src/main/res/values-<lang>/strings_update.xml'
- filter_type: file
source_file: app/src/main/res/values/strings_welcome.xml
file_format: ANDROID
source_language: en
translation_files_expression: 'app/src/main/res/values-<lang>/strings_welcome.xml'
- filter_type: file
source_file: app/src/main/res/raw/help_faq.html
file_format: HTML
source_language: en
translation_files_expression: 'app/src/main/res/raw-<lang>/help_faq.html'
- filter_type: file
source_file: app/src/main/res/raw/help_problems.html
file_format: HTML
source_language: en
translation_files_expression: 'app/src/main/res/raw-<lang>/help_problems.html'
- filter_type: file
source_file: app/src/main/res/raw/help_s_on_s_off.html
file_format: HTML
source_language: en
translation_files_expression: 'app/src/main/res/raw-<lang>/help_s_on_s_off.html'
- filter_type: file
source_file: metadata/en/title.txt
file_format: TXT
source_language: en
translation_files_expression: 'metadata/<lang>/title.txt'
- filter_type: file
source_file: metadata/en/short_description.txt
file_format: TXT
source_language: en
translation_files_expression: 'metadata/<lang>/short_description.txt'
- filter_type: file
source_file: metadata/en/full_description.txt
file_format: TXT
source_language: en
translation_files_expression: 'metadata/<lang>/full_description.txt'
settings:
language_mapping:
am_ET: am-rET
ar_AE: ar-rAE
ar_BH: ar-rBH
ar_DZ: ar-rDZ
ar_EG: ar-rEG
ar_IQ: ar-rIQ
ar_JO: ar-rJO
ar_KW: ar-rKW
ar_LB: ar-rLB
ar_LY: ar-rLY
ar_MA: ar-rMA
ar_OM: ar-rOM
ar_QA: ar-rQA
ar_SA: ar-rSA
ar_SY: ar-rSY
ar_TN: ar-rTN
ar_YE: ar-rYE
arn_CL: arn-rCL
as_IN: as-rIN
az_AZ: az-rAZ
ba_RU: ba-rRU
be_BY: be-rBY
bg_BG: bg-rBG
bn_BD: bn-rBD
bn_IN: bn-rIN
bo_CN: bo-rCN
br_FR: br-rFR
bs_BA: bs-rBA
ca_ES: ca-rES
co_FR: co-rFR
cs_CZ: cs-rCZ
cy_GB: cy-rGB
da_DK: da-rDK
de_AT: de-rAT
de_CH: de-rCH
de_DE: de-rDE
de_LI: de-rLI
de_LU: de-rLU
dsb_DE: dsb-rDE
dv_MV: dv-rMV
el_GR: el-rGR
en_AU: en-rAU
en_BZ: en-rBZ
en_CA: en-rCA
en_GB: en-rGB
en_IE: en-rIE
en_IN: en-rIN
en_JM: en-rJM
en_MY: en-rMY
en_NZ: en-rNZ
en_PH: en-rPH
en_SG: en-rSG
en_TT: en-rTT
en_US: en-rUS
en_ZA: en-rZA
en_ZW: en-rZW
es_AR: es-rAR
es_BO: es-rBO
es_CL: es-rCL
es_CO: es-rCO
es_CR: es-rCR
es_DO: es-rDO
es_EC: es-rEC
es_ES: es-rES
es_GT: es-rGT
es_HN: es-rHN
es_MX: es-rMX
es_NI: es-rNI
es_PA: es-rPA
es_PE: es-rPE
es_PR: es-rPR
es_PY: es-rPY
es_SV: es-rSV
es_US: es-rUS
es_UY: es-rUY
es_VE: es-rVE
et_EE: et-rEE
eu_ES: eu-rES
fa_IR: fa-rIR
fi_FI: fi-rFI
fil_PH: fil-rPH
fo_FO: fo-rFO
fr_BE: fr-rBE
fr_CA: fr-rCA
fr_CH: fr-rCH
fr_FR: fr-rFR
fr_LU: fr-rLU
fr_MC: fr-rMC
fy_NL: fy-rNL
ga_IE: ga-rIE
gd_GB: gd-rGB
gl_ES: gl-rES
gsw_FR: gsw-rFR
gu_IN: gu-rIN
ha_NG: ha-rNG
he_IL: iw-rIL
he: iw
hi_IN: hi-rIN
hr_BA: hr-rBA
hr_HR: hr-rHR
hsb_DE: hsb-rDE
hu_HU: hu-rHU
hy_AM: hy-rAM
id_ID: in-rID
id: in
ig_NG: ig-rNG
ii_CN: ii-rCN
is_IS: is-rIS
it_CH: it-rCH
it_IT: it-rIT
iu_CA: iu-rCA
ja_JP: ja-rJP
ka_GE: ka-rGE
kk_KZ: kk-rKZ
kl_GL: kl-rGL
km_KH: km-rKH
kn_IN: kn-rIN
ko_KR: ko-rKR
kok_IN: kok-rIN
ky_KG: ky-rKG
lb_LU: lb-rLU
lo_LA: lo-rLA
lt_LT: lt-rLT
lv_LV: lv-rLV
mi_NZ: mi-rNZ
mk_MK: mk-rMK
ml_IN: ml-rIN
mn_CN: mn-rCN
mn_MN: mn-rMN
moh_CA: moh-rCA
mr_IN: mr-rIN
ms_BN: ms-rBN
ms_MY: ms-rMY
mt_MT: mt-rMT
nb_NO: nb-rNO
ne_NP: ne-rNP
nl_BE: nl-rBE
nl_NL: nl-rNL
nn_NO: nn-rNO
no_NO: no-rNO
nso_ZA: nso-rZA
oc_FR: oc-rFR
or_IN: or-rIN
pa_IN: pa-rIN
pl_PL: pl-rPL
prs_AF: prs-rAF
ps_AF: ps-rAF
pt_BR: pt-rBR
pt_PT: pt-rPT
qut_GT: qut-rGT
quz_BO: quz-rBO
quz_EC: quz-rEC
quz_PE: quz-rPE
rm_CH: rm-rCH
ro_RO: ro-rRO
ru_RU: ru-rRU
rw_RW: rw-rRW
sa_IN: sa-rIN
sah_RU: sah-rRU
se_FI: se-rFI
se_NO: se-rNO
se_SE: se-rSE
si_LK: si-rLK
sk_SK: sk-rSK
sl_SI: sl-rSI
sma_NO: sma-rNO
sma_SE: sma-rSE
smj_NO: smj-rNO
smj_SE: smj-rSE
smn_FI: smn-rFI
sms_FI: sms-rFI
sq_AL: sq-rAL
sr_BA: sr-rBA
sr_CS: sr-rCS
sr_ME: sr-rME
sr_RS: sr-rRS
sv_FI: sv-rFI
sv_SE: sv-rSE
sw_KE: sw-rKE
syr_SY: syr-rSY
ta_IN: ta-rIN
te_IN: te-rIN
tg_TJ: tg-rTJ
th_TH: th-rTH
tk_TM: tk-rTM
tn_ZA: tn-rZA
tr_TR: tr-rTR
tt_RU: tt-rRU
tzm_DZ: tzm-rDZ
ug_CN: ug-rCN
uk_UA: uk-rUA
ur_PK: ur-rPK
uz_UZ: uz-rUZ
vi_VN: vi-rVN
wo_SN: wo-rSN
xh_ZA: xh-rZA
yi: ji
yo_NG: yo-rNG
zh_CN: zh-rCN
zh_HK: zh-rHK
zh_MO: zh-rMO
zh_SG: zh-rSG
zh_TW: zh-rTW
zu_ZA: zu-rZA
================================================
FILE: CHANGELOG.md
================================================
# Changelog
## [6.1.5] - Unreleased
- Add always-on VPN detection during setup
- Improve web signal handling and OOM killer
- Update mongoose web server
- Update Android gradle plugin
- Update NDK
Special thanks to El-Virus, Fry-kun for its contribution.
## [6.1.4] - 2024-10-27
- Renew web server TLS certificate
- Update Android gradle plugin
Special thanks to masudscloud for its bug report.
## [6.1.3] - 2024-07-06
- Fix mongoose web server
- Update translations
Special thanks to mbangi for its bug report.
## [6.1.2] - 2024-06-17
- Fix VPN restart on network interface change
- Fix crash when update is instantly download
- Update mongoose web server
- Update third party libraries
- Update Android gradle plugin
- Update translations
Special thanks to @Fs00 and @gallegonovato for their bug reports.
## [6.1.1] - 2023-06-20
- Improve adaptive launcher icon
- Update AndroidX libraries
- Update third party libraries
- Update libsu
- Update mongoose web server
- Update Android gradle plugin
- Update build tools
- Update translations
Special thanks to AzusaHana for its contribution.
## [6.1.0] - 2023-03-26
- Add adaptive launcher icon
- Add POST_NOTIFCATIONS runtime permission support
- Improve settings UI
- Update target SDK to Android 13
- Update libsu
- Update mongoose web server
- Update AndroidX libraries
- Update third party libraries
- Update Android gradle plugin
- Update NDK
## [6.0.3] - 2022-07-25
- Improve hosts source cache to reduce bandwidth usage
- Improve GitHub API usage to reduce bandwidth usage
- Update AndroidX libraries
- Update translations
Special thanks to yoshimo for its bug report.
## [6.0.2] - 2022-06-16
*This version is a pre-release*
- Fix wizard ad-block method check
- Update translations
Special thanks to Dandu32, ipdev and zhmstar0310 for their bug reports.
## [6.0.1] - 2022-06-03
*This version is a pre-release*
- Improve screen rotation handling on home screen
- Update libsu
- Update mongoose web server
- Update Android gradle plugin
- Update third party libraries
- Update translations
Special thanks to kubalav and zgfg for their bug reports.
## [6.0.0] - 2022-05-18
*This version is a pre-release*
- Add a new VPN ad-blocker implementation
- Add initial DOH (DNS Over HTTPS) support
- Add VPN connection monitor, heartbeat and throttler to improve reliability
- Add long press action to copy hostname from user lists and DNS log to clipboard
- Fix VPN state on network connectivity change and lost
- Fix VPN restart when system kills it
- Fix wrong DNS read on VPN restart
- Fix VPN unwanted restart while paused
- Fix crash on application update unknown size
- Improve VPN user control reliability
- Update logging system
- Update libsu
- Update Android gradle plugin
- Update AndroidX libraries
- Update NDK
- Update third party libraries
## [5.12.1] - 2022-05-14
- Fix hosts file install on Android 13
Special thanks to AAGaming00 and KieronQuinn for their bug reports.
## [5.12.0] - 2022-02-28
- Implement key-value pairs backup service support
- Improve VPN application exclusion UI
- Update AndroidX libraries
- Update mongoose web server
- Update translations
- Update gradle
- Update build tools
## [5.11.0] - 2021-12-20
- Improve home screen with icon color and decoration
- Improve settings UI elements
- Improve search filter performance in hosts list
- Improve resource clean up after parsing hosts source
- Improve logs with Timber
- Improve button descriptions
- Update Android gradle plugin
- Update AndroidX libraries
- Update third party libraries
- Update mongoose web server
- Update translations
Special thanks to brijrajparmar27 for its contribution.
## [5.10.0] - 2021-12-01
- Fix connectivity change detection in VPN mode
- Update mongoose web server
- Update target SDK to Android 12
- Update dependencies
- Update translations
Special thanks to 8asuj6m2 for its contribution.
## [5.9.0] - 2021-11-05
- Improve update activity to add support links and open from notification
- Update web server certificate to comply with maximum validity time
- Update dependencies
- Update Android gradle plugin
- Update NDK
Special thanks to rany2 for its bug report.
## [5.8.0] - 2021-08-08
- Improve command receiver for task automation
- Update mongoose web server
- Update dependencies
- Update Android gradle plugin
- Update translations
Special thanks to Faedelity for its bug report.
## [5.7.0] - 2021-06-27
- Add quick settings tile to toggle ad-blocking
- Fix crash on TLS and timeout issue during source update
- Fix backup not listed for restoration on older devices
- Update dependencies
- Update translations
Special thanks to gwolf2u, opusforlife2, Vstory for their bug reports.
## [5.6.0] - 2021-04-30
- Improve navigation by moving DNS logs to home screen
- Improve DNS logs usage by explaining usage and limitation
- Update dependencies
- Update translations
## [5.5.1] - 2021-04-02
- Add redirection validation
- Improve application update screen
- Update Android gradle plugin
- Update NDK
- Update dependencies
- Fix VPN crash when the only system DNS server available uses IPv6 and IPv6 is disabled from settings
- Remove html-textview dependency and jcenter repository
Special thanks to FrostbiterTy, SapphireExile, zgfg for their bug reports.
## [5.5.0] - 2021-03-17
- Add allow list support
- Improve source edition UI
- Improve source update check
- Improve animations
- Update mongoose web server
- Update dependencies
- Fix web server TLS issue
Special thanks to gallegonovato, jawz101 and zgfg for their bug reports.
## [5.4.0] - 2021-02-28
- Add VPN monitor option to prevent disconnection
- Update source update status indicator
- Update Android gradle plugin
- Update Sentry DSN to support older TLS versions
- Update mongoose web server
- Update dependencies
- Fix welcome screen telemetry preference
- Fix VPN authorization check at startup
Special thanks to BearTM, elvissteinjr, ipdev99, patkarmandar, RobBeyer for their bug reports.
## [5.3.0] - 2021-01-17
- Add new unique source parser with parallel processing
- Add an option to disable app update check at startup
- Fix crash with source file when SAF permission is removed
- Fix metered status vpn on Android 11
Special thanks to andy356, fusionneur and sr1canskhsia for their bug reports.
## [5.2.1] - 2021-01-06
- Fix F-Droid store detection
Special thanks to TheLonelyGhost, bdtipsntricks, faraz-b bege10, Nathan-Nesbitt and gallegonovato for their bug reports.
## [5.2.0] - 2021-01-03
- Add beta channel opt-in preferences
- Update mongoose to latest stable version and rewrite web server
- Update source parser to prevent stack overflow
- Update dependencies
- Update build tools
- Update NDK
- Update translations
## [5.1.0] - 2020-11-12
- Add application update UI
- Add F-Droid apk support to built-in updater
- Add custom hosts file parser for big hosts file (1M+ entries, way slower but memory friendly)
- Fix VPN app exclusion on Android 11
- Update AndroidX and Sentry dependencies
- Update translations
Special thanks to spiou, drothenberger and gallegonovato for their bug reports.
## [5.0.10] - 2020-10-10
*This version is a pre-release*
- Fix online modification date for unavailable source
- Prevent missing url at source creation
- Prevent invalid source url to be restored
- Fix web server certificate install on Android 11
Special thanks to zgfg, ipdev99 and ingenium13 for their bug reports.
## [5.0.9] - 2020-09-13
*This version is a pre-release*
- Fix no hosts to block from 4.x to 5.x migration
- Fix wrong source type in source edition UI
- Update AndroidX dependencies
- Update mongoose web server
Special thanks to auanasgheps, lukjod, ridobe, sacrificialpawn for their bug reports.
## [5.0.8] - 2020-08-30
*This version is a pre-release*
- Fix source not updated on automatic update
- Fix user list not sync until source update
- Update hosts source creation to disable allowed hosts by default
- Update AndroidX dependencies
Special thanks to jeanrivera for its bug report.
## [5.0.7] - 2020-08-16
*This version is a pre-release*
- Add hosts sources Storage Access Framework support
- Add hosts sources label and host counter
- Improve host sources list and edition UI
- Improve allowed and redirected hosts settings by applying them per source
- Fix file based hosts sources not installed due to missing permission
- Update AndroidX dependencies
Special thanks to zgfg for its bug report.
## [5.0.6] - 2020-08-02
*This version is a pre-release*
- Fix crash on domain enable/disable action
- Fix source not applied if disabled and enabled back
- Update target SDK to Android 11
Special thanks to ipdev99 and zgfg for their bug reports.
## [5.0.5] - 2020-06-28
*This version is a pre-release*
- Improve hosts source server handling with future time
- Improve hosts update by skipping already up-to-date sources
- Fix hosts source disable action
- Fix hosts list apply notification from non-user changes
- Fix user excluded application settings
- Remove navigation bar color customization
- Update AndroidX dependencies and NDK version
Special thanks to CobalTitan, ipdev99, zgfg and sunmybun for their bug reports.
## [4.3.5] - 2020-06-27
- Fix project Fastlane description for F-Droid store
Special thanks to linsui and IzzySoft for their bug reports and Vankog for translations.
## [5.0.4] - 2020-05-24
*This version is a pre-release*
- Improve overall host list computation
- Add host redirected feature in VPN ad blocking
- Remove WRITE_EXTERNAL_STORAGE permission (use Storage Access Framework instead)
- Fix duplicate entries in generated hosts file
- Fix allowed hosts settings in VPN ad blocking
- Fix backup not exported as sdcard not writable
- Fix source update period task preference
- Fix host list paging
Special thanks to holysnipz, ipdev99, QingKongBaiYu, and zgfg for their bug reports.
## [5.0.3] - 2020-05-10
*This version is a pre-release*
- Add TLS support for web server
- Add web server status in preferences
- Add option to install self signed certificate
- Add option to display app icon instead of blank page
- Add full timezone support for source date
- Add workaround for negative source update time when server time is not accurate
- Add follow system dark theme mode
- Fix user host list lost on source update
- Fix import failed toast
- Fix web server not start on install
- Fix duplicate host entry on backup import
- Update mongoose server
- Update translations
Special thanks to saltylemondrops, zgfg, ipdev99 and mickrussom for their bug reports.
## [5.0.2] - 2020-04-25
*This version is a pre-release*
- Fix timezone issues with source modification date
- Fix domain not removed when sources are disabled
- Fix inverted host and ip while generating hosts file
- Fix periodical hosts update check initialization
- Improve overall search feature in list UI
- Improve last online modification date after retrieval
- Fix install snackbar not hiding
- Fix potential deadlock in VPN
- Add missing text on successful VPN update
- Update translations
Special thanks to damoasda for its contribution, Vankog for all translations he merged and Ps24u and dhacke for theirs bug reports.
## [4.3.4] - 2020-04-25
- Fix crash in tcpdump log view on Lollipop
- Fix timezone issues with source modification date
- Fix NDK version
Special thanks to Ps24u and Indranil012 for their bug reports.
## [5.0.1] - 2020-04-15
*This version is a pre-release*
- Fix redirect label from home screen
- Fix preference screen duplication on screen orientation change
- Improve hosts list readability
- Update dependencies
- Fix ndk configuration
Special thanks to TacoTheDank for its contribution and rmw98 and Luniz2k1 for its bug reports.
## [4.3.3] - 2020-04-10
hpHosts service is down.
If you are looking for a replacement, give a try at [StevenBlack's one](https://github.com/StevenBlack/hosts).
- Replace hpHosts default hosts file by StevenBlack hosts file
- Improve tcpdump icons
- Update translations
Special thanks to damoasda its contribution and gallegonovato for its bug report.
## [5.0.0] - 2020-04-07
*This version is a pre-release*
- Add new home screen
- Provides all main controls from one screen
- Displays currently blocked, allowed and redirected domains
- Displays current hosts sources status and control to force apply
- Add non root ad-blocking feature
- Uses a builtin local VPN to filter DNS request to blocked domains
- Based on the work of [dns66 by julian-klode](https://github.com/julian-klode/dns66/issues/39)
- Allows to excluded system applications and per user applications
- Add builtin updater with changelog display
- Add feature to quickly pause and resume ad-blocking
- Add wizard screen for first run setup
- Add feature to display and filter all blocked, allowed, redirect domains
- Improve preferences screen
- Add broadcast receiver to control ad-blocking from third party applications
- Update Android target to Android 10
- Improve root and shell support
- Split translation files to easier understand their context
- Add GitHub action test and build tasks
## [4.3.2] - 2019-12-29
- Fix GitLab source hosting
- Update translations
## [4.3.1] - 2019-12-21
- Update help to include Magisk systemless module for read-only system partition
- Update translations
## [4.3.0] - 2019-11-01
- Fix root not requested
- Improve support for systemless hosts Magisk module
- Update translations
## [4.2.9] - 2019-08-31
- Improve hosts file parsing
- Improve hosts file install error message (add more details than _not enough space_)
- Fix menu drawer translation issue
- Update translations
- Remove the start (opt-in only) telemetry messages
## [4.2.8] - 2019-07-28
- Fix TravisCI build issues
- Update translations
## [4.2.7] - 2019-07-04
- Revert Android gradle plugin to fix F-Droid build issue
## [4.2.6] - 2019-06-23
- Improve backup feature (user lists and hosts source using JSON format)
- Fix F-Droid build issue
- Update translations
Special thanks to RichyHBM its contribution and andy356 for its bug report.
## [4.2.5] - 2019-06-06
- Add Gist and GitLab hosting support for hosts file
- Add option to set default IPv6 redirection
- Improve reboot command
- Improve UI for overlays
- Update translations
Special thanks to MSF-Jarvis and Ralayax for their contributions
## [4.2.4] - 2019-03-23
- Add dedicated no root error message
- Fix connection requirement for automatic update
- Fix crash on TCP dump views when root access is denied
- Fix icon resources and colors
- Improve exception reporting
- Update translations
- Update Android X dependencies
- Update Android Gradle plugin and NDK versions
## [4.2.3] - 2019-03-02
- Fix update check on disabled sources
- Fix cropped label on home screen
- Prevent app installation on external storage (can't launch tcpdump or web server binary)
- Update work manager and material dependencies
## [4.2.2] - 2019-02-16
- Improve Material Theming
- Update build tools
## [4.2.1] - 2019-02-03
- Fix two buttons line when text too long
## [4.2.0] - 2019-02-02
- Add hosts source download cache
- Add snackbar notification to update host from DNS request listing
- Update UI from Material Design to Material Theming
- Update gradle, plugins and dependencies
- Fix crash parsing not defined host source last modified date
- Fix native modules build script (required for F-Droid build server)
- Fix Transifex issues
## [4.1.0] - 2018-12-13
- Add [telemetry feature](https://github.com/AdAway/AdAway/wiki/Telemetry)
- Add snackbar notification to update host when editing hosts sources or lists
- Update translations and fix english locale issues
## [4.0.12] - 2018-11-21
- Fix issue when getting last modified date on file:// hosts source
- Fix excluded hostnames from source due to parser failure
Special thanks to DiamondJohn and Vankog for theirs helpful bug reports.
## [4.0.11] - 2018.11.06
- Update translations from Transifex
- Fix crash using file:// protocol for hosts source
- Fix redirect list import
Special thanks to ipdev, ktmom and shaqman89 for theirs helpful bug reports and Vankog for the locales update.
## [4.0.10] - 2018.10.14
- Last update time now works with GitHub hosted files (on https://raw.githubusercontent.com/ domain)
- Fix infinite "update available" status when at least one host source failed to download
- Fix hosts not installed by the background update service
- Fix hosts source update time when reverting to default hosts file
- Fix "download failed" status when no host source enabled
- Fix a bunch of translation issues
Special thanks to Alain-Olivier and Vankog for theirs contributions and MarcAnt01 for its helpful bug report.
## [4.0.9] - 2018.09.26
- Fix missing reboot and error dialog when installing and checking for hosts update
- Block http hosts source for security
- Add project and support links to the menu
- Fix missing notification channel for Oreo and later
- Fix host name validation to add more complex domain name in black/white lists
- Improve HTTP client connection pool
- Add new internal architecture for hosts installation
- Fix Indonesian locale code
- Clean up a lot a unused resource (texts and graphics)
- Clean up help from unrelated help elements
- Update gradle itself, plugin, ndk and dependencies versions
Special thanks to adem4ik TacoTheDank and @Vankog for theirs contributions and towlie, ipdev for theirs helpful bug reports.
## [4.0.8] - 2018.08.22
- Add option to dismiss welcome card
- Improve hosts update status
- Change background job dependency from Evernote Android Job to Jetpack Work manager
- Update translations
## [4.0.7] - 2018.08.08
- Fix host lists import
- Fix default DNS requests when no log entry
- Update translations from Transifex
Special thanks to Vankog for the translation update and GuardianUSMC and DiamondJohn for the bug reports.
## [4.0.6] - 2018.08.05
- Add web server status (icon and text) in the home card UI
- Fix black and while list inversion bug
## [4.0.5] - 2018.07.02
- Change database to room:
- Add migration from previous database
- Update hosts source UI:
- New animations
- Dialogs validate user data so you do no more loose your input if format is wrong
- New DNS logging UI:
- Add new sort feature:
- by name (old behavior)
- by top level domain name (group entries by DNS so google.com, ads.google.com and www.google.com appears next to each other)
- New controls and animations:
- Block, allow or redirect from the directly from DNS logs
- Currently set up domains (in your lists UI) will be displayed accordingly
- Swipe to refresh!
- Update build tools, target SDK (28) and dependencies
## [4.0.4] - 2018.06.03
- A new light (white) theme
- A new adware UI (using LiveData and ViewModel for the 1st time!)
- A fix for the overlapping status texts in the home screen
## [4.0.3] - 2018.05.20
- Fix tcpdump failed to start after being stopped
## [4.0.2] - 2018.05.09
- Add adaptive launcher icons (8+)
- Add adaptive app shortcut (7.1+)
- Add new hosts content screen
- Fix application title not restored on configuration change
- Fix screen change when opening hosts file
## [4.0.1] - 2018.05.07
- Fix redirection IP and custom target dialogs in preferences
- Fix multiple lines in home card hedear.
## [4.0.0] - 2018.05.06
This version is a major update.
First, There is a new design:
- The home is now card based (webserver card is added if enabled)
- The navigation menu is now an humbugger menu
- The hosts source UI is updated (floating add button, actionbar edition)
- Your lists UI is updated (bottom navigation bar, same controls add, edit, remove like hosts sources)
- Permission request at runtime to access storage to import or export your list
- All other views are updated to use the latest support libraries
And a lot of changes under the hood including:
- Oreo support
- Battery improvement and host update fix
- Better support of root and systemless mode
## [3.3] - 2018.03.05
- Add support for ChainFire's SuperSU "bind sbin" systemless mode - by PerfectSlayer
- Improve systemless activation error handling - by PerfectSlayer
- Improve su location detection - by tstaylor7
- Update Mongoose webserver - by MrRobinson
- Replace CyanogenMod references by LineageOS - by experience7
- Update translations - by Mattter, mission712, ThomasSmallert and muzena
- Fix translation attributes - by Vankog
- Fix Magisk 15.x support - by pec0ra
## [3.2]
- Systemless root support - extensive work by PerfectSlayer
- Improvements to root mounter - by sanjay900
- Translations updates
- Various updates for support on Android 7.x
## [3.1.2]
- Update hosts-file.net source to use https
- Translations updates
## [3.1.1]
- Minor bugfixes
- Update mongoose internal webserver to 6.4 release
- Translations updates
- Update pgl.yoyo.org default source to use https
- Add generated timestamp into header of hosts file
## [3.1]
- Add 64bit arch which allows tcpdump to run on those devices
- Adjust scan adware list and stop it from crashing
- Update libpcap to 1.7.4 release
- Update tcpdump to 4.7.4 release
- Update mongoose internal webserver to 6.0 release and add IPv6 support
- Add enable IPv6 option which adds ::1 to all hosts entries
- Improve building hosts file speed by up to 2.5x
- RevertService uses Target hosts file preference
- Updates to support Android 6.0 SDK (23)
## [3.0.2]
- Disable autocorrect/autocomplete for hosts input on whilelist and redirection inputs
- Allow two pane layout as long as min of 600dp width available regardless of orientation
- Add material colored status icons
- Adjust asset layout per latest development guidelines
- Minor other adjustments
## [3.0.1]
- Make some text fields single line - by Phoenix09
- Make daily update time randomized within a range
- Minor fixes
- Adjust hosts-file.net default source URL
## [3.0]
This release has mainly been done by 0-kaladin.
- Min Android version increased to Android 4.1 to support Position Independent Executables (PIE)
- Material design
## [2.9.2]
This release has mainly been done by Dāvis Mošenkovs.
- Added Trove library for high performance collections
- Adware scan improvements
- Separate whitelisting and redirections options - "Allow whitelisting" defaults to checked; "Allow redirections" defaults to state of "Allow redirections and whitelisting" (or unchecked on new installations)
- Fix tcpdump logging upon file deletion
- Fix possible crash on DB update
- Fix AdAway's default hosts source
## [2.9.1]
- Fixing regression bugs
## [2.9]
This release has mainly been done by Dāvis Mošenkovs, thanks!
- Workaround for Android 4.4 (see Help)
- Fixed Hide reboot dialog setting being ignored after symlink creation
- Fix crashes
- Change AdAway's default hosts source to https
## [2.8.1]
- Fix mobile hosts source
## [2.8]
- Higher timeout for root commands
- New version of RootCommands library (If you experience problems install busybox, AdAway will then use it!)
- Remove unused billing permission
## [2.7]
- Reduce apk size by switching from HtmlSpanner to HtmlTextView library
## [2.6]
- Improve build for F-Droid
## [2.5]
- Fix URLs in-app
## [2.4]
- Fix Remounter for Android 4.3
- Fix auto update on ethernet connection
## [2.3]
- AdAway was removed from Google Play!
- Because http://www.ismeh.com/HOSTS is down, a alternative source has been added
## [2.2]
- Introduce SUPERUSER permission for new Superuser app
- Allow backups of AdAway (for Carbon)
- Logo reworked thanks to Alin Ţoţea-Radu
## [2.1]
- Allow whitelist entries from hosts sources if enabled in preferences
- Fixed missing menu entry for hosts sources on tablets
- Webserver on boot should work more reliable
- Webserver should not be killed on low memory
## [2.0]
IF YOU HAVE PROBLEMS WITH 2.0: Please uninstall and then reinstall AdAway!
- New library for root access: RootCommands
- Tcpdump and Webserver now included for ARM, x86, MIPS (Please test and report problems!)
- Google forced me to remove the possibility to donate via Flattr and PayPal
- Hopefully fixes DNS logging for Android 4.1
## [1.37]
- Skip unreachable hosts sources and show number of successful sources
- Fix for crash on donations screen (Android 4.1)
- Fix crash on help screen (Android 4.1)
- Bind local webserver https only to localhost (thanks to Stebalien for finding that bug)
## [1.36]
- Help and About screens reworked
- Simple scanner for bad Adware apps like Airpush Notifications (derived from open source Airpush-Detector, thanks!)
## [1.35]
- New method for background update checking
- AdAway will now reschedule the update check to execute it when the Internet connection is established
- New preference to update only when on Wifi
- AdAway now allows empty hosts sources for people who only want to maintain their own lists
## [1.34]
- In-app PayPal donations are now possible
- Disabled hardware acceleration on ICS, caused black screens and glitches on some custom roms
## [1.33]
- Fixed rare problems on some devices regarding remounting /system as read/write
## [1.32]
- Fixes crashes with 1.31
## [1.31]
- Check for APN proxy
## [1.30]
- Design improvements for Android 4
- Layout fixes for "Your Lists"
## [1.29]
- Languages updated
- Fixed copying when no cp command is available
## [1.28]
- Now works on devices without cp command
- New debug setting
## [1.27]
- No longer needs busybox
- Fixed problems with reverting
- Method to restart Android changed
## [1.26]
- Usability improvements: Buttons will now be disabled while applying, reverting is improved
- Faster due to improved hosts parsing
- Now including tcpdump
## [1.25]
- Better tcpdump integration
- Wildcard characters * and ? can be used in your whitelist
- Updated translations
- Fixes stuck on applying hopefully
## [1.24]
- Tcpdump DNS request logging
- Preference to allow redirection rules from Hosts Sources
- New hosts source for mobile ads: http://www.ismeh.com/HOSTS
- Webserver binary now updates correctly from old AdAway versions
## [1.23]
- Fix for import/export
## [1.22]
- More notification and status bug fixes
- Fixed preference bug causing automatic update to be enabled
- Fixed color of notifications
- Fixed a crash under Android 3.2
## [1.21]
- Fixed staying notification when update was failing
- Hopefully fixes webserver crashes
## [1.20]
- Fixed staying notification
## [1.19]
- Automatic updating in background can be enabled in preferences
- New method for checking for symlink, should fix some problems
- Fixes for exporting entries
- Fixes for donation screen, when no Google Android Market is available
## [1.18]
- Local webserver now answers with blank page instead of 404 error page
- Import and Export of Your Lists
- Bug fix for symlink check
- Last entry in hosts file is now working (missed new line at end of hosts file)
- Fixes for daily update check
- Allow hostnames without TLD ending
## [1.17]
- Fix for translation problems
## [1.16]
- Translations: German, French, Spanish
Thanks to all contributors!
- Better check for symlink
- Newer version of web server mongoose
- Better handling of AdAway database
- Fixed "Not enough space available" bug
- Fixed problem with applying
## [1.15]
- Added permission for Google Android Market donations
## [1.14]
- Force close on open hosts file fixed
- Donations with Google Android Market added
## [1.13]
- Webserver now hears on all local IP address (0.0.0.0)
- Custom target can be set in preferences, for example to /data/etc/hosts
- Hosts file can be opened from menu
## [1.12]
- Delayed starting of webserver on boot
- Disabled debug logging
## [1.11]
- Fixed bugs in layout
## [1.10]
- Webserver is now a preference, disabled by default
- Fixed daily update again. Should schedule now correctly
- Fixed crash on Android 3.0 and 3.1 in Your Lists
- Fixed preferences on Android 3.x
- Fixed rotation bug on Android 3.x
## [1.09]
- New design for tablet sizes
- New hosts source: http://pgl.yoyo.org/adservers
- fixed crash on Android 3 Honeycomb
- Fix for daily update check
- Removed hosts source sysctl.org because of false positives
## [1.08]
- AdAway got a redesign
- AdAway ships with a webserver, that listens on localhost
- Dates of all hosts sources are saved and can be seen in Hosts sources
- Preference to hide reboot question dialog
- Help page with information about AdAway
- Added new hosts source sysctl.org
- Daily update check can be enabled in preferences
- Should now work on roms which doesn't symlink busybox commands
## [1.07]
- AdAway can now create a symlink
- better error handling
- No update check on orientation change
## [1.06]
- hosts file target can be choosen
- Donation button
- Fixed SQLite bug occuring on Android 2.1
## [1.05]
- Update Check implemented
- Fixed bug when changing orientation of device while downloading
- better error handling when downloading
- Fixed localhost entry again
## [1.04]
- Implemented Redirection List
- Fixed Layout bugs
## [1.03]
- Implemented Blacklist and Whitelist
## [1.02]
- Fixed localhost entry
## [1.01]
- Fixed permissions on /system/etc/hosts
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at report [at] adaway.org. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to AdAway
:+1::tada: First off, thanks for taking the time to contribute! :tada::+1:
The following is a set of guidelines for contributing to AdAway.
These are mostly guidelines, not rules.
It will help you to understand the project, find answers, deal with the source code and interact with maitainers.
The project is open to any kind of contribution so feel free to share your ideas and participate to the development.
#### Table of contents
[I don't want to read this whole thing, I just have a question!!!](#i-dont-want-to-read-this-whole-thing-i-just-have-a-question)
[What should I know before I get started?](#what-should-i-know-before-i-get-started)
* [Discovering the project structure](#discovering-the-project-structure)
* [Building the project](#building-the-project)
[How can I contribute?](#how-can-i-contribute)
* [Reporting bugs](#reporting-bugs)
* [Suggesting enhancements](#suggesting-enhancements)
* [Translating to your language](#translating-to-your-language)
* [Your first code contribution](#your-first-code-contribution)
[Styleguides](#styleguides)
* [Git commit messages](#git-commit-messages)
* [Java styleguide](#java-styleguide)
* [XML styleguide](#xml-styleguide)
[Additional notes](#additional-notes)
* [tcpdump and webserver modules](#tcpdump-and-webserver-modules)
## I don't want to read this whole thing I just have a question!!!
> **Note:** Please don't file an issue to ask a question. You'll get faster results by using the resources below.
We have a dedicated forum with a welcoming community and a wiki to answer your questions:
* [Check the common issues and solutions on the wiki](https://github.com/AdAway/AdAway/wiki/Solutions)
* [Read and post on the dedicated developer forum](https://forum.xda-developers.com/showthread.php?t=2190753)
## What should I know before I get started?
### Discovering the project structure
The AdAway source code is an Android project organized in modules.
There are four main modules:
* `app`: The Android application itself
* `tcpdump`: A module dedicated to build the `pcap` library and the `tcpdump` binary
* `webserver`: A module dedicated to build a simple HTTP server binary based on `mongoose`
* `libraries/RootCommands`: A vendorize Android library to run root shell commands
The three last modules are independent and used by the `app` module.
Modularizing the application allows for faster build times and simplier maintainance.
### Building the project
Building the project will require the latest versions of the Android SDK (Software Development Kit) and NDK (Native Development kit).
They can easily be installed or updated using [Android Studio](https://developer.android.com/studio/).
#### Building with Gradle
1. Ensure you have Android SDK and NDK installed.
If not:
* Option 1: [Install Android Studio](https://developer.android.com/studio/index.html) or,
* Option 2: Install command line tools, build tools and ndk bundle with sdk manager:
`tools/bin/sdkmanager "build-tools;x.y.z" ndk-bundle` where `x.y.z` is the latest version
2. Export `ANDROID_HOME` environment variable pointing to your Android SDK:
`export ANDROID_HOME=/path/to/your/sdk`
3. Launch a build:
`./gradlew assembleRelease`
The first full build of the apk can take a lot of time, about 20 minutes, whereas an incremental build of the `app` module takes less than a dozen seconds.
#### Running on an emulator
In order to test the application on an emulator, disable [the root check in the Constants source file](https://github.com/AdAway/AdAway/blob/c90336cb9b062220540317bc6c7cfedb19927c63/app/src/main/java/org/adaway/util/Constants.java#L28).
## How can I contribute?
### Reporting bugs
> **Note:** Before submitting a bug report, please use [the GitHub search on Issues page](https://github.com/AdAway/AdAway/issues) to check if there is already similar reports.
#### How do I submit a (good) bug report?
* **Use a clear and descriptive title** for the issue to identify the problem.
* **Describe the exact steps which reproduce the problem** in the most detailed way possible.
* **Provide specific examples to demonstrate the steps**.
Include hosts sources or domains you use, web pages URL you test.
* **Describe the behavior you observed after following the steps** and point out what exactly is the problem with that behavior.
* **Explain which behavior you expected to see instead and why.**
* **If you're reporting that AdAway crashed**, include a logcat.
Use `adb logcat` if you have developer settings enabled on your device or use any application like [CatLog](https://play.google.com/store/apps/details?id=com.nolanlawson.logcat) to save logs.
Include the crash report in the issue in a [code block](https://help.github.com/articles/markdown-basics/#multiple-lines), a [file attachment](https://help.github.com/articles/file-attachments-on-issues-and-pull-requests/), or put it in a [gist](https://gist.github.com/) and provide link to it.
* **Specify which version of AdAway you're using.**
You can get the exact version by opening in-app help and checking the _About_ tab.
* **Specify the Android version and the ROM you're using.**
You can also include any root or customization related information like _Magisk_ or _SuperSU_ version and _Xposed_ modules is installed.
### Suggesting enhancements
#### How do I submit a (good) enhancement suggestion?
Enhancement suggestions are welcome.
After refining your idea or discussing it on the [development forum](https://forum.xda-developers.com/showthread.php?t=2190753), create an issue and provide the following information:
* **Use a clear and descriptive title** for the issue to identify the suggestion.
* **Provide a step-by-step description of the suggested enhancement** in the most detailed way possible, including specific examples.
* **Describe the current behavior** and **explain which behavior you expected to see instead** and why.
* **Explain why this enhancement would be useful** to most users.
### Translating to your language
Translations are also welcome.
Moreover, they do not require a development environment, only a web browser.
So if you want to complete or edit your language support for the application, check [the translation guide](TRANSLATING.md).
### Your first code contribution
Unsure where to begin contributing?
You can start by looking through these `good first issue` and `help wanted` issues:
* [Good first issues](https://github.com/AdAway/AdAway/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) - issues which should only require a few lines of code, and a test or two.
* [Help wanted issues](https://github.com/AdAway/AdAway/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) - issues which should be a bit more involved than `beginner` issues.
Both issue lists are sorted by total number of comments. While not perfect, the number of comments is a reasonable way of determining the impact a given change will have.
## Style guidelines
### Git commit messages
* Use the present tense ("Add feature" not "Added feature")
* Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
* Limit the first line to 80 characters or less
* Reference issues and pull requests liberally after the first line
### Java style guidelines
* Indentation: 4 spaces, no tabs
* Maximum line width for code and comments: 100
* Opening braces don't go on their own line
* Field names: Non-public, non-static fields start with m.
* Acronyms are words: Treat acronyms as words in names, yielding !XmlHttpRequest, getUrl(), etc.
See https://source.android.com/source/code-style.html
### XML style guidelines
* No maximum line width
* Split multiple attributes each on a new line
* Indent using spaces with Indention size 4
## Additional notes
### `tcpdump` and `webserver` modules
#### Origin
Forked from the following sources and slightly modified to compile:
* dnsmasq: https://github.com/CyanogenMod/android_external_dnsmasq
* libpcap: https://github.com/the-tcpdump-group/libpcap/tree/libpcap-1.7.4
* tcpdump: https://github.com/the-tcpdump-group/tcpdump/tree/tcpdump-4.7.4
#### Changes
Please review the following commits for the changes made to the sources above in order for them to compile in this project:
* Commit: https://github.com/AdAway/AdAway/commit/1f4ccb3cec3758757341ad90813506fc2a8fdf7b
* Commit: https://github.com/AdAway/AdAway/commit/289df896c0ac4f96bd862e8a5054f1011ec07cac
* Commit: https://github.com/AdAway/AdAway/commit/08da0745b0732b94221c0f5746160fef8126fd99
================================================
FILE: LICENSE.md
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
================================================
FILE: README.md
================================================
#  AdAway
[](https://github.com/AdAway/AdAway/actions/workflows/android-ci.yml)
[](https://sonarcloud.io/project/overview?id=org.adaway)
[](https://github.com/AdAway/AdAway/releases)
[](https://github.com/sponsors/PerfectSlayer)
[](/LICENSE.md)
AdAway is an open source ad blocker for Android using the hosts file and local vpn.
[<img src="metadata/en-US/phoneScreenshots/screenshot1.png"
alt="Home screen"
height="256">](metadata/en-US/phoneScreenshots/screenshot1.png)
[<img src="metadata/en-US/phoneScreenshots/screenshot2.png"
alt="Preferences screen"
height="256">](metadata/en-US/phoneScreenshots/screenshot2.png)
[<img src="metadata/en-US/phoneScreenshots/screenshot3.png"
alt="Root based ad blocker screen"
height="256">](metadata/en-US/phoneScreenshots/screenshot3.png)
[<img src="metadata/en-US/phoneScreenshots/screenshot4.png"
alt="Backup and restore screen"
height="256">](metadata/en-US/phoneScreenshots/screenshot4.png)
[<img src="metadata/en-US/phoneScreenshots/screenshot5.png"
alt="Help screen"
height="256">](metadata/en-US/phoneScreenshots/screenshot5.png)
For more information visit https://adaway.org
## Installing
There are two kinds of release:
* The preview builds: on the bleeding edge of development - for testers or adventurous
* The stable builds: ready for every day usage - for end users
### Preview builds
**Requirements:** Android 8 _Oreo_ or above
For users with bugs, there may be preview builds available from the [XDA development thread](https://forum.xda-developers.com/showthread.php?t=2190753) and [AdAway official website](https://app.adaway.org/beta.apk).
It is recommended to try those builds to see if your issue is resolved before creating an issue.
The preview builds may contain bug fixes or new features for new android versions.
[<img src="Resources/get-it-on-adaway.png"
alt="Get it on official AdAway website"
height="80">](https://app.adaway.org/beta.apk)
[<img src="Resources/XDADevelopers.png"
raw="true"
alt="Get it on XDA forum"
height="60">](https://forum.xda-developers.com/showthread.php?t=2190753)
### Stable builds
**Requirements:**
* Android Android 8 _Oreo_ or above
After preview builds have been tested by the more technical or responsive community within the forums, we will then post the stable build to F-Droid.
[<img src="Resources/get-it-on-adaway.png"
alt="Get it on official AdAway website"
height="80">](https://app.adaway.org/adaway.apk)
[<img src="Resources/get-it-on-fdroid.png"
raw="true"
alt="Get it on F-Droid"
height="80">](https://f-droid.org/app/org.adaway)
For devices older than Android 8 _Oreo_, use the version 4 of AdAway.
## Get Host File Sources
See the [Wiki](https://github.com/AdAway/AdAway/wiki), in particular the page [HostsSources](https://github.com/AdAway/AdAway/wiki/HostsSources) for an assorted list of sources you can use in AdAway.
Add the ones you like to the AdAway "Hosts sources" section.
## Getting Help
You can post [Issues](https://github.com/AdAway/AdAway/issues) here or obtain more detailed community support via the [XDA developer thread](http://forum.xda-developers.com/showthread.php?t=2190753).
## Contributing
You want to be involved in the project? Welcome onboard!
Check [the contributing guide](CONTRIBUTING.md) to learn how to report bugs, suggest features and make you first code contribution :+1:
If you are looking for translating the application in your language, [the translating guide](TRANSLATING.md) is for you.
## Project Status
AdAway is actively developed by:
* Bruce Bujon ([@PerfectSlayer](https://github.com/PerfectSlayer)) - Developer
[PayPal](https://paypal.me/BruceBUJON) | [GitHub Sponsorship](https://github.com/sponsors/PerfectSlayer)
* Daniel Mönch ([@Vankog](https://github.com/Vankog)) - Translations
* Jawz101 ([@jawz101](https://github.com/jawz101)) - Hosts list
* Anxhelo Lushka ([@AnXh3L0](https://github.com/AnXh3L0)) - Web site
We do not forget the past maintainers:
* Dāvis Mošenkovs ([@DavisNT](https://github.com/DavisNT)) - Developer
[Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=5GUHNXYE58RZS&lc=US&item_name=AdAway%20Donation&no_note=0&no_shipping=1)
* [@0-kaladin](https://github.com/0-kaladin) - Developer and XDA OP
* Sanjay Govind ([@sanjay900](https://github.com/sanjay900)) - Developer
And we thank a lot to the original author:
* Dominik Schürmann ([@dschuermann](https://github.com/dschuermann)) - Original developer
[Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=android%40schuermann.eu&lc=US&item_name=AdAway%20Donation&no_note=0&no_shipping=1¤cy_code=EUR) | [Flattr](https://flattr.com/thing/369138/AdAway-Ad-blocker-for-Android) | BTC: `173kZxbkKuvnF5fa5b7t21kqU5XfEvvwTs`
## Permissions
AdAway requires the following permissions:
* `INTERNET` to download hosts files and application updates. It can send bug reports and telemetry [if the user wants to (opt-in only)](https://github.com/AdAway/AdAway/wiki/Telemetry)
* `ACCESS_NETWORK_STATE` to restart VPN on network connection change
* `RECEIVE_BOOT_COMPLETED` to start the VPN on boot
* `FOREGROUND_SERVICE` to run the VPN service in foreground
* `POST_NOTIFICATIONS` to post notifications about hosts source update, application update and VPN controls. All notifications can be enabled or disabled independently.
* `REQUEST_INSTALL_PACKAGES` to update the application using the builtin updater
* `QUERY_ALL_PACKAGES` to let the user pick the applications to exclude from VPN
## Licenses
AdAway is licensed under the GPLv3+.
The file LICENSE includes the full license text.
For more details, check [the license notes](LICENSE.md).
================================================
FILE: RELEASING.md
================================================
# Releasing
## 1. Checking bugs and technical debt
### Lint checks
Android development tools provide linter to check common errors.
Use `./gradlew :app:lint` to run the linter and produce (human readable) reports as HTML file located at `app/build/reports/lint-results.html`.
> [!IMPORTANT]
> Check no new warning was introduced before releasing.
### SonarCloud analysis
The AdAway application source code is [analyzed by SonarCloud](https://sonarcloud.io/dashboard?id=org.adaway) to find bugs, code smells and compute technical debt.
While the overall score may be not perfect, each new release should not increase it.
> [!IMPORTANT]
> Check no new bug nor debt was introduced before releasing.
## 2. Updating application version
Each version has its own number that follows the [Semantic Versioning](https://semver.org/) principle (starting from version 4).
> [!IMPORTANT]
> Update application version name (`appName`) and code (`appCode`) from the `gradle/libs.versions.toml` catalog file.
## 3. Updating the changelog
The AdAway project provides [a global changelog](CHANGELOG.md).
> [!IMPORTANT]
> Update the changelog to let users know what is inside each new version before releasing it.
## 4. Building release APK
The release apk must be built using the `release` flavor (not `debug`).
Check the [contributing guide for building instructions](CONTRIBUTING.md#building-the-project).
> [!IMPORTANT]
> Rename to release apk file to follow the format: `AdAway-<version_name>-<yyyymmdd>.apk`
Example: _AdAway-6.1.2-20220817.apk_ for the version 6.1.2 built the 08/17/22.
## 5. Distributing release
Before sharing the any release, remember to test it.
Release variant apk does not behave like debug variant.
Same goes for real device versus emulator.
> [!IMPORTANT]
> Final tests should be done with release apk variant on real device.
Once tested, releases are posted on XDA development thread using the following template:
```
Hi all,
<welcoming message about the new version>
[U][SIZE="4"]Changelog:[/SIZE][/U]
[LIST]
[*] Item 1
[*] Item 2
[*] ...
[*] Item n
[/LIST]
[U][SIZE="4"]Thanks:[/SIZE][/U]
Special thanks to <contributors> for theirs contributions and <bug reporters> for theirs helpful bug reports.
[U][SIZE="4"]Download:[/SIZE][/U]
[URL="https://app.adaway.org/adaway.apk"]AdAway <application version>[/URL]
```
### Beta releases
The beta releases are only announced in the XDA development thread.
### Stable releases
The stable releases are distributed through [GitHub releases](https://github.com/AdAway/AdAway/releases) and [F-Droid store](https://f-droid.org/packages/org.adaway/) and are posted of the first post of XDA development thread.
Once ready, create and push a tag on GitHub repository using `vX.Y.Z` format (or `vX.Y.Zb` for pre-releases).
To publish the application in GitHub:
* Create a new version based on this tag,
* Copy the changelog part related to the version as description of the release,
* Upload apk binary to the release.
Pushing a tag will publish the application to F-Droid store.
It might takes some days to update but if it does not, build logs are available at the following address: `https://monitor.f-droid.org/builds/log/org.adaway/<versioncode>`.
================================================
FILE: Resources/certificate/generate.sh
================================================
rm localhost.*
# Add compatibility for MINGW
kernel=$(uname -s)
if [[ $kernel == MINGW* ]]; then
export MSYS_NO_PATHCONV=1
fi
openssl req -x509 -out localhost.crt -keyout localhost.key -newkey rsa:2048 -nodes -sha256 -days 1126 -subj /CN=localhost -extensions EXT -config ssl.conf
================================================
FILE: Resources/certificate/ssl.conf
================================================
[dn]
CN=localhost
[req]
distinguished_name = dn
[EXT]
subjectAltName=@alternate_names
keyUsage=digitalSignature
extendedKeyUsage=serverAuth
basicConstraints=CA:true
[alternate_names]
DNS.1=localhost
DNS.2=*.doubleclick.net
DNS.3=*.g.doubleclick.net
IP.1=127.0.0.1
================================================
FILE: Resources/test-webserver.sh
================================================
#
# Launch web server from a root shell.
#
APP_FOLDER=$(find /data/app -type d -name "org.adaway-*")
LIB_FOLDER="${APP_FOLDER}/lib/arm64"
WEBSERVER_EXEC="$LIB_FOLDER/libwebserver_exec.so"
WEBSERVER_ARGS="--resources /data/user/0/org.adaway/files/webserver --debug"
if [ ! -e $WEBSERVER_EXEC ]; then
echo "Web server exec not found" >&2
exit 1
fi
echo "Running LD_LIBRARY_PATH=$LIB_FOLDER $WEBSERVER_EXEC $WEBSERVER_ARGS"
LD_LIBRARY_PATH=$LIB_FOLDER $WEBSERVER_EXEC $WEBSERVER_ARGS
================================================
FILE: THIRD_PARTY_LICENSES.md
================================================
# Licenses
AdAway is licensed under the GPLv3+.
The file [LICENSE.md](LICENSE.md) includes the full license text.
## AdAway Application
AdAway is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
AdAway is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with AdAway.
If not, see <https://www.gnu.org/licenses/>.
## Third-Party Libraries
* Android Jetpack
https://developer.android.com/jetpack/
Apache License v2
* DNS66
https://github.com/julian-klode/dns66
GPLv3
* dnsjava
https://github.com/dnsjava/dnsjava
BSD-3-Clause License
* Guava
https://github.com/google/guava
Apache License v2
* libsu
https://github.com/topjohnwu/libsu
Apache License v2
* Material Components for Android
https://github.com/material-components/material-components-android
Apache License v2
* Mongoose Webserver
https://github.com/cesanta/mongoose
GPLv2 License
* OkHttp
https://github.com/square/okhttp
Apache License v2
* Openssl
https://www.openssl.org/
[OpenSSL license](https://www.openssl.org/source/license-openssl-ssleay.txt)
* Pcap4J
https://github.com/kaitoy/pcap4j
MIT License
* Sentry Java
https://github.com/getsentry/sentry-java
BSD 3-Clause License
* SLF4J
https://www.slf4j.org/
MIT License
* Tcpdump/Libpcap
https://www.tcpdump.org/
BSD 3-Clause License
## Images
* icon.svg, banner.svg
AdAway by Dominik Schürmann
New version by Alin Ţoţea-Radu
GPLv3
* Menu Icons
Original Android Icons
================================================
FILE: TRANSLATING.md
================================================
# Translating to your language
You can help us with your translation efforts!
Please have a look at ticket No. [AdAway/AdAway#1050](https://github.com/AdAway/AdAway/issues/1050) for more detailed information, questions and discussions!
We apreciate new contributors and translations are perfect for getting started with contributing at Github in general.
Here is the gist:
Translations are managed via the **transifex.com website**! (and Transifex' website alone, that is)
Unfortunately, we cannot merge translations via Github directly. Please follow the steps below instead.
Sorry, but this causes some major synchronization issues if not followed. We have to consolidate many contributions by translators and sync them up to the latest state. That is just not possible via Github.
1. Please go to **https://www.transifex.com/free-software-for-android/adaway/**
1. Login or create a new account (you can conveniently login via Github as well)
1. Enroll into the language you want to contribute to or even submit a request for a new language.
* Please keep in mind that we want to stick to the basic languages where possible (e.g. `sr` for Serbian).
Please refrain to request regional localizations (like `sr_RS`).
1. In your language section, you can browse all available resources and start **translating strings right in your browser**.
* You don't have to download anything. Just click "Translate". The downloads are meant for more advanced use cases.
## Here are some tips for using Transifex:
* Make sure to have an eye on the **"Suggestions", "History", "Context" and "Glossary" tabs** on every entry.
* Mind translation efforts that were already done or suggested.
Basically, »*stand on the shoulders of giants*« where possible.
* Sometimes source strings change only marginally, but their translations get cleared anyway.
You can easily **recover their previous translations** by looking at the "Suggestions" tab. Just make sure they really fit the new source text and edit the translation if needed.
* Help us validate translations by **reviewing others'**.
* Some strings contain **placeholders** - like for HTML tags or numbers.
You can click on them to add them or use keyboard shortcuts (see the page settings for an overview).
* You can point out issues to the Translation Organizers via the **"Comments" tab** or just start a discussion.
* Don't forget to save your work!
* Please don't create any Translation Pull Request here on Github.
* We will integrate your contributions from time to time into the code by exporting from Transifex directly. No need to provide any files from your side. ;-)
* For more information about how to use Transifex, see https://docs.transifex.com/
We will add all Transifex translations from time to time to the app.
For our Translation Organizers: You can use the CLI tool for this to retrieve translated resources from the Transifex server and add them to the Github repo. (See https://docs.transifex.com/client/ for more details about the client tool.)
================================================
FILE: app/.gitignore
================================================
#Android specific
bin
gen
obj
libs/armeabi
libs/armeabi-v7a
libs/arm64-v8a
libs/mips
libs/mips64
libs/x86
libs/x86_64
local.properties
release.properties
ant.properties
*.class
*.apk
#Gradle
.gradle
build
gradle.properties
#Maven
target
pom.xml.*
#Eclipse
.project
.classpath
.settings
.metadata
#IntelliJ IDEA
.idea
*.iml
/.externalNativeBuild/
================================================
FILE: app/build.gradle
================================================
plugins {
id 'com.android.application'
}
boolean keyStoreDefined = project.hasProperty('signingStoreLocation') &&
project.hasProperty('signingStorePassword') &&
project.hasProperty('signingKeyAlias') &&
project.hasProperty('signingKeyPassword')
repositories {
maven {
url 'https://jitpack.io'
}
}
android {
compileSdk 34
ndkVersion '27.2.12479018'
namespace 'org.adaway'
defaultConfig {
minSdk 26
targetSdk 33
versionCode libs.versions.appCode.get() as int
versionName libs.versions.appName.get()
javaCompileOptions {
annotationProcessorOptions {
arguments = [
"room.schemaLocation": "$projectDir/schemas".toString(),
"room.incremental" : "true"
]
}
}
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
/*
* To sign release build, create file gradle.properties in ~/.gradle/ with this content:
*
* signingStoreLocation=/home/key.store
* signingStorePassword=xxx
* signingKeyAlias=alias
* signingKeyPassword=xxx
*/
if (keyStoreDefined) {
println "Found signature properties in gradle.properties. Build will be signed."
signingConfigs {
release {
storeFile file(signingStoreLocation)
storePassword signingStorePassword
keyAlias signingKeyAlias
keyPassword signingKeyPassword
}
}
buildTypes.debug.signingConfig = signingConfigs.release
buildTypes.release.signingConfig = signingConfigs.release
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
buildFeatures {
viewBinding true
}
packagingOptions {
jniLibs {
useLegacyPackaging = true
}
}
buildTypes {
// debug {
// shrinkResources false
// minifyEnabled false
// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// }
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
// Do not abort build if lint finds errors
lint {
disable 'MissingTranslation'
}
}
dependencies {
// Native modules
implementation project(':tcpdump')
implementation project(':webserver')
// AndroidX components
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.fragment:fragment:1.8.1'
// "fragment-ktx" is not used but was added to fix the following dependency error:
// Duplicate class androidx.lifecycle.ViewModelLazy found in modules lifecycle-viewmodel-2.5.0-runtime (androidx.lifecycle:lifecycle-viewmodel:2.5.0) and lifecycle-viewmodel-ktx-2.3.1-runtime
implementation 'androidx.fragment:fragment-ktx:1.8.1'
implementation 'androidx.paging:paging-runtime:3.3.0'
implementation 'androidx.preference:preference:1.2.1'
implementation 'androidx.recyclerview:recyclerview:1.3.2'
implementation 'androidx.room:room-runtime:2.6.1'
implementation 'androidx.room:room-paging:2.6.1'
annotationProcessor 'androidx.room:room-compiler:2.6.1'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation 'androidx.work:work-runtime:2.8.1'
implementation 'com.google.android.material:material:1.9.0'
// Collections related
implementation libs.guava
// Network related
implementation libs.okhttp3.okhttp
// Logging related
implementation libs.timber
if (keyStoreDefined) {
implementation project(':sentrystub')
} else {
implementation platform('io.sentry:sentry-bom:7.8.0')
implementation('io.sentry:sentry-android')
implementation('io.sentry:sentry-android-fragment')
implementation('io.sentry:sentry-android-timber')
}
// Root related
implementation libs.libsu
// VPN related
implementation libs.bundles.pcap4j
implementation libs.dnsjava
implementation libs.slf4j.android
implementation libs.okhttp.dnsoverhttps
// Test related
testImplementation libs.junit
testImplementation libs.json
androidTestImplementation libs.bundles.androidx.test
androidTestImplementation libs.junit
}
================================================
FILE: app/lint.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<!-- list of issues to configure -->
<issue id="InvalidPackage">
<!-- Ignore dnsjava -->
<ignore path="**/dnsjava-3.0.2*.jar" />
<!-- Ignore pcap4j dependency -->
<ignore path="**/jna-5.3.1.jar"/>
</issue>
</lint>
================================================
FILE: app/proguard-rules.pro
================================================
-keep public class * extends android.content.ContentProvider
# Temporary fix for androidx preference fragement reference
# See https://issuetracker.google.com/issues/145316223
-keep public class org.adaway.ui.prefs.PrefsBackupRestoreFragment
-keep public class org.adaway.ui.prefs.PrefsRootFragment
-keep public class org.adaway.ui.prefs.PrefsUpdateFragment
-keep public class org.adaway.ui.prefs.PrefsVpnFragment
-keepclassmembers class io.sentry.Sentry {
public static final boolean STUB;
}
-dontobfuscate
### Android Jetpack ###
-dontwarn com.google.**
### Sentry ###
-dontwarn io.sentry.**
### OkHttp ###
# JSR 305 annotations are for embedding nullability information.
-dontwarn javax.annotation.**
# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.*
# OkHttp platform used only on JVM and when Conscrypt dependency is available.
-dontwarn okhttp3.internal.platform.ConscryptPlatform
# Generated rules from R8
-dontwarn org.bouncycastle.jsse.**
-dontwarn org.conscrypt.**
-dontwarn org.openjsse.**
### dnsjava ###
-dontwarn lombok.Generated
-dontwarn sun.net.spi.nameservice.NameServiceDescriptor
================================================
FILE: app/schemas/org.adaway.db.AppDatabase/1.json
================================================
{
"formatVersion": 1,
"database": {
"version": 1,
"identityHash": "5175df445bc75bbbb5ea672750d7b425",
"entities": [
{
"tableName": "hosts_sources",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`url` TEXT NOT NULL, `enabled` INTEGER NOT NULL, `last_modified_local` INTEGER, `last_modified_online` INTEGER, PRIMARY KEY(`url`))",
"fields": [
{
"fieldPath": "url",
"columnName": "url",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "enabled",
"columnName": "enabled",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "lastLocalModification",
"columnName": "last_modified_local",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "lastOnlineModification",
"columnName": "last_modified_online",
"affinity": "INTEGER",
"notNull": false
}
],
"primaryKey": {
"columnNames": [
"url"
],
"autoGenerate": false
},
"indices": [],
"foreignKeys": []
},
{
"tableName": "hosts_lists",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`host` TEXT NOT NULL, `type` INTEGER NOT NULL, `enabled` INTEGER NOT NULL, `redirection` TEXT, PRIMARY KEY(`host`))",
"fields": [
{
"fieldPath": "host",
"columnName": "host",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "type",
"columnName": "type",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "enabled",
"columnName": "enabled",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "redirection",
"columnName": "redirection",
"affinity": "TEXT",
"notNull": false
}
],
"primaryKey": {
"columnNames": [
"host"
],
"autoGenerate": false
},
"indices": [],
"foreignKeys": []
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"5175df445bc75bbbb5ea672750d7b425\")"
]
}
}
================================================
FILE: app/schemas/org.adaway.db.AppDatabase/2.json
================================================
{
"formatVersion": 1,
"database": {
"version": 2,
"identityHash": "e9b86296a34de1d881f8530fdf2c535d",
"entities": [
{
"tableName": "hosts_sources",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `url` TEXT NOT NULL, `enabled` INTEGER NOT NULL, `last_modified_local` INTEGER, `last_modified_online` INTEGER)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "url",
"columnName": "url",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "enabled",
"columnName": "enabled",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "lastLocalModification",
"columnName": "last_modified_local",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "lastOnlineModification",
"columnName": "last_modified_online",
"affinity": "INTEGER",
"notNull": false
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_hosts_sources_url",
"unique": true,
"columnNames": [
"url"
],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_hosts_sources_url` ON `${TABLE_NAME}` (`url`)"
}
],
"foreignKeys": []
},
{
"tableName": "hosts_lists",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `host` TEXT NOT NULL, `type` INTEGER NOT NULL, `enabled` INTEGER NOT NULL, `redirection` TEXT, `source_id` INTEGER NOT NULL, FOREIGN KEY(`source_id`) REFERENCES `hosts_sources`(`id`) ON UPDATE CASCADE ON DELETE CASCADE )",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "host",
"columnName": "host",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "type",
"columnName": "type",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "enabled",
"columnName": "enabled",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "redirection",
"columnName": "redirection",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "sourceId",
"columnName": "source_id",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_hosts_lists_host",
"unique": true,
"columnNames": [
"host"
],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_hosts_lists_host` ON `${TABLE_NAME}` (`host`)"
},
{
"name": "index_hosts_lists_source_id",
"unique": false,
"columnNames": [
"source_id"
],
"createSql": "CREATE INDEX IF NOT EXISTS `index_hosts_lists_source_id` ON `${TABLE_NAME}` (`source_id`)"
}
],
"foreignKeys": [
{
"table": "hosts_sources",
"onDelete": "CASCADE",
"onUpdate": "CASCADE",
"columns": [
"source_id"
],
"referencedColumns": [
"id"
]
}
]
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'e9b86296a34de1d881f8530fdf2c535d')"
]
}
}
================================================
FILE: app/schemas/org.adaway.db.AppDatabase/3.json
================================================
{
"formatVersion": 1,
"database": {
"version": 3,
"identityHash": "ace31b365ff79d4497319c74157538d7",
"entities": [
{
"tableName": "hosts_sources",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `url` TEXT NOT NULL, `enabled` INTEGER NOT NULL, `last_modified_local` INTEGER, `last_modified_online` INTEGER)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "url",
"columnName": "url",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "enabled",
"columnName": "enabled",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "lastLocalModification",
"columnName": "last_modified_local",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "lastOnlineModification",
"columnName": "last_modified_online",
"affinity": "INTEGER",
"notNull": false
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_hosts_sources_url",
"unique": true,
"columnNames": [
"url"
],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_hosts_sources_url` ON `${TABLE_NAME}` (`url`)"
}
],
"foreignKeys": []
},
{
"tableName": "hosts_lists",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `host` TEXT NOT NULL, `type` INTEGER NOT NULL, `enabled` INTEGER NOT NULL, `redirection` TEXT, `source_id` INTEGER NOT NULL, FOREIGN KEY(`source_id`) REFERENCES `hosts_sources`(`id`) ON UPDATE CASCADE ON DELETE CASCADE )",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "host",
"columnName": "host",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "type",
"columnName": "type",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "enabled",
"columnName": "enabled",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "redirection",
"columnName": "redirection",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "sourceId",
"columnName": "source_id",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_hosts_lists_host",
"unique": false,
"columnNames": [
"host"
],
"createSql": "CREATE INDEX IF NOT EXISTS `index_hosts_lists_host` ON `${TABLE_NAME}` (`host`)"
},
{
"name": "index_hosts_lists_source_id",
"unique": false,
"columnNames": [
"source_id"
],
"createSql": "CREATE INDEX IF NOT EXISTS `index_hosts_lists_source_id` ON `${TABLE_NAME}` (`source_id`)"
}
],
"foreignKeys": [
{
"table": "hosts_sources",
"onDelete": "CASCADE",
"onUpdate": "CASCADE",
"columns": [
"source_id"
],
"referencedColumns": [
"id"
]
}
]
}
],
"views": [
{
"viewName": "host_entries",
"createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT `host`, `type`, `redirection` FROM `hosts_lists` WHERE `enabled` = 1 AND ((`type` = 0 AND `host` NOT LIKE (SELECT `host` FROM `hosts_lists` WHERE `enabled` = 1 and `type` = 1)) OR `type` = 2) ORDER BY `host` ASC, `type` DESC, `redirection` ASC"
}
],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'ace31b365ff79d4497319c74157538d7')"
]
}
}
================================================
FILE: app/schemas/org.adaway.db.AppDatabase/4.json
================================================
{
"formatVersion": 1,
"database": {
"version": 4,
"identityHash": "80b1c1d47fbd109a4f052817c9faf980",
"entities": [
{
"tableName": "hosts_sources",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `url` TEXT NOT NULL, `enabled` INTEGER NOT NULL, `last_modified_local` INTEGER, `last_modified_online` INTEGER)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "url",
"columnName": "url",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "enabled",
"columnName": "enabled",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "localModificationDate",
"columnName": "last_modified_local",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "onlineModificationDate",
"columnName": "last_modified_online",
"affinity": "INTEGER",
"notNull": false
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_hosts_sources_url",
"unique": true,
"columnNames": [
"url"
],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_hosts_sources_url` ON `${TABLE_NAME}` (`url`)"
}
],
"foreignKeys": []
},
{
"tableName": "hosts_lists",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `host` TEXT NOT NULL, `type` INTEGER NOT NULL, `enabled` INTEGER NOT NULL, `redirection` TEXT, `source_id` INTEGER NOT NULL, FOREIGN KEY(`source_id`) REFERENCES `hosts_sources`(`id`) ON UPDATE CASCADE ON DELETE CASCADE )",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "host",
"columnName": "host",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "type",
"columnName": "type",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "enabled",
"columnName": "enabled",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "redirection",
"columnName": "redirection",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "sourceId",
"columnName": "source_id",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_hosts_lists_host",
"unique": false,
"columnNames": [
"host"
],
"createSql": "CREATE INDEX IF NOT EXISTS `index_hosts_lists_host` ON `${TABLE_NAME}` (`host`)"
},
{
"name": "index_hosts_lists_source_id",
"unique": false,
"columnNames": [
"source_id"
],
"createSql": "CREATE INDEX IF NOT EXISTS `index_hosts_lists_source_id` ON `${TABLE_NAME}` (`source_id`)"
}
],
"foreignKeys": [
{
"table": "hosts_sources",
"onDelete": "CASCADE",
"onUpdate": "CASCADE",
"columns": [
"source_id"
],
"referencedColumns": [
"id"
]
}
]
},
{
"tableName": "host_entries",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`host` TEXT NOT NULL, `type` INTEGER NOT NULL, `redirection` TEXT, PRIMARY KEY(`host`))",
"fields": [
{
"fieldPath": "host",
"columnName": "host",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "type",
"columnName": "type",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "redirection",
"columnName": "redirection",
"affinity": "TEXT",
"notNull": false
}
],
"primaryKey": {
"columnNames": [
"host"
],
"autoGenerate": false
},
"indices": [
{
"name": "index_host_entries_host",
"unique": true,
"columnNames": [
"host"
],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_host_entries_host` ON `${TABLE_NAME}` (`host`)"
}
],
"foreignKeys": []
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '80b1c1d47fbd109a4f052817c9faf980')"
]
}
}
================================================
FILE: app/schemas/org.adaway.db.AppDatabase/5.json
================================================
{
"formatVersion": 1,
"database": {
"version": 5,
"identityHash": "80b1c1d47fbd109a4f052817c9faf980",
"entities": [
{
"tableName": "hosts_sources",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `url` TEXT NOT NULL, `enabled` INTEGER NOT NULL, `last_modified_local` INTEGER, `last_modified_online` INTEGER)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "url",
"columnName": "url",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "enabled",
"columnName": "enabled",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "localModificationDate",
"columnName": "last_modified_local",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "onlineModificationDate",
"columnName": "last_modified_online",
"affinity": "INTEGER",
"notNull": false
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_hosts_sources_url",
"unique": true,
"columnNames": [
"url"
],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_hosts_sources_url` ON `${TABLE_NAME}` (`url`)"
}
],
"foreignKeys": []
},
{
"tableName": "hosts_lists",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `host` TEXT NOT NULL, `type` INTEGER NOT NULL, `enabled` INTEGER NOT NULL, `redirection` TEXT, `source_id` INTEGER NOT NULL, FOREIGN KEY(`source_id`) REFERENCES `hosts_sources`(`id`) ON UPDATE CASCADE ON DELETE CASCADE )",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "host",
"columnName": "host",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "type",
"columnName": "type",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "enabled",
"columnName": "enabled",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "redirection",
"columnName": "redirection",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "sourceId",
"columnName": "source_id",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_hosts_lists_host",
"unique": false,
"columnNames": [
"host"
],
"createSql": "CREATE INDEX IF NOT EXISTS `index_hosts_lists_host` ON `${TABLE_NAME}` (`host`)"
},
{
"name": "index_hosts_lists_source_id",
"unique": false,
"columnNames": [
"source_id"
],
"createSql": "CREATE INDEX IF NOT EXISTS `index_hosts_lists_source_id` ON `${TABLE_NAME}` (`source_id`)"
}
],
"foreignKeys": [
{
"table": "hosts_sources",
"onDelete": "CASCADE",
"onUpdate": "CASCADE",
"columns": [
"source_id"
],
"referencedColumns": [
"id"
]
}
]
},
{
"tableName": "host_entries",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`host` TEXT NOT NULL, `type` INTEGER NOT NULL, `redirection` TEXT, PRIMARY KEY(`host`))",
"fields": [
{
"fieldPath": "host",
"columnName": "host",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "type",
"columnName": "type",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "redirection",
"columnName": "redirection",
"affinity": "TEXT",
"notNull": false
}
],
"primaryKey": {
"columnNames": [
"host"
],
"autoGenerate": false
},
"indices": [
{
"name": "index_host_entries_host",
"unique": true,
"columnNames": [
"host"
],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_host_entries_host` ON `${TABLE_NAME}` (`host`)"
}
],
"foreignKeys": []
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '80b1c1d47fbd109a4f052817c9faf980')"
]
}
}
================================================
FILE: app/schemas/org.adaway.db.AppDatabase/6.json
================================================
{
"formatVersion": 1,
"database": {
"version": 6,
"identityHash": "c53f309b3cbcdeda90c9f22573023ac2",
"entities": [
{
"tableName": "hosts_sources",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `label` TEXT NOT NULL, `url` TEXT NOT NULL, `enabled` INTEGER NOT NULL, `allowEnabled` INTEGER NOT NULL, `redirectEnabled` INTEGER NOT NULL, `last_modified_local` INTEGER, `last_modified_online` INTEGER, `size` INTEGER NOT NULL)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "label",
"columnName": "label",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "url",
"columnName": "url",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "enabled",
"columnName": "enabled",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "allowEnabled",
"columnName": "allowEnabled",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "redirectEnabled",
"columnName": "redirectEnabled",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "localModificationDate",
"columnName": "last_modified_local",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "onlineModificationDate",
"columnName": "last_modified_online",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "size",
"columnName": "size",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_hosts_sources_url",
"unique": true,
"columnNames": [
"url"
],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_hosts_sources_url` ON `${TABLE_NAME}` (`url`)"
}
],
"foreignKeys": []
},
{
"tableName": "hosts_lists",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `host` TEXT NOT NULL, `type` INTEGER NOT NULL, `enabled` INTEGER NOT NULL, `redirection` TEXT, `source_id` INTEGER NOT NULL, FOREIGN KEY(`source_id`) REFERENCES `hosts_sources`(`id`) ON UPDATE CASCADE ON DELETE CASCADE )",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "host",
"columnName": "host",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "type",
"columnName": "type",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "enabled",
"columnName": "enabled",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "redirection",
"columnName": "redirection",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "sourceId",
"columnName": "source_id",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_hosts_lists_host",
"unique": false,
"columnNames": [
"host"
],
"createSql": "CREATE INDEX IF NOT EXISTS `index_hosts_lists_host` ON `${TABLE_NAME}` (`host`)"
},
{
"name": "index_hosts_lists_source_id",
"unique": false,
"columnNames": [
"source_id"
],
"createSql": "CREATE INDEX IF NOT EXISTS `index_hosts_lists_source_id` ON `${TABLE_NAME}` (`source_id`)"
}
],
"foreignKeys": [
{
"table": "hosts_sources",
"onDelete": "CASCADE",
"onUpdate": "CASCADE",
"columns": [
"source_id"
],
"referencedColumns": [
"id"
]
}
]
},
{
"tableName": "host_entries",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`host` TEXT NOT NULL, `type` INTEGER NOT NULL, `redirection` TEXT, PRIMARY KEY(`host`))",
"fields": [
{
"fieldPath": "host",
"columnName": "host",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "type",
"columnName": "type",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "redirection",
"columnName": "redirection",
"affinity": "TEXT",
"notNull": false
}
],
"primaryKey": {
"columnNames": [
"host"
],
"autoGenerate": false
},
"indices": [
{
"name": "index_host_entries_host",
"unique": true,
"columnNames": [
"host"
],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_host_entries_host` ON `${TABLE_NAME}` (`host`)"
}
],
"foreignKeys": []
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'c53f309b3cbcdeda90c9f22573023ac2')"
]
}
}
================================================
FILE: app/schemas/org.adaway.db.AppDatabase/7.json
================================================
{
"formatVersion": 1,
"database": {
"version": 7,
"identityHash": "dccd6211bcef97caed75ea42d7df1b32",
"entities": [
{
"tableName": "hosts_sources",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `label` TEXT NOT NULL, `url` TEXT NOT NULL, `enabled` INTEGER NOT NULL, `allowEnabled` INTEGER NOT NULL, `redirectEnabled` INTEGER NOT NULL, `last_modified_local` INTEGER, `last_modified_online` INTEGER, `entityTag` TEXT, `size` INTEGER NOT NULL)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "label",
"columnName": "label",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "url",
"columnName": "url",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "enabled",
"columnName": "enabled",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "allowEnabled",
"columnName": "allowEnabled",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "redirectEnabled",
"columnName": "redirectEnabled",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "localModificationDate",
"columnName": "last_modified_local",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "onlineModificationDate",
"columnName": "last_modified_online",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "entityTag",
"columnName": "entityTag",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "size",
"columnName": "size",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_hosts_sources_url",
"unique": true,
"columnNames": [
"url"
],
"orders": [],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_hosts_sources_url` ON `${TABLE_NAME}` (`url`)"
}
],
"foreignKeys": []
},
{
"tableName": "hosts_lists",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `host` TEXT NOT NULL, `type` INTEGER NOT NULL, `enabled` INTEGER NOT NULL, `redirection` TEXT, `source_id` INTEGER NOT NULL, FOREIGN KEY(`source_id`) REFERENCES `hosts_sources`(`id`) ON UPDATE CASCADE ON DELETE CASCADE )",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "host",
"columnName": "host",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "type",
"columnName": "type",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "enabled",
"columnName": "enabled",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "redirection",
"columnName": "redirection",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "sourceId",
"columnName": "source_id",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_hosts_lists_host",
"unique": false,
"columnNames": [
"host"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_hosts_lists_host` ON `${TABLE_NAME}` (`host`)"
},
{
"name": "index_hosts_lists_source_id",
"unique": false,
"columnNames": [
"source_id"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_hosts_lists_source_id` ON `${TABLE_NAME}` (`source_id`)"
}
],
"foreignKeys": [
{
"table": "hosts_sources",
"onDelete": "CASCADE",
"onUpdate": "CASCADE",
"columns": [
"source_id"
],
"referencedColumns": [
"id"
]
}
]
},
{
"tableName": "host_entries",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`host` TEXT NOT NULL, `type` INTEGER NOT NULL, `redirection` TEXT, PRIMARY KEY(`host`))",
"fields": [
{
"fieldPath": "host",
"columnName": "host",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "type",
"columnName": "type",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "redirection",
"columnName": "redirection",
"affinity": "TEXT",
"notNull": false
}
],
"primaryKey": {
"columnNames": [
"host"
],
"autoGenerate": false
},
"indices": [
{
"name": "index_host_entries_host",
"unique": true,
"columnNames": [
"host"
],
"orders": [],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_host_entries_host` ON `${TABLE_NAME}` (`host`)"
}
],
"foreignKeys": []
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'dccd6211bcef97caed75ea42d7df1b32')"
]
}
}
================================================
FILE: app/src/androidTest/java/org/adaway/db/DbTest.java
================================================
package org.adaway.db;
import static org.adaway.db.entity.HostsSource.USER_SOURCE_ID;
import static org.adaway.db.entity.HostsSource.USER_SOURCE_URL;
import static org.adaway.db.entity.ListType.ALLOWED;
import static org.adaway.db.entity.ListType.BLOCKED;
import static org.adaway.db.entity.ListType.REDIRECTED;
import static org.junit.Assert.fail;
import android.content.Context;
import androidx.annotation.Nullable;
import androidx.arch.core.executor.testing.InstantTaskExecutorRule;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.Observer;
import androidx.room.Room;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.adaway.db.dao.HostEntryDao;
import org.adaway.db.dao.HostListItemDao;
import org.adaway.db.dao.HostsSourceDao;
import org.adaway.db.entity.HostListItem;
import org.adaway.db.entity.HostsSource;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.rules.TestRule;
import org.junit.runner.RunWith;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
/**
* This class is a base class for testing database feature.
*
* @author Bruce BUJON (bruce.bujon(at)gmail(dot)com)
*/
@RunWith(AndroidJUnit4.class)
public abstract class DbTest {
protected static final int EXTERNAL_SOURCE_ID = 2;
@Rule
public TestRule rule = new InstantTaskExecutorRule();
protected AppDatabase db;
protected HostsSourceDao hostsSourceDao;
protected HostListItemDao hostListItemDao;
protected HostEntryDao hostEntryDao;
protected LiveData<Integer> blockedHostCount;
protected LiveData<Integer> allowedHostCount;
protected LiveData<Integer> redirectedHostCount;
protected HostsSource externalHostSource;
protected static <T> T getOrAwaitValue(final LiveData<T> liveData) throws InterruptedException {
final Object[] data = new Object[1];
final CountDownLatch latch = new CountDownLatch(1);
Observer<T> observer = new Observer<T>() {
@Override
public void onChanged(@Nullable T o) {
data[0] = o;
latch.countDown();
liveData.removeObserver(this);
}
};
liveData.observeForever(observer);
if (!latch.await(2, TimeUnit.SECONDS)) {
fail("Failed to get LiveData value in time");
}
//noinspection unchecked
return (T) data[0];
}
@Before
public void init() {
createDb();
loadDao();
createSources();
}
protected void createDb() {
Context context = ApplicationProvider.getApplicationContext();
this.db = Room.inMemoryDatabaseBuilder(context, AppDatabase.class)
.allowMainThreadQueries()
.build();
}
protected void loadDao() {
this.hostsSourceDao = this.db.hostsSourceDao();
this.hostListItemDao = this.db.hostsListItemDao();
this.hostEntryDao = this.db.hostEntryDao();
this.blockedHostCount = this.hostListItemDao.getBlockedHostCount();
this.allowedHostCount = this.hostListItemDao.getAllowedHostCount();
this.redirectedHostCount = this.hostListItemDao.getRedirectHostCount();
}
protected void createSources() {
// Insert at least user source and external source to allow duplicate hosts to be inserted
insertSource(USER_SOURCE_ID, USER_SOURCE_URL);
insertSource(EXTERNAL_SOURCE_ID, "https://adaway.org/hosts.txt");
this.externalHostSource = getSourceFromId(EXTERNAL_SOURCE_ID);
}
@After
public void closeDb() {
this.db.close();
}
protected void insertSource(int id, String url) {
HostsSource source = new HostsSource();
source.setId(id);
source.setLabel(url);
source.setUrl(url);
source.setEnabled(true);
this.hostsSourceDao.insert(source);
}
protected void insertBlockedHost(String host, int sourceId) {
HostListItem item = new HostListItem();
item.setType(BLOCKED);
item.setHost(host);
item.setEnabled(true);
item.setSourceId(sourceId);
this.hostListItemDao.insert(item);
}
protected void insertAllowedHost(String host, int sourceId) {
HostListItem item = new HostListItem();
item.setType(ALLOWED);
item.setHost(host);
item.setEnabled(true);
item.setSourceId(sourceId);
this.hostListItemDao.insert(item);
}
protected void insertRedirectedHost(String host, String redirection, int sourceId) {
HostListItem item = new HostListItem();
item.setType(REDIRECTED);
item.setHost(host);
item.setEnabled(true);
item.setRedirection(redirection);
item.setSourceId(sourceId);
this.hostListItemDao.insert(item);
}
protected HostsSource getSourceFromId(int id) {
return this.hostsSourceDao.getAll()
.stream()
.filter(hostsSource -> hostsSource.getId() == id)
.findAny()
.orElse(null);
}
}
================================================
FILE: app/src/androidTest/java/org/adaway/db/HostDbTest.java
================================================
package org.adaway.db;
import static org.adaway.db.entity.HostsSource.USER_SOURCE_ID;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import org.adaway.db.entity.HostEntry;
import org.junit.Test;
import java.util.List;
/**
* This class tests {@link org.adaway.db.entity.HostListItem} database manipulations.
*
* @author Bruce BUJON (bruce.bujon(at)gmail(dot)com)
*/
public class HostDbTest extends DbTest {
@Test
public void testEmptyByDefault() throws InterruptedException {
assertEquals(0, getOrAwaitValue(this.blockedHostCount).intValue());
assertEquals(0, getOrAwaitValue(this.allowedHostCount).intValue());
assertEquals(0, getOrAwaitValue(this.redirectedHostCount).intValue());
assertEquals(0, this.hostEntryDao.getAll().size());
}
@Test
public void testInsertThenDeleteHosts() throws InterruptedException {
// Insert blocked hosts
insertBlockedHost("advertising.apple.com", USER_SOURCE_ID);
insertBlockedHost("an.facebook.com", USER_SOURCE_ID);
this.hostEntryDao.sync();
// Check inserting
assertEquals(2, getOrAwaitValue(this.blockedHostCount).intValue());
assertEquals(0, getOrAwaitValue(this.allowedHostCount).intValue());
assertEquals(0, getOrAwaitValue(this.redirectedHostCount).intValue());
assertEquals(2, this.hostEntryDao.getAll().size());
// Remove block hosts
this.hostListItemDao.deleteUserFromHost("advertising.apple.com");
this.hostEntryDao.sync();
// Check deletion
assertEquals(1, getOrAwaitValue(this.blockedHostCount).intValue());
assertEquals(0, getOrAwaitValue(this.allowedHostCount).intValue());
assertEquals(0, getOrAwaitValue(this.redirectedHostCount).intValue());
assertEquals(1, this.hostEntryDao.getAll().size());
}
@Test
public void testDuplicateBlockedHosts() throws InterruptedException {
insertBlockedHost("advertising.apple.com", USER_SOURCE_ID);
insertBlockedHost("advertising.apple.com", EXTERNAL_SOURCE_ID);
this.hostEntryDao.sync();
assertEquals(1, getOrAwaitValue(this.blockedHostCount).intValue());
assertEquals(1, this.hostEntryDao.getAll().size());
}
@Test
public void testDuplicateAllowedHosts() throws InterruptedException {
insertAllowedHost("adaway.org", USER_SOURCE_ID);
insertAllowedHost("adaway.org", EXTERNAL_SOURCE_ID);
this.hostEntryDao.sync();
assertEquals(1, getOrAwaitValue(this.allowedHostCount).intValue());
assertEquals(0, this.hostEntryDao.getAll().size());
}
@Test
public void testDuplicateRedirectedHosts() throws InterruptedException {
insertRedirectedHost("github.com", "1.1.1.1", USER_SOURCE_ID);
insertRedirectedHost("github.com", "2.2.2.2", EXTERNAL_SOURCE_ID);
this.hostEntryDao.sync();
assertEquals(1, getOrAwaitValue(this.redirectedHostCount).intValue());
assertEquals(1, this.hostEntryDao.getAll().size());
}
@Test
public void testRedirectionPriority() throws InterruptedException {
// Insert two redirects for the same host
insertRedirectedHost("adaway.org", "1.1.1.1", USER_SOURCE_ID);
insertRedirectedHost("adaway.org", "2.2.2.2", EXTERNAL_SOURCE_ID);
this.hostEntryDao.sync();
// Test inserted redirected hosts
assertEquals(1, getOrAwaitValue(this.redirectedHostCount).intValue());
// Test inserted redirect
List<HostEntry> entries = this.hostEntryDao.getAll();
assertEquals(1, entries.size());
// Test user redirect is applied in priority
HostEntry entry = this.hostEntryDao.getEntry("adaway.org");
assertNotNull(entry);
assertEquals("1.1.1.1", entry.getRedirection());
}
}
================================================
FILE: app/src/androidTest/java/org/adaway/db/SourceDbTest.java
================================================
package org.adaway.db;
import static org.adaway.db.entity.HostsSource.USER_SOURCE_ID;
import static org.junit.Assert.assertEquals;
import org.adaway.db.entity.HostsSource;
import org.junit.Test;
import java.util.List;
/**
* This class tests {@link HostsSource} database manipulations.
*
* @author Bruce BUJON (bruce.bujon(at)gmail(dot)com)
*/
public class SourceDbTest extends DbTest {
@Test
public void testSourceCount() {
// Test only external source is found
List<HostsSource> sources = this.hostsSourceDao.getAll();
assertEquals(1, sources.size());
assertEquals("https://adaway.org/hosts.txt", sources.get(0).getUrl());
}
@Test
public void testSourceDeletion() throws InterruptedException {
// Insert blocked hosts
insertBlockedHost("bingads.microsoft.com", EXTERNAL_SOURCE_ID);
insertBlockedHost("ads.yahoo.com", EXTERNAL_SOURCE_ID);
this.hostEntryDao.sync();
// Test inserted blocked hosts
assertEquals(2, getOrAwaitValue(this.blockedHostCount).intValue());
assertEquals(2, this.hostEntryDao.getAll().size());
// Delete source
this.hostsSourceDao.delete(this.externalHostSource);
this.hostEntryDao.sync();
List<HostsSource> sources = this.hostsSourceDao.getAll();
assertEquals(0, sources.size());
// Check related hosts cleaning
assertEquals(0, getOrAwaitValue(this.blockedHostCount).intValue());
assertEquals(0, this.hostEntryDao.getAll().size());
}
@Test
public void testBlockedHostsFromDisabledSource() throws InterruptedException {
// Insert blocked hosts
insertBlockedHost("advertising.apple.com", USER_SOURCE_ID);
insertBlockedHost("an.facebook.com", USER_SOURCE_ID);
insertBlockedHost("ads.google.com", USER_SOURCE_ID);
insertBlockedHost("bingads.microsoft.com", EXTERNAL_SOURCE_ID);
insertBlockedHost("ads.yahoo.com", EXTERNAL_SOURCE_ID);
this.hostEntryDao.sync();
// Test inserted blocked hosts
assertEquals(5, getOrAwaitValue(this.blockedHostCount).intValue());
assertEquals(5, this.hostEntryDao.getAll().size());
// Disabled external source
this.hostsSourceDao.toggleEnabled(this.externalHostSource);
this.hostEntryDao.sync();
assertEquals(3, getOrAwaitValue(this.blockedHostCount).intValue());
assertEquals(3, this.hostEntryDao.getAll().size());
// Re-enable external source
this.hostsSourceDao.toggleEnabled(this.externalHostSource);
this.hostEntryDao.sync();
assertEquals(5, getOrAwaitValue(this.blockedHostCount).intValue());
assertEquals(5, this.hostEntryDao.getAll().size());
}
@Test
public void testAllowedHostsFromDisabledSource() throws InterruptedException {
// Insert blocked and allowed host
insertBlockedHost("adaway.org", USER_SOURCE_ID);
insertAllowedHost("adaway.org", EXTERNAL_SOURCE_ID);
this.hostEntryDao.sync();
// Test inserted blocked hosts
assertEquals(1, getOrAwaitValue(this.blockedHostCount).intValue());
assertEquals(1, getOrAwaitValue(this.allowedHostCount).intValue());
assertEquals(0, this.hostEntryDao.getAll().size());
// Disabled a source
this.hostsSourceDao.toggleEnabled(this.externalHostSource);
this.hostEntryDao.sync();
assertEquals(1, getOrAwaitValue(this.blockedHostCount).intValue());
assertEquals(0, getOrAwaitValue(this.allowedHostCount).intValue());
assertEquals(1, this.hostEntryDao.getAll().size());
// Re-enable a source
this.hostsSourceDao.toggleEnabled(this.externalHostSource);
this.hostEntryDao.sync();
assertEquals(1, getOrAwaitValue(this.blockedHostCount).intValue());
assertEquals(1, getOrAwaitValue(this.allowedHostCount).intValue());
assertEquals(0, this.hostEntryDao.getAll().size());
}
@Test
public void testRedirectedHostsFromDisabledSource() throws InterruptedException {
// Insert redirected hosts
insertRedirectedHost("github.com", "1.1.1.1", USER_SOURCE_ID);
insertRedirectedHost("github.com", "2.2.2.2", EXTERNAL_SOURCE_ID);
this.hostEntryDao.sync();
// Test inserted blocked hosts
assertEquals(1, getOrAwaitValue(this.redirectedHostCount).intValue());
assertEquals(1, this.hostEntryDao.getAll().size());
// Disabled a source
this.hostsSourceDao.toggleEnabled(this.externalHostSource);
this.hostEntryDao.sync();
assertEquals(1, getOrAwaitValue(this.redirectedHostCount).intValue());
assertEquals(1, this.hostEntryDao.getAll().size());
// Re-enable a source
this.hostsSourceDao.toggleEnabled(this.externalHostSource);
this.hostEntryDao.sync();
assertEquals(1, getOrAwaitValue(this.redirectedHostCount).intValue());
assertEquals(1, this.hostEntryDao.getAll().size());
}
}
================================================
FILE: app/src/androidTest/java/org/adaway/db/UserListTest.java
================================================
package org.adaway.db;
import static org.adaway.db.entity.HostsSource.USER_SOURCE_ID;
import static org.adaway.db.entity.ListType.ALLOWED;
import static org.adaway.db.entity.ListType.BLOCKED;
import static org.adaway.db.entity.ListType.REDIRECTED;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import org.adaway.db.entity.HostEntry;
import org.junit.Test;
/**
* This class the user lists use case where user can freely add blocked, allowed and redirected hosts.
*
* @author Bruce BUJON (bruce.bujon(at)gmail(dot)com)
*/
public class UserListTest extends DbTest {
@Test
public void testUserList() throws InterruptedException {
testUserBlockedHosts();
testUserAllowedHosts();
testUserRedirectedHosts();
}
protected void testUserBlockedHosts() throws InterruptedException {
// Insert blocked hosts
insertBlockedHost("advertising.apple.com", USER_SOURCE_ID);
insertBlockedHost("an.facebook.com", USER_SOURCE_ID);
insertBlockedHost("ads.google.com", USER_SOURCE_ID);
insertBlockedHost("bingads.microsoft.com", USER_SOURCE_ID);
insertBlockedHost("ads.yahoo.com", USER_SOURCE_ID);
this.hostEntryDao.sync();
// Test inserted blocked hosts
assertEquals(5, getOrAwaitValue(this.blockedHostCount).intValue());
assertEquals(5, this.hostEntryDao.getAll().size());
// Test each host type
assertEquals(BLOCKED, this.hostEntryDao.getTypeForHost("advertising.apple.com"));
HostEntry entry = this.hostEntryDao.getEntry("advertising.apple.com");
assertNotNull(entry);
assertEquals("advertising.apple.com", entry.getHost());
assertEquals(BLOCKED, entry.getType());
assertEquals(BLOCKED, this.hostEntryDao.getTypeForHost("an.facebook.com"));
entry = this.hostEntryDao.getEntry("an.facebook.com");
assertNotNull(entry);
assertEquals("an.facebook.com", entry.getHost());
assertEquals(BLOCKED, entry.getType());
assertEquals(BLOCKED, this.hostEntryDao.getTypeForHost("ads.google.com"));
entry = this.hostEntryDao.getEntry("ads.google.com");
assertNotNull(entry);
assertEquals("ads.google.com", entry.getHost());
assertEquals(BLOCKED, entry.getType());
assertEquals(BLOCKED, this.hostEntryDao.getTypeForHost("bingads.microsoft.com"));
entry = this.hostEntryDao.getEntry("bingads.microsoft.com");
assertNotNull(entry);
assertEquals("bingads.microsoft.com", entry.getHost());
assertEquals(BLOCKED, entry.getType());
assertEquals(BLOCKED, this.hostEntryDao.getTypeForHost("ads.yahoo.com"));
entry = this.hostEntryDao.getEntry("ads.yahoo.com");
assertNotNull(entry);
assertEquals("ads.yahoo.com", entry.getHost());
assertEquals(BLOCKED, entry.getType());
}
protected void testUserAllowedHosts() throws InterruptedException {
// Insert allowed hosts
insertAllowedHost("*.google.com", USER_SOURCE_ID);
insertAllowedHost("ads.yahoo.com", USER_SOURCE_ID);
insertAllowedHost("adaway.org", USER_SOURCE_ID);
this.hostEntryDao.sync();
// Test inserted allowed hosts
assertEquals(3, getOrAwaitValue(this.allowedHostCount).intValue());
// Test overall list
assertEquals(5, getOrAwaitValue(this.blockedHostCount).intValue());
assertEquals(3, this.hostEntryDao.getAll().size());
// Test each host type
assertEquals(ALLOWED, this.hostEntryDao.getTypeForHost("adaway.org"));
HostEntry entry = this.hostEntryDao.getEntry("adaway.org");
assertNull(entry);
assertEquals(BLOCKED, this.hostEntryDao.getTypeForHost("advertising.apple.com"));
entry = this.hostEntryDao.getEntry("advertising.apple.com");
assertNotNull(entry);
assertEquals("advertising.apple.com", entry.getHost());
assertEquals(BLOCKED, entry.getType());
assertEquals(BLOCKED, this.hostEntryDao.getTypeForHost("an.facebook.com"));
entry = this.hostEntryDao.getEntry("an.facebook.com");
assertNotNull(entry);
assertEquals("an.facebook.com", entry.getHost());
assertEquals(BLOCKED, entry.getType());
assertEquals(ALLOWED, this.hostEntryDao.getTypeForHost("ads.google.com"));
entry = this.hostEntryDao.getEntry("ads.google.com");
assertNull(entry);
assertEquals(BLOCKED, this.hostEntryDao.getTypeForHost("bingads.microsoft.com"));
entry = this.hostEntryDao.getEntry("bingads.microsoft.com");
assertNotNull(entry);
assertEquals("bingads.microsoft.com", entry.getHost());
assertEquals(BLOCKED, entry.getType());
assertEquals(ALLOWED, this.hostEntryDao.getTypeForHost("ads.yahoo.com"));
entry = this.hostEntryDao.getEntry("ads.yahoo.com");
assertNull(entry);
}
protected void testUserRedirectedHosts() throws InterruptedException {
// Insert redirected hosts
insertRedirectedHost("ads.yahoo.com", "1.2.3.4", USER_SOURCE_ID);
insertRedirectedHost("github.com", "1.2.3.4", USER_SOURCE_ID);
this.hos
gitextract_5fpoxdv0/
├── .github/
│ ├── CODEOWNERS
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── app_compatibility.yml
│ │ └── bug_report.yml
│ ├── dependabot.yml
│ └── workflows/
│ ├── AndroidLocaleChecker.java
│ ├── android-analysis.yml
│ ├── android-ci.yml
│ ├── android-locale-check.yml
│ └── issues-checker.yml
├── .gitignore
├── .tx/
│ ├── config
│ └── github-integration.yaml
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE.md
├── README.md
├── RELEASING.md
├── Resources/
│ ├── certificate/
│ │ ├── generate.sh
│ │ └── ssl.conf
│ ├── icon.xcf
│ ├── icon_background.xcf
│ ├── icon_foreground.xcf
│ └── test-webserver.sh
├── THIRD_PARTY_LICENSES.md
├── TRANSLATING.md
├── app/
│ ├── .gitignore
│ ├── build.gradle
│ ├── lint.xml
│ ├── proguard-rules.pro
│ ├── schemas/
│ │ └── org.adaway.db.AppDatabase/
│ │ ├── 1.json
│ │ ├── 2.json
│ │ ├── 3.json
│ │ ├── 4.json
│ │ ├── 5.json
│ │ ├── 6.json
│ │ └── 7.json
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── org/
│ │ └── adaway/
│ │ └── db/
│ │ ├── DbTest.java
│ │ ├── HostDbTest.java
│ │ ├── SourceDbTest.java
│ │ └── UserListTest.java
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── assets/
│ │ │ ├── localhost-2410.crt
│ │ │ ├── localhost-2410.key
│ │ │ └── test.html
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── adaway/
│ │ │ ├── AdAwayApplication.java
│ │ │ ├── broadcast/
│ │ │ │ ├── BootReceiver.java
│ │ │ │ ├── Command.java
│ │ │ │ ├── CommandReceiver.java
│ │ │ │ └── UpdateReceiver.java
│ │ │ ├── db/
│ │ │ │ ├── AppDatabase.java
│ │ │ │ ├── Migrations.java
│ │ │ │ ├── converter/
│ │ │ │ │ ├── ListTypeConverter.java
│ │ │ │ │ └── ZonedDateTimeConverter.java
│ │ │ │ ├── dao/
│ │ │ │ │ ├── HostEntryDao.java
│ │ │ │ │ ├── HostListItemDao.java
│ │ │ │ │ └── HostsSourceDao.java
│ │ │ │ └── entity/
│ │ │ │ ├── HostEntry.java
│ │ │ │ ├── HostListItem.java
│ │ │ │ ├── HostsSource.java
│ │ │ │ ├── ListType.java
│ │ │ │ └── SourceType.java
│ │ │ ├── helper/
│ │ │ │ ├── NotificationHelper.java
│ │ │ │ ├── PreferenceHelper.java
│ │ │ │ └── ThemeHelper.java
│ │ │ ├── model/
│ │ │ │ ├── adblocking/
│ │ │ │ │ ├── AdBlockMethod.java
│ │ │ │ │ ├── AdBlockModel.java
│ │ │ │ │ └── UndefinedBlockModel.java
│ │ │ │ ├── backup/
│ │ │ │ │ ├── AppBackupAgent.java
│ │ │ │ │ ├── BackupExporter.java
│ │ │ │ │ ├── BackupFormat.java
│ │ │ │ │ └── BackupImporter.java
│ │ │ │ ├── error/
│ │ │ │ │ ├── HostError.java
│ │ │ │ │ └── HostErrorException.java
│ │ │ │ ├── git/
│ │ │ │ │ ├── GistHostsSource.java
│ │ │ │ │ ├── GitHostsJsonApiSource.java
│ │ │ │ │ ├── GitHostsSource.java
│ │ │ │ │ ├── GitHubHostsSource.java
│ │ │ │ │ └── GitLabHostsSource.java
│ │ │ │ ├── root/
│ │ │ │ │ ├── CommandException.java
│ │ │ │ │ ├── MountType.java
│ │ │ │ │ ├── RootModel.java
│ │ │ │ │ ├── ShellUtils.java
│ │ │ │ │ ├── TcpdumpUtils.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── source/
│ │ │ │ │ ├── SourceLoader.java
│ │ │ │ │ ├── SourceModel.java
│ │ │ │ │ └── SourceUpdateService.java
│ │ │ │ ├── update/
│ │ │ │ │ ├── ApkDownloadReceiver.java
│ │ │ │ │ ├── ApkUpdateService.java
│ │ │ │ │ ├── Manifest.java
│ │ │ │ │ ├── UpdateModel.java
│ │ │ │ │ └── UpdateStore.java
│ │ │ │ └── vpn/
│ │ │ │ └── VpnModel.java
│ │ │ ├── tile/
│ │ │ │ └── AdBlockingTileService.java
│ │ │ ├── ui/
│ │ │ │ ├── Animations.java
│ │ │ │ ├── adblocking/
│ │ │ │ │ └── ApplyConfigurationSnackbar.java
│ │ │ │ ├── adware/
│ │ │ │ │ ├── AdwareFragment.java
│ │ │ │ │ ├── AdwareInstall.java
│ │ │ │ │ ├── AdwareLiveData.java
│ │ │ │ │ └── AdwareViewModel.java
│ │ │ │ ├── dialog/
│ │ │ │ │ ├── AlertDialogValidator.java
│ │ │ │ │ └── MissingAppDialog.java
│ │ │ │ ├── help/
│ │ │ │ │ ├── HelpActivity.java
│ │ │ │ │ └── HelpFragmentHtml.java
│ │ │ │ ├── home/
│ │ │ │ │ ├── HomeActivity.java
│ │ │ │ │ └── HomeViewModel.java
│ │ │ │ ├── hosts/
│ │ │ │ │ ├── HostsSourcesActivity.java
│ │ │ │ │ ├── HostsSourcesAdapter.java
│ │ │ │ │ ├── HostsSourcesFragment.java
│ │ │ │ │ ├── HostsSourcesViewCallback.java
│ │ │ │ │ └── HostsSourcesViewModel.java
│ │ │ │ ├── lists/
│ │ │ │ │ ├── ListsActivity.java
│ │ │ │ │ ├── ListsFilter.java
│ │ │ │ │ ├── ListsFragmentPagerAdapter.java
│ │ │ │ │ ├── ListsViewCallback.java
│ │ │ │ │ ├── ListsViewModel.java
│ │ │ │ │ └── type/
│ │ │ │ │ ├── AbstractListFragment.java
│ │ │ │ │ ├── AllowedHostsFragment.java
│ │ │ │ │ ├── BlockedHostsFragment.java
│ │ │ │ │ ├── ListsAdapter.java
│ │ │ │ │ └── RedirectedHostsFragment.java
│ │ │ │ ├── log/
│ │ │ │ │ ├── LogActivity.java
│ │ │ │ │ ├── LogAdapter.java
│ │ │ │ │ ├── LogEntry.java
│ │ │ │ │ ├── LogEntrySort.java
│ │ │ │ │ ├── LogViewCallback.java
│ │ │ │ │ └── LogViewModel.java
│ │ │ │ ├── prefs/
│ │ │ │ │ ├── PrefsActivity.java
│ │ │ │ │ ├── PrefsBackupRestoreFragment.java
│ │ │ │ │ ├── PrefsMainFragment.java
│ │ │ │ │ ├── PrefsRootFragment.java
│ │ │ │ │ ├── PrefsUpdateFragment.java
│ │ │ │ │ ├── PrefsVpnFragment.java
│ │ │ │ │ └── exclusion/
│ │ │ │ │ ├── ExcludedAppController.java
│ │ │ │ │ ├── PrefsVpnExcludedAppsActivity.java
│ │ │ │ │ ├── UserApp.java
│ │ │ │ │ └── UserAppRecycleViewAdapter.java
│ │ │ │ ├── source/
│ │ │ │ │ └── SourceEditActivity.java
│ │ │ │ ├── support/
│ │ │ │ │ └── SupportActivity.java
│ │ │ │ ├── update/
│ │ │ │ │ ├── CompleteDownloadStatus.java
│ │ │ │ │ ├── DownloadStatus.java
│ │ │ │ │ ├── PendingDownloadStatus.java
│ │ │ │ │ ├── UpdateActivity.java
│ │ │ │ │ └── UpdateViewModel.java
│ │ │ │ └── welcome/
│ │ │ │ ├── WelcomeActivity.java
│ │ │ │ ├── WelcomeFragment.java
│ │ │ │ ├── WelcomeMethodFragment.java
│ │ │ │ ├── WelcomeNavigable.java
│ │ │ │ ├── WelcomePagerAdapter.java
│ │ │ │ ├── WelcomeSupportFragment.java
│ │ │ │ └── WelcomeSyncFragment.java
│ │ │ ├── util/
│ │ │ │ ├── AppExecutors.java
│ │ │ │ ├── Clipboard.java
│ │ │ │ ├── Constants.java
│ │ │ │ ├── RegexUtils.java
│ │ │ │ ├── WebServerUtils.java
│ │ │ │ └── log/
│ │ │ │ ├── ApplicationLog.java
│ │ │ │ └── SentryLog.java
│ │ │ └── vpn/
│ │ │ ├── VpnService.java
│ │ │ ├── VpnServiceControls.java
│ │ │ ├── VpnServiceHeartbeat.java
│ │ │ ├── VpnStatus.java
│ │ │ ├── dns/
│ │ │ │ ├── DnsPacketProxy.java
│ │ │ │ ├── DnsQuery.java
│ │ │ │ ├── DnsQueryQueue.java
│ │ │ │ ├── DnsServerMapper.java
│ │ │ │ ├── DohPacketProxy.java
│ │ │ │ └── Subnet.java
│ │ │ └── worker/
│ │ │ ├── VpnBuilder.java
│ │ │ ├── VpnConnectionMonitor.java
│ │ │ ├── VpnConnectionThrottler.java
│ │ │ ├── VpnNetworkException.java
│ │ │ ├── VpnWatchdog.java
│ │ │ └── VpnWorker.java
│ │ └── res/
│ │ ├── animator/
│ │ │ ├── fragment_close_enter.xml
│ │ │ ├── fragment_close_exit.xml
│ │ │ ├── fragment_open_enter.xml
│ │ │ └── fragment_open_exit.xml
│ │ ├── drawable/
│ │ │ ├── baseline_block_24.xml
│ │ │ ├── baseline_check_24.xml
│ │ │ ├── baseline_clear_all_24.xml
│ │ │ ├── baseline_compare_arrows_24.xml
│ │ │ ├── baseline_edit_24.xml
│ │ │ ├── baseline_favorite_24.xml
│ │ │ ├── baseline_search_24.xml
│ │ │ ├── baseline_sort_by_alpha_24.xml
│ │ │ ├── dot.xml
│ │ │ ├── dot_outline.xml
│ │ │ ├── ic_add_black_24px.xml
│ │ │ ├── ic_add_circle_outline_24dp.xml
│ │ │ ├── ic_brightness_medium_24dp.xml
│ │ │ ├── ic_bug_report_24dp.xml
│ │ │ ├── ic_cloud_off_24dp.xml
│ │ │ ├── ic_collections_bookmark_24dp.xml
│ │ │ ├── ic_error_outline_24dp.xml
│ │ │ ├── ic_get_app_24dp.xml
│ │ │ ├── ic_github_24dp.xml
│ │ │ ├── ic_github_32dp.xml
│ │ │ ├── ic_help_24dp.xml
│ │ │ ├── ic_ipv6_24dp.xml
│ │ │ ├── ic_language_24dp.xml
│ │ │ ├── ic_language_red.xml
│ │ │ ├── ic_list_red.xml
│ │ │ ├── ic_menu_24dp.xml
│ │ │ ├── ic_outline_rule_24.xml
│ │ │ ├── ic_pause_24dp.xml
│ │ │ ├── ic_playlist_add_24dp.xml
│ │ │ ├── ic_record_24dp.xml
│ │ │ ├── ic_remove_circle_outline_24dp.xml
│ │ │ ├── ic_save_24dp.xml
│ │ │ ├── ic_sd_storage_24dp.xml
│ │ │ ├── ic_settings_24dp.xml
│ │ │ ├── ic_settings_backup_restore_24dp.xml
│ │ │ ├── ic_settings_red.xml
│ │ │ ├── ic_superuser_24dp.xml
│ │ │ ├── ic_sync_24dp.xml
│ │ │ ├── ic_vpn_key_24dp.xml
│ │ │ ├── icon_monochrome.xml
│ │ │ ├── logo.xml
│ │ │ ├── notifications_off_24.xml
│ │ │ ├── outline_cloud_upload_24.xml
│ │ │ ├── outline_create_24.xml
│ │ │ ├── outline_delete_24.xml
│ │ │ ├── paypal.xml
│ │ │ └── shadow.xml
│ │ ├── layout/
│ │ │ ├── adware_fragment.xml
│ │ │ ├── checkbox_list_entry.xml
│ │ │ ├── checkbox_list_two_entries.xml
│ │ │ ├── drawer_list_item.xml
│ │ │ ├── help_activity.xml
│ │ │ ├── help_fragment.xml
│ │ │ ├── home_activity.xml
│ │ │ ├── home_content.xml
│ │ │ ├── hosts_content_fragment.xml
│ │ │ ├── hosts_lists_fragment.xml
│ │ │ ├── hosts_sources_activity.xml
│ │ │ ├── hosts_sources_card.xml
│ │ │ ├── hosts_sources_dialog.xml
│ │ │ ├── hosts_sources_fragment.xml
│ │ │ ├── list_two_entries.xml
│ │ │ ├── lists_activity.xml
│ │ │ ├── lists_allowed_dialog.xml
│ │ │ ├── lists_blocked_dialog.xml
│ │ │ ├── lists_fragment.xml
│ │ │ ├── lists_redirected_dialog.xml
│ │ │ ├── log_activity.xml
│ │ │ ├── log_entry.xml
│ │ │ ├── log_redirect_dialog.xml
│ │ │ ├── pref_edittext_dialog.xml
│ │ │ ├── prefs_activity.xml
│ │ │ ├── reboot_dialog.xml
│ │ │ ├── source_edit_activity.xml
│ │ │ ├── support_activity.xml
│ │ │ ├── update_actity.xml
│ │ │ ├── vpn_excluded_app_activity.xml
│ │ │ ├── vpn_excluded_app_entry.xml
│ │ │ ├── welcome_activity.xml
│ │ │ ├── welcome_method_layout.xml
│ │ │ ├── welcome_support_layout.xml
│ │ │ └── welcome_sync_layout.xml
│ │ ├── menu/
│ │ │ ├── checkbox_list_context.xml
│ │ │ ├── home_drawer.xml
│ │ │ ├── list_menu.xml
│ │ │ ├── lists_navigation.xml
│ │ │ ├── log_menu.xml
│ │ │ ├── next_actions.xml
│ │ │ ├── source_edit_menu.xml
│ │ │ └── vpn_excluded_app_menu.xml
│ │ ├── mipmap-anydpi/
│ │ │ ├── icon.xml
│ │ │ ├── icon_round.xml
│ │ │ ├── shortcut_dns_requests.xml
│ │ │ ├── shortcut_preferences.xml
│ │ │ └── shortcut_your_lists.xml
│ │ ├── raw/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-af/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ar/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ast/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-az/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-be/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-bg/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-bn/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ca/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-cs/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-da/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-de/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-el/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-en-rUS/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-eo/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-es/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-es-rMX/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-et/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-eu/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-fa/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-fi/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-fil/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-fr/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-gl/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-hi/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-hr/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-hu/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-in/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-is/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-it/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-iw/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ja/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-km/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ko/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ku/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-lt/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ml/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ms/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-my/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-nb-rNO/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ne/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-nl/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-no/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-pa/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-pl/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ps/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-pt/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-pt-rBR/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ro/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ru/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-si/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-sk/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-sl/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-sq/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-sr/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-sv/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ta/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-th/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-tl/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-tr/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-uk/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-ur/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-uz/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-vi/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-zh/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── raw-zh-rTW/
│ │ │ ├── help_faq.html
│ │ │ ├── help_problems.html
│ │ │ └── help_s_on_s_off.html
│ │ ├── values/
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── preferences.xml
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_static.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ ├── strings_welcome.xml
│ │ │ └── styles.xml
│ │ ├── values-af/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ar/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ast/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-az/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-be/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-bg/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-bn/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ca/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-cs/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-da/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-de/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-el/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-en-rUS/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-eo/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-es/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-es-rMX/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-et/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-eu/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-fa/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-fi/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-fil/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-fr/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-gl/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-hi/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-hr/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-hu/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-in/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-is/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-it/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-iw/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ja/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-km/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ko/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ku/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-lt/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ml/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ms/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-my/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-nb-rNO/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ne/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-night/
│ │ │ ├── colors.xml
│ │ │ └── styles.xml
│ │ ├── values-nl/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-no/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-pa/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-pl/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ps/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-pt/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-pt-rBR/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ro/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ru/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-si/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-sk/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-sl/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-sq/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-sr/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-sv/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ta/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-th/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-tl/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-tr/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-uk/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-ur/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-uz/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-vi/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-zh/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ ├── values-zh-rTW/
│ │ │ ├── strings.xml
│ │ │ ├── strings_app.xml
│ │ │ ├── strings_errors.xml
│ │ │ ├── strings_home.xml
│ │ │ ├── strings_hosts.xml
│ │ │ ├── strings_lists.xml
│ │ │ ├── strings_log.xml
│ │ │ ├── strings_notification.xml
│ │ │ ├── strings_prefs_backup_restore.xml
│ │ │ ├── strings_prefs_main.xml
│ │ │ ├── strings_prefs_root.xml
│ │ │ ├── strings_prefs_update.xml
│ │ │ ├── strings_prefs_vpn.xml
│ │ │ ├── strings_source_edit.xml
│ │ │ ├── strings_support.xml
│ │ │ ├── strings_update.xml
│ │ │ └── strings_welcome.xml
│ │ └── xml/
│ │ ├── list_searchable.xml
│ │ ├── network_security_config.xml
│ │ ├── preferences_backup_restore.xml
│ │ ├── preferences_main.xml
│ │ ├── preferences_root.xml
│ │ ├── preferences_update.xml
│ │ ├── preferences_vpn.xml
│ │ └── shortcuts.xml
│ └── test/
│ └── java/
│ └── org/
│ └── adaway/
│ ├── model/
│ │ ├── git/
│ │ │ └── GitHostsSourceTest.java
│ │ └── source/
│ │ └── SourceLoaderTest.java
│ └── ui/
│ └── log/
│ └── LogEntrySortTest.java
├── build.gradle
├── gradle/
│ ├── libs.versions.toml
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── metadata/
│ ├── af/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ar/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ast/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── az/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── be/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── bg/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── bn/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ca/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── cs/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── da/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── de/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── el/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── en/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── en-US/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── eo/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── es/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── es-MX/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── es-rMX/
│ │ ├── full_description.txt
│ │ └── short_description.txt
│ ├── et/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── eu/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── fa/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── fi/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── fil/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── fr/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── gl/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── he/
│ │ └── short_description.txt
│ ├── hi/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── hr/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── hu/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── id/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── in/
│ │ ├── full_description.txt
│ │ └── short_description.txt
│ ├── is/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── it/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── iw/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ja/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── km/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ko/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ku/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── lt/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ml/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ms/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── my/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── nb-NO/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── nb-rNO/
│ │ ├── full_description.txt
│ │ └── short_description.txt
│ ├── ne/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── nl/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── no/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── pa/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── pl/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ps/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── pt/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── pt-BR/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ro/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ru/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── si/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── sk/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── sl/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── sq/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── sr/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── sv/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ta/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── th/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── tl/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── tr/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── uk/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── ur/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── uz/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── vi/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── zh/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ ├── zh-TW/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ └── zh-rTW/
│ ├── full_description.txt
│ └── short_description.txt
├── sentrystub/
│ ├── .gitignore
│ ├── build.gradle
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ └── java/
│ └── io/
│ └── sentry/
│ ├── Breadcrumb.java
│ ├── Integration.java
│ ├── Scope.java
│ ├── ScopeCallback.java
│ ├── Sentry.java
│ ├── SentryLevel.java
│ ├── SentryOptions.java
│ └── android/
│ ├── core/
│ │ └── SentryAndroid.java
│ ├── fragment/
│ │ └── FragmentLifecycleIntegration.java
│ └── timber/
│ └── SentryTimberIntegration.java
├── settings.gradle
├── tcpdump/
│ ├── build.gradle
│ ├── jni/
│ │ ├── Android.mk
│ │ ├── libpcap/
│ │ │ ├── Android.mk
│ │ │ ├── CHANGES
│ │ │ ├── CREDITS
│ │ │ ├── ChmodBPF/
│ │ │ │ ├── ChmodBPF
│ │ │ │ └── StartupParameters.plist
│ │ │ ├── CleanSpec.mk
│ │ │ ├── INSTALL.txt
│ │ │ ├── LICENSE
│ │ │ ├── Makefile-devel-adds
│ │ │ ├── Makefile.in
│ │ │ ├── README
│ │ │ ├── README.Win32
│ │ │ ├── README.aix
│ │ │ ├── README.dag
│ │ │ ├── README.hpux
│ │ │ ├── README.linux
│ │ │ ├── README.macosx
│ │ │ ├── README.septel
│ │ │ ├── README.sita
│ │ │ ├── README.tru64
│ │ │ ├── SUNOS4/
│ │ │ │ ├── nit_if.o.sparc
│ │ │ │ ├── nit_if.o.sun3
│ │ │ │ └── nit_if.o.sun4c.4.0.3c
│ │ │ ├── TODO
│ │ │ ├── VERSION
│ │ │ ├── Win32/
│ │ │ │ ├── Include/
│ │ │ │ │ ├── Gnuc.h
│ │ │ │ │ ├── addrinfo.h
│ │ │ │ │ ├── arpa/
│ │ │ │ │ │ └── nameser.h
│ │ │ │ │ ├── bittypes.h
│ │ │ │ │ ├── cdecl_ext.h
│ │ │ │ │ ├── inetprivate.h
│ │ │ │ │ ├── ip6_misc.h
│ │ │ │ │ ├── net/
│ │ │ │ │ │ ├── if.h
│ │ │ │ │ │ ├── netdb.h
│ │ │ │ │ │ └── paths.h
│ │ │ │ │ └── sockstorage.h
│ │ │ │ ├── Prj/
│ │ │ │ │ ├── libpcap.dsp
│ │ │ │ │ └── libpcap.dsw
│ │ │ │ └── Src/
│ │ │ │ ├── ffs.c
│ │ │ │ ├── gai_strerror.c
│ │ │ │ ├── getaddrinfo.c
│ │ │ │ ├── getnetbynm.c
│ │ │ │ ├── getnetent.c
│ │ │ │ ├── getopt.c
│ │ │ │ ├── getservent.c
│ │ │ │ ├── inet_aton.c
│ │ │ │ ├── inet_net.c
│ │ │ │ └── inet_pton.c
│ │ │ ├── aclocal.m4
│ │ │ ├── arcnet.h
│ │ │ ├── atmuni31.h
│ │ │ ├── bpf/
│ │ │ │ └── net/
│ │ │ │ └── bpf_filter.c
│ │ │ ├── bpf_dump.c
│ │ │ ├── bpf_filter.c
│ │ │ ├── bpf_image.c
│ │ │ ├── chmod_bpf
│ │ │ ├── config.guess
│ │ │ ├── config.h
│ │ │ ├── config.h.in
│ │ │ ├── config.sub
│ │ │ ├── configure
│ │ │ ├── configure.in
│ │ │ ├── dlpisubs.c
│ │ │ ├── dlpisubs.h
│ │ │ ├── doc/
│ │ │ │ ├── pcap.html
│ │ │ │ ├── pcap.txt
│ │ │ │ └── pcap.xml
│ │ │ ├── etherent.c
│ │ │ ├── ethertype.h
│ │ │ ├── fad-getad.c
│ │ │ ├── fad-gifc.c
│ │ │ ├── fad-glifc.c
│ │ │ ├── fad-null.c
│ │ │ ├── fad-sita.c
│ │ │ ├── fad-win32.c
│ │ │ ├── gencode.c
│ │ │ ├── gencode.h
│ │ │ ├── grammar.c
│ │ │ ├── grammar.y
│ │ │ ├── ieee80211.h
│ │ │ ├── inet.c
│ │ │ ├── install-sh
│ │ │ ├── lbl/
│ │ │ │ ├── os-aix4.h
│ │ │ │ ├── os-hpux11.h
│ │ │ │ ├── os-osf4.h
│ │ │ │ ├── os-osf5.h
│ │ │ │ ├── os-solaris2.h
│ │ │ │ ├── os-sunos4.h
│ │ │ │ └── os-ultrix4.h
│ │ │ ├── llc.h
│ │ │ ├── missing/
│ │ │ │ └── snprintf.c
│ │ │ ├── mkdep
│ │ │ ├── msdos/
│ │ │ │ ├── bin2c.c
│ │ │ │ ├── common.dj
│ │ │ │ ├── makefile
│ │ │ │ ├── makefile.dj
│ │ │ │ ├── makefile.wc
│ │ │ │ ├── ndis2.c
│ │ │ │ ├── ndis2.h
│ │ │ │ ├── ndis_0.asm
│ │ │ │ ├── pkt_rx0.asm
│ │ │ │ ├── pkt_rx1.s
│ │ │ │ ├── pktdrvr.c
│ │ │ │ ├── pktdrvr.h
│ │ │ │ └── readme.dos
│ │ │ ├── nametoaddr.c
│ │ │ ├── nlpid.h
│ │ │ ├── optimize.c
│ │ │ ├── org.tcpdump.chmod_bpf.plist
│ │ │ ├── packaging/
│ │ │ │ └── pcap.spec.in
│ │ │ ├── pcap/
│ │ │ │ ├── bluetooth.h
│ │ │ │ ├── bpf.h
│ │ │ │ ├── ipnet.h
│ │ │ │ ├── namedb.h
│ │ │ │ ├── nflog.h
│ │ │ │ ├── pcap.h
│ │ │ │ ├── sll.h
│ │ │ │ ├── usb.h
│ │ │ │ └── vlan.h
│ │ │ ├── pcap-bpf.c
│ │ │ ├── pcap-bpf.h
│ │ │ ├── pcap-bt-linux.c
│ │ │ ├── pcap-bt-linux.h
│ │ │ ├── pcap-bt-monitor-linux.c
│ │ │ ├── pcap-bt-monitor-linux.h
│ │ │ ├── pcap-can-linux.c
│ │ │ ├── pcap-can-linux.h
│ │ │ ├── pcap-canusb-linux.c
│ │ │ ├── pcap-canusb-linux.h
│ │ │ ├── pcap-common.c
│ │ │ ├── pcap-common.h
│ │ │ ├── pcap-config.1
│ │ │ ├── pcap-config.in
│ │ │ ├── pcap-dag.c
│ │ │ ├── pcap-dag.h
│ │ │ ├── pcap-dbus.c
│ │ │ ├── pcap-dbus.h
│ │ │ ├── pcap-dlpi.c
│ │ │ ├── pcap-dos.c
│ │ │ ├── pcap-dos.h
│ │ │ ├── pcap-enet.c
│ │ │ ├── pcap-filter.manmisc.in
│ │ │ ├── pcap-int.h
│ │ │ ├── pcap-libdlpi.c
│ │ │ ├── pcap-linktype.manmisc.in
│ │ │ ├── pcap-linux.c
│ │ │ ├── pcap-namedb.h
│ │ │ ├── pcap-netfilter-linux.c
│ │ │ ├── pcap-netfilter-linux.h
│ │ │ ├── pcap-nit.c
│ │ │ ├── pcap-null.c
│ │ │ ├── pcap-pf.c
│ │ │ ├── pcap-savefile.manfile.in
│ │ │ ├── pcap-septel.c
│ │ │ ├── pcap-septel.h
│ │ │ ├── pcap-sita.c
│ │ │ ├── pcap-sita.h
│ │ │ ├── pcap-sita.html
│ │ │ ├── pcap-snf.c
│ │ │ ├── pcap-snf.h
│ │ │ ├── pcap-snit.c
│ │ │ ├── pcap-snoop.c
│ │ │ ├── pcap-stdinc.h
│ │ │ ├── pcap-tstamp.manmisc.in
│ │ │ ├── pcap-usb-linux.c
│ │ │ ├── pcap-usb-linux.h
│ │ │ ├── pcap-win32.c
│ │ │ ├── pcap.3pcap.in
│ │ │ ├── pcap.c
│ │ │ ├── pcap.h
│ │ │ ├── pcap1.h
│ │ │ ├── pcap_activate.3pcap
│ │ │ ├── pcap_breakloop.3pcap
│ │ │ ├── pcap_can_set_rfmon.3pcap
│ │ │ ├── pcap_close.3pcap
│ │ │ ├── pcap_compile.3pcap.in
│ │ │ ├── pcap_create.3pcap
│ │ │ ├── pcap_datalink.3pcap.in
│ │ │ ├── pcap_datalink_name_to_val.3pcap
│ │ │ ├── pcap_datalink_val_to_name.3pcap
│ │ │ ├── pcap_dump.3pcap
│ │ │ ├── pcap_dump_close.3pcap
│ │ │ ├── pcap_dump_file.3pcap
│ │ │ ├── pcap_dump_flush.3pcap
│ │ │ ├── pcap_dump_ftell.3pcap
│ │ │ ├── pcap_dump_open.3pcap.in
│ │ │ ├── pcap_file.3pcap
│ │ │ ├── pcap_fileno.3pcap
│ │ │ ├── pcap_findalldevs.3pcap
│ │ │ ├── pcap_freecode.3pcap
│ │ │ ├── pcap_get_selectable_fd.3pcap
│ │ │ ├── pcap_get_tstamp_precision.3pcap.in
│ │ │ ├── pcap_geterr.3pcap
│ │ │ ├── pcap_inject.3pcap
│ │ │ ├── pcap_is_swapped.3pcap
│ │ │ ├── pcap_lib_version.3pcap
│ │ │ ├── pcap_list_datalinks.3pcap.in
│ │ │ ├── pcap_list_tstamp_types.3pcap.in
│ │ │ ├── pcap_lookupdev.3pcap
│ │ │ ├── pcap_lookupnet.3pcap
│ │ │ ├── pcap_loop.3pcap
│ │ │ ├── pcap_major_version.3pcap
│ │ │ ├── pcap_next_ex.3pcap
│ │ │ ├── pcap_offline_filter.3pcap
│ │ │ ├── pcap_open_dead.3pcap.in
│ │ │ ├── pcap_open_live.3pcap
│ │ │ ├── pcap_open_offline.3pcap.in
│ │ │ ├── pcap_set_buffer_size.3pcap
│ │ │ ├── pcap_set_datalink.3pcap
│ │ │ ├── pcap_set_immediate_mode.3pcap
│ │ │ ├── pcap_set_promisc.3pcap
│ │ │ ├── pcap_set_rfmon.3pcap
│ │ │ ├── pcap_set_snaplen.3pcap
│ │ │ ├── pcap_set_timeout.3pcap
│ │ │ ├── pcap_set_tstamp_precision.3pcap.in
│ │ │ ├── pcap_set_tstamp_type.3pcap.in
│ │ │ ├── pcap_setdirection.3pcap
│ │ │ ├── pcap_setfilter.3pcap
│ │ │ ├── pcap_setnonblock.3pcap
│ │ │ ├── pcap_snapshot.3pcap
│ │ │ ├── pcap_stats.3pcap
│ │ │ ├── pcap_statustostr.3pcap
│ │ │ ├── pcap_strerror.3pcap
│ │ │ ├── pcap_tstamp_type_name_to_val.3pcap
│ │ │ ├── pcap_tstamp_type_val_to_name.3pcap
│ │ │ ├── ppp.h
│ │ │ ├── runlex.sh
│ │ │ ├── savefile.c
│ │ │ ├── scanner.c
│ │ │ ├── scanner.c.top
│ │ │ ├── scanner.h
│ │ │ ├── scanner.l
│ │ │ ├── sf-pcap-ng.c
│ │ │ ├── sf-pcap-ng.h
│ │ │ ├── sf-pcap.c
│ │ │ ├── sf-pcap.h
│ │ │ ├── sunatmpos.h
│ │ │ ├── tests/
│ │ │ │ ├── BPF/
│ │ │ │ │ ├── 1.txt
│ │ │ │ │ ├── 2.txt
│ │ │ │ │ ├── 3.txt
│ │ │ │ │ ├── 4.txt
│ │ │ │ │ ├── 5.txt
│ │ │ │ │ ├── 6.txt
│ │ │ │ │ └── 7.txt
│ │ │ │ ├── capturetest.c
│ │ │ │ ├── filtertest.c
│ │ │ │ ├── findalldevstest.c
│ │ │ │ ├── nonblocktest.c
│ │ │ │ ├── opentest.c
│ │ │ │ ├── pcap_compile_test.c
│ │ │ │ ├── reactivatetest.c
│ │ │ │ ├── selpolltest.c
│ │ │ │ ├── valgrindtest.c
│ │ │ │ └── visopts.py
│ │ │ ├── tokdefs.h
│ │ │ ├── version.c
│ │ │ └── version.h
│ │ ├── stub/
│ │ │ ├── Android.mk
│ │ │ └── stub.c
│ │ └── tcpdump/
│ │ ├── Android.mk
│ │ ├── CHANGES
│ │ ├── CREDITS
│ │ ├── CleanSpec.mk
│ │ ├── INSTALL.txt
│ │ ├── LICENSE
│ │ ├── Makefile-devel-adds
│ │ ├── Makefile.in
│ │ ├── PLATFORMS
│ │ ├── README
│ │ ├── README.md
│ │ ├── Readme.Win32
│ │ ├── TODO
│ │ ├── VERSION
│ │ ├── aclocal.m4
│ │ ├── addrtoname.c
│ │ ├── addrtoname.h
│ │ ├── af.c
│ │ ├── af.h
│ │ ├── ah.h
│ │ ├── aodv.h
│ │ ├── appletalk.h
│ │ ├── arcnet.h
│ │ ├── atime.awk
│ │ ├── atm.h
│ │ ├── atmuni31.h
│ │ ├── bgp.h
│ │ ├── bootp.h
│ │ ├── bpf_dump.c
│ │ ├── chdlc.h
│ │ ├── checksum.c
│ │ ├── config.guess
│ │ ├── config.h
│ │ ├── config.h.in
│ │ ├── config.sub
│ │ ├── configure
│ │ ├── configure.in
│ │ ├── cpack.c
│ │ ├── cpack.h
│ │ ├── dccp.h
│ │ ├── decnet.h
│ │ ├── decode_prefix.h
│ │ ├── enc.h
│ │ ├── esp.h
│ │ ├── ether.h
│ │ ├── ethertype.h
│ │ ├── extract.h
│ │ ├── fddi.h
│ │ ├── getopt_long.h
│ │ ├── gmpls.c
│ │ ├── gmpls.h
│ │ ├── gmt2local.c
│ │ ├── gmt2local.h
│ │ ├── icmp6.h
│ │ ├── ieee802_11.h
│ │ ├── ieee802_11_radio.h
│ │ ├── igrp.h
│ │ ├── in_cksum.c
│ │ ├── install-sh
│ │ ├── interface.h
│ │ ├── ip.h
│ │ ├── ip6.h
│ │ ├── ipfc.h
│ │ ├── ipnet.h
│ │ ├── ipproto.c
│ │ ├── ipproto.h
│ │ ├── ipsec_doi.h
│ │ ├── ipx.h
│ │ ├── isakmp.h
│ │ ├── l2tp.h
│ │ ├── l2vpn.c
│ │ ├── l2vpn.h
│ │ ├── lane.h
│ │ ├── lbl/
│ │ │ ├── os-osf4.h
│ │ │ ├── os-solaris2.h
│ │ │ ├── os-sunos4.h
│ │ │ └── os-ultrix4.h
│ │ ├── llc.h
│ │ ├── machdep.c
│ │ ├── machdep.h
│ │ ├── makemib
│ │ ├── mib.h
│ │ ├── missing/
│ │ │ ├── addrinfo.h
│ │ │ ├── datalinks.c
│ │ │ ├── dlnames.c
│ │ │ ├── getnameinfo.c
│ │ │ ├── getopt_long.c
│ │ │ ├── inet_aton.c
│ │ │ ├── inet_ntop.c
│ │ │ ├── inet_pton.c
│ │ │ ├── snprintf.c
│ │ │ ├── sockstorage.h
│ │ │ ├── strdup.c
│ │ │ ├── strlcat.c
│ │ │ ├── strlcpy.c
│ │ │ └── strsep.c
│ │ ├── mkdep
│ │ ├── mpls.h
│ │ ├── mptcp.h
│ │ ├── nameser.h
│ │ ├── netbios.h
│ │ ├── netdissect.h
│ │ ├── nfs.h
│ │ ├── nfsfh.h
│ │ ├── nlpid.c
│ │ ├── nlpid.h
│ │ ├── ntp.h
│ │ ├── oakley.h
│ │ ├── openflow.h
│ │ ├── ospf.h
│ │ ├── ospf6.h
│ │ ├── oui.c
│ │ ├── oui.h
│ │ ├── packetdat.awk
│ │ ├── parsenfsfh.c
│ │ ├── pcap-missing.h
│ │ ├── pcap_dump_ftell.c
│ │ ├── pmap_prot.h
│ │ ├── ppi.h
│ │ ├── ppp.h
│ │ ├── print-802_11.c
│ │ ├── print-802_15_4.c
│ │ ├── print-ah.c
│ │ ├── print-ahcp.c
│ │ ├── print-aodv.c
│ │ ├── print-aoe.c
│ │ ├── print-ap1394.c
│ │ ├── print-arcnet.c
│ │ ├── print-arp.c
│ │ ├── print-ascii.c
│ │ ├── print-atalk.c
│ │ ├── print-atm.c
│ │ ├── print-babel.c
│ │ ├── print-beep.c
│ │ ├── print-bfd.c
│ │ ├── print-bgp.c
│ │ ├── print-bootp.c
│ │ ├── print-bt.c
│ │ ├── print-calm-fast.c
│ │ ├── print-carp.c
│ │ ├── print-cdp.c
│ │ ├── print-cfm.c
│ │ ├── print-chdlc.c
│ │ ├── print-cip.c
│ │ ├── print-cnfp.c
│ │ ├── print-dccp.c
│ │ ├── print-decnet.c
│ │ ├── print-dhcp6.c
│ │ ├── print-domain.c
│ │ ├── print-dtp.c
│ │ ├── print-dvmrp.c
│ │ ├── print-eap.c
│ │ ├── print-egp.c
│ │ ├── print-eigrp.c
│ │ ├── print-enc.c
│ │ ├── print-esp.c
│ │ ├── print-ether.c
│ │ ├── print-fddi.c
│ │ ├── print-forces.c
│ │ ├── print-fr.c
│ │ ├── print-frag6.c
│ │ ├── print-ftp.c
│ │ ├── print-geneve.c
│ │ ├── print-geonet.c
│ │ ├── print-gre.c
│ │ ├── print-hsrp.c
│ │ ├── print-http.c
│ │ ├── print-icmp.c
│ │ ├── print-icmp6.c
│ │ ├── print-igmp.c
│ │ ├── print-igrp.c
│ │ ├── print-ip.c
│ │ ├── print-ip6.c
│ │ ├── print-ip6opts.c
│ │ ├── print-ipcomp.c
│ │ ├── print-ipfc.c
│ │ ├── print-ipnet.c
│ │ ├── print-ipx.c
│ │ ├── print-isakmp.c
│ │ ├── print-isoclns.c
│ │ ├── print-juniper.c
│ │ ├── print-krb.c
│ │ ├── print-l2tp.c
│ │ ├── print-lane.c
│ │ ├── print-ldp.c
│ │ ├── print-llc.c
│ │ ├── print-lldp.c
│ │ ├── print-lmp.c
│ │ ├── print-loopback.c
│ │ ├── print-lspping.c
│ │ ├── print-lwapp.c
│ │ ├── print-lwres.c
│ │ ├── print-m3ua.c
│ │ ├── print-mobile.c
│ │ ├── print-mobility.c
│ │ ├── print-mpcp.c
│ │ ├── print-mpls.c
│ │ ├── print-mptcp.c
│ │ ├── print-msdp.c
│ │ ├── print-msnlb.c
│ │ ├── print-netbios.c
│ │ ├── print-nflog.c
│ │ ├── print-nfs.c
│ │ ├── print-ntp.c
│ │ ├── print-null.c
│ │ ├── print-olsr.c
│ │ ├── print-openflow-1.0.c
│ │ ├── print-openflow.c
│ │ ├── print-ospf.c
│ │ ├── print-ospf6.c
│ │ ├── print-otv.c
│ │ ├── print-pflog.c
│ │ ├── print-pgm.c
│ │ ├── print-pim.c
│ │ ├── print-pktap.c
│ │ ├── print-ppi.c
│ │ ├── print-ppp.c
│ │ ├── print-pppoe.c
│ │ ├── print-pptp.c
│ │ ├── print-radius.c
│ │ ├── print-raw.c
│ │ ├── print-rip.c
│ │ ├── print-ripng.c
│ │ ├── print-rpki-rtr.c
│ │ ├── print-rrcp.c
│ │ ├── print-rsvp.c
│ │ ├── print-rt6.c
│ │ ├── print-rtsp.c
│ │ ├── print-rx.c
│ │ ├── print-sctp.c
│ │ ├── print-sflow.c
│ │ ├── print-sip.c
│ │ ├── print-sl.c
│ │ ├── print-sll.c
│ │ ├── print-slow.c
│ │ ├── print-smb.c
│ │ ├── print-smtp.c
│ │ ├── print-snmp.c
│ │ ├── print-stp.c
│ │ ├── print-sunatm.c
│ │ ├── print-sunrpc.c
│ │ ├── print-symantec.c
│ │ ├── print-syslog.c
│ │ ├── print-tcp.c
│ │ ├── print-telnet.c
│ │ ├── print-tftp.c
│ │ ├── print-timed.c
│ │ ├── print-tipc.c
│ │ ├── print-token.c
│ │ ├── print-udld.c
│ │ ├── print-udp.c
│ │ ├── print-usb.c
│ │ ├── print-vjc.c
│ │ ├── print-vqp.c
│ │ ├── print-vrrp.c
│ │ ├── print-vtp.c
│ │ ├── print-vxlan.c
│ │ ├── print-wb.c
│ │ ├── print-zephyr.c
│ │ ├── print-zeromq.c
│ │ ├── route6d.h
│ │ ├── rpc_auth.h
│ │ ├── rpc_msg.h
│ │ ├── rpl.h
│ │ ├── rx.h
│ │ ├── sctpConstants.h
│ │ ├── sctpHeader.h
│ │ ├── send-ack.awk
│ │ ├── setsignal.c
│ │ ├── setsignal.h
│ │ ├── signature.c
│ │ ├── signature.h
│ │ ├── slcompress.h
│ │ ├── slip.h
│ │ ├── sll.h
│ │ ├── smb.h
│ │ ├── smbutil.c
│ │ ├── stime.awk
│ │ ├── strcasecmp.c
│ │ ├── tcp.h
│ │ ├── tcpdump-stdinc.h
│ │ ├── tcpdump.1.in
│ │ ├── tcpdump.c
│ │ ├── telnet.h
│ │ ├── tftp.h
│ │ ├── timed.h
│ │ ├── token.h
│ │ ├── udp.h
│ │ ├── util.c
│ │ ├── version.c
│ │ ├── vfprintf.c
│ │ └── win32/
│ │ ├── Include/
│ │ │ ├── bittypes.h
│ │ │ ├── errno.h
│ │ │ ├── getopt.h
│ │ │ └── w32_fzs.h
│ │ ├── Src/
│ │ │ └── getopt.c
│ │ ├── prj/
│ │ │ ├── GNUmakefile
│ │ │ ├── WinDump.dsp
│ │ │ ├── WinDump.dsw
│ │ │ ├── WinDump.sln
│ │ │ └── WinDump.vcproj
│ │ └── src/
│ │ └── ether_ntohost.c
│ └── src/
│ └── main/
│ └── AndroidManifest.xml
└── webserver/
├── build.gradle
├── jni/
│ ├── Android.mk
│ ├── Application.mk
│ ├── mongoose/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── mongoose.c
│ │ └── mongoose.h
│ ├── stub.c
│ └── webserver.c
└── src/
└── main/
└── AndroidManifest.xml
Showing preview only (451K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6990 symbols across 486 files)
FILE: .github/workflows/AndroidLocaleChecker.java
class AndroidLocaleChecker (line 15) | public class AndroidLocaleChecker {
method main (line 30) | public static void main(String[] args) {
method isLocalePath (line 51) | private static boolean isLocalePath(Path projectFilePath) {
method validateLocalePath (line 67) | private static boolean validateLocalePath(Path localePath) {
method validateHeader (line 87) | private static boolean validateHeader(List<String> lines) {
method validateEllipsis (line 104) | private static boolean validateEllipsis(List<String> lines) {
FILE: app/src/androidTest/java/org/adaway/db/DbTest.java
class DbTest (line 39) | @RunWith(AndroidJUnit4.class)
method getOrAwaitValue (line 53) | protected static <T> T getOrAwaitValue(final LiveData<T> liveData) thr...
method init (line 72) | @Before
method createDb (line 79) | protected void createDb() {
method loadDao (line 86) | protected void loadDao() {
method createSources (line 95) | protected void createSources() {
method closeDb (line 102) | @After
method insertSource (line 107) | protected void insertSource(int id, String url) {
method insertBlockedHost (line 116) | protected void insertBlockedHost(String host, int sourceId) {
method insertAllowedHost (line 125) | protected void insertAllowedHost(String host, int sourceId) {
method insertRedirectedHost (line 134) | protected void insertRedirectedHost(String host, String redirection, i...
method getSourceFromId (line 144) | protected HostsSource getSourceFromId(int id) {
FILE: app/src/androidTest/java/org/adaway/db/HostDbTest.java
class HostDbTest (line 17) | public class HostDbTest extends DbTest {
method testEmptyByDefault (line 18) | @Test
method testInsertThenDeleteHosts (line 26) | @Test
method testDuplicateBlockedHosts (line 47) | @Test
method testDuplicateAllowedHosts (line 56) | @Test
method testDuplicateRedirectedHosts (line 65) | @Test
method testRedirectionPriority (line 74) | @Test
FILE: app/src/androidTest/java/org/adaway/db/SourceDbTest.java
class SourceDbTest (line 16) | public class SourceDbTest extends DbTest {
method testSourceCount (line 17) | @Test
method testSourceDeletion (line 25) | @Test
method testBlockedHostsFromDisabledSource (line 45) | @Test
method testAllowedHostsFromDisabledSource (line 69) | @Test
method testRedirectedHostsFromDisabledSource (line 93) | @Test
FILE: app/src/androidTest/java/org/adaway/db/UserListTest.java
class UserListTest (line 19) | public class UserListTest extends DbTest {
method testUserList (line 20) | @Test
method testUserBlockedHosts (line 27) | protected void testUserBlockedHosts() throws InterruptedException {
method testUserAllowedHosts (line 66) | protected void testUserAllowedHosts() throws InterruptedException {
method testUserRedirectedHosts (line 105) | protected void testUserRedirectedHosts() throws InterruptedException {
FILE: app/src/main/java/org/adaway/AdAwayApplication.java
class AdAwayApplication (line 18) | public class AdAwayApplication extends Application {
method onCreate (line 32) | @Override
method getSourceModel (line 50) | public SourceModel getSourceModel() {
method getAdBlockModel (line 59) | public AdBlockModel getAdBlockModel() {
method getUpdateModel (line 73) | public UpdateModel getUpdateModel() {
FILE: app/src/main/java/org/adaway/broadcast/BootReceiver.java
class BootReceiver (line 43) | public class BootReceiver extends BroadcastReceiver {
method onReceive (line 44) | @Override
FILE: app/src/main/java/org/adaway/broadcast/Command.java
type Command (line 12) | public enum Command {
method readFromIntent (line 34) | public static Command readFromIntent(Intent intent) {
method appendToIntent (line 54) | public void appendToIntent(Intent intent) {
FILE: app/src/main/java/org/adaway/broadcast/CommandReceiver.java
class CommandReceiver (line 19) | public class CommandReceiver extends BroadcastReceiver {
method onReceive (line 26) | @Override
method executeCommand (line 36) | private void executeCommand(AdBlockModel adBlockModel, Command command) {
FILE: app/src/main/java/org/adaway/broadcast/UpdateReceiver.java
class UpdateReceiver (line 18) | public class UpdateReceiver extends BroadcastReceiver {
method onReceive (line 19) | @Override
FILE: app/src/main/java/org/adaway/db/AppDatabase.java
class AppDatabase (line 37) | @Database(entities = {HostsSource.class, HostListItem.class, HostEntry.c...
method getInstance (line 51) | public static AppDatabase getInstance(Context context) {
method initialize (line 83) | private static void initialize(Context context, AppDatabase database) {
method hostsSourceDao (line 119) | public abstract HostsSourceDao hostsSourceDao();
method hostsListItemDao (line 126) | public abstract HostListItemDao hostsListItemDao();
method hostEntryDao (line 133) | public abstract HostEntryDao hostEntryDao();
FILE: app/src/main/java/org/adaway/db/Migrations.java
class Migrations (line 15) | final class Migrations {
method Migrations (line 19) | private Migrations() {
method migrate (line 27) | @Override
method migrate (line 50) | @Override
method migrate (line 60) | @Override
method migrate (line 75) | @Override
method migrate (line 89) | @Override
method migrate (line 117) | @Override
FILE: app/src/main/java/org/adaway/db/converter/ListTypeConverter.java
class ListTypeConverter (line 12) | public final class ListTypeConverter {
method ListTypeConverter (line 13) | private ListTypeConverter() {
method fromValue (line 17) | @TypeConverter
method typeToValue (line 22) | @TypeConverter
FILE: app/src/main/java/org/adaway/db/converter/ZonedDateTimeConverter.java
class ZonedDateTimeConverter (line 16) | public final class ZonedDateTimeConverter {
method ZonedDateTimeConverter (line 17) | private ZonedDateTimeConverter() {
method fromTimestamp (line 21) | @TypeConverter
method toTimestamp (line 26) | @TypeConverter
FILE: app/src/main/java/org/adaway/db/dao/HostEntryDao.java
type HostEntryDao (line 23) | @Dao
method clear (line 28) | @Query("DELETE FROM `host_entries`")
method importBlocked (line 31) | @Query("INSERT INTO `host_entries` SELECT DISTINCT `host`, `type`, `re...
method getEnabledAllowedHosts (line 34) | @Query("SELECT host FROM hosts_lists WHERE type = 1 AND enabled = 1")
method allowHost (line 37) | @Query("DELETE FROM `host_entries` WHERE `host` LIKE :hostPattern")
method getEnabledRedirectedHosts (line 40) | @Query("SELECT * FROM hosts_lists WHERE type = 2 AND enabled = 1 ORDER...
method redirectHost (line 43) | @Insert(onConflict = REPLACE)
method sync (line 49) | default void sync() {
method getAll (line 66) | @Query("SELECT * FROM `host_entries` ORDER BY `host`")
method getTypeOfHost (line 69) | @Query("SELECT `type` FROM `host_entries` WHERE `host` == :host LIMIT 1")
method getTypeForHost (line 72) | @Query("SELECT IFNULL((SELECT `type` FROM `host_entries` WHERE `host` ...
method getEntry (line 75) | @Nullable
FILE: app/src/main/java/org/adaway/db/dao/HostListItemDao.java
type HostListItemDao (line 23) | @Dao
method insert (line 25) | @Insert(onConflict = REPLACE)
method insert (line 28) | @Insert(onConflict = REPLACE)
method update (line 31) | @Update
method delete (line 34) | @Delete
method deleteUserFromHost (line 37) | @Query("DELETE FROM hosts_lists WHERE source_id = 1 AND host = :host")
method loadList (line 40) | @Query("SELECT * FROM hosts_lists WHERE type = :type AND host LIKE :qu...
method getAll (line 43) | @Query("SELECT * FROM hosts_lists ORDER BY host ASC")
method getUserList (line 46) | @Query("SELECT * FROM hosts_lists WHERE source_id = 1")
method getHostId (line 49) | @Query("SELECT id FROM hosts_lists WHERE host = :host AND source_id = ...
method getBlockedHostCount (line 52) | @Query("SELECT COUNT(DISTINCT host) FROM hosts_lists WHERE type = 0 AN...
method getAllowedHostCount (line 55) | @Query("SELECT COUNT(DISTINCT host) FROM hosts_lists WHERE type = 1 AN...
method getRedirectHostCount (line 58) | @Query("SELECT COUNT(DISTINCT host) FROM hosts_lists WHERE type = 2 AN...
method clearSourceHosts (line 61) | @Query("DELETE FROM hosts_lists WHERE source_id = :sourceId")
FILE: app/src/main/java/org/adaway/db/dao/HostsSourceDao.java
type HostsSourceDao (line 23) | @Dao
method insert (line 25) | @Insert(onConflict = IGNORE)
method update (line 28) | @Update
method delete (line 31) | @Delete
method getEnabled (line 34) | @Query("SELECT * FROM hosts_sources WHERE enabled = 1 AND id != 1 ORDE...
method toggleEnabled (line 37) | default void toggleEnabled(HostsSource source) {
method setSourceEnabled (line 45) | @Query("UPDATE hosts_sources SET enabled = :enabled WHERE id =:id")
method setSourceItemsEnabled (line 48) | @Query("UPDATE hosts_lists SET enabled = :enabled WHERE source_id =:id")
method getById (line 51) | @Query("SELECT * FROM hosts_sources WHERE id = :id")
method getAll (line 54) | @Query("SELECT * FROM hosts_sources WHERE id != 1 ORDER BY label ASC")
method loadAll (line 57) | @Query("SELECT * FROM hosts_sources WHERE id != 1 ORDER BY label ASC")
method updateOnlineModificationDate (line 60) | @Query("UPDATE hosts_sources SET last_modified_online = :dateTime WHER...
method updateModificationDates (line 63) | @Query("UPDATE hosts_sources SET last_modified_local = :localModificat...
method updateEntityTag (line 66) | @Query("UPDATE hosts_sources SET entityTag = :entityTag WHERE id = :id")
method updateSize (line 69) | @Query("UPDATE hosts_sources SET size = (SELECT count(id) FROM hosts_l...
method countOutdated (line 72) | @Query("SELECT count(id) FROM hosts_sources WHERE enabled = 1 AND last...
method countUpToDate (line 75) | @Query("SELECT count(id) FROM hosts_sources WHERE enabled = 1 AND last...
method clearProperties (line 78) | @Query("UPDATE hosts_sources SET last_modified_local = NULL, last_modi...
FILE: app/src/main/java/org/adaway/db/entity/HostEntry.java
class HostEntry (line 13) | @Entity(
method getHost (line 25) | @NonNull
method setHost (line 30) | public void setHost(@NonNull String host) {
method getType (line 34) | @NonNull
method setType (line 39) | public void setType(@NonNull ListType type) {
method getRedirection (line 43) | public String getRedirection() {
method setRedirection (line 47) | public void setRedirection(String redirection) {
FILE: app/src/main/java/org/adaway/db/entity/HostListItem.java
class HostListItem (line 19) | @Entity(
method getId (line 45) | public int getId() {
method setId (line 49) | public void setId(int id) {
method getHost (line 53) | @NonNull
method setHost (line 58) | public void setHost(@NonNull String host) {
method getType (line 62) | @NonNull
method setType (line 67) | public void setType(@NonNull ListType type) {
method isEnabled (line 71) | public boolean isEnabled() {
method setEnabled (line 75) | public void setEnabled(boolean enabled) {
method getRedirection (line 79) | public String getRedirection() {
method setRedirection (line 83) | public void setRedirection(String redirection) {
method getSourceId (line 87) | public int getSourceId() {
method setSourceId (line 91) | public void setSourceId(int sourceId) {
method equals (line 95) | @Override
method hashCode (line 111) | @Override
FILE: app/src/main/java/org/adaway/db/entity/HostsSource.java
class HostsSource (line 23) | @Entity(
method isValidUrl (line 66) | public static boolean isValidUrl(String url) {
method getId (line 70) | public int getId() {
method setId (line 74) | public void setId(int id) {
method getLabel (line 78) | @NonNull
method setLabel (line 83) | public void setLabel(@NonNull String label) {
method getUrl (line 87) | @NonNull
method setUrl (line 92) | public void setUrl(@NonNull String url) {
method getType (line 96) | public SourceType getType() {
method isEnabled (line 106) | public boolean isEnabled() {
method setEnabled (line 110) | public void setEnabled(boolean enabled) {
method isAllowEnabled (line 114) | public boolean isAllowEnabled() {
method setAllowEnabled (line 118) | public void setAllowEnabled(boolean allowEnabled) {
method isRedirectEnabled (line 122) | public boolean isRedirectEnabled() {
method setRedirectEnabled (line 126) | public void setRedirectEnabled(boolean redirectEnabled) {
method getLocalModificationDate (line 130) | public ZonedDateTime getLocalModificationDate() {
method setLocalModificationDate (line 134) | public void setLocalModificationDate(ZonedDateTime localModificationDa...
method getOnlineModificationDate (line 138) | public ZonedDateTime getOnlineModificationDate() {
method setOnlineModificationDate (line 142) | public void setOnlineModificationDate(ZonedDateTime lastOnlineModifica...
method getEntityTag (line 146) | public String getEntityTag() {
method setEntityTag (line 150) | public void setEntityTag(String entityTag) {
method getSize (line 154) | public int getSize() {
method setSize (line 158) | public void setSize(int size) {
method equals (line 162) | @Override
method hashCode (line 178) | @Override
FILE: app/src/main/java/org/adaway/db/entity/ListType.java
type ListType (line 8) | public enum ListType {
method ListType (line 15) | ListType(int value) {
method fromValue (line 19) | public static ListType fromValue(int value) {
method getValue (line 28) | public int getValue() {
FILE: app/src/main/java/org/adaway/db/entity/SourceType.java
type SourceType (line 8) | public enum SourceType {
FILE: app/src/main/java/org/adaway/helper/NotificationHelper.java
class NotificationHelper (line 27) | public final class NotificationHelper {
method NotificationHelper (line 56) | private NotificationHelper() {
method createNotificationChannels (line 65) | public static void createNotificationChannels(@NonNull Context context) {
method showUpdateHostsNotification (line 93) | public static void showUpdateHostsNotification(@NonNull Context contex...
method showUpdateApplicationNotification (line 125) | public static void showUpdateApplicationNotification(@NonNull Context ...
method clearUpdateNotifications (line 157) | public static void clearUpdateNotifications(@NonNull Context context) {
FILE: app/src/main/java/org/adaway/helper/PreferenceHelper.java
class PreferenceHelper (line 36) | public final class PreferenceHelper {
method PreferenceHelper (line 37) | private PreferenceHelper() {
method getDarkThemeMode (line 41) | public static int getDarkThemeMode(Context context) {
method getUpdateCheck (line 60) | public static boolean getUpdateCheck(Context context) {
method getNeverReboot (line 71) | public static boolean getNeverReboot(Context context) {
method setNeverReboot (line 82) | public static void setNeverReboot(Context context, boolean value) {
method getEnableIpv6 (line 92) | public static boolean getEnableIpv6(Context context) {
method getUpdateCheckAppStartup (line 103) | public static boolean getUpdateCheckAppStartup(Context context) {
method getUpdateCheckAppDaily (line 114) | public static boolean getUpdateCheckAppDaily(Context context) {
method getIncludeBetaReleases (line 125) | public static boolean getIncludeBetaReleases(Context context) {
method getUpdateCheckHostsDaily (line 136) | public static boolean getUpdateCheckHostsDaily(Context context) {
method getAutomaticUpdateDaily (line 147) | public static boolean getAutomaticUpdateDaily(Context context) {
method getUpdateOnlyOnWifi (line 158) | public static boolean getUpdateOnlyOnWifi(Context context) {
method getRedirectionIpv4 (line 169) | public static String getRedirectionIpv4(Context context) {
method getRedirectionIpv6 (line 180) | public static String getRedirectionIpv6(Context context) {
method getWebServerEnabled (line 191) | public static boolean getWebServerEnabled(Context context) {
method getWebServerIcon (line 202) | public static boolean getWebServerIcon(Context context) {
method getAdBlockMethod (line 213) | public static AdBlockMethod getAdBlockMethod(Context context) {
method setAbBlockMethod (line 224) | public static void setAbBlockMethod(Context context, AdBlockMethod met...
method getVpnServiceStatus (line 234) | public static VpnStatus getVpnServiceStatus(Context context) {
method setVpnServiceStatus (line 245) | public static void setVpnServiceStatus(Context context, VpnStatus stat...
method getVpnServiceOnBoot (line 255) | public static boolean getVpnServiceOnBoot(Context context) {
method getVpnWatchdogEnabled (line 266) | public static boolean getVpnWatchdogEnabled(Context context) {
method getDebugEnabled (line 277) | public static boolean getDebugEnabled(Context context) {
method getTelemetryEnabled (line 288) | public static boolean getTelemetryEnabled(Context context) {
method setTelemetryEnabled (line 299) | public static void setTelemetryEnabled(Context context, boolean enable...
method getDisplayTelemetryConsent (line 309) | public static boolean getDisplayTelemetryConsent(Context context) {
method setDisplayTelemetryConsent (line 320) | public static void setDisplayTelemetryConsent(Context context, boolean...
method getVpnExcludedSystemApps (line 330) | public static String getVpnExcludedSystemApps(Context context) {
method getVpnExcludedApps (line 341) | public static Set<String> getVpnExcludedApps(Context context) {
method setVpnExcludedApps (line 352) | public static void setVpnExcludedApps(Context context, Set<String> exc...
FILE: app/src/main/java/org/adaway/helper/ThemeHelper.java
class ThemeHelper (line 12) | public final class ThemeHelper {
method ThemeHelper (line 17) | private ThemeHelper() {
method applyTheme (line 26) | public static void applyTheme(Context context) {
FILE: app/src/main/java/org/adaway/model/adblocking/AdBlockMethod.java
type AdBlockMethod (line 10) | public enum AdBlockMethod {
method AdBlockMethod (line 26) | AdBlockMethod(int code) {
method fromCode (line 30) | public static AdBlockMethod fromCode(int code) {
method toCode (line 37) | public int toCode() {
FILE: app/src/main/java/org/adaway/model/adblocking/AdBlockModel.java
class AdBlockModel (line 22) | public abstract class AdBlockModel {
method AdBlockModel (line 46) | protected AdBlockModel(Context context) {
method build (line 59) | public static AdBlockModel build(Context context, AdBlockMethod method) {
method getMethod (line 75) | public abstract AdBlockMethod getMethod();
method isApplied (line 82) | public LiveData<Boolean> isApplied() {
method apply (line 91) | public abstract void apply() throws HostErrorException;
method revert (line 98) | public abstract void revert() throws HostErrorException;
method getState (line 105) | public LiveData<String> getState() {
method setState (line 109) | protected void setState(@StringRes int stateResId, Object... details) {
method isRecordingLogs (line 120) | public abstract boolean isRecordingLogs();
method setRecordingLogs (line 127) | public abstract void setRecordingLogs(boolean recording);
method getLogs (line 134) | public abstract List<String> getLogs();
method clearLogs (line 139) | public abstract void clearLogs();
FILE: app/src/main/java/org/adaway/model/adblocking/UndefinedBlockModel.java
class UndefinedBlockModel (line 15) | public class UndefinedBlockModel extends AdBlockModel {
method UndefinedBlockModel (line 21) | public UndefinedBlockModel(Context context) {
method getMethod (line 25) | @Override
method apply (line 30) | @Override
method revert (line 35) | @Override
method isRecordingLogs (line 40) | @Override
method setRecordingLogs (line 45) | @Override
method getLogs (line 50) | @Override
method clearLogs (line 55) | @Override
FILE: app/src/main/java/org/adaway/model/backup/AppBackupAgent.java
class AppBackupAgent (line 27) | public class AppBackupAgent extends BackupAgentHelper {
method onCreate (line 31) | @Override
class SourceBackupHelper (line 43) | private static class SourceBackupHelper extends FileBackupHelper {
method SourceBackupHelper (line 52) | public SourceBackupHelper(Context context) {
method performBackup (line 57) | @Override
method restoreEntity (line 67) | @Override
method getRulesFileUri (line 77) | private Uri getRulesFileUri() {
FILE: app/src/main/java/org/adaway/model/backup/BackupExporter.java
class BackupExporter (line 46) | public class BackupExporter {
method BackupExporter (line 50) | private BackupExporter() {
method exportToBackup (line 59) | public static void exportToBackup(Context context, Uri backupUri) {
method getFileNameFromUri (line 74) | private static String getFileNameFromUri(Uri backupUri) {
method notifyExportEnd (line 79) | @UiThread
method exportBackup (line 88) | static void exportBackup(Context context, Uri backupUri) throws IOExce...
method makeBackup (line 101) | private static JSONObject makeBackup(Context context) throws JSONExcep...
method buildSourcesBackup (line 126) | private static JSONArray buildSourcesBackup(List<HostsSource> sources)...
method buildListBackup (line 134) | private static JSONArray buildListBackup(List<HostListItem> hosts) thr...
FILE: app/src/main/java/org/adaway/model/backup/BackupFormat.java
class BackupFormat (line 15) | final class BackupFormat {
method BackupFormat (line 35) | BackupFormat() {
method sourceToJson (line 39) | static JSONObject sourceToJson(HostsSource source) throws JSONException {
method sourceFromJson (line 49) | static HostsSource sourceFromJson(JSONObject sourceObject) throws JSON...
method hostToJson (line 63) | static JSONObject hostToJson(HostListItem host) throws JSONException {
method hostFromJson (line 74) | static HostListItem hostFromJson(JSONObject hostObject) throws JSONExc...
FILE: app/src/main/java/org/adaway/model/backup/BackupImporter.java
class BackupImporter (line 46) | public final class BackupImporter {
method BackupImporter (line 48) | private BackupImporter() {
method importFromBackup (line 61) | @UiThread
method notifyImportEnd (line 76) | @UiThread
method importBackup (line 85) | static void importBackup(Context context, Uri backupUri) throws IOExce...
method importBackup (line 104) | private static void importBackup(Context context, JSONObject backupObj...
method importSourceBackup (line 115) | private static void importSourceBackup(HostsSourceDao hostsSourceDao, ...
method importListBackup (line 122) | private static void importListBackup(HostListItemDao hostListItemDao, ...
FILE: app/src/main/java/org/adaway/model/error/HostError.java
type HostError (line 12) | public enum HostError {
method HostError (line 30) | HostError(int messageKey, int detailsKey) {
method getMessageKey (line 35) | @StringRes
method getDetailsKey (line 40) | @StringRes
FILE: app/src/main/java/org/adaway/model/error/HostErrorException.java
class HostErrorException (line 8) | public class HostErrorException extends Exception {
method HostErrorException (line 19) | public HostErrorException(HostError error) {
method HostErrorException (line 30) | public HostErrorException(HostError error, Throwable cause) {
method getError (line 40) | public HostError getError() {
FILE: app/src/main/java/org/adaway/model/git/GistHostsSource.java
class GistHostsSource (line 20) | class GistHostsSource extends GitHostsJsonApiSource {
method GistHostsSource (line 32) | GistHostsSource(String url) throws MalformedURLException {
method getCommitApiUrl (line 44) | @Override
method parseJsonBody (line 49) | @Nullable
FILE: app/src/main/java/org/adaway/model/git/GitHostsJsonApiSource.java
class GitHostsJsonApiSource (line 23) | public abstract class GitHostsJsonApiSource extends GitHostsSource {
method getLastUpdate (line 24) | @Override
method getCommitApiUrl (line 30) | protected abstract String getCommitApiUrl();
method getLastUpdateFromApi (line 32) | @Nullable
method parseJsonBody (line 51) | @Nullable
FILE: app/src/main/java/org/adaway/model/git/GitHostsSource.java
class GitHostsSource (line 13) | public abstract class GitHostsSource {
method isHostedOnGit (line 33) | public static boolean isHostedOnGit(String url) {
method getSource (line 46) | public static GitHostsSource getSource(String url) throws MalformedURL...
method getLastUpdate (line 63) | @Nullable
FILE: app/src/main/java/org/adaway/model/git/GitHubHostsSource.java
class GitHubHostsSource (line 24) | class GitHubHostsSource extends GitHostsJsonApiSource {
method GitHubHostsSource (line 44) | GitHubHostsSource(String url) throws MalformedURLException {
method getCommitApiUrl (line 60) | @Override
method parseJsonBody (line 66) | @Nullable
FILE: app/src/main/java/org/adaway/model/git/GitLabHostsSource.java
class GitLabHostsSource (line 24) | public class GitLabHostsSource extends GitHostsJsonApiSource {
method GitLabHostsSource (line 42) | GitLabHostsSource(String url) throws MalformedURLException {
method getCommitApiUrl (line 59) | @Override
method parseJsonBody (line 65) | @Nullable
FILE: app/src/main/java/org/adaway/model/root/CommandException.java
class CommandException (line 23) | class CommandException extends Exception {
method CommandException (line 27) | CommandException(String msg) {
FILE: app/src/main/java/org/adaway/model/root/MountType.java
type MountType (line 8) | public enum MountType {
method MountType (line 20) | MountType(String option) {
method getOption (line 28) | public String getOption() {
FILE: app/src/main/java/org/adaway/model/root/RootModel.java
class RootModel (line 59) | public class RootModel extends AdBlockModel {
method RootModel (line 71) | public RootModel(Context context) {
method getMethod (line 83) | @Override
method apply (line 88) | @Override
method revert (line 105) | @Override
method isRecordingLogs (line 119) | @Override
method setRecordingLogs (line 124) | @Override
method getLogs (line 133) | @Override
method clearLogs (line 138) | @Override
method checkApplied (line 143) | private void checkApplied() {
method syncPreferences (line 156) | private void syncPreferences(Context context) {
method deleteNewHostsFile (line 162) | private void deleteNewHostsFile() {
method copyNewHostsFile (line 167) | private void copyNewHostsFile() throws HostErrorException {
method createNewHostsFile (line 180) | private void createNewHostsFile() throws HostErrorException {
method writeHostsHeader (line 191) | private void writeHostsHeader(BufferedWriter writer) throws IOException {
method writeLoopbackToHosts (line 213) | private void writeLoopbackToHosts(BufferedWriter writer) throws IOExce...
method writeHosts (line 220) | private void writeHosts(BufferedWriter writer) throws IOException {
method revertHostFile (line 247) | private void revertHostFile() throws IOException {
method copyHostsFile (line 266) | private void copyHostsFile(String source) throws HostErrorException, C...
method hasEnoughSpaceOnPartition (line 315) | private boolean hasEnoughSpaceOnPartition(File target, long size) {
FILE: app/src/main/java/org/adaway/model/root/ShellUtils.java
class ShellUtils (line 20) | public final class ShellUtils {
method ShellUtils (line 27) | private ShellUtils() {
method mergeAllLines (line 31) | public static String mergeAllLines(List<String> lines) {
method isBundledExecutableRunning (line 35) | public static boolean isBundledExecutableRunning(String executable) {
method runBundledExecutable (line 39) | public static boolean runBundledExecutable(Context context, String exe...
method killBundledExecutable (line 47) | public static void killBundledExecutable(String executable) {
method isWritable (line 59) | public static boolean isWritable(File file) {
method remountPartition (line 69) | public static boolean remountPartition(File file, MountType type) {
method findPartition (line 83) | private static Optional<String> findPartition(File file) {
FILE: app/src/main/java/org/adaway/model/root/TcpdumpUtils.java
class TcpdumpUtils (line 47) | class TcpdumpUtils {
method TcpdumpUtils (line 56) | private TcpdumpUtils() {
method isTcpdumpRunning (line 65) | static boolean isTcpdumpRunning() {
method startTcpdump (line 75) | static boolean startTcpdump(Context context) {
method stopTcpdump (line 105) | static void stopTcpdump() {
method checkSystemTcpdump (line 112) | static void checkSystemTcpdump() {
method getLogFile (line 134) | static File getLogFile(Context context) {
method getLogs (line 144) | static List<String> getLogs(Context context) {
method clearLogFile (line 167) | static boolean clearLogFile(Context context) {
method getTcpdumpHostname (line 193) | private static String getTcpdumpHostname(String input) {
FILE: app/src/main/java/org/adaway/model/source/SourceLoader.java
class SourceLoader (line 36) | class SourceLoader {
method SourceLoader (line 45) | SourceLoader(HostsSource hostsSource) {
method parse (line 49) | void parse(BufferedReader reader, HostListItemDao hostListItemDao) {
class SourceReader (line 79) | private static class SourceReader implements Runnable {
method SourceReader (line 84) | private SourceReader(BufferedReader reader, BlockingQueue<String> qu...
method run (line 90) | @Override
class HostListItemParser (line 105) | private static class HostListItemParser implements Runnable {
method HostListItemParser (line 110) | private HostListItemParser(HostsSource source, BlockingQueue<String>...
method run (line 116) | @Override
method parseHostListItem (line 148) | private HostListItem parseHostListItem(String line) {
method parseAllowListItem (line 184) | private HostListItem parseAllowListItem(String line) {
method isRedirectionValid (line 200) | private boolean isRedirectionValid(HostListItem item) {
method isHostValid (line 204) | private boolean isHostValid(HostListItem item) {
class ItemInserter (line 216) | private static class ItemInserter implements Callable<Integer> {
method ItemInserter (line 221) | private ItemInserter(BlockingQueue<HostListItem> itemQueue, HostList...
method call (line 227) | @Override
FILE: app/src/main/java/org/adaway/model/source/SourceModel.java
class SourceModel (line 60) | public class SourceModel {
method SourceModel (line 104) | public SourceModel(Context context) {
method getState (line 121) | public LiveData<String> getState() {
method isUpdateAvailable (line 130) | public LiveData<Boolean> isUpdateAvailable() {
method checkForUpdate (line 139) | public boolean checkForUpdate() throws HostErrorException {
method dateToString (line 199) | private String dateToString(ZonedDateTime zonedDateTime) {
method isDeviceOffline (line 213) | private boolean isDeviceOffline() {
method getHostsSourceLastUpdate (line 228) | @Nullable
method getUrlLastUpdate (line 247) | private ZonedDateTime getUrlLastUpdate(HostsSource source) {
method getFileLastUpdate (line 280) | private ZonedDateTime getFileLastUpdate(Uri fileUri) {
method retrieveHostsSources (line 304) | public void retrieveHostsSources() throws HostErrorException {
method syncHostEntries (line 374) | public void syncHostEntries() {
method getHttpClient (line 384) | @NonNull
method getRequestFor (line 401) | private Request.Builder getRequestFor(HostsSource source) {
method downloadHostSource (line 419) | private void downloadHostSource(HostsSource source) throws IOException {
method readSourceFile (line 457) | private void readSourceFile(HostsSource hostsSource) throws IOException {
method parseSourceInputStream (line 479) | private void parseSourceInputStream(HostsSource hostsSource, BufferedR...
method enableAllSources (line 492) | public boolean enableAllSources() {
method setState (line 503) | private void setState(@StringRes int stateResId, Object... details) {
FILE: app/src/main/java/org/adaway/model/source/SourceUpdateService.java
class SourceUpdateService (line 36) | public final class SourceUpdateService {
method SourceUpdateService (line 45) | private SourceUpdateService() {
method enable (line 55) | public static void enable(Context context, boolean unmeteredNetworkOnl...
method disable (line 64) | public static void disable(Context context) {
method syncPreferences (line 74) | static void syncPreferences(Context context) {
method enqueueWork (line 82) | private static void enqueueWork(Context context, ExistingPeriodicWorkP...
method getWorkRequest (line 96) | private static PeriodicWorkRequest getWorkRequest(boolean unmeteredNet...
class HostsSourcesUpdateWorker (line 114) | public static class HostsSourcesUpdateWorker extends Worker {
method HostsSourcesUpdateWorker (line 121) | public HostsSourcesUpdateWorker(@NonNull Context context, @NonNull W...
method doWork (line 125) | @NonNull
method doUpdate (line 161) | private void doUpdate(AdAwayApplication application) throws HostErro...
FILE: app/src/main/java/org/adaway/model/update/ApkDownloadReceiver.java
class ApkDownloadReceiver (line 18) | public class ApkDownloadReceiver extends BroadcastReceiver {
method ApkDownloadReceiver (line 21) | public ApkDownloadReceiver(long downloadId) {
method onReceive (line 25) | @Override
method installApk (line 41) | private void installApk(Context context, Uri apkUri) {
FILE: app/src/main/java/org/adaway/model/update/ApkUpdateService.java
class ApkUpdateService (line 30) | public final class ApkUpdateService {
method ApkUpdateService (line 39) | private ApkUpdateService() {
method enable (line 48) | public static void enable(Context context) {
method disable (line 57) | public static void disable(Context context) {
method syncPreferences (line 62) | static void syncPreferences(Context context) {
method enqueueWork (line 70) | private static void enqueueWork(Context context, ExistingPeriodicWorkP...
class ApkUpdateWorker (line 83) | public static class ApkUpdateWorker extends Worker {
method ApkUpdateWorker (line 90) | public ApkUpdateWorker(@NonNull Context context, @NonNull WorkerPara...
method doWork (line 94) | @NonNull
FILE: app/src/main/java/org/adaway/model/update/Manifest.java
class Manifest (line 11) | public class Manifest {
method Manifest (line 17) | public Manifest(String manifest, long currentVersionCode) throws JSONE...
FILE: app/src/main/java/org/adaway/model/update/UpdateModel.java
class UpdateModel (line 36) | public class UpdateModel {
method UpdateModel (line 50) | public UpdateModel(Context context) {
method getVersionCode (line 63) | public int getVersionCode() {
method getVersionName (line 72) | public String getVersionName() {
method getManifest (line 81) | public LiveData<Manifest> getManifest() {
method getStore (line 90) | public UpdateStore getStore() {
method getChannel (line 99) | public String getChannel() {
method checkForUpdate (line 106) | public void checkForUpdate() {
method buildHttpClient (line 114) | private OkHttpClient buildHttpClient() {
method downloadManifest (line 118) | private Manifest downloadManifest() {
method update (line 151) | public long update() {
method download (line 170) | private long download(Manifest manifest) {
class VersionInfo (line 180) | private static class VersionInfo {
method VersionInfo (line 184) | private VersionInfo(int code, String name) {
method get (line 189) | public static VersionInfo get(Context context) {
method isValid (line 199) | public boolean isValid() {
FILE: app/src/main/java/org/adaway/model/update/UpdateStore.java
type UpdateStore (line 23) | public enum UpdateStore {
method UpdateStore (line 45) | UpdateStore(String name, String sign) {
method getApkStore (line 56) | @SuppressLint("PackageManagerGetSignatures")
method getFromSigns (line 81) | private static UpdateStore getFromSigns(Signature[] signatures) {
method bytesToHex (line 99) | private static String bytesToHex(byte[] bytes) {
method getName (line 117) | public String getName() {
FILE: app/src/main/java/org/adaway/model/vpn/VpnModel.java
class VpnModel (line 29) | public class VpnModel extends AdBlockModel {
method VpnModel (line 41) | public VpnModel(Context context) {
method getMethod (line 57) | @Override
method apply (line 62) | @Override
method revert (line 75) | @Override
method isRecordingLogs (line 81) | @Override
method setRecordingLogs (line 86) | @Override
method getLogs (line 91) | @Override
method clearLogs (line 96) | @Override
method getEntry (line 107) | public HostEntry getEntry(String host) {
FILE: app/src/main/java/org/adaway/tile/AdBlockingTileService.java
class AdBlockingTileService (line 25) | public class AdBlockingTileService extends TileService {
method onTileAdded (line 28) | @Override
method onStartListening (line 34) | @Override
method onStopListening (line 40) | @Override
method onClick (line 46) | @Override
method updateTile (line 53) | private void updateTile(boolean adBlocked) {
method toggleAdBlocking (line 59) | private void toggleAdBlocking() {
method getModel (line 78) | private AdBlockModel getModel() {
FILE: app/src/main/java/org/adaway/ui/Animations.java
class Animations (line 18) | public final class Animations {
method Animations (line 20) | private Animations() {
method showView (line 29) | public static void showView(View view) {
method hideView (line 46) | public static void hideView(View view) {
method removeView (line 63) | public static void removeView(View view) {
method setShown (line 80) | public static void setShown(View view) {
method setHidden (line 90) | public static void setHidden(View view) {
method setRemoved (line 100) | public static void setRemoved(View view) {
FILE: app/src/main/java/org/adaway/ui/adblocking/ApplyConfigurationSnackbar.java
class ApplyConfigurationSnackbar (line 31) | public class ApplyConfigurationSnackbar {
method ApplyConfigurationSnackbar (line 68) | public ApplyConfigurationSnackbar(@NonNull View view, boolean syncSour...
method createObserver (line 86) | public <T> Observer<T> createObserver() {
method notifyUpdateAvailable (line 109) | public void notifyUpdateAvailable() {
method apply (line 131) | private void apply() {
method showLoading (line 151) | private void showLoading() {
method endLoading (line 158) | private void endLoading(boolean successfulInstall) {
method appendViewToSnackbar (line 187) | private void appendViewToSnackbar(Snackbar snackbar, View view) {
FILE: app/src/main/java/org/adaway/ui/adware/AdwareFragment.java
class AdwareFragment (line 47) | public class AdwareFragment extends Fragment {
method onCreateView (line 57) | @Override
method displayStatusText (line 98) | private void displayStatusText(int text) {
method displayAdware (line 111) | private void displayAdware(List<AdwareInstall> data) {
method uninstallAdware (line 140) | private void uninstallAdware(AdwareInstall adwareInstall) {
FILE: app/src/main/java/org/adaway/ui/adware/AdwareInstall.java
class AdwareInstall (line 12) | class AdwareInstall extends HashMap<String, String> implements Comparabl...
method AdwareInstall (line 28) | AdwareInstall(String applicationName, String packageName) {
method compareTo (line 34) | @Override
FILE: app/src/main/java/org/adaway/ui/adware/AdwareLiveData.java
class AdwareLiveData (line 24) | class AdwareLiveData extends LiveData<List<AdwareInstall>> {
method AdwareLiveData (line 53) | AdwareLiveData(Context context) {
method loadData (line 58) | @WorkerThread
method getAdwarePackages (line 79) | private List<PackageInfo> getAdwarePackages(PackageManager pm) {
method isAdware (line 106) | private boolean isAdware(PackageInfo info) {
method checkComponent (line 126) | private boolean checkComponent(String packageName, String type, Compon...
method createInstallFromPackageInfo (line 146) | private AdwareInstall createInstallFromPackageInfo(PackageInfo package...
FILE: app/src/main/java/org/adaway/ui/adware/AdwareViewModel.java
class AdwareViewModel (line 13) | public class AdwareViewModel extends AndroidViewModel {
method AdwareViewModel (line 24) | public AdwareViewModel(@NonNull Application application) {
method getAdware (line 34) | public AdwareLiveData getAdware() {
FILE: app/src/main/java/org/adaway/ui/dialog/AlertDialogValidator.java
class AlertDialogValidator (line 17) | public class AlertDialogValidator implements TextWatcher {
method AlertDialogValidator (line 34) | public AlertDialogValidator(AlertDialog dialog, Function<String, Boole...
method beforeTextChanged (line 40) | @Override
method onTextChanged (line 45) | @Override
method afterTextChanged (line 50) | @Override
FILE: app/src/main/java/org/adaway/ui/dialog/MissingAppDialog.java
class MissingAppDialog (line 43) | public class MissingAppDialog {
method showTextEditorMissingDialog (line 49) | public static void showTextEditorMissingDialog(Context context) {
method showFileManagerMissingDialog (line 64) | public static void showFileManagerMissingDialog(Context context) {
method showMissingAppDialog (line 74) | private static void showMissingAppDialog(
FILE: app/src/main/java/org/adaway/ui/help/HelpActivity.java
class HelpActivity (line 40) | public class HelpActivity extends AppCompatActivity {
method onCreate (line 41) | @Override
method getTabName (line 65) | private @StringRes
class TabsAdapter (line 79) | private static class TabsAdapter extends FragmentStateAdapter {
method TabsAdapter (line 84) | TabsAdapter(@NonNull FragmentActivity fragmentActivity) {
method createFragment (line 88) | @NonNull
method getItemCount (line 103) | @Override
FILE: app/src/main/java/org/adaway/ui/help/HelpFragmentHtml.java
class HelpFragmentHtml (line 48) | public class HelpFragmentHtml extends Fragment {
method newInstance (line 55) | static HelpFragmentHtml newInstance(@RawRes int htmlFile) {
method onCreateView (line 66) | @Override
method readHtmlRawFile (line 85) | private String readHtmlRawFile(@RawRes int resourceId) throws IOExcept...
FILE: app/src/main/java/org/adaway/ui/home/HomeActivity.java
class HomeActivity (line 62) | public class HomeActivity extends AppCompatActivity {
method onCreate (line 74) | @Override
method onResume (line 113) | @Override
method onOptionsItemSelected (line 119) | @Override
method checkFirstStep (line 124) | private void checkFirstStep() {
method checkUpdateAtStartup (line 137) | private void checkUpdateAtStartup() {
method applyActionBar (line 148) | private void applyActionBar() {
method bindAppVersion (line 152) | private void bindAppVersion() {
method bindHostCounter (line 168) | private void bindHostCounter() {
method bindSourceCounter (line 184) | private void bindSourceCounter() {
method bindPending (line 200) | private void bindPending() {
method bindState (line 211) | private void bindState() {
method bindClickListeners (line 222) | private void bindClickListeners() {
method setUpBottomDrawer (line 234) | private void setUpBottomDrawer() {
method bindFab (line 256) | private void bindFab() {
method showFragment (line 260) | private boolean showFragment(@IdRes int actionId) {
method startHostListActivity (line 278) | private void startHostListActivity(int tab) {
method startHostsSourcesActivity (line 289) | private void startHostsSourcesActivity(View view) {
method startHelpActivity (line 298) | private void startHelpActivity(View view) {
method showProjectPage (line 305) | private void showProjectPage() {
method showSupportActivity (line 316) | private void showSupportActivity(View view) {
method startPrefsActivity (line 323) | private void startPrefsActivity() {
method startDnsLogActivity (line 332) | private void startDnsLogActivity(View view) {
method notifyAdBlocked (line 336) | private void notifyAdBlocked(boolean adBlocked) {
method notifyError (line 342) | private void notifyError(HostError error) {
method showUpdate (line 362) | private void showUpdate(View view) {
FILE: app/src/main/java/org/adaway/ui/home/HomeViewModel.java
class HomeViewModel (line 30) | public class HomeViewModel extends AndroidViewModel {
method HomeViewModel (line 44) | public HomeViewModel(@NonNull Application application) {
method isTrue (line 62) | private static boolean isTrue(LiveData<Boolean> liveData) {
method isAdBlocked (line 67) | public LiveData<Boolean> isAdBlocked() {
method isUpdateAvailable (line 71) | public LiveData<Boolean> isUpdateAvailable() {
method getVersionName (line 75) | public String getVersionName() {
method getAppManifest (line 79) | public LiveData<Manifest> getAppManifest() {
method getBlockedHostCount (line 83) | public LiveData<Integer> getBlockedHostCount() {
method getAllowedHostCount (line 87) | public LiveData<Integer> getAllowedHostCount() {
method getRedirectHostCount (line 91) | public LiveData<Integer> getRedirectHostCount() {
method getUpToDateSourceCount (line 95) | public LiveData<Integer> getUpToDateSourceCount() {
method getOutdatedSourceCount (line 99) | public LiveData<Integer> getOutdatedSourceCount() {
method getPending (line 103) | public LiveData<Boolean> getPending() {
method getState (line 107) | public LiveData<String> getState() {
method getError (line 111) | public LiveData<HostError> getError() {
method checkForAppUpdate (line 115) | public void checkForAppUpdate() {
method toggleAdBlocking (line 119) | public void toggleAdBlocking() {
method update (line 140) | public void update() {
method sync (line 157) | public void sync() {
method enableAllSources (line 175) | public void enableAllSources() {
FILE: app/src/main/java/org/adaway/ui/hosts/HostsSourcesActivity.java
class HostsSourcesActivity (line 16) | public class HostsSourcesActivity extends AppCompatActivity {
method onCreate (line 17) | @Override
FILE: app/src/main/java/org/adaway/ui/hosts/HostsSourcesAdapter.java
class HostsSourcesAdapter (line 27) | class HostsSourcesAdapter extends ListAdapter<HostsSource, HostsSourcesA...
method areItemsTheSame (line 33) | @Override
method areContentsTheSame (line 38) | @Override
method HostsSourcesAdapter (line 58) | HostsSourcesAdapter(@NonNull HostsSourcesViewCallback viewCallback) {
method getApproximateDelay (line 70) | private static String getApproximateDelay(Context context, ZonedDateTi...
method onCreateViewHolder (line 100) | @NonNull
method onBindViewHolder (line 108) | @Override
method getUpdateText (line 120) | private String getUpdateText(HostsSource source) {
method getHostCount (line 154) | private String getHostCount(HostsSource source) {
class ViewHolder (line 187) | static class ViewHolder extends RecyclerView.ViewHolder {
method ViewHolder (line 199) | ViewHolder(View itemView) {
FILE: app/src/main/java/org/adaway/ui/hosts/HostsSourcesFragment.java
class HostsSourcesFragment (line 53) | public class HostsSourcesFragment extends Fragment implements HostsSourc...
method onCreateView (line 59) | @Override
method toggleEnabled (line 102) | @Override
method edit (line 107) | @Override
method startSourceEdition (line 112) | private void startSourceEdition(@Nullable HostsSource source) {
FILE: app/src/main/java/org/adaway/ui/hosts/HostsSourcesViewCallback.java
type HostsSourcesViewCallback (line 12) | public interface HostsSourcesViewCallback {
method getContext (line 18) | Context getContext();
method toggleEnabled (line 25) | void toggleEnabled(HostsSource source);
method edit (line 32) | void edit(HostsSource source);
FILE: app/src/main/java/org/adaway/ui/hosts/HostsSourcesViewModel.java
class HostsSourcesViewModel (line 22) | public class HostsSourcesViewModel extends AndroidViewModel {
method HostsSourcesViewModel (line 26) | public HostsSourcesViewModel(@NonNull Application application) {
method getHostsSources (line 31) | public LiveData<List<HostsSource>> getHostsSources() {
method toggleSourceEnabled (line 35) | public void toggleSourceEnabled(HostsSource source) {
FILE: app/src/main/java/org/adaway/ui/lists/ListsActivity.java
class ListsActivity (line 33) | public class ListsActivity extends AppCompatActivity {
method onCreate (line 59) | @Override
method onNewIntent (line 148) | @Override
method handleQuery (line 155) | private void handleQuery(Intent intent) {
method onCreateOptionsMenu (line 163) | @Override
method onOptionsItemSelected (line 177) | @Override
FILE: app/src/main/java/org/adaway/ui/lists/ListsFilter.java
class ListsFilter (line 8) | public class ListsFilter {
method ListsFilter (line 23) | public ListsFilter(boolean sourcesIncluded, String query) {
method convertToLikeQuery (line 29) | private static String convertToLikeQuery(String query) {
FILE: app/src/main/java/org/adaway/ui/lists/ListsFragmentPagerAdapter.java
class ListsFragmentPagerAdapter (line 22) | class ListsFragmentPagerAdapter extends FragmentStateAdapter {
method ListsFragmentPagerAdapter (line 44) | ListsFragmentPagerAdapter(FragmentActivity fragmentActivity) {
method createFragment (line 51) | @NonNull
method getItemCount (line 66) | @Override
method ensureActionModeCanceled (line 74) | void ensureActionModeCanceled() {
method addItem (line 91) | void addItem(int position) {
FILE: app/src/main/java/org/adaway/ui/lists/ListsViewCallback.java
type ListsViewCallback (line 13) | public interface ListsViewCallback {
method toggleItemEnabled (line 19) | void toggleItemEnabled(HostListItem item);
method startAction (line 28) | boolean startAction(HostListItem item, View sourceView);
method copyHostToClipboard (line 35) | boolean copyHostToClipboard(HostListItem item);
FILE: app/src/main/java/org/adaway/ui/lists/ListsViewModel.java
class ListsViewModel (line 36) | public class ListsViewModel extends AndroidViewModel {
method ListsViewModel (line 45) | public ListsViewModel(@NonNull Application application) {
method getBlockedListItems (line 71) | public LiveData<PagingData<HostListItem>> getBlockedListItems() {
method getAllowedListItems (line 75) | public LiveData<PagingData<HostListItem>> getAllowedListItems() {
method getRedirectedListItems (line 79) | public LiveData<PagingData<HostListItem>> getRedirectedListItems() {
method getModelChanged (line 83) | public LiveData<Boolean> getModelChanged() {
method toggleItemEnabled (line 87) | public void toggleItemEnabled(HostListItem item) {
method addListItem (line 95) | public void addListItem(@NonNull ListType type, @NonNull String host, ...
method updateListItem (line 114) | public void updateListItem(@NonNull HostListItem item, @NonNull String...
method removeListItem (line 123) | public void removeListItem(HostListItem list) {
method search (line 130) | public void search(String query) {
method isSearching (line 136) | public boolean isSearching() {
method clearSearch (line 140) | public void clearSearch() {
method toggleSources (line 146) | public void toggleSources() {
method getFilter (line 152) | private ListsFilter getFilter() {
method setFilter (line 157) | private void setFilter(ListsFilter filter) {
FILE: app/src/main/java/org/adaway/ui/lists/type/AbstractListFragment.java
class AbstractListFragment (line 34) | public abstract class AbstractListFragment extends Fragment implements L...
method onCreateView (line 60) | @Override
method startAction (line 148) | @Override
method copyHostToClipboard (line 167) | @Override
method ensureActionModeCanceled (line 176) | public void ensureActionModeCanceled() {
method getData (line 182) | protected abstract LiveData<PagingData<HostListItem>> getData();
method isTwoRowsItem (line 184) | protected boolean isTwoRowsItem() {
method addItem (line 191) | public abstract void addItem();
method editItem (line 193) | protected abstract void editItem(HostListItem item);
method deleteItem (line 195) | protected void deleteItem(HostListItem item) {
method toggleItemEnabled (line 199) | @Override
FILE: app/src/main/java/org/adaway/ui/lists/type/AllowedHostsFragment.java
class AllowedHostsFragment (line 46) | public class AllowedHostsFragment extends AbstractListFragment {
method getData (line 47) | @Override
method addItem (line 52) | @Override
method editItem (line 90) | @Override
FILE: app/src/main/java/org/adaway/ui/lists/type/BlockedHostsFragment.java
class BlockedHostsFragment (line 47) | public class BlockedHostsFragment extends AbstractListFragment {
method getData (line 48) | @Override
method addItem (line 53) | @Override
method editItem (line 90) | @Override
FILE: app/src/main/java/org/adaway/ui/lists/type/ListsAdapter.java
class ListsAdapter (line 25) | class ListsAdapter extends PagingDataAdapter<HostListItem, ListsAdapter....
method areItemsTheSame (line 31) | @Override
method areContentsTheSame (line 36) | @Override
method ListsAdapter (line 60) | ListsAdapter(@NonNull ListsViewCallback viewCallback, boolean twoRows) {
method onCreateViewHolder (line 66) | @NonNull
method onBindViewHolder (line 78) | @Override
class ViewHolder (line 103) | static class ViewHolder extends RecyclerView.ViewHolder {
method ViewHolder (line 113) | ViewHolder(View itemView) {
method clear (line 120) | void clear() {
FILE: app/src/main/java/org/adaway/ui/lists/type/RedirectedHostsFragment.java
class RedirectedHostsFragment (line 45) | public class RedirectedHostsFragment extends AbstractListFragment {
method isTwoRowsItem (line 46) | @Override
method getData (line 51) | @Override
method addItem (line 56) | @Override
method editItem (line 104) | @Override
FILE: app/src/main/java/org/adaway/ui/log/LogActivity.java
class LogActivity (line 59) | public class LogActivity extends AppCompatActivity implements LogViewCal...
method onCreate (line 70) | @Override
method onResume (line 137) | @Override
method onCreateOptionsMenu (line 146) | @Override
method onOptionsItemSelected (line 153) | @Override
method addListItem (line 165) | @Override
method removeListItem (line 216) | @Override
method openHostInBrowser (line 224) | @Override
method copyHostToClipboard (line 231) | @Override
FILE: app/src/main/java/org/adaway/ui/log/LogAdapter.java
class LogAdapter (line 26) | class LogAdapter extends ListAdapter<LogEntry, LogAdapter.ViewHolder> {
method areItemsTheSame (line 32) | @Override
method areContentsTheSame (line 37) | @Override
method LogAdapter (line 48) | LogAdapter(LogViewCallback callback) {
method onCreateViewHolder (line 53) | @NonNull
method onBindViewHolder (line 61) | @Override
method bindImageView (line 78) | private void bindImageView(ImageView imageView, ListType type, LogEntr...
class ViewHolder (line 94) | static class ViewHolder extends RecyclerView.ViewHolder {
method ViewHolder (line 102) | ViewHolder(LogEntryBinding binding) {
FILE: app/src/main/java/org/adaway/ui/log/LogEntry.java
class LogEntry (line 13) | class LogEntry implements Comparable<LogEntry> {
method LogEntry (line 20) | LogEntry(@NonNull String host, @Nullable ListType type) {
method getHost (line 25) | @NonNull
method getType (line 30) | @Nullable
method setType (line 35) | public void setType(@Nullable ListType type) {
method equals (line 39) | @Override
method hashCode (line 50) | @Override
method compareTo (line 57) | @Override
FILE: app/src/main/java/org/adaway/ui/log/LogEntrySort.java
type LogEntrySort (line 12) | enum LogEntrySort {
method getName (line 14) | @Override
method comparator (line 19) | @Override
method getName (line 25) | @Override
method comparator (line 30) | @Override
method getName (line 62) | abstract int getName();
method comparator (line 69) | abstract Comparator<LogEntry> comparator();
FILE: app/src/main/java/org/adaway/ui/log/LogViewCallback.java
type LogViewCallback (line 12) | public interface LogViewCallback {
method addListItem (line 19) | void addListItem(@NonNull String hostName, @NonNull ListType type);
method removeListItem (line 26) | void removeListItem(@NonNull String hostName);
method openHostInBrowser (line 33) | void openHostInBrowser(@NonNull String hostName);
method copyHostToClipboard (line 40) | void copyHostToClipboard(@NonNull String hostName);
method getColor (line 48) | int getColor(int colorId);
FILE: app/src/main/java/org/adaway/ui/log/LogViewModel.java
class LogViewModel (line 33) | public class LogViewModel extends AndroidViewModel {
method LogViewModel (line 41) | public LogViewModel(@NonNull Application application) {
method areBlockedRequestsIgnored (line 51) | public boolean areBlockedRequestsIgnored() {
method getLogs (line 55) | public LiveData<List<LogEntry>> getLogs() {
method clearLogs (line 59) | public void clearLogs() {
method updateLogs (line 64) | public void updateLogs() {
method toggleSort (line 82) | public void toggleSort() {
method isRecording (line 89) | public LiveData<Boolean> isRecording() {
method toggleRecording (line 93) | public void toggleRecording() {
method addListItem (line 99) | public void addListItem(@NonNull String host, @NonNull ListType type, ...
method removeListItem (line 113) | public void removeListItem(@NonNull String host) {
method updateLogEntryType (line 120) | private void updateLogEntryType(@NonNull String host, ListType type) {
method sortDnsRequests (line 134) | private void sortDnsRequests(LogEntrySort sort) {
FILE: app/src/main/java/org/adaway/ui/prefs/PrefsActivity.java
class PrefsActivity (line 22) | public class PrefsActivity extends AppCompatActivity implements Preferen...
method setAppBarTitle (line 25) | static void setAppBarTitle(PreferenceFragmentCompat fragment, @StringR...
method onCreate (line 36) | @Override
method onSupportNavigateUp (line 59) | @Override
method onPreferenceStartFragment (line 69) | @Override
FILE: app/src/main/java/org/adaway/ui/prefs/PrefsBackupRestoreFragment.java
class PrefsBackupRestoreFragment (line 28) | public class PrefsBackupRestoreFragment extends PreferenceFragmentCompat {
method onCreatePreferences (line 46) | @Override
method onAttach (line 59) | @Override
method registerForImportActivity (line 65) | private void registerForImportActivity() {
method registerForExportActivity (line 80) | private void registerForExportActivity() {
method bindBackupPref (line 90) | private void bindBackupPref() {
method bindRestorePref (line 99) | private void bindRestorePref() {
FILE: app/src/main/java/org/adaway/ui/prefs/PrefsMainFragment.java
class PrefsMainFragment (line 25) | public class PrefsMainFragment extends PreferenceFragmentCompat {
method onCreatePreferences (line 26) | @Override
method onAttach (line 37) | @Override
method onResume (line 43) | @Override
method bindThemePrefAction (line 49) | private void bindThemePrefAction() {
method bindAdBlockMethod (line 59) | private void bindAdBlockMethod() {
method bindTelemetryPrefAction (line 69) | private void bindTelemetryPrefAction() {
FILE: app/src/main/java/org/adaway/ui/prefs/PrefsRootFragment.java
class PrefsRootFragment (line 59) | public class PrefsRootFragment extends PreferenceFragmentCompat implemen...
method onCreatePreferences (line 73) | @Override
method onAttach (line 93) | @Override
method onResume (line 99) | @Override
method onDestroyView (line 106) | @Override
method onSharedPreferenceChanged (line 113) | @Override
method registerForOpenHostActivity (line 124) | private void registerForOpenHostActivity() {
method registerForPrepareCertificateActivity (line 135) | private void registerForPrepareCertificateActivity() {
method bindOpenHostsFile (line 142) | private void bindOpenHostsFile() {
method openHostsFile (line 148) | private boolean openHostsFile(Preference preference) {
method bindRedirection (line 170) | private void bindRedirection() {
method validateRedirection (line 186) | private boolean validateRedirection(Class<? extends InetAddress> addre...
method bindWebServerPrefAction (line 200) | private void bindWebServerPrefAction() {
method bindWebServerTest (line 220) | private void bindWebServerTest() {
method bindWebServerCertificate (line 230) | private void bindWebServerCertificate() {
method prepareWebServerCertificate (line 243) | private void prepareWebServerCertificate(Uri uri) {
method updateWebServerState (line 265) | private void updateWebServerState() {
FILE: app/src/main/java/org/adaway/ui/prefs/PrefsUpdateFragment.java
class PrefsUpdateFragment (line 36) | public class PrefsUpdateFragment extends PreferenceFragmentCompat {
method onCreatePreferences (line 37) | @Override
method onAttach (line 51) | @Override
method onResume (line 57) | @Override
method bindNotificationPreferencesAction (line 63) | private void bindNotificationPreferencesAction() {
method bindAppUpdatePrefAction (line 76) | private void bindAppUpdatePrefAction() {
method bindAppChannelPrefAction (line 90) | private void bindAppChannelPrefAction() {
method bindHostsUpdatePrefAction (line 99) | private void bindHostsUpdatePrefAction() {
method updateNotificationPreferencesState (line 120) | private void updateNotificationPreferencesState() {
FILE: app/src/main/java/org/adaway/ui/prefs/PrefsVpnFragment.java
class PrefsVpnFragment (line 26) | public class PrefsVpnFragment extends PreferenceFragmentCompat {
method onCreatePreferences (line 29) | @Override
method onAttach (line 41) | @Override
method registerForStartActivity (line 47) | private void registerForStartActivity() {
method bindExcludedSystemApps (line 54) | private void bindExcludedSystemApps() {
method bindExcludedUserApps (line 63) | private void bindExcludedUserApps() {
method restartVpn (line 74) | private void restartVpn() {
FILE: app/src/main/java/org/adaway/ui/prefs/exclusion/ExcludedAppController.java
type ExcludedAppController (line 8) | public interface ExcludedAppController {
method getUserApplications (line 13) | UserApp[] getUserApplications();
method excludeApplications (line 19) | void excludeApplications(UserApp... applications);
method includeApplications (line 25) | void includeApplications(UserApp... applications);
FILE: app/src/main/java/org/adaway/ui/prefs/exclusion/PrefsVpnExcludedAppsActivity.java
class PrefsVpnExcludedAppsActivity (line 30) | public class PrefsVpnExcludedAppsActivity extends AppCompatActivity impl...
method onCreate (line 34) | @Override
method onCreateOptionsMenu (line 62) | @Override
method onOptionsItemSelected (line 69) | @Override
method getUserApplications (line 86) | @Override
method excludeApplications (line 108) | @Override
method includeApplications (line 116) | @Override
method updatePreferences (line 124) | private void updatePreferences() {
FILE: app/src/main/java/org/adaway/ui/prefs/exclusion/UserApp.java
class UserApp (line 10) | class UserApp implements Comparable<UserApp> {
method UserApp (line 16) | UserApp(CharSequence name, CharSequence packageName, Drawable icon, bo...
method compareTo (line 23) | @Override
FILE: app/src/main/java/org/adaway/ui/prefs/exclusion/UserAppRecycleViewAdapter.java
class UserAppRecycleViewAdapter (line 16) | class UserAppRecycleViewAdapter extends RecyclerView.Adapter<UserAppRecy...
method UserAppRecycleViewAdapter (line 24) | UserAppRecycleViewAdapter(ExcludedAppController controller) {
method onCreateViewHolder (line 28) | @NonNull
method onBindViewHolder (line 36) | @Override
method getItemCount (line 60) | @Override
class ViewHolder (line 70) | static class ViewHolder extends RecyclerView.ViewHolder {
method ViewHolder (line 78) | ViewHolder(VpnExcludedAppEntryBinding binding) {
FILE: app/src/main/java/org/adaway/ui/source/SourceEditActivity.java
class SourceEditActivity (line 43) | public class SourceEditActivity extends AppCompatActivity {
method onCreate (line 61) | @Override
method registerForStartActivity (line 88) | private void registerForStartActivity() {
method checkInitialValueFromIntent (line 104) | private void checkInitialValueFromIntent() {
method applyInitialValues (line 127) | private void applyInitialValues(HostsSource source) {
method bindLocation (line 153) | private void bindLocation() {
method bindFormats (line 174) | private void bindFormats() {
method onCreateOptionsMenu (line 186) | @Override
method onOptionsItemSelected (line 194) | @Override
method validate (line 218) | private HostsSource validate() {
method openDocument (line 251) | private void openDocument() {
FILE: app/src/main/java/org/adaway/ui/support/SupportActivity.java
class SupportActivity (line 28) | public class SupportActivity extends AppCompatActivity {
method animateHeart (line 38) | public static void animateHeart(ImageView heartImageView) {
method bindLink (line 61) | public static void bindLink(Context context, View view, Uri uri) {
method onCreate (line 68) | @Override
method bindPaypal (line 79) | private void bindPaypal() {
method bindSponsorShip (line 84) | private void bindSponsorShip() {
FILE: app/src/main/java/org/adaway/ui/update/CompleteDownloadStatus.java
class CompleteDownloadStatus (line 12) | public class CompleteDownloadStatus implements DownloadStatus {
method getProgress (line 13) | @Override
method format (line 18) | @Override
FILE: app/src/main/java/org/adaway/ui/update/DownloadStatus.java
type DownloadStatus (line 10) | public interface DownloadStatus {
method getProgress (line 14) | int getProgress();
method format (line 22) | String format(Context context);
FILE: app/src/main/java/org/adaway/ui/update/PendingDownloadStatus.java
class PendingDownloadStatus (line 13) | public class PendingDownloadStatus implements DownloadStatus {
method PendingDownloadStatus (line 33) | PendingDownloadStatus(long downloaded, long total) {
method getProgress (line 39) | @Override
method format (line 44) | @Override
FILE: app/src/main/java/org/adaway/ui/update/UpdateActivity.java
class UpdateActivity (line 27) | public class UpdateActivity extends AppCompatActivity {
method onCreate (line 31) | @Override
method bindListeners (line 44) | private void bindListeners() {
method bindManifest (line 50) | private void bindManifest() {
method bindProgress (line 60) | private void bindProgress() {
method markUpToDate (line 69) | private void markUpToDate(Manifest manifest) {
method showUpdate (line 75) | private void showUpdate(Manifest manifest) {
method startUpdate (line 81) | private void startUpdate(View view) {
FILE: app/src/main/java/org/adaway/ui/update/UpdateViewModel.java
class UpdateViewModel (line 34) | public class UpdateViewModel extends AdwareViewModel {
method UpdateViewModel (line 39) | public UpdateViewModel(@NonNull Application application) {
method getAppManifest (line 45) | public LiveData<Manifest> getAppManifest() {
method update (line 49) | public void update() {
method getDownloadProgress (line 54) | public MutableLiveData<DownloadStatus> getDownloadProgress() {
method trackProgress (line 58) | private void trackProgress(long downloadId) {
FILE: app/src/main/java/org/adaway/ui/welcome/WelcomeActivity.java
class WelcomeActivity (line 24) | public class WelcomeActivity extends AppCompatActivity implements Welcom...
method onCreate (line 30) | @Override
method buildPager (line 42) | private void buildPager() {
method bindNextButton (line 48) | private void bindNextButton() {
method bindBackButton (line 52) | private void bindBackButton() {
method bindDots (line 56) | private void bindDots() {
method highlightDot (line 71) | private void highlightDot(int position) {
method bindBackPress (line 83) | private void bindBackPress() {
method allowNext (line 99) | @Override
method blockNext (line 109) | @Override
method allowBack (line 114) | private void allowBack() {
method blockBack (line 118) | private void blockBack() {
method goNext (line 122) | private void goNext() {
method goBack (line 139) | private void goBack() {
method startHomeActivity (line 151) | private void startHomeActivity() {
FILE: app/src/main/java/org/adaway/ui/welcome/WelcomeFragment.java
class WelcomeFragment (line 10) | public abstract class WelcomeFragment extends Fragment {
method allowNext (line 13) | protected void allowNext() {
method blockNext (line 18) | protected void blockNext() {
method canGoNext (line 23) | protected boolean canGoNext() {
method getNavigable (line 27) | private WelcomeNavigable getNavigable() {
FILE: app/src/main/java/org/adaway/ui/welcome/WelcomeMethodFragment.java
class WelcomeMethodFragment (line 39) | public class WelcomeMethodFragment extends WelcomeFragment {
method onCreateView (line 47) | @Nullable
method checkRoot (line 68) | private void checkRoot(@Nullable View view) {
method enableVpnService (line 78) | private void enableVpnService(@Nullable View view) {
method notifyRootEnabled (line 93) | private void notifyRootEnabled() {
method notifyRootDisabled (line 101) | private void notifyRootDisabled(boolean showDialog) {
method notifyVpnEnabled (line 116) | private void notifyVpnEnabled() {
method notifyVpnDisabled (line 124) | private void notifyVpnDisabled() {
method checkAlwaysOnVpn (line 131) | private void checkAlwaysOnVpn() {
FILE: app/src/main/java/org/adaway/ui/welcome/WelcomeNavigable.java
type WelcomeNavigable (line 8) | public interface WelcomeNavigable {
method allowNext (line 9) | void allowNext();
method blockNext (line 10) | void blockNext();
FILE: app/src/main/java/org/adaway/ui/welcome/WelcomePagerAdapter.java
class WelcomePagerAdapter (line 12) | public class WelcomePagerAdapter extends FragmentStateAdapter {
method WelcomePagerAdapter (line 17) | WelcomePagerAdapter(@NonNull FragmentActivity fragmentManager) {
method createFragment (line 24) | @NonNull
method getItemCount (line 39) | @Override
FILE: app/src/main/java/org/adaway/ui/welcome/WelcomeSupportFragment.java
class WelcomeSupportFragment (line 28) | public class WelcomeSupportFragment extends WelcomeFragment {
method onCreateView (line 31) | @Nullable
method canGoNext (line 43) | @Override
method customizeSecondOption (line 48) | private void customizeSecondOption() {
method bindSupport (line 56) | private void bindSupport() {
method bindTelemetry (line 63) | private void bindTelemetry() {
method showAndBindSponsorship (line 70) | private void showAndBindSponsorship() {
FILE: app/src/main/java/org/adaway/ui/welcome/WelcomeSyncFragment.java
class WelcomeSyncFragment (line 36) | public class WelcomeSyncFragment extends WelcomeFragment {
method onCreateView (line 42) | @Nullable
method bindRetry (line 63) | private void bindRetry() {
method bindNotifications (line 68) | private void bindNotifications() {
method notifySynced (line 83) | private void notifySynced() {
method notifyError (line 92) | private void notifyError(HostError error) {
method retry (line 103) | private void retry(@SuppressWarnings("unused") View view) {
method requestPostNotificationsPermission (line 111) | private void requestPostNotificationsPermission() {
FILE: app/src/main/java/org/adaway/util/AppExecutors.java
class AppExecutors (line 34) | public class AppExecutors {
method AppExecutors (line 43) | private AppExecutors(Executor diskIO, Executor networkIO, Executor mai...
method getInstance (line 49) | public static AppExecutors getInstance() {
method diskIO (line 62) | public Executor diskIO() {
method networkIO (line 66) | public Executor networkIO() {
method mainThread (line 70) | public Executor mainThread() {
class MainThreadExecutor (line 74) | private static class MainThreadExecutor implements Executor {
method execute (line 77) | @Override
FILE: app/src/main/java/org/adaway/util/Clipboard.java
class Clipboard (line 17) | public final class Clipboard {
method Clipboard (line 18) | private Clipboard() {
method copyHostToClipboard (line 28) | public static void copyHostToClipboard(Context context, String host) {
FILE: app/src/main/java/org/adaway/util/Constants.java
class Constants (line 23) | public class Constants {
FILE: app/src/main/java/org/adaway/util/RegexUtils.java
class RegexUtils (line 31) | public class RegexUtils {
method isValidHostname (line 40) | public static boolean isValidHostname(String hostname) {
method isValidWildcardHostname (line 60) | public static boolean isValidWildcardHostname(String hostname) {
method isValidIP (line 76) | public static boolean isValidIP(String ip) {
method wildcardToRegex (line 90) | public static String wildcardToRegex(String wildcard) {
FILE: app/src/main/java/org/adaway/util/WebServerUtils.java
class WebServerUtils (line 62) | public class WebServerUtils {
method startWebServer (line 73) | public static void startWebServer(Context context) {
method stopWebServer (line 88) | public static void stopWebServer() {
method isWebServerRunning (line 97) | public static boolean isWebServerRunning() {
method getWebServerState (line 106) | @StringRes
method installCertificate (line 131) | public static void installCertificate(Context context) {
method copyCertificate (line 153) | public static void copyCertificate(ContextThemeWrapper wrapper, Uri ur...
method inflateResources (line 171) | private static void inflateResources(Context context, Path target) {
method inflateResource (line 183) | private static void inflateResource(AssetManager assetManager, String ...
FILE: app/src/main/java/org/adaway/util/log/ApplicationLog.java
class ApplicationLog (line 18) | public final class ApplicationLog {
method ApplicationLog (line 22) | private ApplicationLog() {
method init (line 31) | public static void init(Application application) {
method isApplicationDebuggable (line 41) | private static boolean isApplicationDebuggable(Context context) {
FILE: app/src/main/java/org/adaway/util/log/SentryLog.java
class SentryLog (line 21) | public final class SentryLog {
method SentryLog (line 25) | private SentryLog() {
method init (line 34) | public static void init(Application application) {
method setEnabled (line 44) | public static void setEnabled(Application application, boolean enabled) {
method recordBreadcrumb (line 59) | public static void recordBreadcrumb(String message) {
method isStub (line 73) | public static boolean isStub() {
FILE: app/src/main/java/org/adaway/vpn/VpnService.java
class VpnService (line 84) | public class VpnService extends android.net.VpnService implements Handle...
method VpnService (line 106) | public VpnService() {
method onCreate (line 118) | @Override
method onStartCommand (line 124) | @Override
method onDestroy (line 145) | @Override
method handleMessage (line 156) | @Override
method notifyVpnStatus (line 169) | public void notifyVpnStatus(VpnStatus status) {
method startVpn (line 174) | private void startVpn() {
method stopVpn (line 182) | private void stopVpn() {
method waitForNetVpn (line 192) | private void waitForNetVpn() {
method reconnect (line 197) | private void reconnect() {
method updateVpnStatus (line 202) | private void updateVpnStatus(VpnStatus status) {
method getNotification (line 224) | private Notification getNotification(VpnStatus status) {
method registerNetworkCallback (line 265) | private void registerNetworkCallback() {
method unregisterNetworkCallback (line 279) | private void unregisterNetworkCallback() {
method initializeNetworkTypes (line 285) | private void initializeNetworkTypes(ConnectivityManager connectivityMa...
method addNetworkType (line 302) | private void addNetworkType(NetworkType type) {
method removeNetworkType (line 311) | private void removeNetworkType(NetworkType type) {
class NetworkTypeCallback (line 327) | private class NetworkTypeCallback extends NetworkCallback {
method NetworkTypeCallback (line 330) | NetworkTypeCallback(NetworkType monitoredType) {
method onAvailable (line 334) | @Override
method onLost (line 340) | @Override
type NetworkType (line 347) | enum NetworkType {
class MyHandler (line 353) | private static class MyHandler extends Handler {
method MyHandler (line 357) | MyHandler(Callback callback) {
method handleMessage (line 362) | @Override
FILE: app/src/main/java/org/adaway/vpn/VpnServiceControls.java
class VpnServiceControls (line 23) | public final class VpnServiceControls {
method VpnServiceControls (line 27) | private VpnServiceControls() {
method isRunning (line 37) | public static boolean isRunning(Context context) {
method isStarted (line 53) | public static boolean isStarted(Context context) {
method start (line 63) | public static boolean start(Context context) {
method stop (line 84) | public static void stop(Context context) {
method checkAnyNetworkVpnCapability (line 93) | private static boolean checkAnyNetworkVpnCapability(Context context) {
FILE: app/src/main/java/org/adaway/vpn/VpnServiceHeartbeat.java
class VpnServiceHeartbeat (line 27) | public class VpnServiceHeartbeat extends Worker {
method VpnServiceHeartbeat (line 39) | public VpnServiceHeartbeat(@NonNull Context context, @NonNull WorkerPa...
method doWork (line 43) | @NonNull
method isVpnServiceRunning (line 56) | private boolean isVpnServiceRunning() {
method start (line 73) | public static void start(Context context) {
method stop (line 89) | public static void stop(Context context) {
FILE: app/src/main/java/org/adaway/vpn/VpnStatus.java
type VpnStatus (line 9) | public enum VpnStatus {
method VpnStatus (line 23) | VpnStatus(int code, @StringRes int textResource) {
method fromCode (line 28) | public static VpnStatus fromCode(int code) {
method getTextResource (line 35) | @StringRes
method toCode (line 40) | public int toCode() {
method isStarted (line 44) | public boolean isStarted() {
FILE: app/src/main/java/org/adaway/vpn/dns/DnsPacketProxy.java
class DnsPacketProxy (line 58) | public class DnsPacketProxy {
method DnsPacketProxy (line 79) | public DnsPacketProxy(EventLoop eventLoop, DnsServerMapper dnsServerMa...
method initialize (line 89) | public void initialize(Context context) {
method handleDnsResponse (line 99) | public void handleDnsResponse(IpPacket requestPacket, byte[] responseP...
method handleDnsRequest (line 140) | public void handleDnsRequest(byte[] packetData) throws IOException {
method getHostEntry (line 236) | private HostEntry getHostEntry(String dnsQueryName) {
type EventLoop (line 253) | public interface EventLoop {
method forwardPacket (line 260) | void forwardPacket(DatagramPacket packet) throws IOException;
method forwardPacket (line 269) | void forwardPacket(DatagramPacket packet, Consumer<byte[]> callback)...
method queueDeviceWrite (line 276) | void queueDeviceWrite(IpPacket packet);
FILE: app/src/main/java/org/adaway/vpn/dns/DnsQuery.java
class DnsQuery (line 20) | class DnsQuery implements AutoCloseable {
method DnsQuery (line 44) | DnsQuery(DatagramSocket socket, Consumer<byte[]> callback) {
method isOlderThan (line 59) | boolean isOlderThan(long timestamp) {
method getPollfd (line 67) | StructPollfd getPollfd() {
method isAnswered (line 76) | boolean isAnswered() {
method handleResponse (line 83) | void handleResponse() {
method close (line 96) | @Override
FILE: app/src/main/java/org/adaway/vpn/dns/DnsQueryQueue.java
class DnsQueryQueue (line 19) | public class DnsQueryQueue {
method DnsQueryQueue (line 36) | public DnsQueryQueue() {
method addQuery (line 46) | public void addQuery(DatagramSocket socket, Consumer<byte[]> callback) {
method ensureFreeSpace (line 56) | private void ensureFreeSpace() {
method clearTimedOutQueries (line 64) | private void clearTimedOutQueries() {
method size (line 78) | public int size() {
method getQueryFds (line 87) | public StructPollfd[] getQueryFds() {
method handleResponses (line 96) | public void handleResponses() {
FILE: app/src/main/java/org/adaway/vpn/dns/DnsServerMapper.java
class DnsServerMapper (line 38) | public class DnsServerMapper {
method DnsServerMapper (line 63) | public DnsServerMapper() {
method configureVpn (line 75) | public void configureVpn(Context context, VpnService.Builder builder) {
method getDefaultDnsServerAddress (line 99) | public InetAddress getDefaultDnsServerAddress() {
method getDnsServerFromFakeAddress (line 117) | Optional<InetAddress> getDnsServerFromFakeAddress(InetAddress fakeDnsA...
method getNetworkDnsServers (line 134) | private List<InetAddress> getNetworkDnsServers(Context context) {
method dumpNetworkInfo (line 153) | private void dumpNetworkInfo(ConnectivityManager connectivityManager) {
method getAnyNonVpnNetworkDns (line 183) | private List<InetAddress> getAnyNonVpnNetworkDns(ConnectivityManager c...
method getDnsFromNonVpnNetworkWithMatchingTransportType (line 203) | private List<InetAddress> getDnsFromNonVpnNetworkWithMatchingTransport...
method getNetworkDnsServers (line 242) | private List<InetAddress> getNetworkDnsServers(ConnectivityManager con...
method isNotVpnNetwork (line 257) | private boolean isNotVpnNetwork(ConnectivityManager connectivityManage...
method addIpv4Address (line 271) | private Subnet addIpv4Address(VpnService.Builder builder) {
method addIpv6Address (line 292) | private Subnet addIpv6Address(VpnService.Builder builder) {
method hasIpV6DnsServers (line 300) | private boolean hasIpV6DnsServers(Context context, Collection<InetAddr...
FILE: app/src/main/java/org/adaway/vpn/dns/DohPacketProxy.java
class DohPacketProxy (line 52) | public class DohPacketProxy {
method DohPacketProxy (line 76) | public DohPacketProxy(EventLoop eventLoop, DnsServerMapper dnsServerMa...
method getByIp (line 81) | private static InetAddress getByIp(String host) {
method initialize (line 95) | public void initialize(Context context) {
method createDnsOverHttps (line 100) | private DnsOverHttps createDnsOverHttps(Context context) {
method handleDnsResponse (line 118) | public void handleDnsResponse(IpPacket requestPacket, byte[] responseP...
method handleDnsRequest (line 159) | public void handleDnsRequest(byte[] packetData) throws IOException {
method queryDohServer (line 254) | private void queryDohServer(IpPacket ipPacket, Message dnsMsg, Name na...
method getHostEntry (line 286) | private HostEntry getHostEntry(String dnsQueryName) {
FILE: app/src/main/java/org/adaway/vpn/dns/Subnet.java
class Subnet (line 16) | class Subnet {
method parse (line 32) | static Subnet parse(String subnet) {
method Subnet (line 41) | private Subnet(InetAddress address, int prefixLength) {
method getAddress (line 52) | InetAddress getAddress(int index) {
method toString (line 62) | @NonNull
FILE: app/src/main/java/org/adaway/vpn/worker/VpnBuilder.java
class VpnBuilder (line 37) | public final class VpnBuilder {
method VpnBuilder (line 41) | private VpnBuilder() {
method establish (line 52) | public static ParcelFileDescriptor establish(VpnService service, DnsSe...
method excludeApplicationsFromVpn (line 84) | private static void excludeApplicationsFromVpn(Context context, VpnSer...
method getWebBrowserPackageName (line 120) | private static Set<String> getWebBrowserPackageName(PackageManager pac...
FILE: app/src/main/java/org/adaway/vpn/worker/VpnConnectionMonitor.java
class VpnConnectionMonitor (line 24) | public class VpnConnectionMonitor {
method VpnConnectionMonitor (line 45) | VpnConnectionMonitor(Context context) {
method findVpnNetworkInterface (line 51) | private static NetworkInterface findVpnNetworkInterface() {
method pickLastVpnNetworkInterface (line 68) | private static NetworkInterface pickLastVpnNetworkInterface(NetworkInt...
method initialize (line 93) | void initialize() {
method monitor (line 102) | void monitor() {
method reset (line 129) | void reset() {
method stop (line 136) | void stop() {
FILE: app/src/main/java/org/adaway/vpn/worker/VpnConnectionThrottler.java
class VpnConnectionThrottler (line 13) | class VpnConnectionThrottler {
method VpnConnectionThrottler (line 28) | VpnConnectionThrottler() {
method throttle (line 38) | void throttle() throws InterruptedException {
method increaseTimeout (line 65) | private void increaseTimeout() {
method decreaseTimeout (line 70) | private void decreaseTimeout(boolean reset) {
FILE: app/src/main/java/org/adaway/vpn/worker/VpnNetworkException.java
class VpnNetworkException (line 3) | public class VpnNetworkException extends Exception {
method VpnNetworkException (line 4) | public VpnNetworkException(String s) {
method VpnNetworkException (line 8) | public VpnNetworkException(String s, Throwable t) {
FILE: app/src/main/java/org/adaway/vpn/worker/VpnWatchdog.java
class VpnWatchdog (line 40) | class VpnWatchdog {
method VpnWatchdog (line 62) | VpnWatchdog() {
method getPollTimeout (line 74) | int getPollTimeout() {
method setTarget (line 87) | void setTarget(InetAddress target) {
method initialize (line 96) | void initialize(boolean enabled) {
method handleTimeout (line 124) | void handleTimeout() throws VpnNetworkException {
method handlePacket (line 151) | void handlePacket(byte[] packetData) {
method sendPacket (line 164) | void sendPacket() throws VpnNetworkException {
method newDatagramSocket (line 178) | @NonNull
FILE: app/src/main/java/org/adaway/vpn/worker/VpnWorker.java
class VpnWorker (line 59) | public class VpnWorker implements DnsPacketProxy.EventLoop {
method VpnWorker (line 103) | public VpnWorker(VpnService vpnService) {
method start (line 120) | public void start() {
method stop (line 132) | public void stop() {
method setExecutor (line 146) | private void setExecutor(ExecutorService executor) {
method forceCloseTunnel (line 158) | private void forceCloseTunnel() {
method work (line 169) | private void work() {
method runVpn (line 198) | private void runVpn() throws IOException, VpnNetworkException {
method doOne (line 226) | private boolean doOne(FileInputStream inputStream, FileOutputStream fi...
method writeToDevice (line 270) | private void writeToDevice(FileOutputStream fileOutputStream) throws I...
method readPacketFromDevice (line 282) | private int readPacketFromDevice(FileInputStream inputStream, byte[] p...
method forwardPacket (line 299) | @Override
method forwardPacket (line 309) | @Override
method queueDeviceWrite (line 333) | @Override
FILE: app/src/test/java/org/adaway/model/git/GitHostsSourceTest.java
class GitHostsSourceTest (line 21) | @RunWith(Parameterized.class)
method data (line 28) | @Parameterized.Parameters
method GitHostsSourceTest (line 48) | public GitHostsSourceTest(String label, String url, Class<?> expectedC...
method testIsHostedOnGit (line 57) | @Test
method testLastUpdateFetch (line 69) | @Test
FILE: app/src/test/java/org/adaway/model/source/SourceLoaderTest.java
class SourceLoaderTest (line 13) | public class SourceLoaderTest {
method testHostParser (line 106) | @Test
method isValidHostname (line 120) | @Test
method isValidWhitelistHostname (line 130) | @Test
method isInvalidHostname (line 146) | @Test
method isInvalidWhitelistHostname (line 156) | @Test
FILE: app/src/test/java/org/adaway/ui/log/LogEntrySortTest.java
class LogEntrySortTest (line 13) | public class LogEntrySortTest {
method testTopLevelDomainComparator (line 14) | @Test
method testAlphabeticalComparator (line 42) | @Test
FILE: sentrystub/src/main/java/io/sentry/Breadcrumb.java
class Breadcrumb (line 3) | public class Breadcrumb {
method setMessage (line 4) | public void setMessage(String message) {
method setLevel (line 8) | public void setLevel(SentryLevel info) {
FILE: sentrystub/src/main/java/io/sentry/Integration.java
type Integration (line 3) | public interface Integration {
FILE: sentrystub/src/main/java/io/sentry/Scope.java
class Scope (line 3) | public class Scope {
method addBreadcrumb (line 4) | public void addBreadcrumb(Breadcrumb breadcrumb) {
FILE: sentrystub/src/main/java/io/sentry/ScopeCallback.java
type ScopeCallback (line 3) | public interface ScopeCallback {
method run (line 4) | void run(Scope scope);
FILE: sentrystub/src/main/java/io/sentry/Sentry.java
class Sentry (line 3) | public class Sentry {
method configureScope (line 6) | public static void configureScope(ScopeCallback callback) {
type OptionsConfiguration (line 10) | public interface OptionsConfiguration<T extends SentryOptions> {
method configure (line 16) | void configure(T options);
FILE: sentrystub/src/main/java/io/sentry/SentryLevel.java
type SentryLevel (line 3) | public enum SentryLevel {
FILE: sentrystub/src/main/java/io/sentry/SentryOptions.java
class SentryOptions (line 3) | public class SentryOptions {
method addIntegration (line 4) | public void addIntegration(Integration integration) {
FILE: sentrystub/src/main/java/io/sentry/android/core/SentryAndroid.java
class SentryAndroid (line 8) | public class SentryAndroid {
method init (line 9) | public static void init(Context context, Sentry.OptionsConfiguration<S...
FILE: sentrystub/src/main/java/io/sentry/android/fragment/FragmentLifecycleIntegration.java
class FragmentLifecycleIntegration (line 7) | public class FragmentLifecycleIntegration implements Integration {
method FragmentLifecycleIntegration (line 8) | public FragmentLifecycleIntegration(Application application, boolean e...
FILE: sentrystub/src/main/java/io/sentry/android/timber/SentryTimberIntegration.java
class SentryTimberIntegration (line 6) | public class SentryTimberIntegration implements Integration {
method SentryTimberIntegration (line 7) | public SentryTimberIntegration(SentryLevel minEventLevel, SentryLevel ...
FILE: tcpdump/jni/libpcap/Win32/Include/addrinfo.h
type addrinfo (line 69) | struct addrinfo {
type addrinfo (line 80) | struct addrinfo
type hostent (line 81) | struct hostent
type addrinfo (line 84) | struct addrinfo
type addrinfo (line 84) | struct addrinfo
type sockaddr (line 85) | struct sockaddr
type hostent (line 87) | struct hostent
type hostent (line 88) | struct hostent
FILE: tcpdump/jni/libpcap/Win32/Include/arpa/nameser.h
type HEADER (line 252) | typedef struct {
type rrec (line 295) | struct rrec {
FILE: tcpdump/jni/libpcap/Win32/Include/bittypes.h
type u_int8_t (line 33) | typedef unsigned char u_int8_t;
type u_int16_t (line 38) | typedef unsigned short u_int16_t;
type u_int32_t (line 43) | typedef unsigned int u_int32_t;
type u_int64_t (line 49) | typedef unsigned _int64 u_int64_t;
type _int64 (line 50) | typedef _int64 int64_t;
type u_int64_t (line 52) | typedef unsigned long long u_int64_t;
FILE: tcpdump/jni/libpcap/Win32/Include/inetprivate.h
type hostent (line 44) | struct hostent
type hostent (line 45) | struct hostent
type hostent (line 46) | struct hostent
FILE: tcpdump/jni/libpcap/Win32/Include/ip6_misc.h
type in6_addr (line 40) | struct in6_addr
type sa_family_t (line 60) | typedef unsigned short sa_family_t;
type sockaddr_in6 (line 70) | struct sockaddr_in6
type addrinfo (line 150) | struct addrinfo {
FILE: tcpdump/jni/libpcap/Win32/Include/net/if.h
type if_data (line 52) | struct if_data {
type if_msghdr (line 113) | struct if_msghdr {
type ifa_msghdr (line 127) | struct ifa_msghdr {
type ifma_msghdr (line 141) | struct ifma_msghdr {
type ifreq (line 156) | struct ifreq {
type ifaliasreq (line 186) | struct ifaliasreq {
type ifmediareq (line 193) | struct ifmediareq {
type ifconf (line 208) | struct ifconf {
FILE: tcpdump/jni/libpcap/Win32/Include/net/netdb.h
type rpcent (line 78) | struct rpcent {
type hostent (line 110) | struct hostent
type netent (line 111) | struct netent
type netent (line 112) | struct netent
type netent (line 113) | struct netent
type protoent (line 114) | struct protoent
type servent (line 115) | struct servent
type rpcent (line 116) | struct rpcent
type rpcent (line 117) | struct rpcent
type rpcent (line 118) | struct rpcent
type hostent (line 128) | struct hostent
type hostent (line 130) | struct hostent
type hostent (line 132) | struct hostent
type hostent (line 133) | struct hostent
type hostent (line 135) | struct hostent
type hostent (line 135) | struct hostent
type netent (line 137) | struct netent
type netent (line 138) | struct netent
type netent (line 140) | struct netent
type netent (line 141) | struct netent
type netent (line 143) | struct netent
type netent (line 143) | struct netent
type protoent (line 145) | struct protoent
type protoent (line 146) | struct protoent
type protoent (line 148) | struct protoent
type protoent (line 149) | struct protoent
type protoent (line 151) | struct protoent
type protoent (line 151) | struct protoent
type servent (line 153) | struct servent
type servent (line 154) | struct servent
type servent (line 156) | struct servent
type servent (line 157) | struct servent
type servent (line 159) | struct servent
type servent (line 159) | struct servent
FILE: tcpdump/jni/libpcap/Win32/Include/sockstorage.h
type sockaddr_storage (line 29) | struct sockaddr_storage {
FILE: tcpdump/jni/libpcap/Win32/Src/ffs.c
function ffs (line 43) | int
FILE: tcpdump/jni/libpcap/Win32/Src/getaddrinfo.c
type in6_addr (line 105) | struct in6_addr
type sockinet (line 117) | struct sockinet {
type afd (line 124) | struct afd {
type in6_addr (line 134) | struct in6_addr
type sockaddr_in6 (line 135) | struct sockaddr_in6
type sockaddr_in6 (line 136) | struct sockaddr_in6
type in_addr (line 139) | struct in_addr
type sockaddr_in (line 140) | struct sockaddr_in
type sockaddr_in (line 141) | struct sockaddr_in
type explore (line 146) | struct explore {
type explore (line 157) | struct explore
type addrinfo (line 180) | struct addrinfo
type addrinfo (line 181) | struct addrinfo
type addrinfo (line 182) | struct addrinfo
type addrinfo (line 183) | struct addrinfo
type addrinfo (line 184) | struct addrinfo
type addrinfo (line 185) | struct addrinfo
type addrinfo (line 186) | struct addrinfo
type addrinfo (line 187) | struct addrinfo
type afd (line 188) | struct afd
type addrinfo (line 188) | struct addrinfo
type addrinfo (line 189) | struct addrinfo
type addrinfo (line 190) | struct addrinfo
type addrinfo (line 191) | struct addrinfo
type addrinfo (line 192) | struct addrinfo
type addrinfo (line 192) | struct addrinfo
type afd (line 193) | struct afd
type addrinfo (line 194) | struct addrinfo
type addrinfo (line 195) | struct addrinfo
type afd (line 196) | struct afd
function freeaddrinfo (line 267) | void
function str_isnumber (line 282) | static int
function getaddrinfo (line 295) | int
function explore_fqdn (line 514) | static int
function explore_null (line 688) | static int
function explore_numeric (line 751) | static int
function explore_numeric_scope (line 840) | static int
function get_name (line 911) | static int
function get_canonname (line 980) | static int
type addrinfo (line 994) | struct addrinfo
type afd (line 997) | struct afd
type addrinfo (line 1001) | struct addrinfo
type addrinfo (line 1003) | struct addrinfo
type addrinfo (line 1003) | struct addrinfo
type addrinfo (line 1008) | struct addrinfo
type sockaddr (line 1009) | struct sockaddr
function get_portmatch (line 1021) | static int
function get_port (line 1031) | static int
type afd (line 1108) | struct afd
type afd (line 1112) | struct afd
FILE: tcpdump/jni/libpcap/Win32/Src/getnetbynm.c
type netent (line 26) | struct netent
type netent (line 29) | struct netent
FILE: tcpdump/jni/libpcap/Win32/Src/getnetent.c
type netent (line 29) | struct netent
function setnetent (line 36) | void
function endnetent (line 47) | void
type netent (line 57) | struct netent
FILE: tcpdump/jni/libpcap/Win32/Src/getopt.c
function getopt (line 56) | int
FILE: tcpdump/jni/libpcap/Win32/Src/getservent.c
type servent (line 53) | struct servent
function setservent (line 57) | void
function endservent (line 68) | void
type servent (line 78) | struct servent
FILE: tcpdump/jni/libpcap/Win32/Src/inet_aton.c
function inet_aton (line 49) | int
FILE: tcpdump/jni/libpcap/Win32/Src/inet_net.c
function u_int32_t (line 46) | u_int32_t
FILE: tcpdump/jni/libpcap/Win32/Src/inet_pton.c
type in_addr (line 54) | struct in_addr
function inet_pton (line 56) | int
FILE: tcpdump/jni/libpcap/bpf/net/bpf_filter.c
function m_xword (line 136) | static int
function m_xhalf (line 172) | static int
function u_int (line 220) | u_int
FILE: tcpdump/jni/libpcap/bpf_dump.c
function bpf_dump (line 29) | void
FILE: tcpdump/jni/libpcap/dlpisubs.c
function pcap_stats_dlpi (line 79) | int
type pcap_dlpi (line 124) | struct pcap_dlpi
type pcap_pkthdr (line 127) | struct pcap_pkthdr
type sb_hdr (line 129) | struct sb_hdr
type sb_hdr (line 131) | struct sb_hdr
type sb_hdr (line 166) | struct sb_hdr
function pcap_process_mactype (line 208) | int
function pcap_conf_bufmod (line 271) | int
function pcap_alloc_databuf (line 325) | int
function strioctl (line 342) | int
function pcap_stream_err (line 362) | static void
FILE: tcpdump/jni/libpcap/dlpisubs.h
type pcap_dlpi (line 11) | struct pcap_dlpi {
type pcap_stat (line 25) | struct pcap_stat
FILE: tcpdump/jni/libpcap/etherent.c
function xdtoi (line 58) | static inline int
function skip_space (line 70) | static inline int
function skip_line (line 83) | static inline int
type pcap_etherent (line 96) | struct pcap_etherent
type pcap_etherent (line 101) | struct pcap_etherent
FILE: tcpdump/jni/libpcap/fad-getad.c
function get_sa_len (line 109) | static size_t
function pcap_findalldevs_interfaces (line 146) | int
FILE: tcpdump/jni/libpcap/fad-gifc.c
type mbuf (line 47) | struct mbuf
type rtentry (line 48) | struct rtentry
function pcap_findalldevs_interfaces (line 134) | int
FILE: tcpdump/jni/libpcap/fad-glifc.c
type mbuf (line 48) | struct mbuf
type rtentry (line 49) | struct rtentry
function pcap_findalldevs_interfaces (line 77) | int
FILE: tcpdump/jni/libpcap/fad-null.c
function pcap_findalldevs_interfaces (line 50) | int
FILE: tcpdump/jni/libpcap/fad-sita.c
function pcap_findalldevs_interfaces (line 38) | int pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf) {
FILE: tcpdump/jni/libpcap/fad-win32.c
function pcap_add_if_win32 (line 44) | static int
function pcap_findalldevs_interfaces (line 121) | int
FILE: tcpdump/jni/libpcap/gencode.c
function bpf_error (line 149) | void
type block (line 169) | struct block
type bpf_abs_offset (line 188) | typedef struct {
type e_offrel (line 198) | enum e_offrel {
type addrinfo (line 219) | struct addrinfo
type chunk (line 232) | struct chunk {
type chunk (line 237) | struct chunk
type block (line 242) | struct block
type slist (line 243) | struct slist
type block (line 244) | struct block
type block (line 247) | struct block
type block (line 247) | struct block
type block (line 248) | struct block
type block (line 248) | struct block
type block (line 249) | struct block
type e_offrel (line 249) | enum e_offrel
type block (line 250) | struct block
type e_offrel (line 250) | enum e_offrel
type block (line 251) | struct block
type e_offrel (line 251) | enum e_offrel
type block (line 252) | struct block
type e_offrel (line 252) | enum e_offrel
type block (line 253) | struct block
type e_offrel (line 253) | enum e_offrel
type block (line 254) | struct block
type e_offrel (line 254) | enum e_offrel
type block (line 256) | struct block
type e_offrel (line 256) | enum e_offrel
type block (line 257) | struct block
type e_offrel (line 257) | enum e_offrel
type slist (line 259) | struct slist
type slist (line 260) | struct slist
type e_offrel (line 260) | enum e_offrel
type slist (line 261) | struct slist
type block (line 262) | struct block
type block (line 263) | struct block
type block (line 264) | struct block
type block (line 265) | struct block
type block (line 266) | struct block
type block (line 267) | struct block
type slist (line 268) | struct slist
type slist (line 269) | struct slist
type slist (line 270) | struct slist
type slist (line 271) | struct slist
type block (line 272) | struct block
type slist (line 273) | struct slist
type block (line 275) | struct block
type block (line 276) | struct block
type block (line 277) | struct block
type block (line 278) | struct block
type block (line 280) | struct block
type in6_addr (line 280) | struct in6_addr
type in6_addr (line 280) | struct in6_addr
type block (line 282) | struct block
type block (line 283) | struct block
type block (line 284) | struct block
type block (line 285) | struct block
type block (line 286) | struct block
type block (line 287) | struct block
type block (line 288) | struct block
type block (line 289) | struct block
type block (line 290) | struct block
type block (line 292) | struct block
type in6_addr (line 292) | struct in6_addr
type in6_addr (line 292) | struct in6_addr
type block (line 295) | struct block
type block (line 297) | struct block
type block (line 298) | struct block
type block (line 299) | struct block
type block (line 300) | struct block
type block (line 301) | struct block
type block (line 302) | struct block
type block (line 303) | struct block
type block (line 304) | struct block
type block (line 305) | struct block
type block (line 306) | struct block
type block (line 307) | struct block
type block (line 308) | struct block
type block (line 309) | struct block
type block (line 311) | struct block
type block (line 312) | struct block
type slist (line 313) | struct slist
type arth (line 313) | struct arth
type slist (line 314) | struct slist
type arth (line 314) | struct arth
type block (line 315) | struct block
type block (line 316) | struct block
type block (line 317) | struct block
type block (line 318) | struct block
type block (line 320) | struct block
type block (line 321) | struct block
type chunk (line 327) | struct chunk
function freechunks (line 357) | static void
type block (line 384) | struct block
type block (line 388) | struct block
type block (line 390) | struct block
type slist (line 397) | struct slist
type slist (line 401) | struct slist
type slist (line 403) | struct slist
type block (line 409) | struct block
type block (line 413) | struct block
function syntax (line 419) | static inline void
function pcap_compile (line 429) | int
function pcap_compile_nopcap (line 529) | int
function pcap_freecode (line 549) | void
function backpatch (line 565) | static void
function merge (line 587) | static void
function finish_parse (line 601) | void
function gen_and (line 642) | void
function gen_or (line 654) | void
function gen_not (line 665) | void
type block (line 672) | struct block
type block (line 681) | struct block
type block (line 690) | struct block
type block (line 699) | struct block
type block (line 708) | struct block
type block (line 717) | struct block
type block (line 727) | struct block
type block (line 733) | struct block
type block (line 772) | struct block
type slist (line 779) | struct slist
type block (line 780) | struct block
function init_linktype (line 939) | static void
type slist (line 1522) | struct slist
type slist (line 1525) | struct slist
type slist (line 1561) | struct slist
type slist (line 1566) | struct slist
type slist (line 1644) | struct slist
type slist (line 1647) | struct slist
type block (line 1698) | struct block
type block (line 1702) | struct block
type slist (line 1703) | struct slist
type block (line 1713) | struct block
type block (line 1719) | struct block
type block (line 1742) | struct block
type block (line 1746) | struct block
type block (line 1917) | struct block
type block (line 1947) | struct block
type block (line 1951) | struct block
type slist (line 2094) | struct slist
type slist (line 2097) | struct slist
type slist (line 2098) | struct slist
type slist (line 2099) | struct slist
type slist (line 2204) | struct slist
type slist (line 2207) | struct slist
type slist (line 2244) | struct slist
type slist (line 2247) | struct slist
type slist (line 2314) | struct slist
type slist (line 2317) | struct slist
type slist (line 2380) | struct slist
type slist (line 2381) | struct slist
type slist (line 2381) | struct slist
type slist (line 2383) | struct slist
type slist (line 2384) | struct slist
type slist (line 2385) | struct slist
type slist (line 2386) | struct slist
type slist (line 2387) | struct slist
type slist (line 2388) | struct slist
type slist (line 2389) | struct slist
type slist (line 2390) | struct slist
function insert_compute_vloffsets (line 2594) | static void
type block (line 2671) | struct block
type slist (line 2674) | struct slist
type block (line 2675) | struct block
type slist (line 2710) | struct slist
type slist (line 2713) | struct slist
function ethertype_to_ppptype (line 2744) | static int
type block (line 2796) | struct block
type block (line 2799) | struct block
type block (line 2834) | struct block
type block (line 2838) | struct block
type pfloghdr (line 3117) | struct pfloghdr
type pfloghdr (line 3120) | struct pfloghdr
type block (line 3363) | struct block
type block (line 3384) | struct block
type block (line 3387) | struct block
type block (line 3455) | struct block
type block (line 3458) | struct block
type slist (line 3459) | struct slist
type block (line 3479) | struct block
type block (line 3482) | struct block
type block (line 3498) | struct block
type block (line 3501) | struct block
type block (line 3517) | struct block
type block (line 3520) | struct block
type block (line 3535) | struct block
type block (line 3538) | struct block
type block (line 3565) | struct block
type block (line 3641) | struct block
type block (line 3648) | struct block
type block (line 3684) | struct block
type in6_addr (line 3687) | struct in6_addr
type block (line 3691) | struct block
type block (line 3737) | struct block
type block (line 3742) | struct block
type block (line 3795) | struct block
type block (line 3800) | struct block
type block (line 3853) | struct block
type block (line 3858) | struct block
type block (line 3912) | struct block
type block (line 3917) | struct block
type slist (line 3918) | struct slist
type block (line 4338) | struct block
type block (line 4343) | struct block
type block (line 4411) | struct block
type block (line 4416) | struct block
type block (line 4487) | struct block
type block (line 4491) | struct block
type block (line 4516) | struct block
type block (line 4524) | struct block
type block (line 4648) | struct block
type in6_addr (line 4651) | struct in6_addr
type block (line 4772) | struct block
type block (line 4779) | struct block
type block (line 4843) | struct block
type block (line 4847) | struct block
type block (line 4848) | struct block
type block (line 5084) | struct block
type slist (line 5087) | struct slist
type block (line 5088) | struct block
type block (line 5109) | struct block
type block (line 5117) | struct block
type block (line 5125) | struct block
type block (line 5129) | struct block
type block (line 5166) | struct block
type block (line 5172) | struct block
type block (line 5215) | struct block
type block (line 5219) | struct block
type block (line 5255) | struct block
type block (line 5261) | struct block
type block (line 5289) | struct block
type block (line 5294) | struct block
type block (line 5315) | struct block
type block (line 5321) | struct block
type block (line 5358) | struct block
type block (line 5364) | struct block
type block (line 5391) | struct block
type block (line 5396) | struct block
type block (line 5417) | struct block
type block (line 5423) | struct block
type block (line 5459) | struct block
type block (line 5465) | struct block
function lookup_proto (line 5492) | static int
type stmt (line 5538) | struct stmt
type block (line 5547) | struct block
type block (line 5556) | struct block
type slist (line 5557) | struct slist
type block (line 5841) | struct block
type slist (line 5844) | struct slist
type block (line 5845) | struct block
type block (line 5876) | struct block
type block (line 5882) | struct block
type block (line 5884) | struct block
type block (line 6093) | struct block
type qual (line 6096) | struct qual
type sockaddr_in (line 6107) | struct sockaddr_in
type sockaddr_in6 (line 6108) | struct sockaddr_in6
type addrinfo (line 6109) | struct addrinfo
type in6_addr (line 6110) | struct in6_addr
type block (line 6112) | struct block
type sockaddr_in (line 6234) | struct sockaddr_in
type sockaddr_in6 (line 6243) | struct sockaddr_in6
type block (line 6394) | struct block
type qual (line 6398) | struct qual
type block (line 6444) | struct block
type qual (line 6448) | struct qual
type block (line 6503) | struct block
type block (line 6525) | struct block
type block (line 6553) | struct block
type qual (line 6557) | struct qual
type addrinfo (line 6559) | struct addrinfo
type in6_addr (line 6560) | struct in6_addr
type in6_addr (line 6561) | struct in6_addr
type block (line 6562) | struct block
type sockaddr_in6 (line 6574) | struct sockaddr_in6
type block (line 6614) | struct block
type qual (line 6617) | struct qual
type block (line 6619) | struct block
function sappend (line 6653) | void
type slist (line 6666) | struct slist
type slist (line 6670) | struct slist
type slist (line 6677) | struct slist
type slist (line 6681) | struct slist
type arth (line 6695) | struct arth
type arth (line 6698) | struct arth
type slist (line 6701) | struct slist
type block (line 6702) | struct block
type block (line 6921) | struct block
type arth (line 6924) | struct arth
type slist (line 6927) | struct slist
type block (line 6928) | struct block
type arth (line 6967) | struct arth
type arth (line 6971) | struct arth
type arth (line 6971) | struct arth
type slist (line 6972) | struct slist
type arth (line 6983) | struct arth
type arth (line 6987) | struct arth
type slist (line 6988) | struct slist
type arth (line 6991) | struct arth
type arth (line 7005) | struct arth
type slist (line 7009) | struct slist
type arth (line 7023) | struct arth
type arth (line 7026) | struct arth
type slist (line 7028) | struct slist
function init_regs (line 7059) | static void
function alloc_reg (line 7069) | static int
function free_reg (line 7091) | static void
type block (line 7098) | struct block
type slist (line 7102) | struct slist
type block (line 7103) | struct block
type block (line 7113) | struct block
type block (line 7123) | struct block
type block (line 7127) | struct block
type block (line 7145) | struct block
type block (line 7149) | struct block
type slist (line 7150) | struct slist
type block (line 7185) | struct block
type block (line 7190) | struct block
type block (line 7252) | struct block
type block (line 7256) | struct block
type slist (line 7257) | struct slist
type block (line 7267) | struct block
type block (line 7271) | struct block
type slist (line 7272) | struct slist
type block (line 7455) | struct block
type block (line 7459) | struct block
type pfloghdr (line 7493) | struct pfloghdr
type block (line 7581) | struct block
type block (line 7584) | struct block
type pfloghdr (line 7591) | struct pfloghdr
type pfloghdr (line 7592) | struct pfloghdr
type block (line 7603) | struct block
type block (line 7606) | struct block
type pfloghdr (line 7613) | struct pfloghdr
type pfloghdr (line 7615) | struct pfloghdr
type pfloghdr (line 7619) | struct pfloghdr
type block (line 7625) | struct block
type block (line 7628) | struct block
type pfloghdr (line 7635) | struct pfloghdr
type block (line 7641) | struct block
type block (line 7644) | struct block
type pfloghdr (line 7651) | struct pfloghdr
type block (line 7657) | struct block
type block (line 7660) | struct block
type pfloghdr (line 7667) | struct pfloghdr
type block (line 7673) | struct block
type block (line 7676) | struct block
type pfloghdr (line 7683) | struct pfloghdr
type block (line 7688) | struct block
type block (line 7696) | struct block
type block (line 7704) | struct block
type block (line 7712) | struct block
type block (line 7720) | struct block
type block (line 7728) | struct block
type block (line 7738) | struct block
type block (line 7741) | struct block
type block (line 7761) | struct block
type block (line 7764) | struct block
type block (line 7785) | struct block
type qual (line 7788) | struct qual
type block (line 7812) | struct block
type block (line 7817) | struct block
type block (line 7869) | struct block
type block (line 7872) | struct block
type slist (line 7873) | struct slist
type block (line 7900) | struct block
type block (line 7903) | struct block
type block (line 7937) | struct block
type block (line 7941) | struct block
type block (line 8022) | struct block
type block (line 8026) | struct block
type block (line 8094) | struct block
type block (line 8101) | struct block
type block (line 8105) | struct block
type block (line 8174) | struct block
type block (line 8175) | struct block
type e_offrel (line 8176) | enum e_offrel
type block (line 8178) | struct block
type block (line 8205) | struct block
type block (line 8208) | struct block
type slist (line 8209) | struct slist
type block (line 8231) | struct block
type block (line 8234) | struct block
type slist (line 8235) | struct slist
type slist (line 8274) | struct slist
type slist (line 8277) | struct slist
type block (line 8409) | struct block
type block (line 8412) | struct block
type slist (line 8413) | struct slist
type block (line 8439) | struct block
type block (line 8442) | struct block
type slist (line 8443) | struct slist
type block (line 8466) | struct block
type block (line 8473) | struct block
type block (line 8524) | struct block
type block (line 8528) | struct block
type block (line 8630) | struct block
type block (line 8634) | struct block
type block (line 8698) | struct block
type block (line 8705) | struct block
type block (line 8795) | struct block
type block (line 8799) | struct block
type block (line 8837) | struct block
type block (line 8841) | struct block
FILE: tcpdump/jni/libpcap/gencode.h
type slist (line 205) | struct slist
type stmt (line 207) | struct stmt {
type slist (line 214) | struct slist {
type bpf_u_int32 (line 223) | typedef bpf_u_int32 atomset;
type bpf_u_int32 (line 230) | typedef bpf_u_int32 *uset;
type edge (line 238) | struct edge {
type block (line 247) | struct block {
type arth (line 271) | struct arth {
type qual (line 277) | struct qual {
type arth (line 284) | struct arth
type arth (line 285) | struct arth
type arth (line 285) | struct arth
type arth (line 286) | struct arth
type arth (line 287) | struct arth
type arth (line 287) | struct arth
type arth (line 288) | struct arth
type arth (line 288) | struct arth
type arth (line 288) | struct arth
type block (line 290) | struct block
type block (line 290) | struct block
type block (line 291) | struct block
type block (line 291) | struct block
type block (line 292) | struct block
type block (line 294) | struct block
type qual (line 294) | struct qual
type block (line 295) | struct block
type qual (line 295) | struct qual
type block (line 296) | struct block
type qual (line 296) | struct qual
type block (line 297) | struct block
type qual (line 297) | struct qual
type block (line 299) | struct block
type qual (line 299) | struct qual
type block (line 301) | struct block
type qual (line 301) | struct qual
type block (line 302) | struct block
type block (line 303) | struct block
type arth (line 303) | struct arth
type arth (line 303) | struct arth
type block (line 304) | struct block
type block (line 305) | struct block
type block (line 306) | struct block
type block (line 307) | struct block
type block (line 308) | struct block
type block (line 309) | struct block
type block (line 311) | struct block
type block (line 312) | struct block
type block (line 313) | struct block
type block (line 314) | struct block
type block (line 315) | struct block
type block (line 316) | struct block
type block (line 318) | struct block
type block (line 319) | struct block
type block (line 321) | struct block
type block (line 322) | struct block
type block (line 324) | struct block
type block (line 326) | struct block
type block (line 327) | struct block
type block (line 328) | struct block
type block (line 330) | struct block
type block (line 331) | struct block
type block (line 333) | struct block
type block (line 334) | struct block
type block (line 335) | struct block
type block (line 336) | struct block
type block (line 337) | struct block
type block (line 338) | struct block
type block (line 339) | struct block
type block (line 341) | struct block
type block (line 342) | struct block
type block (line 344) | struct block
FILE: tcpdump/jni/libpcap/grammar.c
type mbuf (line 120) | struct mbuf
type rtentry (line 121) | struct rtentry
type tok (line 149) | struct tok {
type tok (line 154) | struct tok
type tok (line 162) | struct tok
type tok (line 185) | struct tok
type tok (line 194) | struct tok
type type2tok (line 212) | struct type2tok {
type type2tok (line 216) | struct type2tok
function str2tok (line 223) | static int
type qual (line 237) | struct qual
function yyerror (line 239) | static void
function pcap_parse (line 250) | int
function pfreason_to_num (line 258) | static int
function pfaction_to_num (line 272) | static int
function pfreason_to_num (line 297) | static int
function pfaction_to_num (line 307) | static int
type yytokentype (line 346) | enum yytokentype {
type YYSTYPE (line 591) | typedef union YYSTYPE
type YYTYPE_UINT8 (line 633) | typedef YYTYPE_UINT8 yytype_uint8;
type yytype_uint8 (line 635) | typedef unsigned char yytype_uint8;
type YYTYPE_INT8 (line 639) | typedef YYTYPE_INT8 yytype_int8;
type yytype_int8 (line 642) | typedef signed char yytype_int8;
type yytype_int8 (line 644) | typedef short int yytype_int8;
type YYTYPE_UINT16 (line 648) | typedef YYTYPE_UINT16 yytype_uint16;
type yytype_uint16 (line 650) | typedef unsigned short int yytype_uint16;
type YYTYPE_INT16 (line 654) | typedef YYTYPE_INT16 yytype_int16;
type yytype_int16 (line 656) | typedef short int yytype_int16;
function YYID (line 703) | static int
function yy_symbol_value_print (line 1543) | static void
function yy_symbol_print (line 1575) | static void
function yy_stack_print (line 1601) | static void
function yy_reduce_print (line 1632) | static void
function YYSIZE_T (line 1700) | static YYSIZE_T
function YYSIZE_T (line 1749) | static YYSIZE_T
function yysyntax_error (line 1797) | static int
function yydestruct (line 1936) | static void
type tok (line 3198) | struct tok
FILE: tcpdump/jni/libpcap/inet.c
type mbuf (line 53) | struct mbuf
type rtentry (line 54) | struct rtentry
type sockaddr (line 100) | struct sockaddr
type sockaddr (line 101) | struct sockaddr
type sockaddr (line 103) | struct sockaddr
function u_int (line 128) | static u_int
function add_or_find_if (line 180) | int
type ifreq (line 497) | struct ifreq
function add_addr_to_iflist (line 599) | int
function add_addr_to_dev (line 654) | int
function pcap_add_if (line 774) | int
function pcap_freealldevs (line 788) | void
function pcap_lookupnet (line 880) | int
function pcap_lookupnet (line 1062) | int
FILE: tcpdump/jni/libpcap/lbl/os-sunos4.h
type sockaddr (line 51) | struct sockaddr
type sockaddr (line 53) | struct sockaddr
type sockaddr (line 54) | struct sockaddr
type sockaddr (line 61) | struct sockaddr
type ether_addr (line 70) | struct ether_addr
type ether_addr (line 72) | struct ether_addr
type stat (line 75) | struct stat
type stat (line 77) | struct stat
type statfs (line 79) | struct statfs
type statfs (line 81) | struct statfs
type timeb (line 84) | struct timeb
type timeb (line 86) | struct timeb
type sockaddr (line 94) | struct sockaddr
type rlimit (line 97) | struct rlimit
type rlimit (line 99) | struct rlimit
type sockaddr (line 100) | struct sockaddr
type timeval (line 103) | struct timeval
type timezone (line 104) | struct timezone
type timeval (line 106) | struct timeval
type timezone (line 106) | struct timezone
type utmp (line 116) | struct utmp
type utmp (line 118) | struct utmp
type stat (line 121) | struct stat
type iovec (line 132) | struct iovec
type iovec (line 134) | struct iovec
type sockaddr (line 136) | struct sockaddr
type sockaddr (line 141) | struct sockaddr
type timeval (line 145) | struct timeval
type rlimit (line 148) | struct rlimit
type sigvec (line 157) | struct sigvec
type sigvec (line 159) | struct sigvec
type sigvec (line 159) | struct sigvec
type stat (line 166) | struct stat
type statfs (line 167) | struct statfs
type tm (line 171) | struct tm
type tm (line 173) | struct tm
type iovec (line 188) | struct iovec
type rusage (line 190) | struct rusage
type timeval (line 192) | struct timeval
type rusage (line 195) | struct rusage
FILE: tcpdump/jni/libpcap/lbl/os-ultrix4.h
type timeval (line 29) | struct timeval
type timezone (line 30) | struct timezone
type timeval (line 32) | struct timeval
type timezone (line 32) | struct timezone
FILE: tcpdump/jni/libpcap/missing/snprintf.c
type format_flags (line 47) | enum format_flags {
type state (line 59) | struct state {
function sn_reserve (line 71) | static int
function sn_append_char (line 77) | static int
function as_reserve (line 90) | static int
function as_append_char (line 113) | static int
function append_number (line 125) | static int
function append_string (line 214) | static int
function append_char (line 245) | static int
function xyzprintf (line 280) | static int
function snprintf (line 458) | int
function asprintf (line 490) | int
function asnprintf (line 520) | int
function vasprintf (line 550) | int
function vasnprintf (line 559) | int
function vsnprintf (line 602) | int
FILE: tcpdump/jni/libpcap/msdos/bin2c.c
function Abort (line 6) | static void Abort (char *fmt,...)
function main (line 15) | int main (int argc, char **argv)
FILE: tcpdump/jni/libpcap/msdos/ndis2.c
type _PktBuf (line 90) | struct _PktBuf
type _CardHandle (line 91) | struct _CardHandle
type _CommonChars (line 92) | struct _CommonChars
type _ProtocolChars (line 93) | struct _ProtocolChars
type _ProtDispatch (line 94) | struct _ProtDispatch
type _FailingModules (line 96) | struct _FailingModules
type _BindingsList (line 97) | struct _BindingsList
function NdisFreeStack (line 230) | void NdisFreeStack (BYTE *aStack)
function BYTE (line 248) | BYTE *NdisAllocStack (void)
function CALLBACK (line 269) | CALLBACK (NdisSystemRequest (DWORD param1, DWORD param2, WORD param3,
function CALLBACK (line 319) | CALLBACK (NdisRequestConfirm (WORD protId, WORD macId, WORD reqHandle,
function CALLBACK (line 328) | CALLBACK (NdisTransmitConfirm (WORD protId, WORD macId, WORD reqHandle,
function CALLBACK (line 344) | CALLBACK (NdisReceiveLookahead (WORD macId, WORD frameSize,
function CALLBACK (line 397) | CALLBACK (NdisIndicationComplete (WORD macId, WORD protDS))
function CALLBACK (line 410) | CALLBACK (NdisReceiveChain (WORD macId, WORD frameSize, WORD reqHandle,
function CALLBACK (line 454) | CALLBACK (NdisStatusProc (WORD macId, WORD param1, BYTE *indicate,
function NdisSendPacket (line 486) | int NdisSendPacket (struct _PktBuf *pktBuf, int macId)
function NdisOpen (line 559) | int NdisOpen (void)
function NdisRegisterAndBind (line 593) | int NdisRegisterAndBind (int promis)
function CheckMacFeatures (line 673) | static int CheckMacFeatures (CardHandle *card)
function NdisStartMac (line 721) | static int NdisStartMac (CardHandle *card)
function NdisShutdown (line 772) | void NdisShutdown (void)
function NdisInit (line 811) | int NdisInit (int promis)
FILE: tcpdump/jni/libpcap/msdos/ndis2.h
type _ReqBlock (line 80) | struct _ReqBlock
type _TxBufDescr (line 81) | struct _TxBufDescr
type _TDBufDescr (line 82) | struct _TDBufDescr
type _ReqBlock (line 87) | struct _ReqBlock
type NdisMacStatus (line 105) | typedef enum {
type NdisStatus (line 118) | typedef enum {
type NdisPacketFilter (line 126) | typedef enum {
type NdisGeneralRequest (line 133) | typedef enum {
type NdisMacServiceFlags (line 150) | typedef enum {
type NdisSysRequest (line 168) | typedef enum {
type NdisProtManager (line 176) | typedef enum {
type NdisError (line 190) | typedef enum {
type CommonChars (line 237) | typedef struct _CommonChars {
type MulticastList (line 282) | typedef struct _MulticastList {
type MacChars (line 289) | typedef struct _MacChars {
type ProtocolChars (line 313) | typedef struct _ProtocolChars {
type MacUpperDispatch (line 320) | typedef struct _MacUpperDispatch {
type MacStatusTable (line 331) | typedef struct _MacStatusTable {
type ProtDispatch (line 356) | typedef struct _ProtDispatch {
type ReqBlock (line 373) | typedef struct _ReqBlock {
type TxBufDescrRec (line 382) | typedef struct _TxBufDescrRec {
type TxBufDescr (line 390) | typedef struct _TxBufDescr {
type TDBufDescrRec (line 398) | typedef struct _TDBufDescrRec {
type TDBufDescr (line 406) | typedef struct _TDBufDescr {
type RxBufDescrRec (line 412) | typedef struct _RxBufDescrRec {
type RxBufDescr (line 418) | typedef struct _RxBufDescr {
type PktBuf (line 424) | typedef struct _PktBuf {
type CardHandle (line 435) | typedef struct _CardHandle {
type BindingsList (line 441) | typedef struct _BindingsList {
type FailingModules (line 447) | typedef struct _FailingModules {
type HardwareAddress (line 453) | typedef union _HardwareAddress {
type FddiHeader (line 462) | typedef struct _FddiHeader {
type EthernetIIHeader (line 469) | typedef struct _EthernetIIHeader {
type Ieee802Dot5Header (line 476) | typedef struct _Ieee802Dot5Header {
type Ieee802Dot2SnapHeader (line 483) | typedef struct _Ieee802Dot2SnapHeader {
type _CardHandle (line 499) | struct _CardHandle
type _PktBuf (line 500) | struct _PktBuf
type _RxBufDescr (line 529) | struct _RxBufDescr
FILE: tcpdump/jni/libpcap/msdos/pktdrvr.c
type DPMI_regs (line 65) | struct DPMI_regs {
type PktRealStub (line 81) | typedef struct { /* must match data/code in pkt_rx1.s */
function LOCAL (line 207) | LOCAL struct { /* internal statistics */
function PUBLIC (line 216) | PUBLIC const char *PktGetErrorStr (int errNum)
function PUBLIC (line 248) | PUBLIC const char *PktGetClassName (WORD class)
function PUBLIC (line 289) | PUBLIC char const *PktRXmodeStr (PKT_RX_MODE mode)
function LOCAL (line 307) | LOCAL __inline BOOL PktInterrupt (void)
function PUBLIC (line 355) | PUBLIC BOOL PktSearchDriver (void)
function BOOL (line 394) | static BOOL PktSetAccess (void)
function PUBLIC (line 435) | PUBLIC BOOL PktReleaseHandle (WORD handle)
function PUBLIC (line 444) | PUBLIC BOOL PktTransmit (const void *eth, int len)
function LOCAL (line 478) | LOCAL __inline BOOL CheckElement (RX_ELEMENT *rx)
function PUBLIC (line 524) | PUBLIC BOOL PktTerminHandle (WORD handle)
function PUBLIC (line 533) | PUBLIC BOOL PktResetInterface (WORD handle)
function PUBLIC (line 542) | PUBLIC BOOL PktSetReceiverMode (PKT_RX_MODE mode)
function PUBLIC (line 560) | PUBLIC BOOL PktGetReceiverMode (PKT_RX_MODE *mode)
function PUBLIC (line 577) | PUBLIC BOOL PktGetStatistics (WORD handle)
function PUBLIC (line 603) | PUBLIC BOOL PktSessStatistics (WORD handle)
function PUBLIC (line 624) | PUBLIC BOOL PktResetStatistics (WORD handle)
function PUBLIC (line 636) | PUBLIC BOOL PktGetAddress (ETHER *addr)
function PUBLIC (line 674) | PUBLIC BOOL PktSetAddress (const ETHER *addr)
function PUBLIC (line 710) | PUBLIC BOOL PktGetDriverInfo (void)
function PUBLIC (line 749) | PUBLIC BOOL PktGetDriverParam (void)
function PUBLIC (line 774) | PUBLIC int PktReceive (BYTE *buf, int max)
function PUBLIC (line 802) | PUBLIC void PktQueueBusy (BOOL busy)
function PUBLIC (line 810) | PUBLIC WORD PktBuffersUsed (void)
function PUBLIC (line 820) | PUBLIC DWORD PktRxDropped (void)
function PUBLIC (line 826) | PUBLIC int PktReceive (BYTE *buf, int max)
function PUBLIC (line 857) | PUBLIC void PktQueueBusy (BOOL busy)
function PUBLIC (line 873) | PUBLIC WORD PktBuffersUsed (void)
function PUBLIC (line 886) | PUBLIC DWORD PktRxDropped (void)
function PUBLIC (line 892) | PUBLIC int PktReceive (BYTE *buf, int max)
function PUBLIC (line 923) | PUBLIC void PktQueueBusy (BOOL busy)
function PUBLIC (line 939) | PUBLIC WORD PktBuffersUsed (void)
function PUBLIC (line 952) | PUBLIC DWORD PktRxDropped (void)
function PUBLIC (line 959) | PUBLIC int PktReceive (BYTE *buf, int max)
function PUBLIC (line 983) | PUBLIC void PktQueueBusy (BOOL busy)
function PUBLIC (line 991) | PUBLIC WORD PktBuffersUsed (void)
function PUBLIC (line 1001) | PUBLIC DWORD PktRxDropped (void)
function LOCAL (line 1009) | LOCAL __inline void PktFreeMem (void)
function PUBLIC (line 1038) | PUBLIC BOOL PktExitDriver (void)
function dump_pkt_stub (line 1061) | static void dump_pkt_stub (void)
function PUBLIC (line 1076) | PUBLIC BOOL PktInitDriver (PKT_RX_MODE mode)
function LOCAL (line 1283) | LOCAL DWORD dpmi_get_real_vector (int intr)
function LOCAL (line 1293) | LOCAL WORD dpmi_real_malloc (int size, WORD *selector)
function LOCAL (line 1307) | LOCAL void dpmi_real_free (WORD selector)
function RealCopy (line 1358) | int RealCopy (ULONG start_offs,
FILE: tcpdump/jni/libpcap/msdos/pktdrvr.h
type PKT_CLASS (line 16) | typedef enum { /* Packet-driver classes */
type PKT_RX_MODE (line 34) | typedef enum { /* Packet-driver receive modes */
type PKT_FRAME (line 43) | typedef struct {
type PKT_INFO (line 49) | typedef struct {
type PKT_STAT (line 73) | typedef struct {
type TX_ELEMENT (line 84) | typedef struct {
type RX_ELEMENT (line 91) | typedef struct {
FILE: tcpdump/jni/libpcap/nametoaddr.c
type mbuf (line 54) | struct mbuf
type rtentry (line 55) | struct rtentry
function bpf_u_int32 (line 93) | bpf_u_int32 **
type addrinfo (line 118) | struct addrinfo
type addrinfo (line 121) | struct addrinfo
function bpf_u_int32 (line 140) | bpf_u_int32
function pcap_nametoport (line 163) | int
function pcap_nametoportrange (line 217) | int
function pcap_nametoproto (line 258) | int
type eproto (line 272) | struct eproto {
type eproto (line 278) | struct eproto
function pcap_nametoeproto (line 304) | int
type eproto (line 320) | struct eproto
function pcap_nametollc (line 328) | int
function xdtoi (line 342) | static inline int
function __pcap_atoin (line 354) | int
function __pcap_atodn (line 376) | int
function u_char (line 406) | u_char *
function u_char (line 432) | u_char *
type ether_addr (line 466) | struct ether_addr {
type ether_addr (line 470) | struct ether_addr
function u_char (line 474) | u_char *
function u_short (line 490) | u_short
FILE: tcpdump/jni/libpcap/optimize.c
type block (line 108) | struct block
type block (line 111) | struct block
type block (line 113) | struct block
type block (line 115) | struct block
type block (line 119) | struct block
type edge (line 121) | struct edge
type block (line 129) | struct block
function find_levels_r (line 188) | static void
function find_levels (line 216) | static void
function find_dom (line 228) | static void
function propedom (line 258) | static void
function find_edom (line 272) | static void
function find_closure (line 301) | static void
function atomuse (line 331) | static int
function atomdef (line 376) | static int
function compute_local_ud (line 412) | static void
function find_ud (line 473) | static void
type valnode (line 504) | struct valnode {
type valnode (line 512) | struct valnode
type vmapinfo (line 519) | struct vmapinfo {
type vmapinfo (line 524) | struct vmapinfo
type valnode (line 525) | struct valnode
type valnode (line 526) | struct valnode
function init_val (line 528) | static void
function F (line 538) | static int
function vstore (line 569) | static inline void
function fold_op (line 582) | static void
type slist (line 643) | struct slist
type slist (line 644) | struct slist
function opt_not (line 651) | static void
function opt_peep (line 660) | static void
function opt_stmt (line 923) | static void
function deadstmt (line 1112) | static void
function opt_deadstores (line 1136) | static void
function opt_blk (line 1156) | static void
function use_conflict (line 1260) | static int
type block (line 1276) | struct block
type block (line 1277) | struct block
type edge (line 1277) | struct edge
function opt_j (line 1328) | static void
function or_pullup (line 1383) | static void
function and_pullup (line 1475) | static void
function opt_blks (line 1566) | static void
function link_inedge (line 1603) | static inline void
function find_inedges (line 1610) | static void
function opt_root (line 1631) | static void
function opt_loop (line 1655) | static void
function bpf_optimize (line 1685) | void
function make_marks (line 1712) | static void
function mark_code (line 1728) | static void
function eq_slist (line 1739) | static int
function eq_blk (line 1758) | static inline int
function intern_blocks (line 1769) | static void
function opt_cleanup (line 1812) | static void
function u_int (line 1826) | static u_int
function count_blocks (line 1841) | static int
function number_blks_r (line 1854) | static void
function u_int (line 1889) | static u_int
function opt_init (line 1906) | static void
type bpf_insn (line 1991) | struct bpf_insn
type bpf_insn (line 1992) | struct bpf_insn
function convert_code_r (line 2004) | static int
type bpf_insn (line 2176) | struct bpf_insn
type block (line 2177) | struct block
type bpf_insn (line 2180) | struct bpf_insn
type bpf_insn (line 2190) | struct bpf_insn
function install_bpf_program (line 2214) | int
function dot_dump_node (line 2246) | static void
function dot_dump_edge (line 2277) | static void
function dot_dump (line 2312) | static void
function plain_dump (line 2331) | static void
function opt_dump (line 2342) | static void
FILE: tcpdump/jni/libpcap/pcap-bpf.c
type pcap_bpf (line 136) | struct pcap_bpf {
type bpf_dltlist (line 181) | struct bpf_dltlist
type bpf_program (line 227) | struct bpf_program
function pcap_getnonblock_bpf (line 236) | static int
function pcap_setnonblock_bpf (line 248) | static int
function pcap_next_zbuf_shm (line 272) | static int
function pcap_next_zbuf (line 310) | static int
function pcap_ack_zbuf (line 408) | static int
function pcap_t (line 421) | pcap_t *
function bpf_open (line 439) | static int
function get_dlt_list (line 552) | static int
function pcap_can_set_rfmon_bpf (line 632) | static int
function pcap_stats_bpf (line 789) | static int
function pcap_read_bpf (line 819) | static int
function pcap_inject_bpf (line 1058) | static int
function bpf_odminit (line 1108) | static int
function bpf_odmcleanup (line 1135) | static int
function bpf_load (line 1165) | static int
function pcap_cleanup_bpf (line 1270) | static void
function check_setif_failure (line 1367) | static int
type pcap_bpf (line 1477) | struct pcap_bpf
type lifreq (line 1485) | struct lifreq
type ifreq (line 1489) | struct ifreq
type bpf_version (line 1493) | struct bpf_version
type bpf_dltlist (line 1499) | struct bpf_dltlist
type bpf_insn (line 1508) | struct bpf_insn
type bpf_program (line 1509) | struct bpf_program
type utsname (line 1510) | struct utsname
type bpf_zbuf (line 1513) | struct bpf_zbuf
type bpf_zbuf_header (line 1753) | struct bpf_zbuf_header
type timeval (line 2115) | struct timeval
type BPF_TIMEVAL (line 2117) | struct BPF_TIMEVAL
type timeval (line 2119) | struct timeval
function pcap_platform_finddevs (line 2309) | int
function monitor_mode (line 2316) | static int
function find_802_11 (line 2480) | static int
function remove_en (line 2545) | static void
function remove_802_11 (line 2588) | static void
function pcap_setfilter_bpf (line 2631) | static int
function pcap_setdirection_bpf (line 2696) | static int
function pcap_set_datalink_bpf (line 2741) | static int
FILE: tcpdump/jni/libpcap/pcap-bt-linux.c
type pcap_stat (line 67) | struct pcap_stat
type pcap_bt (line 72) | struct pcap_bt {
function bt_findalldevs (line 76) | int
function pcap_t (line 139) | pcap_t *
function bt_activate (line 182) | static int
function bt_read_linux (line 299) | static int
function bt_inject_linux (line 368) | static int
function bt_stats_linux (line 377) | static int
function bt_setdirection_linux (line 406) | static int
FILE: tcpdump/jni/libpcap/pcap-bt-monitor-linux.c
function bt_monitor_findalldevs (line 52) | int
function bt_monitor_read (line 66) | static int
function bt_monitor_inject (line 129) | static int
function bt_monitor_setdirection (line 136) | static int
function bt_monitor_stats (line 143) | static int
function bt_monitor_activate (line 153) | static int
function pcap_t (line 219) | pcap_t *
FILE: tcpdump/jni/libpcap/pcap-can-linux.c
type bpf_program (line 71) | struct bpf_program
type pcap_stat (line 73) | struct pcap_stat
type pcap_can (line 78) | struct pcap_can {
function can_findalldevs (line 82) | int
function pcap_t (line 94) | pcap_t *
function can_activate (line 143) | static int
function can_read_linux (line 219) | static int
function can_inject_linux (line 273) | static int
function can_stats_linux (line 283) | static int
function can_setfilter_linux (line 294) | static int
function can_setdirection_linux (line 302) | static int
FILE: tcpdump/jni/libpcap/pcap-canusb-linux.c
type bpf_program (line 67) | struct bpf_program
type pcap_stat (line 69) | struct pcap_stat
type CAN_Msg (line 71) | struct CAN_Msg
type pcap_canusb (line 82) | struct pcap_canusb {
function canusb_findalldevs (line 90) | int canusb_findalldevs(pcap_if_t **alldevsp, char *err_str)
function libusb_device_handle (line 147) | static libusb_device_handle* canusb_opendevice(struct libusb_context *ct...
function pcap_t (line 206) | pcap_t *
type pcap_canusb (line 260) | struct pcap_canusb
type CAN_Msg (line 272) | struct CAN_Msg
function canusb_startcapture (line 290) | static int canusb_startcapture(struct pcap_canusb* this)
function canusb_clearbufs (line 306) | static void canusb_clearbufs(struct pcap_canusb* this)
function canusb_close (line 320) | static void canusb_close(pcap_t* handle)
function canusb_activate (line 341) | static int canusb_activate(pcap_t* handle)
function canusb_read_linux (line 391) | static int
function canusb_inject_linux (line 429) | static int
function canusb_stats_linux (line 438) | static int
function canusb_setfilter_linux (line 449) | static int
function canusb_setdirection_linux (line 457) | static int
FILE: tcpdump/jni/libpcap/pcap-common.c
type linktype_map (line 1005) | struct linktype_map {
function dlt_to_linktype (line 1070) | int
function linktype_to_dlt (line 1110) | int
function swap_linux_usb_header (line 1159) | static void
function swap_nflog_header (line 1309) | static void
function swap_pseudo_headers (line 1364) | void
FILE: tcpdump/jni/libpcap/pcap-common.h
type pcap_pkthdr (line 24) | struct pcap_pkthdr
FILE: tcpdump/jni/libpcap/pcap-dag.c
type mbuf (line 37) | struct mbuf
type rtentry (line 38) | struct rtentry
type sunatm_hdr (line 72) | struct sunatm_hdr {
type pcap_dag (line 81) | struct pcap_dag {
type pcap_dag_node_t (line 99) | typedef struct pcap_dag_node {
type bpf_program (line 115) | struct bpf_program
type pcap_stat (line 116) | struct pcap_stat
function delete_pcap_dag (line 121) | static void
function dag_platform_cleanup (line 144) | static void
function atexit_handler (line 172) | static void
function new_pcap_dag (line 184) | static int
function dag_erf_ext_header_count (line 207) | static unsigned int
function dag_read (line 244) | static int
function dag_inject (line 608) | static int
function dag_activate (line 627) | static int dag_activate(pcap_t* handle)
function pcap_t (line 885) | pcap_t *dag_create(const char *device, char *ebuf, int *is_ours)
function dag_stats (line 963) | static int
function dag_findalldevs (line 987) | int
function dag_setfilter (line 1052) | static int
function dag_set_datalink (line 1071) | static int
function dag_setnonblock (line 1079) | static int
type pcap_dag (line 1131) | struct pcap_dag
FILE: tcpdump/jni/libpcap/pcap-dbus.c
type pcap_dbus (line 48) | struct pcap_dbus {
function dbus_read (line 53) | static int
function dbus_write (line 105) | static int
function dbus_stats (line 127) | static int
function dbus_cleanup (line 138) | static void
function dbus_activate (line 148) | static int
function pcap_t (line 248) | pcap_t *
function dbus_findalldevs (line 270) | int
FILE: tcpdump/jni/libpcap/pcap-dlpi.c
type strbuf (line 171) | struct strbuf
function pcap_read_dlpi (line 183) | static int
function pcap_inject_dlpi (line 240) | static int
function pcap_cleanup_dlpi (line 319) | static void
type pcap_dlpi (line 337) | struct pcap_dlpi
function dl_doattach (line 873) | static int
function dl_dohpuxbind (line 892) | static int
function dlpromiscon (line 944) | static int
function pcap_platform_finddevs (line 963) | int
function send_request (line 1006) | static int
function recv_ack (line 1026) | static int
function dlbindreq (line 1308) | static int
function dlbindack (line 1328) | static int
function dlokack (line 1335) | static int
function dlinforeq (line 1343) | static int
function dlinfoack (line 1353) | static int
function dlpassive (line 1365) | static void
function dlrawdatareq (line 1382) | static int
function get_dlpi_ppa (line 1480) | static int
type nlist (line 1658) | struct nlist
function get_dlpi_ppa (line 1667) | static int
function dlpi_kread (line 1719) | static int
function pcap_t (line 1744) | pcap_t *
FILE: tcpdump/jni/libpcap/pcap-dos.c
type rx_ringbuf (line 60) | struct rx_ringbuf
type rx_ringbuf (line 61) | struct rx_ringbuf
type rx_ringbuf (line 62) | struct rx_ringbuf
type rx_ringbuf (line 63) | struct rx_ringbuf
type rx_ringbuf (line 64) | struct rx_ringbuf
type rx_elem (line 66) | struct rx_elem
type rx_ringbuf (line 66) | struct rx_ringbuf
type rx_elem (line 67) | struct rx_elem
type rx_ringbuf (line 67) | struct rx_ringbuf
type device (line 96) | struct device
type pcap_stat (line 102) | struct pcap_stat
type bpf_program (line 104) | struct bpf_program
type device (line 106) | struct device
type device (line 107) | struct device
type pcap (line 110) | struct pcap
type pcap_pkthdr (line 113) | struct pcap_pkthdr
type device (line 119) | struct device
type device (line 128) | struct device
type device (line 137) | struct device
type pcap_dos (line 147) | struct pcap_dos {
function pcap_t (line 152) | pcap_t *pcap_create_interface (const char *device, char *ebuf)
function pcap_activate_dos (line 168) | static int pcap_activate_dos (pcap_t *pcap)
function pcap_read_one (line 218) | static int
function pcap_read_dos (line 330) | static int
function pcap_stats_dos (line 353) | static int pcap_stats_dos (pcap_t *p, struct pcap_stat *ps)
function pcap_stats_ex (line 388) | int pcap_stats_ex (pcap_t *p, struct pcap_stat_ex *se)
function pcap_setfilter_dos (line 414) | static int pcap_setfilter_dos (pcap_t *p, struct bpf_program *fp)
function u_long (line 425) | u_long pcap_mac_packets (void)
function u_long (line 433) | u_long pcap_filter_packets (void)
function pcap_cleanup_dos (line 441) | static void pcap_cleanup_dos (pcap_t *p)
type device (line 469) | struct device
type device (line 475) | struct device
type device (line 482) | struct device
function pcap_lookupnet (line 495) | int pcap_lookupnet (const char *device, bpf_u_int32 *localnet,
function pcap_findalldevs (line 531) | int pcap_findalldevs (pcap_if_t **alldevsp, char *errbuf)
function pcap_assert (line 593) | void pcap_assert (const char *what, const char *file, unsigned line)
function pcap_set_wait (line 606) | void pcap_set_wait (pcap_t *p, void (*yield)(void), int wait)
type device (line 620) | struct device
type device (line 623) | struct device
type device (line 625) | struct device
function close_driver (line 699) | static void close_driver (void)
function setup_signals (line 725) | static void setup_signals (void (*handler)(int))
function exc_handler (line 732) | static void exc_handler (int sig)
function first_init (line 767) | static int first_init (const char *name, char *ebuf, int promisc)
function init_32bit (line 820) | static void init_32bit (void)
function watt32_recv_hook (line 841) | static void watt32_recv_hook (u_char *dummy, const struct pcap_pkthdr *p...
function pcap_xmit_hook (line 872) | static int pcap_xmit_hook (const void *buf, unsigned len)
function pcap_sendpacket_dos (line 889) | static int pcap_sendpacket_dos (pcap_t *p, const void *buf, size_t len)
function pcap_init_hook (line 904) | static void pcap_init_hook (void)
function null_print (line 916) | static void null_print (void) {}
function init_watt32 (line 924) | static int init_watt32 (struct pcap *pcap, const char *dev_name, char *e...
type config_table (line 1016) | struct config_table
function pcap_config_hook (line 1056) | int pcap_config_hook (const char *name, const char *value)
type device (line 1064) | struct device
type device (line 1065) | struct device
type device (line 1066) | struct device
function pkt_close (line 1073) | static void pkt_close (struct device *dev)
function pkt_open (line 1085) | static int pkt_open (struct device *dev)
function pkt_xmit (line 1101) | static int pkt_xmit (struct device *dev, const void *buf, int len)
type device (line 1116) | struct device
type net_device_stats (line 1118) | struct net_device_stats
type net_device_stats (line 1118) | struct net_device_stats
function pkt_probe (line 1129) | static int pkt_probe (struct device *dev)
function ndis_close (line 1151) | static void ndis_close (struct device *dev)
function ndis_open (line 1159) | static int ndis_open (struct device *dev)
type device (line 1173) | struct device
type net_device_stats (line 1175) | struct net_device_stats
function ndis_probe (line 1182) | static int ndis_probe (struct device *dev)
type device (line 1205) | struct device
type device (line 1214) | struct device
type device (line 1223) | struct device
type device (line 1232) | struct device
type device (line 1241) | struct device
type device (line 1250) | struct device
type device (line 1259) | struct device
type device (line 1268) | struct device
type device (line 1277) | struct device
type device (line 1286) | struct device
function peek_rxbuf (line 1300) | int peek_rxbuf (BYTE **buf)
function release_rxbuf (line 1325) | int release_rxbuf (BYTE *buf)
function BYTE (line 1342) | BYTE *get_rxbuf (int len)
function pktq_check (line 1382) | static int pktq_check (struct rx_ringbuf *q)
function pktq_init (line 1405) | static int pktq_init (struct rx_ringbuf *q, int size, int num, char *pool)
function pktq_inc_out (line 1438) | static int pktq_inc_out (struct rx_ringbuf *q)
function pktq_in_index (line 1450) | static int pktq_in_index (struct rx_ringbuf *q)
type rx_elem (line 1462) | struct rx_elem
type rx_ringbuf (line 1462) | struct rx_ringbuf
type rx_elem (line 1464) | struct rx_elem
type rx_elem (line 1470) | struct rx_elem
type rx_ringbuf (line 1470) | struct rx_ringbuf
type rx_elem (line 1472) | struct rx_elem
function pktq_clear (line 1478) | static void pktq_clear (struct rx_ringbuf *q)
FILE: tcpdump/jni/libpcap/pcap-dos.h
type BOOL (line 15) | typedef int BOOL;
type BYTE (line 16) | typedef unsigned char BYTE;
type WORD (line 17) | typedef unsigned short WORD;
type DWORD (line 18) | typedef unsigned long DWORD;
type BYTE (line 19) | typedef BYTE ETHER[6];
type UINT (line 52) | typedef unsigned int UINT;
type uint64 (line 57) | typedef unsigned long long uint64;
type QWORD (line 58) | typedef unsigned long long QWORD;
type uint64 (line 62) | typedef unsigned __int64 uint64;
type QWORD (line 63) | typedef unsigned __int64 QWORD;
type device (line 107) | struct device
type device (line 108) | struct device
type device (line 109) | struct device
type device (line 110) | struct device
type device (line 111) | struct device
type device (line 112) | struct device
type device (line 113) | struct device
type device (line 114) | struct device
type device (line 115) | struct device
type device (line 116) | struct device
type device (line 117) | struct device
type rx_ringbuf (line 119) | struct rx_ringbuf {
type rx_elem (line 127) | struct rx_elem {
type device (line 140) | struct device {
type NET_STATS (line 174) | typedef struct net_device_stats {
type device (line 205) | struct device
type device (line 206) | struct device
type device (line 207) | struct device
FILE: tcpdump/jni/libpcap/pcap-enet.c
type packet_header (line 32) | struct packet_header {
function readloop (line 47) | void
function efReadError (line 104) | static void
function wrapup (line 122) | void
function initdevice (line 147) | int
FILE: tcpdump/jni/libpcap/pcap-int.h
type pcap_opt (line 108) | struct pcap_opt {
type bpf_program (line 123) | struct bpf_program
type pcap_stat (line 128) | struct pcap_stat
type Adapter (line 133) | typedef Adapter *(*getadapter_op_t)(pcap_t *);
type pcap (line 141) | struct pcap {
type pcap_timeval (line 271) | struct pcap_timeval {
type pcap_sf_pkthdr (line 306) | struct pcap_sf_pkthdr {
type pcap_sf_patched_pkthdr (line 322) | struct pcap_sf_patched_pkthdr {
type oneshot_userdata (line 335) | struct oneshot_userdata {
type sockaddr (line 418) | struct sockaddr
type sockaddr (line 419) | struct sockaddr
type sockaddr (line 419) | struct sockaddr
type sockaddr (line 420) | struct sockaddr
type sockaddr (line 421) | struct sockaddr
type sockaddr (line 422) | struct sockaddr
type sockaddr (line 422) | struct sockaddr
type sockaddr (line 423) | struct sockaddr
type sockaddr (line 425) | struct sockaddr
type sockaddr (line 425) | struct sockaddr
type pcap_pkthdr (line 449) | struct pcap_pkthdr
type bpf_program (line 455) | struct bpf_program
FILE: tcpdump/jni/libpcap/pcap-libdlpi.c
type linknamelist_t (line 59) | typedef struct linknamelist {
type linkwalk_t (line 64) | typedef struct linkwalk {
function boolean_t (line 73) | static boolean_t
function pcap_activate_libdlpi (line 95) | static int
function dlpromiscon (line 247) | static int
function pcap_platform_finddevs (line 273) | int
function pcap_read_libdlpi (line 313) | static int
function pcap_inject_libdlpi (line 365) | static int
function pcap_cleanup_libdlpi (line 388) | static void
function pcap_libdlpi_err (line 404) | static void
function pcap_t (line 411) | pcap_t *
FILE: tcpdump/jni/libpcap/pcap-linux.c
type socklen_t (line 256) | typedef int socklen_t;
type pcap_linux (line 293) | struct pcap_linux {
type pcap_stat (line 343) | struct pcap_stat
type bpf_program (line 344) | struct bpf_program
type tpacket_hdr_64 (line 354) | struct tpacket_hdr_64 {
type tpacket_hdr (line 371) | struct tpacket_hdr
type tpacket_hdr_64 (line 372) | struct tpacket_hdr_64
type tpacket2_hdr (line 374) | struct tpacket2_hdr
type tpacket_block_desc (line 377) | struct tpacket_block_desc
type bpf_program (line 397) | struct bpf_program
type pcap_pkthdr (line 400) | struct pcap_pkthdr
type sock_fprog (line 435) | struct sock_fprog
type bpf_insn (line 437) | struct bpf_insn
type sock_fprog (line 438) | struct sock_fprog
type sock_filter (line 441) | struct sock_filter
type sock_fprog (line 443) | struct sock_fprog
function pcap_t (line 447) | pcap_t *
function get_mac80211_phydev (line 544) | static int
type nl_handle (line 588) | struct nl_handle
function nl_socket_free (line 594) | static inline void
function __genl_ctrl_alloc_cache (line 602) | static inline int
type nl80211_state (line 614) | struct nl80211_state {
function nl80211_init (line 620) | static int
function nl80211_cleanup (line 662) | static void
type nl80211_state (line 671) | struct nl80211_state
type nl_msg (line 675) | struct nl_msg
function del_mon_if (line 766) | static int
function enter_rfmon_mode_mac80211 (line 820) | static int
function is_bonding_device (line 959) | static int
function pcap_can_set_rfmon_linux (line 982) | static int
function linux_if_drops (line 1078) | static long int
function pcap_cleanup_linux (line 1143) | static void pcap_cleanup_linux( pcap_t *handle )
function pcap_activate_linux (line 1305) | static int
function pcap_read_linux (line 1487) | static int
function pcap_set_datalink_linux (line 1497) | static int
function linux_check_direction (line 1509) | static inline int
function pcap_read_packet (line 1545) | static int
function pcap_inject_linux (line 1886) | static int
function pcap_stats_linux (line 1938) | static int
function add_linux_if (line 2082) | static int
function scan_sys_class_net (line 2169) | static int
function scan_proc_net_dev (line 2287) | static int
function pcap_platform_finddevs (line 2374) | int
function pcap_setfilter_linux_common (line 2411) | static int
function pcap_setfilter_linux (line 2583) | static int
function pcap_setdirection_linux (line 2594) | static int
function map_packet_type_to_sll_type (line 2623) | static short int
function is_wifi (line 2649) | static int
function map_arphrd_to_dlt (line 2712) | static void map_arphrd_to_dlt(pcap_t *handle, int sock_fd, int arptype,
function activate_new (line 3140) | static int
function activate_mmap (line 3526) | static int
function activate_mmap (line 3610) | static int
function init_tpacket (line 3627) | static int
function prepare_tpacket_socket (line 3715) | static int
function create_ring (line 3832) | static int
function destroy_ring (line 4202) | static void
function pcap_oneshot_mmap (line 4239) | static void
function pcap_cleanup_linux_mmap (line 4252) | static void
function pcap_getnonblock_mmap (line 4266) | static int
function pcap_setnonblock_mmap (line 4275) | static int
type pcap_linux (line 4310) | struct pcap_linux
function pcap_wait_for_frames_mmap (line 4348) | static int pcap_wait_for_frames_mmap(pcap_t *handle)
function pcap_handle_packet_mmap (line 4458) | static int pcap_handle_packet_mmap(
function pcap_read_linux_mmap_v1 (line 4602) | static int
function pcap_read_linux_mmap_v1_64 (line 4676) | static int
function pcap_read_linux_mmap_v2 (line 4751) | static int
function pcap_read_linux_mmap_v3 (line 4831) | static int
function pcap_setfilter_linux_mmap (line 4945) | static int
function iface_get_id (line 5032) | static int
function iface_bind (line 5054) | static int
function has_wext (line 5115) | static int
type monitor_type (line 5143) | typedef enum {
function enter_rfmon_mode_wext (line 5163) | static int
function enter_rfmon_mode (line 5779) | static int
function iface_set_default_ts_types (line 5824) | static void
function iface_ethtool_get_ts_info (line 5839) | static int
function iface_ethtool_get_ts_info (line 5910) | static int
function iface_ethtool_flag_ioctl (line 5934) | static int
function iface_get_offload (line 5963) | static int
function iface_get_offload (line 6021) | static int
function activate_old (line 6042) | static int
function iface_bind_old (line 6240) | static int
function iface_get_mtu (line 6278) | static int
function iface_get_arptype (line 6301) | static int
function fix_program (line 6325) | static int
function fix_offset (line 6427) | static int
function set_kernel_filter (line 6464) | static int
function reset_kernel_filter (line 6591) | static int
FILE: tcpdump/jni/libpcap/pcap-netfilter-linux.c
type nftype_t (line 75) | typedef enum { OTHER = -1, NFLOG, NFQUEUE } nftype_t;
type pcap_netfilter (line 80) | struct pcap_netfilter {
function netfilter_read_linux (line 86) | static int
function netfilter_set_datalink (line 214) | static int
function netfilter_stats_linux (line 221) | static int
function netfilter_inject_linux (line 232) | static int
type my_nfattr (line 239) | struct my_nfattr {
function netfilter_send_config_msg (line 245) | static int
function nflog_send_config_msg (line 326) | static int
function nflog_send_config_cmd (line 332) | static int
function nflog_send_config_mode (line 347) | static int
function nfqueue_send_verdict (line 363) | static int
function nfqueue_send_config_msg (line 379) | static int
function nfqueue_send_config_cmd (line 385) | static int
function nfqueue_send_config_mode (line 401) | static int
function netfilter_activate (line 417) | static int
function pcap_t (line 591) | pcap_t *
function netfilter_findalldevs (line 634) | int
FILE: tcpdump/jni/libpcap/pcap-nit.c
type pcap_nit (line 73) | struct pcap_nit {
function pcap_stats_nit (line 77) | static int
function pcap_read_nit (line 102) | static int
function pcap_inject_nit (line 199) | static int
function nit_setflags (line 216) | static int
function pcap_activate_nit (line 259) | static int
function pcap_t (line 350) | pcap_t *
function pcap_platform_finddevs (line 363) | int
FILE: tcpdump/jni/libpcap/pcap-null.c
function pcap_t (line 38) | pcap_t *
function pcap_platform_finddevs (line 45) | int
FILE: tcpdump/jni/libpcap/pcap-pf.c
type mbuf (line 37) | struct mbuf
type rtentry (line 38) | struct rtentry
type pcap_pf (line 81) | struct pcap_pf {
type bpf_program (line 90) | struct bpf_program
function pcap_read_pf (line 100) | static int
function pcap_inject_pf (line 228) | static int
function pcap_stats_pf (line 242) | static int
function pcap_activate_pf (line 297) | static int
function pcap_t (line 505) | pcap_t *
function pcap_platform_finddevs (line 518) | int
function pcap_setfilter_pf (line 524) | static int
FILE: tcpdump/jni/libpcap/pcap-septel.c
type bpf_program (line 44) | struct bpf_program
type pcap_stat (line 45) | struct pcap_stat
function septel_read (line 51) | struct pcap_septel {
function septel_inject (line 181) | static int
function pcap_t (line 196) | static pcap_t *septel_activate(pcap_t* handle) {
function pcap_t (line 218) | pcap_t *septel_create(const char *device, char *ebuf, int *is_ours) {
function septel_stats (line 243) | static int septel_stats(pcap_t *p, struct pcap_stat *ps) {
function septel_findalldevs (line 254) | int
function septel_setfilter (line 267) | static int septel_setfilter(pcap_t *p, struct bpf_program *fp) {
function septel_setnonblock (line 288) | static int
FILE: tcpdump/jni/libpcap/pcap-sita.c
type iface_t (line 55) | typedef struct iface {
type unit_t (line 62) | typedef struct unit {
function dump_interface_list (line 81) | static void dump_interface_list(void) {
function dump (line 114) | static void dump(unsigned char *ptr, int i, int indent) {
function dump_interface_list_p (line 122) | static void dump_interface_list_p(void) {
function dump_unit_table (line 142) | static void dump_unit_table(void) {
function find_unit_by_fd (line 162) | static int find_unit_by_fd(int fd, int *chassis, int *geoslot, unit_t **...
function read_client_nbytes (line 178) | static int read_client_nbytes(int fd, int count, unsigned char *buf) {
function empty_unit_iface (line 192) | static void empty_unit_iface(unit_t *u) {
function empty_unit (line 206) | static void empty_unit(int chassis, int geoslot) {
FILE: tcpdump/jni/libpcap/pcap-snf.c
type pcap_snf (line 29) | struct pcap_snf {
function snf_set_datalink (line 39) | static int
function snf_pcap_stats (line 46) | static int
function snf_platform_cleanup (line 64) | static void
function snf_getnonblock (line 81) | static int
function snf_setnonblock (line 89) | static int
function snf_timestamp_to_timeval (line 107) | static inline
function snf_read (line 129) | static int
function snf_setfilter (line 194) | static int
function snf_inject (line 213) | static int
function snf_activate (line 244) | static int
function snf_findalldevs (line 324) | int
function pcap_t (line 422) | pcap_t *
FILE: tcpdump/jni/libpcap/pcap-snit.c
type pcap_snit (line 85) | struct pcap_snit {
function pcap_stats_snit (line 89) | static int
function pcap_read_snit (line 115) | static int
function pcap_inject_snit (line 210) | static int
function nit_setflags (line 233) | static int
function pcap_activate_snit (line 282) | static int
function pcap_t (line 428) | pcap_t *
function pcap_platform_finddevs (line 441) | int
FILE: tcpdump/jni/libpcap/pcap-snoop.c
type pcap_snoop (line 60) | struct pcap_snoop {
function pcap_read_snoop (line 64) | static int
function pcap_inject_snoop (line 142) | static int
function pcap_stats_snoop (line 160) | static int
function pcap_activate_snoop (line 202) | static int
function pcap_t (line 401) | pcap_t *
function pcap_platform_finddevs (line 414) | int
FILE: tcpdump/jni/libpcap/pcap-stdinc.h
type __int64 (line 75) | typedef __int64 intptr_t;
type _W64 (line 77) | typedef _W64 int intptr_t;
FILE: tcpdump/jni/libpcap/pcap-usb-linux.c
type mon_bin_stats (line 87) | struct mon_bin_stats {
type mon_bin_get (line 92) | struct mon_bin_get {
type mon_bin_mfetch (line 98) | struct mon_bin_mfetch {
type pcap_usb_linux (line 123) | struct pcap_usb_linux {
type pcap_stat (line 132) | struct pcap_stat
type pcap_stat (line 133) | struct pcap_stat
function usb_dev_add (line 142) | static int
function usb_findalldevs (line 156) | int
function usb_mmap (line 210) | static
function probe_devices (line 240) | static void
function pcap_t (line 296) | pcap_t *
function usb_activate (line 339) | static int
function ascii_to_int (line 456) | static inline int
function usb_read_linux (line 467) | static int
function usb_inject_linux (line 665) | static int
function usb_stats_linux (line 673) | static int
function usb_setdirection_linux (line 749) | static int
function usb_stats_linux_bin (line 757) | static int
function usb_read_linux_bin (line 781) | static int
function usb_read_linux_mmap (line 840) | static int
function usb_cleanup_linux_mmap (line 928) | static void
FILE: tcpdump/jni/libpcap/pcap-win32.c
type bpf_program (line 55) | struct bpf_program
type bpf_program (line 56) | struct bpf_program
type pcap_win (line 72) | struct pcap_win {
type bpf_hdr (line 86) | struct bpf_hdr {
function BOOL (line 96) | BOOL WINAPI DllMain(
function wsockinit (line 111) | int
function pcap_wsockinit (line 133) | int pcap_wsockinit()
function pcap_stats_win32 (line 138) | static int
function pcap_setbuff_win32 (line 151) | static int
function pcap_setmode_win32 (line 163) | static int
function pcap_setmintocopy_win32 (line 176) | static int
function Adapter (line 188) | static Adapter *
function pcap_read_win32_npf (line 194) | static int
function pcap_read_win32_dag (line 301) | static int
function pcap_inject_win32 (line 463) | static int
function pcap_cleanup_win32 (line 492) | static void
type pcap_win (line 509) | struct pcap_win
function pcap_t (line 780) | pcap_t *
function pcap_setfilter_win32_npf (line 824) | static int
function pcap_setfilter_win32_dag (line 885) | static int
function pcap_getnonblock_win32 (line 905) | static int
function pcap_setnonblock_win32 (line 918) | static int
function pcap_platform_finddevs (line 947) | int
FILE: tcpdump/jni/libpcap/pcap.c
function pcap_not_initialized (line 111) | int
function pcap_can_set_rfmon (line 130) | int
function pcap_cant_set_rfmon (line 139) | static int
function pcap_list_tstamp_types (line 156) | int
function pcap_free_tstamp_types (line 189) | void
function pcap_oneshot (line 200) | void
function u_char (line 209) | const u_char *
function pcap_next_ex (line 223) | int
function pcap_findalldevs (line 274) | int
function pcap_t (line 280) | pcap_t *
function pcap_findalldevs (line 287) | int
function pcap_t (line 293) | pcap_t *
function pcap_findalldevs (line 300) | int
function pcap_t (line 306) | pcap_t *
type capture_source_type (line 313) | struct capture_source_type {
function pcap_findalldevs (line 356) | int
function pcap_t (line 404) | pcap_t *
function initialize_ops (line 450) | static void
function pcap_t (line 487) | static pcap_t *
function pcap_t (line 531) | pcap_t *
function pcap_check_activated (line 576) | int
function pcap_set_snaplen (line 587) | int
function pcap_set_promisc (line 596) | int
function pcap_set_rfmon (line 605) | int
function pcap_set_timeout (line 614) | int
function pcap_set_tstamp_type (line 623) | int
function pcap_set_immediate_mode (line 661) | int
function pcap_set_buffer_size (line 670) | int
function pcap_set_tstamp_precision (line 679) | int
function pcap_get_tstamp_precision (line 721) | int
function pcap_activate (line 727) | int
function pcap_t (line 765) | pcap_t *
function pcap_t (line 814) | pcap_t *
function pcap_dispatch (line 835) | int
function pcap_read (line 844) | int
function pcap_loop (line 851) | int
function pcap_breakloop (line 884) | void
function pcap_datalink (line 890) | int
function pcap_datalink_ext (line 898) | int
function pcap_list_datalinks (line 906) | int
function pcap_free_datalinks (line 950) | void
function pcap_set_datalink (line 956) | int
function pcap_strcasecmp (line 1090) | int
type dlt_choice (line 1103) | struct dlt_choice {
type dlt_choice (line 1112) | struct dlt_choice
function pcap_datalink_name_to_val (line 1239) | int
type tstamp_type_choice (line 1276) | struct tstamp_type_choice {
type tstamp_type_choice (line 1282) | struct tstamp_type_choice
function pcap_tstamp_type_name_to_val (line 1291) | int
function pcap_snapshot (line 1327) | int
function pcap_is_swapped (line 1335) | int
function pcap_major_version (line 1343) | int
function pcap_minor_version (line 1351) | int
function FILE (line 1359) | FILE *
function pcap_fileno (line 1365) | int
function pcap_get_selectable_fd (line 1379) | int
function pcap_perror (line 1386) | void
function pcap_getnonblock (line 1398) | int
function pcap_getnonblock_fd (line 1423) | int
function pcap_setnonblock (line 1441) | int
function pcap_setnonblock_fd (line 1465) | int
function pcap_setfilter (line 1601) | int
function pcap_setdirection (line 1613) | int
function pcap_stats (line 1624) | int
function pcap_stats_dead (line 1630) | static int
function pcap_setbuff (line 1639) | int
function pcap_setbuff_dead (line 1645) | static int
function pcap_setmode (line 1653) | int
function pcap_setmode_dead (line 1659) | static int
function pcap_setmintocopy (line 1667) | int
function Adapter (line 1673) | Adapter *
function pcap_setmintocopy_dead (line 1679) | static int
type pcap (line 1705) | struct pcap
function pcap_close_all (line 1713) | static void
function pcap_do_addexit (line 1722) | int
function pcap_add_to_pcaps_to_close (line 1743) | void
function pcap_remove_from_pcaps_to_close (line 1750) | void
function pcap_cleanup_live_common (line 1777) | void
function pcap_cleanup_dead (line 1809) | static void
function pcap_t (line 1815) | pcap_t *
function pcap_t (line 1853) | pcap_t *
function pcap_sendpacket (line 1866) | int
function pcap_inject (line 1878) | int
function pcap_close (line 1884) | void
function pcap_offline_filter (line 1899) | int
FILE: tcpdump/jni/libpcap/pcap/bluetooth.h
type pcap_bluetooth_h4_header (line 41) | typedef struct _pcap_bluetooth_h4_header {
type pcap_bluetooth_linux_monitor_header (line 49) | typedef struct _pcap_bluetooth_linux_monitor_header {
FILE: tcpdump/jni/libpcap/pcap/bpf.h
type bpf_int32 (line 83) | typedef long bpf_int32;
type bpf_u_int32 (line 84) | typedef unsigned long bpf_u_int32;
type bpf_int32 (line 86) | typedef int bpf_int32;
type u_int (line 87) | typedef u_int bpf_u_int32;
type bpf_program (line 106) | struct bpf_program {
type bpf_insn (line 1472) | struct bpf_insn {
type bpf_aux_data (line 1484) | struct bpf_aux_data {
type bpf_insn (line 1496) | struct bpf_insn
type bpf_insn (line 1497) | struct bpf_insn
type bpf_insn (line 1498) | struct bpf_insn
type bpf_aux_data (line 1498) | struct bpf_aux_data
FILE: tcpdump/jni/libpcap/pcap/namedb.h
type pcap_etherent (line 48) | struct pcap_etherent {
type pcap_etherent (line 55) | struct pcap_etherent
type addrinfo (line 61) | struct addrinfo
FILE: tcpdump/jni/libpcap/pcap/nflog.h
type nflog_hdr_t (line 42) | typedef struct nflog_hdr {
type nflog_tlv_t (line 48) | typedef struct nflog_tlv {
type nflog_packet_hdr_t (line 54) | typedef struct nflog_packet_hdr {
type nflog_hwaddr_t (line 60) | typedef struct nflog_hwaddr {
type nflog_timestamp_t (line 66) | typedef struct nflog_timestamp {
FILE: tcpdump/jni/libpcap/pcap/pcap.h
type bpf_int32 (line 75) | typedef int bpf_int32;
type u_int (line 76) | typedef u_int bpf_u_int32;
type pcap_t (line 79) | typedef struct pcap pcap_t;
type pcap_dumper_t (line 80) | typedef struct pcap_dumper pcap_dumper_t;
type pcap_if_t (line 81) | typedef struct pcap_if pcap_if_t;
type pcap_addr_t (line 82) | typedef struct pcap_addr pcap_addr_t;
type pcap_file_header (line 122) | struct pcap_file_header {
type pcap_direction_t (line 142) | typedef enum {
type pcap_pkthdr (line 160) | struct pcap_pkthdr {
type pcap_stat (line 169) | struct pcap_stat {
type pcap_stat_ex (line 182) | struct pcap_stat_ex {
type pcap_if (line 214) | struct pcap_if {
type pcap_addr (line 229) | struct pcap_addr {
type pcap_pkthdr (line 237) | struct pcap_pkthdr
type pcap_pkthdr (line 375) | struct pcap_pkthdr
type pcap_pkthdr (line 376) | struct pcap_pkthdr
type pcap_stat (line 378) | struct pcap_stat
type bpf_program (line 379) | struct bpf_program
type bpf_program (line 389) | struct bpf_program
type bpf_program (line 391) | struct bpf_program
type bpf_program (line 393) | struct bpf_program
type bpf_program (line 394) | struct bpf_program
type pcap_pkthdr (line 395) | struct pcap_pkthdr
type pcap_pkthdr (line 420) | struct pcap_pkthdr
type bpf_insn (line 435) | struct bpf_insn
type bpf_insn (line 437) | struct bpf_insn
type bpf_insn (line 438) | struct bpf_insn
type bpf_program (line 439) | struct bpf_program
type pcap_stat_ex (line 467) | struct pcap_stat_ex
FILE: tcpdump/jni/libpcap/pcap/sll.h
type sll_header (line 83) | struct sll_header {
FILE: tcpdump/jni/libpcap/pcap/usb.h
type pcap_usb_setup (line 57) | typedef struct _usb_setup {
type iso_rec (line 68) | typedef struct _iso_rec {
type pcap_usb_header (line 77) | typedef struct _usb_header {
type pcap_usb_header_mmapped (line 102) | typedef struct _usb_header_mmapped {
type usb_isodesc (line 134) | typedef struct _usb_isodesc {
FILE: tcpdump/jni/libpcap/pcap/vlan.h
type vlan_tag (line 37) | struct vlan_tag {
FILE: tcpdump/jni/libpcap/pcap1.h
type bpf_int32 (line 67) | typedef int bpf_int32;
type u_int (line 68) | typedef u_int bpf_u_int32;
type pcap_t (line 71) | typedef struct pcap pcap_t;
type pcap_dumper_t (line 72) | typedef struct pcap_dumper pcap_dumper_t;
type pcap_if_t (line 73) | typedef struct pcap_if pcap_if_t;
type pcap_addr_t (line 74) | typedef struct pcap_addr pcap_addr_t;
type pcap1_info_types (line 115) | enum pcap1_info_types {
type pcap1_info_container (line 124) | struct pcap1_info_container {
type pcap1_info_timestamp (line 130) | struct pcap1_info_timestamp {
type pcap1_info_packet (line 138) | struct pcap1_info_packet {
type pcap1_probe (line 147) | enum pcap1_probe {
type pcap1_info_probe (line 155) | struct pcap1_info_probe {
type pcap1_info_comment (line 161) | struct pcap1_info_comment {
type pcap1_packet_header (line 166) | struct pcap1_packet_header {
type pcap_stat (line 183) | struct pcap_stat {
type pcap_if (line 195) | struct pcap_if {
type pcap_addr (line 208) | struct pcap_addr {
type pcap_pkthdr (line 216) | struct pcap_pkthdr
type pcap_pkthdr (line 228) | struct pcap_pkthdr
type pcap_pkthdr (line 229) | struct pcap_pkthdr
type pcap_stat (line 231) | struct pcap_stat
type bpf_program (line 232) | struct bpf_program
type bpf_program (line 238) | struct bpf_program
type bpf_program (line 240) | struct bpf_program
type bpf_program (line 242) | struct bpf_program
type pcap_pkthdr (line 261) | struct pcap_pkthdr
type bpf_insn (line 270) | struct bpf_insn
type bpf_insn (line 271) | struct bpf_insn
type bpf_insn (line 272) | struct bpf_insn
type bpf_program (line 273) | struct bpf_program
FILE: tcpdump/jni/libpcap/savefile.c
function sf_getnonblock (line 78) | static int
function sf_setnonblock (line 88) | static int
function sf_stats (line 104) | static int
function sf_setbuff (line 113) | static int
function sf_setmode (line 121) | static int
function sf_setmintocopy (line 129) | static int
function sf_inject (line 138) | static int
function sf_setdirection (line 150) | static int
function sf_cleanup (line 158) | void
function pcap_t (line 168) | pcap_t *
function pcap_t (line 206) | pcap_t *
function pcap_t (line 214) | pcap_t* pcap_hopen_offline_with_tstamp_precision(intptr_t osfd, u_int pr...
function pcap_t (line 238) | pcap_t* pcap_hopen_offline(intptr_t osfd, char *errbuf)
function pcap_t (line 253) | static
function pcap_t (line 360) | pcap_t *
function pcap_offline_read (line 372) | int
FILE: tcpdump/jni/libpcap/scanner.c
type flex_int8_t (line 63) | typedef int8_t flex_int8_t;
type flex_uint8_t (line 64) | typedef uint8_t flex_uint8_t;
type flex_int16_t (line 65) | typedef int16_t flex_int16_t;
type flex_uint16_t (line 66) | typedef uint16_t flex_uint16_t;
type flex_int32_t (line 67) | typedef int32_t flex_int32_t;
type flex_uint32_t (line 68) | typedef uint32_t flex_uint32_t;
type flex_int8_t (line 70) | typedef signed char flex_int8_t;
type flex_int16_t (line 71) | typedef short int flex_int16_t;
type flex_int32_t (line 72) | typedef int flex_int32_t;
type flex_uint8_t (line 73) | typedef unsigned char flex_uint8_t;
type flex_uint16_t (line 74) | typedef unsigned short int flex_uint16_t;
type flex_uint32_t (line 75) | typedef unsigned int flex_uint32_t;
type yy_buffer_state (line 181) | struct yy_buffer_state
type yy_size_t (line 212) | typedef size_t yy_size_t;
type yy_buffer_state (line 217) | struct yy_buffer_state
type YY_CHAR (line 363) | typedef unsigned char YY_CHAR;
type yy_state_type (line 367) | typedef int yy_state_type;
type yy_trans_info (line 395) | struct yy_trans_info
type addrinfo (line 3679) | struct addrinfo
function YY_RESTORE_YY_MORE_OFFSET (line 3857) | YY_RESTORE_YY_MORE_OFFSET
function yy_get_next_buffer (line 3986) | static int yy_get_next_buffer (void)
function yy_state_type (line 4120) | static yy_state_type yy_get_previous_state (void)
function yy_state_type (line 4152) | static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
function input (line 4179) | static int input (void)
function pcap_restart (line 4254) | void pcap_restart (FILE * input_file )
function pcap__switch_to_buffer (line 4271) | void pcap__switch_to_buffer (YY_BUFFER_STATE new_buffer )
function pcap__load_buffer_state (line 4302) | static void pcap__load_buffer_state (void)
function YY_BUFFER_STATE (line 4316) | YY_BUFFER_STATE pcap__create_buffer (FILE * file, int size )
function pcap__delete_buffer (line 4344) | void pcap__delete_buffer (YY_BUFFER_STATE b )
function pcap__init_buffer (line 4367) | static void pcap__init_buffer (YY_BUFFER_STATE b, FILE * file )
function pcap__flush_buffer (line 4395) | void pcap__flush_buffer (YY_BUFFER_STATE b )
function pcap_push_buffer_state (line 4424) | void pcap_push_buffer_state (YY_BUFFER_STATE new_buffer )
function pcap_pop_buffer_state (line 4454) | void pcap_pop_buffer_state (void)
function pcap_ensure_buffer_stack (line 4473) | static void pcap_ensure_buffer_stack (void)
function YY_BUFFER_STATE (line 4522) | YY_BUFFER_STATE pcap__scan_buffer (char * base, yy_size_t size )
function YY_BUFFER_STATE (line 4559) | YY_BUFFER_STATE pcap__scan_string (yyconst char * yystr )
function YY_BUFFER_STATE (line 4572) | YY_BUFFER_STATE pcap__scan_bytes (yyconst char * yybytes, int _yybytes...
function yy_fatal_error (line 4606) | static void yy_fatal_error (yyconst char* msg )
function pcap_get_debug (line 4635) | int pcap_get_debug (void)
function pcap_set_debug (line 4640) | void pcap_set_debug (int bdebug )
function yy_init_globals (line 4645) | static int yy_init_globals (void)
function pcap_lex_destroy (line 4674) | int pcap_lex_destroy (void)
function yy_flex_strncpy (line 4700) | static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
function yy_flex_strlen (line 4709) | static int yy_flex_strlen (yyconst char * s )
function pcap_free (line 4736) | void pcap_free (void * ptr )
function lex_init (line 4746) | void
function lex_cleanup (line 4760) | void
function pcap_wrap (line 4774) | int
function xdtoi (line 4781) | static inline int
function stoi (line 4797) | static int
FILE: tcpdump/jni/libpcap/sf-pcap-ng.c
type block_header (line 70) | struct block_header {
type block_trailer (line 78) | struct block_trailer {
type option_header (line 91) | struct option_header {
type section_header_block (line 106) | struct section_header_block {
type interface_description_block (line 130) | struct interface_description_block {
type enhanced_packet_block (line 159) | struct enhanced_packet_block {
type simple_packet_block (line 173) | struct simple_packet_block {
type packet_block (line 183) | struct packet_block {
type block_cursor (line 198) | struct block_cursor {
type tstamp_scale_type_t (line 204) | typedef enum {
type pcap_ng_if (line 213) | struct pcap_ng_if {
type pcap_ng_sf (line 219) | struct pcap_ng_sf {
type pcap_pkthdr (line 227) | struct pcap_pkthdr
function read_bytes (line 230) | static int
function read_block (line 255) | static int
type block_cursor (line 331) | struct block_cursor
type option_header (line 356) | struct option_header
type block_cursor (line 357) | struct block_cursor
type option_header (line 359) | struct option_header
type block_cursor (line 381) | struct block_cursor
type option_header (line 382) | struct option_header
function process_idb_options (line 402) | static int
function add_interface (line 520) | static int
function pcap_t (line 644) | pcap_t *
function pcap_ng_cleanup (line 930) | static void
function pcap_ng_next_packet (line 944) | static int
FILE: tcpdump/jni/libpcap/sf-pcap.c
type pcap_pkthdr (line 123) | struct pcap_pkthdr
type swapped_type_t (line 128) | typedef enum {
type tstamp_scale_type_t (line 134) | typedef enum {
type pcap_sf (line 140) | struct pcap_sf {
function pcap_t (line 150) | pcap_t *
function pcap_next_packet (line 396) | static int
function sf_write_header (line 568) | static int
function pcap_dump (line 591) | void
function pcap_dumper_t (line 607) | static pcap_dumper_t *
function pcap_dumper_t (line 637) | pcap_dumper_t *
function pcap_dumper_t (line 683) | pcap_dumper_t *
function pcap_dumper_t (line 700) | pcap_dumper_t *
function FILE (line 862) | FILE *
function pcap_dump_ftell (line 868) | long
function pcap_dump_flush (line 874) | int
function pcap_dump_close (line 884) | void
FILE: tcpdump/jni/libpcap/tests/capturetest.c
type pcap_pkthdr (line 44) | struct pcap_pkthdr
function main (line 56) | int
function countme (line 203) | static void
function usage (line 211) | static void
function error (line 220) | static void
function warning (line 239) | static void
FILE: tcpdump/jni/libpcap/tests/filtertest.c
type stat (line 79) | struct stat
function error (line 110) | static void
function warn (line 129) | static void
function main (line 179) | int
function usage (line 306) | static void
FILE: tcpdump/jni/libpcap/tests/findalldevstest.c
function main (line 17) | int main(int argc, char **argv)
function ifprint (line 60) | static int ifprint(pcap_if_t *d)
FILE: tcpdump/jni/libpcap/tests/nonblocktest.c
type pcap_pkthdr (line 42) | struct pcap_pkthdr
function main (line 54) | int
function countme (line 142) | static void
function usage (line 150) | static void
function error (line 159) | static void
function warning (line 178) | static void
FILE: tcpdump/jni/libpcap/tests/opentest.c
function main (line 49) | int
function usage (line 173) | static void
function error (line 183) | static void
function warning (line 202) | static void
FILE: tcpdump/jni/libpcap/tests/reactivatetest.c
function main (line 37) | int
function error (line 68) | static void
FILE: tcpdump/jni/libpcap/tests/selpolltest.c
type pcap_pkthdr (line 42) | struct pcap_pkthdr
function main (line 54) | int
function countme (line 266) | static void
function usage (line 274) | static void
function error (line 283) | static void
function warning (line 302) | static void
FILE: tcpdump/jni/libpcap/tests/valgrindtest.c
type stat (line 107) | struct stat
function error (line 138) | static void
function warning (line 157) | static void
function main (line 209) | int
function usage (line 397) | static void
FILE: tcpdump/jni/libpcap/tests/visopts.py
function write_html (line 226) | def write_html(expr, gcount, logs):
function render_on_html (line 234) | def render_on_html(infile):
function run_httpd (line 277) | def run_httpd():
function main (line 291) | def main():
FILE: tcpdump/jni/libpcap/tokdefs.h
type yytokentype (line 39) | enum yytokentype {
type YYSTYPE (line 284) | typedef union YYSTYPE
FILE: tcpdump/jni/tcpdump/addrtoname.c
type mbuf (line 34) | struct mbuf
type rtentry (line 35) | struct rtentry
type ether_addr (line 45) | struct ether_addr {
type ether_addr (line 49) | struct ether_addr
type hnamemem (line 80) | struct hnamemem {
type hnamemem (line 86) | struct hnamemem
type hnamemem (line 87) | struct hnamemem
type hnamemem (line 88) | struct hnamemem
type hnamemem (line 89) | struct hnamemem
type hnamemem (line 90) | struct hnamemem
type hnamemem (line 91) | struct hnamemem
type hostent (line 101) | struct hostent
type hostent (line 104) | struct hostent
type sockaddr_in6 (line 107) | struct sockaddr_in6
type sockaddr (line 118) | struct sockaddr
type h6namemem (line 134) | struct h6namemem {
type h6namemem (line 140) | struct h6namemem
type enamemem (line 143) | struct enamemem {
type enamemem (line 153) | struct enamemem
type enamemem (line 154) | struct enamemem
type enamemem (line 155) | struct enamemem
type protoidmem (line 157) | struct protoidmem {
type protoidmem (line 164) | struct protoidmem
type hostent (line 224) | struct hostent
type hnamemem (line 226) | struct hnamemem
type hostent (line 272) | struct hostent
type in6_addr (line 274) | struct in6_addr
type for_hash_addr (line 275) | struct for_hash_addr {
type h6namemem (line 280) | struct h6namemem
type enamemem (line 322) | struct enamemem
type enamemem (line 326) | struct enamemem
type enamemem (line 343) | struct enamemem
type enamemem (line 355) | struct enamemem
type enamemem (line 358) | struct enamemem
type enamemem (line 391) | struct enamemem
type enamemem (line 400) | struct enamemem
type enamemem (line 405) | struct enamemem
type enamemem (line 434) | struct enamemem
type protoidmem (line 443) | struct protoidmem
type protoidmem (line 447) | struct protoidmem
type protoidmem (line 462) | struct protoidmem
type enamemem (line 474) | struct enamemem
type ether_addr (line 491) | struct ether_addr
type enamemem (line 522) | struct enamemem
type enamemem (line 549) | struct enamemem
type hnamemem (line 582) | struct hnamemem
type protoidmem (line 609) | struct protoidmem
type enamemem (line 637) | struct enamemem
type hnamemem (line 665) | struct hnamemem
type hnamemem (line 684) | struct hnamemem
type hnamemem (line 704) | struct hnamemem
function init_servarray (line 726) | static void
type eproto (line 763) | struct eproto {
function init_eprotoarray (line 768) | static void
type protoidlist (line 785) | struct protoidlist {
function init_protoidarray (line 801) | static void
type etherlist (line 830) | struct etherlist {
function init_etherarray (line 852) | static void
type tok (line 899) | struct tok
function init_ipxsaparray (line 1116) | static void
function init_addrtoname (line 1139) | void
type hnamemem (line 1162) | struct hnamemem
type hnamemem (line 1180) | struct hnamemem
type hnamemem (line 1183) | struct hnamemem
type hnamemem (line 1184) | struct hnamemem
type hnamemem (line 1189) | struct hnamemem
type h6namemem (line 1200) | struct h6namemem
type h6namemem (line 1203) | struct h6namemem
type h6namemem (line 1204) | struct h6namemem
type h6namemem (line 1209) | struct h6namemem
FILE: tcpdump/jni/tcpdump/addrtoname.h
type hnamemem (line 50) | struct hnamemem
type h6namemem (line 52) | struct h6namemem
FILE: tcpdump/jni/tcpdump/af.c
type tok (line 27) | struct tok
type tok (line 49) | struct tok
FILE: tcpdump/jni/tcpdump/af.h
type tok (line 18) | struct tok
type tok (line 19) | struct tok
FILE: tcpdump/jni/tcpdump/ah.h
type ah (line 40) | struct ah {
type newah (line 48) | struct newah {
FILE: tcpdump/jni/tcpdump/aodv.h
type aodv_rreq (line 36) | struct aodv_rreq {
type aodv_rreq6 (line 48) | struct aodv_rreq6 {
type aodv_rreq6_draft_01 (line 59) | struct aodv_rreq6_draft_01 {
type aodv_rrep (line 79) | struct aodv_rrep {
type aodv_rrep6 (line 90) | struct aodv_rrep6 {
type aodv_rrep6_draft_01 (line 100) | struct aodv_rrep6_draft_01 {
type rerr_unreach (line 117) | struct rerr_unreach {
type rerr_unreach6 (line 122) | struct rerr_unreach6 {
type rerr_unreach6_draft_01 (line 126) | struct rerr_unreach6_draft_01 {
type aodv_rerr (line 132) | struct aodv_rerr {
type aodv_rrep_ack (line 149) | struct aodv_rrep_ack {
type aodv_rreq (line 155) | struct aodv_rreq
type aodv_rrep (line 156) | struct aodv_rrep
type aodv_rerr (line 157) | struct aodv_rerr
type aodv_rrep_ack (line 158) | struct aodv_rrep_ack
type aodv_rreq6 (line 160) | struct aodv_rreq6
type aodv_rreq6_draft_01 (line 161) | struct aodv_rreq6_draft_01
type aodv_rrep6 (line 162) | struct aodv_rrep6
type aodv_rrep6_draft_01 (line 163) | struct aodv_rrep6_draft_01
type aodv_ext (line 177) | struct aodv_ext {
type aodv_hello (line 182) | struct aodv_hello {
FILE: tcpdump/jni/tcpdump/appletalk.h
type LAP (line 24) | struct LAP {
type atDDP (line 35) | struct atDDP {
type atShortDDP (line 47) | struct atShortDDP {
type atATP (line 74) | struct atATP {
type atEcho (line 95) | struct atEcho {
type atNBP (line 108) | struct atNBP {
type atNBPtuple (line 113) | struct atNBPtuple {
type zipHeader (line 142) | struct zipHeader {
FILE: tcpdump/jni/tcpdump/arcnet.h
type arc_header (line 42) | struct arc_header {
type arc_linux_header (line 86) | struct arc_linux_header {
FILE: tcpdump/jni/tcpdump/bootp.h
type bootp (line 23) | struct bootp {
type cmu_vend (line 211) | struct cmu_vend {
FILE: tcpdump/jni/tcpdump/bpf_dump.c
function bpf_dump (line 33) | void
FILE: tcpdump/jni/tcpdump/checksum.c
function init_crc10_table (line 90) | static void
function verify_crc10_cksum (line 113) | uint16_t
function init_checksum (line 128) | void
function create_osi_cksum (line 139) | uint16_t
FILE: tcpdump/jni/tcpdump/cpack.c
type cpack_state (line 58) | struct cpack_state
function cpack_advance (line 73) | int
function cpack_init (line 83) | int
function cpack_uint64 (line 96) | int
function cpack_uint32 (line 112) | int
function cpack_uint16 (line 128) | int
function cpack_uint8 (line 144) | int
FILE: tcpdump/jni/tcpdump/cpack.h
type cpack_state (line 33) | struct cpack_state {
type cpack_state (line 39) | struct cpack_state
type cpack_state (line 41) | struct cpack_state
type cpack_state (line 42) | struct cpack_state
type cpack_state (line 43) | struct cpack_state
type cpack_state (line 44) | struct cpack_state
type cpack_state (line 47) | struct cpack_state
type cpack_state (line 54) | struct cpack_state
FILE: tcpdump/jni/tcpdump/dccp.h
type dccp_hdr (line 27) | struct dccp_hdr {
type dccp_hdr_ext (line 51) | struct dccp_hdr_ext {
type dccp_hdr_request (line 60) | struct dccp_hdr_request {
type dccp_hdr_ack_bits (line 70) | struct dccp_hdr_ack_bits {
type dccp_hdr_response (line 84) | struct dccp_hdr_response {
type dccp_hdr_data (line 90) | struct dccp_hdr_data
type dccp_hdr (line 90) | struct dccp_hdr
type dccp_hdr_ext (line 92) | struct dccp_hdr_ext
type dccp_hdr_data (line 94) | struct dccp_hdr_data
type dccp_hdr_reset (line 103) | struct dccp_hdr_reset {
type dccp_pkt_type (line 109) | enum dccp_pkt_type {
type dccp_reset_codes (line 123) | enum dccp_reset_codes {
FILE: tcpdump/jni/tcpdump/decnet.h
type u_int8_t (line 25) | typedef u_int8_t byte[1];
type u_int8_t (line 33) | typedef u_int8_t word[2];
type u_int8_t (line 34) | typedef u_int8_t longword[4];
type etheraddr (line 47) | typedef union etheraddress etheraddr;
type dn_naddr (line 56) | struct dn_naddr {
type shorthdr (line 64) | struct shorthdr
type longhdr (line 72) | struct longhdr
type shorthdr (line 89) | struct shorthdr
type longhdr (line 90) | struct longhdr
type initmsgIII (line 153) | struct initmsgIII /* phase III initialization message */
type initmsg (line 165) | struct initmsg /* initialization message */
type verifmsg (line 178) | struct verifmsg /* verification message */
type testmsg (line 185) | struct testmsg /* hello and test message */
type l1rout (line 192) | struct l1rout /* level 1 routing message */
type l2rout (line 199) | struct l2rout /* level 2 routing message */
type rhellomsg (line 206) | struct rhellomsg /* router hello message */
type ehellomsg (line 221) | struct ehellomsg /* endnode hello message */
type initmsg (line 240) | struct initmsg
type verifmsg (line 241) | struct verifmsg
type testmsg (line 242) | struct testmsg
type l1rout (line 243) | struct l1rout
type l2rout (line 244) | struct l2rout
type rhellomsg (line 245) | struct rhellomsg
type ehellomsg (line 246) | struct ehellomsg
type nsphdr (line 364) | struct nsphdr /* general nsp header */
type seghdr (line 371) | struct seghdr /* data segment header */
type minseghdr (line 379) | struct minseghdr /* minimum data segment header */
type lsmsg (line 387) | struct lsmsg /* link service message (after hdr) */
type ackmsg (line 393) | struct ackmsg /* acknowledgement message */
type minackmsg (line 401) | struct minackmsg /* minimum acknowledgement message */
type ciackmsg (line 409) | struct ciackmsg /* connect acknowledgement message */
type cimsg (line 415) | struct cimsg /* connect initiate message */
type ccmsg (line 425) | struct ccmsg /* connect confirm message */
type cnmsg (line 436) | struct cnmsg /* generic connect message */
type dimsg (line 446) | struct dimsg /* disconnect initiate message */
type dcmsg (line 455) | struct dcmsg /* disconnect confirm message */
FILE: tcpdump/jni/tcpdump/enc.h
type enchdr (line 43) | struct enchdr {
FILE: tcpdump/jni/tcpdump/esp.h
type esp (line 40) | struct esp {
type newesp (line 51) | struct newesp {
type esptail (line 62) | struct esptail {
FILE: tcpdump/jni/tcpdump/ether.h
type ether_header (line 46) | struct ether_header {
FILE: tcpdump/jni/tcpdump/ethertype.h
type tok (line 200) | struct tok
FILE: tcpdump/jni/tcpdump/extract.h
type unaligned_uint16_t (line 83) | typedef struct {
type unaligned_uint32_t (line 87) | typedef struct {
function EXTRACT_16BITS (line 91) | static inline uint16_t
function EXTRACT_32BITS (line 97) | static inline uint32_t
function EXTRACT_64BITS (line 103) | static inline uint64_t
function EXTRACT_16BITS (line 141) | static inline uint16_t
function EXTRACT_32BITS (line 147) | static inline uint32_t
function EXTRACT_64BITS (line 153) | static inline uint64_t
FILE: tcpdump/jni/tcpdump/fddi.h
type fddi_header (line 34) | struct fddi_header {
FILE: tcpdump/jni/tcpdump/getopt_long.h
type option (line 44) | struct option {
type option (line 59) | struct option
type option (line 61) | struct option
FILE: tcpdump/jni/tcpdump/gmpls.c
type tok (line 27) | struct tok
type tok (line 40) | struct tok
type tok (line 53) | struct tok
type tok (line 60) | struct tok
type tok (line 76) | struct tok
type tok (line 144) | struct tok
type tok (line 155) | struct tok
type tok (line 172) | struct tok
type tok (line 188) | struct tok
FILE: tcpdump/jni/tcpdump/gmpls.h
type tok (line 25) | struct tok
type tok (line 26) | struct tok
type tok (line 27) | struct tok
type tok (line 28) | struct tok
type tok (line 29) | struct tok
type tok (line 30) | struct tok
type tok (line 31) | struct tok
type tok (line 32) | struct tok
type tok (line 33) | struct tok
FILE: tcpdump/jni/tcpdump/gmt2local.c
function gmt2local (line 41) | int32_t
FILE: tcpdump/jni/tcpdump/icmp6.h
type icmp6_hdr (line 72) | struct icmp6_hdr {
type mld6_hdr (line 170) | struct mld6_hdr {
type nd_router_solicit (line 188) | struct nd_router_solicit { /* router solicitation */
type nd_router_advert (line 198) | struct nd_router_advert { /* router advertisement */
type nd_neighbor_solicit (line 227) | struct nd_neighbor_solicit { /* neighbor solicitation */
type nd_neighbor_advert (line 238) | struct nd_neighbor_advert { /* neighbor advertisement */
type nd_redirect (line 253) | struct nd_redirect { /* redirect */
type nd_opt_hdr (line 265) | struct nd_opt_hdr { /* Neighbor discovery option header */
type nd_opt_prefix_info (line 282) | struct nd_opt_prefix_info { /* prefix information */
type nd_opt_rd_hdr (line 297) | struct nd_opt_rd_hdr { /* redirected header */
type nd_opt_mtu (line 305) | struct nd_opt_mtu { /* MTU option */
type nd_opt_rdnss (line 312) | struct nd_opt_rdnss { /* RDNSS RFC 6106 5.1 */
type nd_opt_dnssl (line 320) | struct nd_opt_dnssl { /* DNSSL RFC 6106 5.2 */
type nd_opt_advinterval (line 328) | struct nd_opt_advinterval { /* Advertisement interval option */
type nd_opt_homeagent_info (line 335) | struct nd_opt_homeagent_info { /* Home Agent info */
type nd_opt_route_info (line 343) | struct nd_opt_route_info { /* route info */
type icmp6_namelookup (line 356) | struct icmp6_namelookup {
type icmp6_nodeinfo (line 370) | struct icmp6_nodeinfo {
type ni_reply_fqdn (line 402) | struct ni_reply_fqdn {
type icmp6_router_renum (line 411) | struct icmp6_router_renum { /* router renumbering header */
type rr_pco_match (line 429) | struct rr_pco_match { /* match prefix part */
type rr_pco_use (line 445) | struct rr_pco_use { /* use prefix part */
type rr_result (line 462) | struct rr_result { /* router renumbering result message */
FILE: tcpdump/jni/tcpdump/ieee802_11.h
type mgmt_header_t (line 128) | struct mgmt_header_t {
type ssid_t (line 147) | struct ssid_t {
type rates_t (line 153) | struct rates_t {
type challenge_t (line 159) | struct challenge_t {
type fh_t (line 165) | struct fh_t {
type ds_t (line 174) | struct ds_t {
type cf_t (line 180) | struct cf_t {
type tim_t (line 189) | struct tim_t {
type mgmt_body_t (line 224) | struct mgmt_
Copy disabled (too large)
Download .json
Condensed preview — 2373 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (11,953K chars).
[
{
"path": ".github/CODEOWNERS",
"chars": 185,
"preview": "# General rule for all code base\n* @PerfectSlayer\n\n# Translation related files\napp/src/main/res/values-*/ @Vankog\napp/sr"
},
{
"path": ".github/FUNDING.yml",
"chars": 700,
"preview": "# These are supported funding model platforms\n\ngithub: PerfectSlayer # Replace with up to 4 GitHub Sponsors-enabled user"
},
{
"path": ".github/ISSUE_TEMPLATE/app_compatibility.yml",
"chars": 1345,
"preview": "name: App compatibility\ndescription: Create a report to track third party application compatibility\ntitle: \"[app name] c"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yml",
"chars": 2108,
"preview": "name: Bug report\ndescription: File a bug/issue report\nlabels: ['bug :bug:']\nbody:\n- type: checkboxes\n attributes:\n l"
},
{
"path": ".github/dependabot.yml",
"chars": 652,
"preview": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where "
},
{
"path": ".github/workflows/AndroidLocaleChecker.java",
"chars": 4130,
"preview": "import java.io.IOException;\nimport java.nio.file.Files;\nimport java.nio.file.Path;\nimport java.util.Arrays;\nimport java."
},
{
"path": ".github/workflows/android-analysis.yml",
"chars": 1846,
"preview": "name: \"CodeQL\"\n\non:\n schedule:\n - cron: '0 1 * * 6'\n\njobs:\n analyze:\n name: Analyze\n runs-on: ubuntu-latest\n "
},
{
"path": ".github/workflows/android-ci.yml",
"chars": 1516,
"preview": "name: Android CI\n\non:\n push:\n branches:\n - master\n\nconcurrency:\n group: ${{ github.workflow }}-${{ github.ref "
},
{
"path": ".github/workflows/android-locale-check.yml",
"chars": 1197,
"preview": "name: Android locale validation\n\non:\n pull_request:\n branches:\n - master\n paths:\n - 'app/src/main/res/v"
},
{
"path": ".github/workflows/issues-checker.yml",
"chars": 1523,
"preview": "name: Issue checker\n\non:\n issues:\n types: [labeled]\n\njobs:\n request-for-bug-context:\n name: Request for bug cont"
},
{
"path": ".gitignore",
"chars": 115,
"preview": "# Android specific\nlocal.properties\n\n# Gradle\n.cxx\n.externalNativeBuild\n.gradle\nbuild\n\n# IntelliJ IDEA\n.idea\n*.iml\n"
},
{
"path": ".tx/config",
"chars": 16951,
"preview": "[main]\nhost = https://www.transifex.com\nlang_map = af_ZA: af-rZA, am_ET: am-rET, ar_AE: ar-rAE, ar_BH: ar-rBH, ar_DZ: ar"
},
{
"path": ".tx/github-integration.yaml",
"chars": 8645,
"preview": "filters:\n - filter_type: file\n source_file: app/src/main/res/values/strings.xml\n file_format: ANDROID\n source_"
},
{
"path": "CHANGELOG.md",
"chars": 29183,
"preview": "# Changelog\n\n## [6.1.5] - Unreleased\n\n- Add always-on VPN detection during setup\n- Improve web signal handling and OOM k"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 3354,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": "CONTRIBUTING.md",
"chars": 8547,
"preview": "# Contributing to AdAway\n\n:+1::tada: First off, thanks for taking the time to contribute! :tada::+1:\n\nThe following is a"
},
{
"path": "LICENSE.md",
"chars": 35149,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "README.md",
"chars": 6253,
"preview": "#  AdAway\n\n[\nif [[ $kernel == MINGW* ]]; then\n export MSYS_NO_PATHC"
},
{
"path": "Resources/certificate/ssl.conf",
"chars": 265,
"preview": "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=@alternate_names\nkeyUsage=digitalSignature\nextended"
},
{
"path": "Resources/test-webserver.sh",
"chars": 488,
"preview": "#\n# Launch web server from a root shell.\n#\n\nAPP_FOLDER=$(find /data/app -type d -name \"org.adaway-*\")\nLIB_FOLDER=\"${APP_"
},
{
"path": "THIRD_PARTY_LICENSES.md",
"chars": 1945,
"preview": "# Licenses\n\nAdAway is licensed under the GPLv3+. \nThe file [LICENSE.md](LICENSE.md) includes the full license text.\n\n##"
},
{
"path": "TRANSLATING.md",
"chars": 3059,
"preview": "# Translating to your language\n\nYou can help us with your translation efforts! \n\nPlease have a look at ticket No. [AdAw"
},
{
"path": "app/.gitignore",
"chars": 350,
"preview": "#Android specific\nbin\ngen\nobj\nlibs/armeabi\nlibs/armeabi-v7a\nlibs/arm64-v8a\nlibs/mips\nlibs/mips64\nlibs/x86\nlibs/x86_64\nlo"
},
{
"path": "app/build.gradle",
"chars": 4679,
"preview": "plugins {\n id 'com.android.application'\n}\n\nboolean keyStoreDefined = project.hasProperty('signingStoreLocation') &&\n "
},
{
"path": "app/lint.xml",
"chars": 304,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<lint>\n <!-- list of issues to configure -->\n <issue id=\"InvalidPackage\">\n "
},
{
"path": "app/proguard-rules.pro",
"chars": 1365,
"preview": "-keep public class * extends android.content.ContentProvider\n\n# Temporary fix for androidx preference fragement referenc"
},
{
"path": "app/schemas/org.adaway.db.AppDatabase/1.json",
"chars": 2628,
"preview": "{\n \"formatVersion\": 1,\n \"database\": {\n \"version\": 1,\n \"identityHash\": \"5175df445bc75bbbb5ea672750d7b425\",\n \"e"
},
{
"path": "app/schemas/org.adaway.db.AppDatabase/2.json",
"chars": 4409,
"preview": "{\n \"formatVersion\": 1,\n \"database\": {\n \"version\": 2,\n \"identityHash\": \"e9b86296a34de1d881f8530fdf2c535d\",\n \"e"
},
{
"path": "app/schemas/org.adaway.db.AppDatabase/3.json",
"chars": 4764,
"preview": "{\n \"formatVersion\": 1,\n \"database\": {\n \"version\": 3,\n \"identityHash\": \"ace31b365ff79d4497319c74157538d7\",\n \"e"
},
{
"path": "app/schemas/org.adaway.db.AppDatabase/4.json",
"chars": 5580,
"preview": "{\n \"formatVersion\": 1,\n \"database\": {\n \"version\": 4,\n \"identityHash\": \"80b1c1d47fbd109a4f052817c9faf980\",\n \"e"
},
{
"path": "app/schemas/org.adaway.db.AppDatabase/5.json",
"chars": 5580,
"preview": "{\n \"formatVersion\": 1,\n \"database\": {\n \"version\": 5,\n \"identityHash\": \"80b1c1d47fbd109a4f052817c9faf980\",\n \"e"
},
{
"path": "app/schemas/org.adaway.db.AppDatabase/6.json",
"chars": 6354,
"preview": "{\n \"formatVersion\": 1,\n \"database\": {\n \"version\": 6,\n \"identityHash\": \"c53f309b3cbcdeda90c9f22573023ac2\",\n \"e"
},
{
"path": "app/schemas/org.adaway.db.AppDatabase/7.json",
"chars": 6639,
"preview": "{\n \"formatVersion\": 1,\n \"database\": {\n \"version\": 7,\n \"identityHash\": \"dccd6211bcef97caed75ea42d7df1b32\",\n \"e"
},
{
"path": "app/src/androidTest/java/org/adaway/db/DbTest.java",
"chars": 5161,
"preview": "package org.adaway.db;\n\nimport static org.adaway.db.entity.HostsSource.USER_SOURCE_ID;\nimport static org.adaway.db.entit"
},
{
"path": "app/src/androidTest/java/org/adaway/db/HostDbTest.java",
"chars": 3872,
"preview": "package org.adaway.db;\n\nimport static org.adaway.db.entity.HostsSource.USER_SOURCE_ID;\nimport static org.junit.Assert.as"
},
{
"path": "app/src/androidTest/java/org/adaway/db/SourceDbTest.java",
"chars": 5032,
"preview": "package org.adaway.db;\n\nimport static org.adaway.db.entity.HostsSource.USER_SOURCE_ID;\nimport static org.junit.Assert.as"
},
{
"path": "app/src/androidTest/java/org/adaway/db/UserListTest.java",
"chars": 7616,
"preview": "package org.adaway.db;\n\nimport static org.adaway.db.entity.HostsSource.USER_SOURCE_ID;\nimport static org.adaway.db.entit"
},
{
"path": "app/src/main/AndroidManifest.xml",
"chars": 7468,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:to"
},
{
"path": "app/src/main/assets/localhost-2410.crt",
"chars": 1204,
"preview": "-----BEGIN CERTIFICATE-----\nMIIDTTCCAjWgAwIBAgIUR9ZJhU2vy/hB7LChIPgUuBEzqkQwDQYJKoZIhvcNAQEL\nBQAwFDESMBAGA1UEAwwJbG9jYWx"
},
{
"path": "app/src/main/assets/localhost-2410.key",
"chars": 1704,
"preview": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQChU28DO9cKMfTu\nWAZPAFEw4U26+wgHOLmu0nDwRAj"
},
{
"path": "app/src/main/assets/test.html",
"chars": 464,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width"
},
{
"path": "app/src/main/java/org/adaway/AdAwayApplication.java",
"chars": 2169,
"preview": "package org.adaway;\n\nimport android.app.Application;\n\nimport org.adaway.helper.NotificationHelper;\nimport org.adaway.hel"
},
{
"path": "app/src/main/java/org/adaway/broadcast/BootReceiver.java",
"chars": 2421,
"preview": "/*\n * Copyright (C) 2011-2012 Dominik Schürmann <dominik@dominikschuermann.de>\n *\n * This file is part of AdAway.\n *\n * "
},
{
"path": "app/src/main/java/org/adaway/broadcast/Command.java",
"chars": 1408,
"preview": "package org.adaway.broadcast;\n\nimport android.content.Intent;\n\nimport timber.log.Timber;\n\n/**\n * This enumerate lists th"
},
{
"path": "app/src/main/java/org/adaway/broadcast/CommandReceiver.java",
"chars": 1890,
"preview": "package org.adaway.broadcast;\n\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android."
},
{
"path": "app/src/main/java/org/adaway/broadcast/UpdateReceiver.java",
"chars": 908,
"preview": "package org.adaway.broadcast;\n\nimport static android.content.Intent.ACTION_MY_PACKAGE_REPLACED;\n\nimport android.content."
},
{
"path": "app/src/main/java/org/adaway/db/AppDatabase.java",
"chars": 4866,
"preview": "package org.adaway.db;\n\nimport android.content.Context;\n\nimport androidx.annotation.NonNull;\nimport androidx.room.Databa"
},
{
"path": "app/src/main/java/org/adaway/db/Migrations.java",
"chars": 7182,
"preview": "package org.adaway.db;\n\nimport static org.adaway.db.entity.HostsSource.USER_SOURCE_ID;\nimport static org.adaway.db.entit"
},
{
"path": "app/src/main/java/org/adaway/db/converter/ListTypeConverter.java",
"chars": 646,
"preview": "package org.adaway.db.converter;\n\nimport androidx.room.TypeConverter;\n\nimport org.adaway.db.entity.ListType;\n\n/**\n * Thi"
},
{
"path": "app/src/main/java/org/adaway/db/converter/ZonedDateTimeConverter.java",
"chars": 860,
"preview": "package org.adaway.db.converter;\n\nimport androidx.room.TypeConverter;\n\nimport java.time.LocalDateTime;\nimport java.time."
},
{
"path": "app/src/main/java/org/adaway/db/dao/HostEntryDao.java",
"chars": 2650,
"preview": "package org.adaway.db.dao;\n\nimport androidx.annotation.Nullable;\nimport androidx.room.Dao;\nimport androidx.room.Insert;\n"
},
{
"path": "app/src/main/java/org/adaway/db/dao/HostListItemDao.java",
"chars": 2058,
"preview": "package org.adaway.db.dao;\n\nimport androidx.lifecycle.LiveData;\nimport androidx.paging.PagingSource;\nimport androidx.roo"
},
{
"path": "app/src/main/java/org/adaway/db/dao/HostsSourceDao.java",
"chars": 2886,
"preview": "package org.adaway.db.dao;\n\nimport androidx.lifecycle.LiveData;\nimport androidx.room.Dao;\nimport androidx.room.Delete;\ni"
},
{
"path": "app/src/main/java/org/adaway/db/entity/HostEntry.java",
"chars": 1021,
"preview": "package org.adaway.db.entity;\n\nimport androidx.annotation.NonNull;\nimport androidx.room.Entity;\nimport androidx.room.Ind"
},
{
"path": "app/src/main/java/org/adaway/db/entity/HostListItem.java",
"chars": 2890,
"preview": "package org.adaway.db.entity;\n\nimport androidx.annotation.NonNull;\nimport androidx.room.ColumnInfo;\nimport androidx.room"
},
{
"path": "app/src/main/java/org/adaway/db/entity/HostsSource.java",
"chars": 4905,
"preview": "package org.adaway.db.entity;\n\nimport android.webkit.URLUtil;\n\nimport androidx.annotation.NonNull;\nimport androidx.room."
},
{
"path": "app/src/main/java/org/adaway/db/entity/ListType.java",
"chars": 678,
"preview": "package org.adaway.db.entity;\n\n/**\n * This enumerate specifies the type of {@link HostListItem}.\n *\n * @author Bruce BUJ"
},
{
"path": "app/src/main/java/org/adaway/db/entity/SourceType.java",
"chars": 474,
"preview": "package org.adaway.db.entity;\n\n/**\n * This enumerate specifies the type of {@link HostsSource}.\n *\n * @author Bruce BUJO"
},
{
"path": "app/src/main/java/org/adaway/helper/NotificationHelper.java",
"chars": 7013,
"preview": "package org.adaway.helper;\n\nimport static android.app.PendingIntent.FLAG_IMMUTABLE;\nimport static android.app.PendingInt"
},
{
"path": "app/src/main/java/org/adaway/helper/PreferenceHelper.java",
"chars": 13865,
"preview": "/*\n * Copyright (C) 2011-2012 Dominik Schürmann <dominik@dominikschuermann.de>\n *\n * This file is part of AdAway.\n *\n * "
},
{
"path": "app/src/main/java/org/adaway/helper/ThemeHelper.java",
"chars": 637,
"preview": "package org.adaway.helper;\n\nimport android.content.Context;\n\nimport androidx.appcompat.app.AppCompatDelegate;\n\n/**\n * Th"
},
{
"path": "app/src/main/java/org/adaway/model/adblocking/AdBlockMethod.java",
"chars": 795,
"preview": "package org.adaway.model.adblocking;\n\nimport java.util.Arrays;\n\n/**\n * This enum represents the ad blocking methods.\n *\n"
},
{
"path": "app/src/main/java/org/adaway/model/adblocking/AdBlockModel.java",
"chars": 3535,
"preview": "package org.adaway.model.adblocking;\n\nimport android.content.Context;\n\nimport androidx.annotation.StringRes;\nimport andr"
},
{
"path": "app/src/main/java/org/adaway/model/adblocking/UndefinedBlockModel.java",
"chars": 1175,
"preview": "package org.adaway.model.adblocking;\n\nimport static org.adaway.model.adblocking.AdBlockMethod.UNDEFINED;\nimport static j"
},
{
"path": "app/src/main/java/org/adaway/model/backup/AppBackupAgent.java",
"chars": 2907,
"preview": "package org.adaway.model.backup;\n\nimport static org.adaway.util.Constants.PREFS_NAME;\n\nimport android.app.backup.BackupA"
},
{
"path": "app/src/main/java/org/adaway/model/backup/BackupExporter.java",
"chars": 5410,
"preview": "package org.adaway.model.backup;\n\nimport android.content.Context;\nimport android.net.Uri;\nimport android.widget.Toast;\n\n"
},
{
"path": "app/src/main/java/org/adaway/model/backup/BackupFormat.java",
"chars": 3328,
"preview": "package org.adaway.model.backup;\n\nimport org.adaway.db.entity.HostListItem;\nimport org.adaway.db.entity.HostsSource;\nimp"
},
{
"path": "app/src/main/java/org/adaway/model/backup/BackupImporter.java",
"chars": 5436,
"preview": "package org.adaway.model.backup;\n\nimport android.content.Context;\nimport android.net.Uri;\nimport android.widget.Toast;\n\n"
},
{
"path": "app/src/main/java/org/adaway/model/error/HostError.java",
"chars": 1529,
"preview": "package org.adaway.model.error;\n\nimport androidx.annotation.StringRes;\n\nimport org.adaway.R;\n\n/**\n * This enumeration re"
},
{
"path": "app/src/main/java/org/adaway/model/error/HostErrorException.java",
"chars": 999,
"preview": "package org.adaway.model.error;\n\n/**\n * This class in an {@link Exception} thrown on hosts error.\n *\n * @author Bruce B"
},
{
"path": "app/src/main/java/org/adaway/model/git/GistHostsSource.java",
"chars": 1823,
"preview": "package org.adaway.model.git;\n\nimport androidx.annotation.Nullable;\n\nimport org.json.JSONException;\nimport org.json.JSON"
},
{
"path": "app/src/main/java/org/adaway/model/git/GitHostsJsonApiSource.java",
"chars": 1700,
"preview": "package org.adaway.model.git;\n\nimport androidx.annotation.Nullable;\n\nimport org.json.JSONException;\n\nimport java.io.IOEx"
},
{
"path": "app/src/main/java/org/adaway/model/git/GitHostsSource.java",
"chars": 2086,
"preview": "package org.adaway.model.git;\n\nimport androidx.annotation.Nullable;\n\nimport java.net.MalformedURLException;\nimport java."
},
{
"path": "app/src/main/java/org/adaway/model/git/GitHubHostsSource.java",
"chars": 2695,
"preview": "package org.adaway.model.git;\n\nimport static java.util.stream.Collectors.joining;\n\nimport androidx.annotation.Nullable;\n"
},
{
"path": "app/src/main/java/org/adaway/model/git/GitLabHostsSource.java",
"chars": 2516,
"preview": "package org.adaway.model.git;\n\nimport static java.util.stream.Collectors.joining;\n\nimport androidx.annotation.Nullable;\n"
},
{
"path": "app/src/main/java/org/adaway/model/root/CommandException.java",
"chars": 966,
"preview": "/*\n * Copyright (C) 2011-2012 Dominik Schürmann <dominik@dominikschuermann.de>\n *\n * This file is part of AdAway.\n * \n *"
},
{
"path": "app/src/main/java/org/adaway/model/root/MountType.java",
"chars": 573,
"preview": "package org.adaway.model.root;\n\n/**\n * This class is an enum to define mount type.\n *\n * @author Bruce BUJON (bruce.bujo"
},
{
"path": "app/src/main/java/org/adaway/model/root/RootModel.java",
"chars": 11946,
"preview": "package org.adaway.model.root;\n\nimport static android.content.Context.MODE_PRIVATE;\nimport static org.adaway.db.entity.L"
},
{
"path": "app/src/main/java/org/adaway/model/root/ShellUtils.java",
"chars": 3298,
"preview": "package org.adaway.model.root;\n\nimport static com.topjohnwu.superuser.ShellUtils.escapedString;\n\nimport android.content."
},
{
"path": "app/src/main/java/org/adaway/model/root/TcpdumpUtils.java",
"chars": 6583,
"preview": "/*\n * Copyright (C) 2011-2012 Dominik Schürmann <dominik@dominikschuermann.de>\n *\n * This file is part of AdAway.\n *\n * "
},
{
"path": "app/src/main/java/org/adaway/model/root/package-info.java",
"chars": 358,
"preview": "/**\n * The root ad-blocker related implementations.\n *\n * It relies on libsu from John Wu and shell commands.\n * Support"
},
{
"path": "app/src/main/java/org/adaway/model/source/SourceLoader.java",
"chars": 10689,
"preview": "package org.adaway.model.source;\n\nimport static org.adaway.db.entity.ListType.ALLOWED;\nimport static org.adaway.db.entit"
},
{
"path": "app/src/main/java/org/adaway/model/source/SourceModel.java",
"chars": 19845,
"preview": "package org.adaway.model.source;\n\nimport static android.content.Context.CONNECTIVITY_SERVICE;\nimport static android.prov"
},
{
"path": "app/src/main/java/org/adaway/model/source/SourceUpdateService.java",
"chars": 6466,
"preview": "package org.adaway.model.source;\n\nimport android.content.Context;\n\nimport androidx.annotation.NonNull;\nimport androidx.w"
},
{
"path": "app/src/main/java/org/adaway/model/update/ApkDownloadReceiver.java",
"chars": 1663,
"preview": "package org.adaway.model.update;\n\nimport android.app.DownloadManager;\nimport android.content.BroadcastReceiver;\nimport a"
},
{
"path": "app/src/main/java/org/adaway/model/update/ApkUpdateService.java",
"chars": 3565,
"preview": "package org.adaway.model.update;\n\nimport android.content.Context;\n\nimport androidx.annotation.NonNull;\nimport androidx.w"
},
{
"path": "app/src/main/java/org/adaway/model/update/Manifest.java",
"chars": 794,
"preview": "package org.adaway.model.update;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\n/**\n * This class is repre"
},
{
"path": "app/src/main/java/org/adaway/model/update/UpdateModel.java",
"chars": 6448,
"preview": "package org.adaway.model.update;\n\nimport static android.app.DownloadManager.ACTION_DOWNLOAD_COMPLETE;\nimport static andr"
},
{
"path": "app/src/main/java/org/adaway/model/update/UpdateStore.java",
"chars": 3956,
"preview": "package org.adaway.model.update;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android"
},
{
"path": "app/src/main/java/org/adaway/model/vpn/VpnModel.java",
"chars": 3519,
"preview": "package org.adaway.model.vpn;\n\nimport static org.adaway.model.adblocking.AdBlockMethod.VPN;\nimport static org.adaway.mod"
},
{
"path": "app/src/main/java/org/adaway/tile/AdBlockingTileService.java",
"chars": 2282,
"preview": "package org.adaway.tile;\n\nimport android.service.quicksettings.Tile;\nimport android.service.quicksettings.TileService;\n\n"
},
{
"path": "app/src/main/java/org/adaway/ui/Animations.java",
"chars": 2768,
"preview": "package org.adaway.ui;\n\nimport android.animation.Animator;\nimport android.animation.AnimatorListenerAdapter;\nimport andr"
},
{
"path": "app/src/main/java/org/adaway/ui/adblocking/ApplyConfigurationSnackbar.java",
"chars": 6720,
"preview": "package org.adaway.ui.adblocking;\n\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.ImageV"
},
{
"path": "app/src/main/java/org/adaway/ui/adware/AdwareFragment.java",
"chars": 4704,
"preview": "/*\n * Copyright (C) 2011-2012 Dominik Schürmann <dominik@dominikschuermann.de>\n *\n * This file is part of AdAway.\n *\n * "
},
{
"path": "app/src/main/java/org/adaway/ui/adware/AdwareInstall.java",
"chars": 1330,
"preview": "package org.adaway.ui.adware;\n\nimport androidx.annotation.NonNull;\n\nimport java.util.HashMap;\n\n/**\n * This class is a PO"
},
{
"path": "app/src/main/java/org/adaway/ui/adware/AdwareLiveData.java",
"chars": 5623,
"preview": "package org.adaway.ui.adware;\n\nimport android.content.Context;\nimport android.content.pm.ApplicationInfo;\nimport android"
},
{
"path": "app/src/main/java/org/adaway/ui/adware/AdwareViewModel.java",
"chars": 838,
"preview": "package org.adaway.ui.adware;\n\nimport android.app.Application;\n\nimport androidx.lifecycle.AndroidViewModel;\nimport andro"
},
{
"path": "app/src/main/java/org/adaway/ui/dialog/AlertDialogValidator.java",
"chars": 1491,
"preview": "package org.adaway.ui.dialog;\n\n\nimport androidx.appcompat.app.AlertDialog;\nimport androidx.arch.core.util.Function;\n\nimp"
},
{
"path": "app/src/main/java/org/adaway/ui/dialog/MissingAppDialog.java",
"chars": 3848,
"preview": "/*\n * Copyright (C) 2011-2012 Dominik Schürmann <dominik@dominikschuermann.de>\n *\n * This file is part of AdAway.\n *\n * "
},
{
"path": "app/src/main/java/org/adaway/ui/help/HelpActivity.java",
"chars": 3635,
"preview": "/*\n * Copyright (C) 2011-2012 Dominik Schürmann <dominik@dominikschuermann.de>\n *\n * This file is part of AdAway.\n *\n * "
},
{
"path": "app/src/main/java/org/adaway/ui/help/HelpFragmentHtml.java",
"chars": 3306,
"preview": "/*\n * Copyright (C) 2011-2012 Dominik Schürmann <dominik@dominikschuermann.de>\n *\n * This file is part of AdAway.\n *\n * "
},
{
"path": "app/src/main/java/org/adaway/ui/home/HomeActivity.java",
"chars": 13959,
"preview": "package org.adaway.ui.home;\n\nimport static com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_HALF_EXPAND"
},
{
"path": "app/src/main/java/org/adaway/ui/home/HomeViewModel.java",
"chars": 5769,
"preview": "package org.adaway.ui.home;\n\nimport android.app.Application;\n\nimport androidx.annotation.NonNull;\nimport androidx.lifecy"
},
{
"path": "app/src/main/java/org/adaway/ui/hosts/HostsSourcesActivity.java",
"chars": 1136,
"preview": "package org.adaway.ui.hosts;\n\nimport android.os.Bundle;\n\nimport androidx.appcompat.app.ActionBar;\nimport androidx.appcom"
},
{
"path": "app/src/main/java/org/adaway/ui/hosts/HostsSourcesAdapter.java",
"chars": 8393,
"preview": "package org.adaway.ui.hosts;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.view."
},
{
"path": "app/src/main/java/org/adaway/ui/hosts/HostsSourcesFragment.java",
"chars": 4529,
"preview": "/*\n * Copyright (C) 2011-2012 Dominik Schürmann <dominik@dominikschuermann.de>\n *\n * This file is part of AdAway.\n *\n * "
},
{
"path": "app/src/main/java/org/adaway/ui/hosts/HostsSourcesViewCallback.java",
"chars": 723,
"preview": "package org.adaway.ui.hosts;\n\nimport android.content.Context;\n\nimport org.adaway.db.entity.HostsSource;\n\n/**\n * This cla"
},
{
"path": "app/src/main/java/org/adaway/ui/hosts/HostsSourcesViewModel.java",
"chars": 1180,
"preview": "package org.adaway.ui.hosts;\n\nimport android.app.Application;\n\nimport androidx.annotation.NonNull;\nimport androidx.lifec"
},
{
"path": "app/src/main/java/org/adaway/ui/lists/ListsActivity.java",
"chars": 6801,
"preview": "package org.adaway.ui.lists;\n\nimport static android.content.Intent.ACTION_SEARCH;\n\nimport android.app.SearchManager;\nimp"
},
{
"path": "app/src/main/java/org/adaway/ui/lists/ListsFilter.java",
"chars": 943,
"preview": "package org.adaway.ui.lists;\n\n/**\n * This class represents the filter to apply to host lists.\n *\n * @author Bruce BUJON "
},
{
"path": "app/src/main/java/org/adaway/ui/lists/ListsFragmentPagerAdapter.java",
"chars": 3552,
"preview": "package org.adaway.ui.lists;\n\nimport androidx.annotation.NonNull;\nimport androidx.fragment.app.Fragment;\nimport androidx"
},
{
"path": "app/src/main/java/org/adaway/ui/lists/ListsViewCallback.java",
"chars": 937,
"preview": "package org.adaway.ui.lists;\n\nimport android.view.View;\n\nimport org.adaway.db.entity.HostListItem;\nimport org.adaway.ui."
},
{
"path": "app/src/main/java/org/adaway/ui/lists/ListsViewModel.java",
"chars": 5805,
"preview": "package org.adaway.ui.lists;\n\nimport android.app.Application;\n\nimport androidx.annotation.NonNull;\nimport androidx.lifec"
},
{
"path": "app/src/main/java/org/adaway/ui/lists/type/AbstractListFragment.java",
"chars": 7226,
"preview": "package org.adaway.ui.lists.type;\n\nimport android.graphics.Color;\nimport android.os.Bundle;\nimport android.view.ActionMo"
},
{
"path": "app/src/main/java/org/adaway/ui/lists/type/AllowedHostsFragment.java",
"chars": 5221,
"preview": "/*\n * Copyright (C) 2011-2012 Dominik Schürmann <dominik@dominikschuermann.de>\n *\n * This file is part of AdAway.\n *\n * "
},
{
"path": "app/src/main/java/org/adaway/ui/lists/type/BlockedHostsFragment.java",
"chars": 5158,
"preview": "/*\n * Copyright (C) 2011-2012 Dominik Schürmann <dominik@dominikschuermann.de>\n *\n * This file is part of AdAway.\n *\n * "
},
{
"path": "app/src/main/java/org/adaway/ui/lists/type/ListsAdapter.java",
"chars": 4804,
"preview": "package org.adaway.ui.lists.type;\n\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.Vie"
},
{
"path": "app/src/main/java/org/adaway/ui/lists/type/RedirectedHostsFragment.java",
"chars": 6471,
"preview": "/*\n * Copyright (C) 2011-2012 Dominik Schürmann <dominik@dominikschuermann.de>\n *\n * This file is part of AdAway.\n *\n * "
},
{
"path": "app/src/main/java/org/adaway/ui/log/LogActivity.java",
"chars": 8753,
"preview": "/*\n * Copyright (C) 2011-2012 Dominik Schürmann <dominik@dominikschuermann.de>\n *\n * This file is part of AdAway.\n *\n * "
},
{
"path": "app/src/main/java/org/adaway/ui/log/LogAdapter.java",
"chars": 3893,
"preview": "package org.adaway.ui.log;\n\nimport static android.graphics.PorterDuff.Mode.MULTIPLY;\nimport static org.adaway.db.entity."
},
{
"path": "app/src/main/java/org/adaway/ui/log/LogEntry.java",
"chars": 1332,
"preview": "package org.adaway.ui.log;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport org.adaway."
},
{
"path": "app/src/main/java/org/adaway/ui/log/LogEntrySort.java",
"chars": 1721,
"preview": "package org.adaway.ui.log;\n\nimport org.adaway.R;\n\nimport java.util.Comparator;\n\n/**\n * This enumerate represents the kin"
},
{
"path": "app/src/main/java/org/adaway/ui/log/LogViewCallback.java",
"chars": 1195,
"preview": "package org.adaway.ui.log;\n\nimport androidx.annotation.NonNull;\n\nimport org.adaway.db.entity.ListType;\n\n/**\n * This clas"
},
{
"path": "app/src/main/java/org/adaway/ui/log/LogViewModel.java",
"chars": 5368,
"preview": "package org.adaway.ui.log;\n\nimport android.app.Application;\nimport android.widget.Toast;\n\nimport androidx.annotation.Non"
},
{
"path": "app/src/main/java/org/adaway/ui/prefs/PrefsActivity.java",
"chars": 3401,
"preview": "package org.adaway.ui.prefs;\n\nimport android.os.Bundle;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation."
},
{
"path": "app/src/main/java/org/adaway/ui/prefs/PrefsBackupRestoreFragment.java",
"chars": 4213,
"preview": "package org.adaway.ui.prefs;\n\nimport static android.content.Intent.CATEGORY_OPENABLE;\nimport static org.adaway.ui.prefs."
},
{
"path": "app/src/main/java/org/adaway/ui/prefs/PrefsMainFragment.java",
"chars": 3117,
"preview": "package org.adaway.ui.prefs;\n\nimport android.content.Context;\nimport android.os.Bundle;\n\nimport androidx.annotation.NonN"
},
{
"path": "app/src/main/java/org/adaway/ui/prefs/PrefsRootFragment.java",
"chars": 11597,
"preview": "package org.adaway.ui.prefs;\n\nimport static android.os.Build.VERSION.SDK_INT;\nimport static android.provider.Settings.AC"
},
{
"path": "app/src/main/java/org/adaway/ui/prefs/PrefsUpdateFragment.java",
"chars": 5543,
"preview": "package org.adaway.ui.prefs;\n\nimport static android.Manifest.permission.POST_NOTIFICATIONS;\nimport static android.conten"
},
{
"path": "app/src/main/java/org/adaway/ui/prefs/PrefsVpnFragment.java",
"chars": 2954,
"preview": "package org.adaway.ui.prefs;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.os.Bundle;\n\n"
},
{
"path": "app/src/main/java/org/adaway/ui/prefs/exclusion/ExcludedAppController.java",
"chars": 685,
"preview": "package org.adaway.ui.prefs.exclusion;\n\n/**\n * This fragment is the preferences fragment for VPN ad blocker.\n *\n * @auth"
},
{
"path": "app/src/main/java/org/adaway/ui/prefs/exclusion/PrefsVpnExcludedAppsActivity.java",
"chars": 4976,
"preview": "package org.adaway.ui.prefs.exclusion;\n\nimport android.content.pm.ApplicationInfo;\nimport android.content.pm.PackageMana"
},
{
"path": "app/src/main/java/org/adaway/ui/prefs/exclusion/UserApp.java",
"chars": 733,
"preview": "package org.adaway.ui.prefs.exclusion;\n\nimport android.graphics.drawable.Drawable;\n\n/**\n * This class represents an inst"
},
{
"path": "app/src/main/java/org/adaway/ui/prefs/exclusion/UserAppRecycleViewAdapter.java",
"chars": 2921,
"preview": "package org.adaway.ui.prefs.exclusion;\n\nimport android.view.LayoutInflater;\nimport android.view.ViewGroup;\n\nimport andro"
},
{
"path": "app/src/main/java/org/adaway/ui/source/SourceEditActivity.java",
"chars": 10015,
"preview": "package org.adaway.ui.source;\n\nimport android.content.Intent;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport a"
},
{
"path": "app/src/main/java/org/adaway/ui/support/SupportActivity.java",
"chars": 3154,
"preview": "package org.adaway.ui.support;\n\nimport static android.content.Intent.ACTION_VIEW;\nimport static android.net.Uri.parse;\n\n"
},
{
"path": "app/src/main/java/org/adaway/ui/update/CompleteDownloadStatus.java",
"chars": 493,
"preview": "package org.adaway.ui.update;\n\nimport android.content.Context;\n\nimport org.adaway.R;\n\n/**\n * This class represents the a"
},
{
"path": "app/src/main/java/org/adaway/ui/update/DownloadStatus.java",
"chars": 487,
"preview": "package org.adaway.ui.update;\n\nimport android.content.Context;\n\n/**\n * This class represents the application update down"
},
{
"path": "app/src/main/java/org/adaway/ui/update/PendingDownloadStatus.java",
"chars": 1254,
"preview": "package org.adaway.ui.update;\n\nimport android.content.Context;\nimport android.text.format.Formatter;\n\nimport org.adaway."
},
{
"path": "app/src/main/java/org/adaway/ui/update/UpdateActivity.java",
"chars": 3113,
"preview": "package org.adaway.ui.update;\n\nimport static android.view.View.GONE;\nimport static android.view.View.INVISIBLE;\nimport s"
},
{
"path": "app/src/main/java/org/adaway/ui/update/UpdateViewModel.java",
"chars": 4236,
"preview": "package org.adaway.ui.update;\n\nimport static android.app.DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR;\nimport static a"
},
{
"path": "app/src/main/java/org/adaway/ui/welcome/WelcomeActivity.java",
"chars": 5014,
"preview": "package org.adaway.ui.welcome;\n\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.widget.ImageView"
},
{
"path": "app/src/main/java/org/adaway/ui/welcome/WelcomeFragment.java",
"chars": 673,
"preview": "package org.adaway.ui.welcome;\n\nimport androidx.fragment.app.Fragment;\n\n/**\n * This class is the base fragment to all se"
},
{
"path": "app/src/main/java/org/adaway/ui/welcome/WelcomeMethodFragment.java",
"chars": 6105,
"preview": "package org.adaway.ui.welcome;\n\nimport static android.app.Activity.RESULT_OK;\nimport static android.provider.Settings.AC"
},
{
"path": "app/src/main/java/org/adaway/ui/welcome/WelcomeNavigable.java",
"chars": 246,
"preview": "package org.adaway.ui.welcome;\n\n/**\n * This interface represents step to navigate to during the setup.\n *\n * @author Bru"
},
{
"path": "app/src/main/java/org/adaway/ui/welcome/WelcomePagerAdapter.java",
"chars": 1390,
"preview": "package org.adaway.ui.welcome;\n\nimport androidx.annotation.NonNull;\nimport androidx.fragment.app.FragmentActivity;\nimpor"
},
{
"path": "app/src/main/java/org/adaway/ui/welcome/WelcomeSupportFragment.java",
"chars": 2612,
"preview": "package org.adaway.ui.welcome;\n\nimport static android.view.View.INVISIBLE;\nimport static android.view.View.VISIBLE;\nimpo"
},
{
"path": "app/src/main/java/org/adaway/ui/welcome/WelcomeSyncFragment.java",
"chars": 4543,
"preview": "package org.adaway.ui.welcome;\n\nimport static android.Manifest.permission.POST_NOTIFICATIONS;\nimport static android.cont"
},
{
"path": "app/src/main/java/org/adaway/util/AppExecutors.java",
"chars": 2564,
"preview": "/*\n * Copyright (C) 2017 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
},
{
"path": "app/src/main/java/org/adaway/util/Clipboard.java",
"chars": 1056,
"preview": "package org.adaway.util;\n\nimport static android.widget.Toast.LENGTH_SHORT;\n\nimport android.content.ClipData;\nimport andr"
},
{
"path": "app/src/main/java/org/adaway/util/Constants.java",
"chars": 1542,
"preview": "/*\n * Copyright (C) 2011-2012 Dominik Schürmann <dominik@dominikschuermann.de>\n *\n * This file is part of AdAway.\n *\n * "
},
{
"path": "app/src/main/java/org/adaway/util/RegexUtils.java",
"chars": 4482,
"preview": "/*\n * Copyright (C) 2011-2012 Dominik Schürmann <dominik@dominikschuermann.de>\n *\n * This file is part of AdAway.\n *\n * "
},
{
"path": "app/src/main/java/org/adaway/util/WebServerUtils.java",
"chars": 7198,
"preview": "/*\n * Copyright (C) 2011-2012 Dominik Schürmann <dominik@dominikschuermann.de>\n *\n * This file is part of AdAway.\n *\n * "
},
{
"path": "app/src/main/java/org/adaway/util/log/ApplicationLog.java",
"chars": 1163,
"preview": "package org.adaway.util.log;\n\nimport android.app.Application;\nimport android.content.Context;\nimport android.content.pm."
},
{
"path": "app/src/main/java/org/adaway/util/log/SentryLog.java",
"chars": 2394,
"preview": "package org.adaway.util.log;\n\nimport static io.sentry.SentryLevel.ERROR;\nimport static io.sentry.SentryLevel.INFO;\n\nimpo"
},
{
"path": "app/src/main/java/org/adaway/vpn/VpnService.java",
"chars": 14090,
"preview": "/*\n * Derived from dns66:\n * Copyright (C) 2016-2019 Julian Andres Klode <jak@jak-linux.org>\n *\n * Derived from AdBuster"
},
{
"path": "app/src/main/java/org/adaway/vpn/VpnServiceControls.java",
"chars": 3302,
"preview": "package org.adaway.vpn;\n\nimport static android.content.Context.CONNECTIVITY_SERVICE;\nimport static android.net.NetworkCa"
},
{
"path": "app/src/main/java/org/adaway/vpn/VpnServiceHeartbeat.java",
"chars": 3127,
"preview": "package org.adaway.vpn;\n\nimport static android.content.Context.ACTIVITY_SERVICE;\nimport static androidx.work.ExistingPer"
},
{
"path": "app/src/main/java/org/adaway/vpn/VpnStatus.java",
"chars": 1225,
"preview": "package org.adaway.vpn;\n\nimport androidx.annotation.StringRes;\n\nimport org.adaway.R;\n\nimport java.util.Arrays;\n\npublic e"
},
{
"path": "app/src/main/java/org/adaway/vpn/dns/DnsPacketProxy.java",
"chars": 11032,
"preview": "/*\n * Derived from dns66:\n * Copyright (C) 2016-2019 Julian Andres Klode <jak@jak-linux.org>\n *\n * Derived from AdBuster"
},
{
"path": "app/src/main/java/org/adaway/vpn/dns/DnsQuery.java",
"chars": 2879,
"preview": "package org.adaway.vpn.dns;\n\nimport static android.system.OsConstants.POLLIN;\n\nimport android.os.ParcelFileDescriptor;\ni"
},
{
"path": "app/src/main/java/org/adaway/vpn/dns/DnsQueryQueue.java",
"chars": 2981,
"preview": "package org.adaway.vpn.dns;\n\nimport android.system.StructPollfd;\n\nimport java.net.DatagramSocket;\nimport java.util.Itera"
},
{
"path": "app/src/main/java/org/adaway/vpn/dns/DnsServerMapper.java",
"chars": 13083,
"preview": "package org.adaway.vpn.dns;\n\nimport static android.content.Context.CONNECTIVITY_SERVICE;\nimport static android.net.Netwo"
},
{
"path": "app/src/main/java/org/adaway/vpn/dns/DohPacketProxy.java",
"chars": 12004,
"preview": "\npackage org.adaway.vpn.dns;\n\nimport android.content.Context;\n\nimport org.adaway.AdAwayApplication;\nimport org.adaway.db"
},
{
"path": "app/src/main/java/org/adaway/vpn/dns/Subnet.java",
"chars": 1828,
"preview": "package org.adaway.vpn.dns;\n\nimport static java.lang.Integer.parseInt;\nimport static java.util.Objects.requireNonNull;\n\n"
},
{
"path": "app/src/main/java/org/adaway/vpn/worker/VpnBuilder.java",
"chars": 5563,
"preview": "package org.adaway.vpn.worker;\n\nimport static android.app.PendingIntent.FLAG_CANCEL_CURRENT;\nimport static android.app.P"
},
{
"path": "app/src/main/java/org/adaway/vpn/worker/VpnConnectionMonitor.java",
"chars": 5070,
"preview": "package org.adaway.vpn.worker;\n\nimport static java.lang.Integer.parseInt;\nimport static java.util.Objects.requireNonNull"
},
{
"path": "app/src/main/java/org/adaway/vpn/worker/VpnConnectionThrottler.java",
"chars": 2483,
"preview": "package org.adaway.vpn.worker;\n\nimport static java.lang.Math.max;\nimport static java.lang.Math.min;\n\nimport timber.log.T"
},
{
"path": "app/src/main/java/org/adaway/vpn/worker/VpnNetworkException.java",
"chars": 239,
"preview": "package org.adaway.vpn.worker;\n\npublic class VpnNetworkException extends Exception {\n public VpnNetworkException(Stri"
},
{
"path": "app/src/main/java/org/adaway/vpn/worker/VpnWatchdog.java",
"chars": 5984,
"preview": "/*\n * Derived from dns66:\n * Copyright (C) 2016-2019 Julian Andres Klode <jak@jak-linux.org>\n *\n * Parsing code derived "
},
{
"path": "app/src/main/java/org/adaway/vpn/worker/VpnWorker.java",
"chars": 13179,
"preview": "/*\n * Derived from dns66:\n * Copyright (C) 2016-2019 Julian Andres Klode <jak@jak-linux.org>\n *\n * Derived from AdBuster"
},
{
"path": "app/src/main/res/animator/fragment_close_enter.xml",
"chars": 1698,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n Copyright 2020 The Android Open Source Project\n\n Licensed under the Apache"
},
{
"path": "app/src/main/res/animator/fragment_close_exit.xml",
"chars": 1698,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n Copyright 2020 The Android Open Source Project\n\n Licensed under the Apache"
},
{
"path": "app/src/main/res/animator/fragment_open_enter.xml",
"chars": 1701,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n Copyright 2020 The Android Open Source Project\n\n Licensed under the Apache"
},
{
"path": "app/src/main/res/animator/fragment_open_exit.xml",
"chars": 1700,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n Copyright 2020 The Android Open Source Project\n\n Licensed under the Apache"
},
{
"path": "app/src/main/res/drawable/baseline_block_24.xml",
"chars": 598,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\""
},
{
"path": "app/src/main/res/drawable/baseline_check_24.xml",
"chars": 399,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\""
},
{
"path": "app/src/main/res/drawable/baseline_clear_all_24.xml",
"chars": 406,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\""
},
{
"path": "app/src/main/res/drawable/baseline_compare_arrows_24.xml",
"chars": 439,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\""
},
{
"path": "app/src/main/res/drawable/baseline_edit_24.xml",
"chars": 496,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/drawable/baseline_favorite_24.xml",
"chars": 509,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/drawable/baseline_search_24.xml",
"chars": 597,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\""
},
{
"path": "app/src/main/res/drawable/baseline_sort_by_alpha_24.xml",
"chars": 602,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\""
},
{
"path": "app/src/main/res/drawable/dot.xml",
"chars": 151,
"preview": "<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:shape=\"oval\">\n <solid android:color=\"@a"
},
{
"path": "app/src/main/res/drawable/dot_outline.xml",
"chars": 188,
"preview": "<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:shape=\"oval\">\n <stroke\n android:"
},
{
"path": "app/src/main/res/drawable/ic_add_black_24px.xml",
"chars": 323,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\""
},
{
"path": "app/src/main/res/drawable/ic_add_circle_outline_24dp.xml",
"chars": 505,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/drawable/ic_brightness_medium_24dp.xml",
"chars": 478,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/drawable/ic_bug_report_24dp.xml",
"chars": 776,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/drawable/ic_cloud_off_24dp.xml",
"chars": 726,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/drawable/ic_collections_bookmark_24dp.xml",
"chars": 500,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/drawable/ic_error_outline_24dp.xml",
"chars": 508,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/drawable/ic_get_app_24dp.xml",
"chars": 372,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/drawable/ic_github_24dp.xml",
"chars": 1121,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:wi"
},
{
"path": "app/src/main/res/drawable/ic_github_32dp.xml",
"chars": 1099,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:wi"
},
{
"path": "app/src/main/res/drawable/ic_help_24dp.xml",
"chars": 602,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/drawable/ic_ipv6_24dp.xml",
"chars": 1095,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/drawable/ic_language_24dp.xml",
"chars": 1270,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
}
]
// ... and 2173 more files (download for full content)
About this extraction
This page contains the full source code of the AdAway/AdAway GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2373 files (10.6 MB), approximately 2.9M tokens, and a symbol index with 6990 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.