├── settings.gradle ├── app ├── .gitignore ├── src │ └── main │ │ ├── ic_launcher-web.png │ │ ├── res │ │ ├── drawable-hdpi │ │ │ ├── overflow.png │ │ │ ├── ic_home_black_24dp.png │ │ │ ├── ic_lock_black_24dp.png │ │ │ ├── ic_question_answer.png │ │ │ ├── ic_sort_white_24dp.png │ │ │ ├── ic_delete_black_24dp.png │ │ │ ├── ic_check_box_black_24dp.png │ │ │ ├── ic_settings_white_24dp.png │ │ │ ├── ic_visibility_off_black_24dp.png │ │ │ ├── ic_signal_cellular_no_sim_black_24dp.png │ │ │ └── ic_check_box_outline_blank_black_24dp.png │ │ ├── drawable-mdpi │ │ │ ├── overflow.png │ │ │ ├── ic_home_black_24dp.png │ │ │ ├── ic_lock_black_24dp.png │ │ │ ├── ic_question_answer.png │ │ │ ├── ic_sort_white_24dp.png │ │ │ ├── ic_delete_black_24dp.png │ │ │ ├── ic_check_box_black_24dp.png │ │ │ ├── ic_settings_white_24dp.png │ │ │ ├── ic_visibility_off_black_24dp.png │ │ │ ├── ic_signal_cellular_no_sim_black_24dp.png │ │ │ └── ic_check_box_outline_blank_black_24dp.png │ │ ├── drawable-xhdpi │ │ │ ├── overflow.png │ │ │ ├── ic_delete_black_24dp.png │ │ │ ├── ic_home_black_24dp.png │ │ │ ├── ic_lock_black_24dp.png │ │ │ ├── ic_question_answer.png │ │ │ ├── ic_sort_white_24dp.png │ │ │ ├── ic_settings_white_24dp.png │ │ │ ├── ic_check_box_black_24dp.png │ │ │ ├── ic_visibility_off_black_24dp.png │ │ │ ├── ic_check_box_outline_blank_black_24dp.png │ │ │ └── ic_signal_cellular_no_sim_black_24dp.png │ │ ├── drawable-xxhdpi │ │ │ ├── overflow.png │ │ │ ├── ic_home_black_24dp.png │ │ │ ├── ic_lock_black_24dp.png │ │ │ ├── ic_question_answer.png │ │ │ ├── ic_sort_white_24dp.png │ │ │ ├── ic_delete_black_24dp.png │ │ │ ├── ic_check_box_black_24dp.png │ │ │ ├── ic_settings_white_24dp.png │ │ │ ├── ic_visibility_off_black_24dp.png │ │ │ ├── ic_signal_cellular_no_sim_black_24dp.png │ │ │ └── ic_check_box_outline_blank_black_24dp.png │ │ ├── drawable-xxxhdpi │ │ │ ├── overflow.png │ │ │ ├── ic_home_black_24dp.png │ │ │ ├── ic_lock_black_24dp.png │ │ │ ├── ic_question_answer.png │ │ │ ├── ic_sort_white_24dp.png │ │ │ ├── ic_delete_black_24dp.png │ │ │ ├── ic_check_box_black_24dp.png │ │ │ ├── ic_settings_white_24dp.png │ │ │ ├── ic_visibility_off_black_24dp.png │ │ │ ├── ic_check_box_outline_blank_black_24dp.png │ │ │ └── ic_signal_cellular_no_sim_black_24dp.png │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ ├── values │ │ │ ├── ids.xml │ │ │ ├── colors.xml │ │ │ ├── keys.xml │ │ │ ├── dimens.xml │ │ │ └── styles.xml │ │ ├── xml │ │ │ ├── enterprise_device_admin.xml │ │ │ └── bottombar_tabs.xml │ │ ├── menu │ │ │ ├── search_menu.xml │ │ │ ├── profiles_menu.xml │ │ │ ├── settings.xml │ │ │ ├── package_disabler_menu.xml │ │ │ └── mobile_restricter_menu.xml │ │ ├── animator │ │ │ ├── enter_from_left.xml │ │ │ ├── enter_from_right.xml │ │ │ ├── exit_to_left.xml │ │ │ └── exit_to_right.xml │ │ ├── drawable │ │ │ └── checkbox.xml │ │ └── layout │ │ │ ├── checkbox.xml │ │ │ ├── fragment_adhell_not_supported.xml │ │ │ ├── dialog_fragment_adhell_not_supported.xml │ │ │ ├── dialog_fragment_no_internet_connection.xml │ │ │ ├── fragment_package_disabler.xml │ │ │ ├── fragment_adhell_permission_info.xml │ │ │ ├── fragment_permission_in_apps.xml │ │ │ ├── fragment_show_blocked_urls.xml │ │ │ ├── fragment_app_list.xml │ │ │ ├── fragment_mobile_restricter.xml │ │ │ ├── fragment_app_support.xml │ │ │ ├── fragment_adhell_reports.xml │ │ │ ├── item_permission_info.xml │ │ │ ├── activity_main.xml │ │ │ ├── fragment_blocker.xml │ │ │ ├── fragment_blocked_url_settings.xml │ │ │ ├── fragment_white_list.xml │ │ │ ├── fragment_manual_url_block.xml │ │ │ ├── dialog_fragment_turn_on_adhell.xml │ │ │ ├── fragment_custom_url_provider.xml │ │ │ ├── fragment_app_settings.xml │ │ │ ├── item_blocked_url_info.xml │ │ │ ├── dialog_dns.xml │ │ │ ├── item_block_url_provider.xml │ │ │ ├── item_app_list_view.xml │ │ │ ├── item_permission_in_app.xml │ │ │ ├── item_disable_app_list_view.xml │ │ │ └── card_profile.xml │ │ ├── java │ │ └── com │ │ │ └── fusionjack │ │ │ └── adhell3 │ │ │ ├── db │ │ │ ├── repository │ │ │ │ ├── AppInfoRepository.java │ │ │ │ ├── BlockUrlRepository.java │ │ │ │ └── BlockUrlProviderRepository.java │ │ │ ├── DateConverter.java │ │ │ ├── migration │ │ │ │ ├── Migration_18_19.java │ │ │ │ ├── Migration_17_18.java │ │ │ │ ├── Migration_15_16.java │ │ │ │ ├── Migration_14_15.java │ │ │ │ ├── Migration_20_21.java │ │ │ │ ├── Migration_22_23.java │ │ │ │ ├── Migration_19_20.java │ │ │ │ ├── Migration_21_22.java │ │ │ │ └── Migration_16_17.java │ │ │ ├── dao │ │ │ │ ├── PolicyPackageDao.java │ │ │ │ ├── AppPermissionDao.java │ │ │ │ ├── BlockUrlDao.java │ │ │ │ ├── FirewallWhitelistedPackageDao.java │ │ │ │ ├── RestrictedPackageDao.java │ │ │ │ ├── DisabledPackageDao.java │ │ │ │ ├── ReportBlockedUrlDao.java │ │ │ │ ├── WhiteUrlDao.java │ │ │ │ ├── UserBlockUrlDao.java │ │ │ │ ├── BlockUrlProviderDao.java │ │ │ │ └── AppInfoDao.java │ │ │ └── entity │ │ │ │ ├── DisabledPackage.java │ │ │ │ ├── RestrictedPackage.java │ │ │ │ ├── WhiteUrl.java │ │ │ │ ├── UserBlockUrl.java │ │ │ │ ├── BlockUrl.java │ │ │ │ ├── AppInfo.java │ │ │ │ ├── FirewallWhitelistedPackage.java │ │ │ │ ├── ReportBlockedUrl.java │ │ │ │ ├── AppPermission.java │ │ │ │ ├── BlockUrlProvider.java │ │ │ │ └── PolicyPackage.java │ │ │ ├── net │ │ │ ├── AdhellInfoResponse.java │ │ │ └── CustomResponse.java │ │ │ ├── receiver │ │ │ ├── CustomDeviceAdminReceiver.java │ │ │ └── ApplicationsListChangedReceiver.java │ │ │ ├── dagger │ │ │ ├── scope │ │ │ │ └── AdhellApplicationScope.java │ │ │ ├── module │ │ │ │ ├── AdminModule.java │ │ │ │ ├── NetworkModule.java │ │ │ │ ├── AppModule.java │ │ │ │ └── EnterpriseModule.java │ │ │ └── component │ │ │ │ └── AppComponent.java │ │ │ ├── model │ │ │ ├── AndroidDeviceForm.java │ │ │ └── BillingModel.java │ │ │ ├── blocker │ │ │ ├── ContentBlocker.java │ │ │ └── ContentBlocker57.java │ │ │ ├── viewmodel │ │ │ ├── AppPermissionsViewModel.java │ │ │ ├── ProfileViewModel.java │ │ │ ├── SharedAppPermissionViewModel.java │ │ │ ├── BlockUrlProvidersViewModel.java │ │ │ └── AdhellWhitelistAppsViewModel.java │ │ │ ├── fragments │ │ │ ├── AdhellNotSupportedFragment.java │ │ │ ├── AppFlag.java │ │ │ ├── AppListFragment.java │ │ │ ├── AdhellPermissionInAppsFragment.java │ │ │ ├── BlockedUrlSettingFragment.java │ │ │ ├── LoadAppAsyncTask.java │ │ │ ├── WhitelistFragment.java │ │ │ └── BlockCustomUrlFragment.java │ │ │ ├── App.java │ │ │ ├── dialogfragment │ │ │ ├── AdhellNotSupportedDialogFragment.java │ │ │ ├── NoInternetConnectionDialogFragment.java │ │ │ └── DnsChangeDialogFragment.java │ │ │ ├── utils │ │ │ ├── BlockUrlPatternsMatch.java │ │ │ ├── LogUtils.java │ │ │ └── AppsListDBInitializer.java │ │ │ └── adapter │ │ │ ├── AdhellPermissionInfoAdapter.java │ │ │ ├── ReportBlockedUrlAdapter.java │ │ │ ├── AppInfoAdapter.java │ │ │ ├── ItemClickSupport.java │ │ │ └── ProfileAdapter.java │ │ └── AndroidManifest.xml ├── proguard-rules.pro └── build.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .gitignore ├── circle.yml ├── hosts └── README.md ├── gradle.properties ├── README.md └── gradlew.bat /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | gradle.properties 3 | fabric.properties 4 | -------------------------------------------------------------------------------- /app/src/main/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/ic_launcher-web.png -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/overflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-hdpi/overflow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/overflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-mdpi/overflow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/overflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xhdpi/overflow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/overflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxhdpi/overflow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/overflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxxhdpi/overflow.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_home_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-hdpi/ic_home_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_lock_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-hdpi/ic_lock_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_question_answer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-hdpi/ic_question_answer.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_sort_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-hdpi/ic_sort_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_home_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-mdpi/ic_home_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_lock_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-mdpi/ic_lock_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_question_answer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-mdpi/ic_question_answer.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_sort_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-mdpi/ic_sort_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/values/ids.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_delete_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-hdpi/ic_delete_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_delete_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-mdpi/ic_delete_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_delete_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xhdpi/ic_delete_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_home_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xhdpi/ic_home_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_lock_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xhdpi/ic_lock_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_question_answer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xhdpi/ic_question_answer.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_sort_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xhdpi/ic_sort_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_home_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxhdpi/ic_home_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_lock_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxhdpi/ic_lock_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_question_answer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxhdpi/ic_question_answer.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_sort_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxhdpi/ic_sort_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_home_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxxhdpi/ic_home_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_lock_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxxhdpi/ic_lock_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_question_answer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxxhdpi/ic_question_answer.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_sort_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxxhdpi/ic_sort_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_check_box_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-hdpi/ic_check_box_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_settings_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-hdpi/ic_settings_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_check_box_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-mdpi/ic_check_box_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_settings_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-mdpi/ic_settings_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_settings_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xhdpi/ic_settings_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_delete_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxhdpi/ic_delete_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_delete_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxxhdpi/ic_delete_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/repository/AppInfoRepository.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.repository; 2 | 3 | public class AppInfoRepository 4 | {} -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_check_box_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xhdpi/ic_check_box_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_check_box_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxhdpi/ic_check_box_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_settings_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxhdpi/ic_settings_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_check_box_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxxhdpi/ic_check_box_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_settings_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxxhdpi/ic_settings_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_visibility_off_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-hdpi/ic_visibility_off_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_visibility_off_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-mdpi/ic_visibility_off_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/xml/enterprise_device_admin.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/repository/BlockUrlRepository.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.repository; 2 | 3 | 4 | public class BlockUrlRepository { 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_visibility_off_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xhdpi/ic_visibility_off_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_visibility_off_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxhdpi/ic_visibility_off_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_visibility_off_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxxhdpi/ic_visibility_off_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/repository/BlockUrlProviderRepository.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.repository; 2 | 3 | public class BlockUrlProviderRepository { 4 | } 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_signal_cellular_no_sim_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-hdpi/ic_signal_cellular_no_sim_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_signal_cellular_no_sim_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-mdpi/ic_signal_cellular_no_sim_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_check_box_outline_blank_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-hdpi/ic_check_box_outline_blank_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_check_box_outline_blank_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-mdpi/ic_check_box_outline_blank_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_check_box_outline_blank_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xhdpi/ic_check_box_outline_blank_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_signal_cellular_no_sim_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xhdpi/ic_signal_cellular_no_sim_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_signal_cellular_no_sim_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxhdpi/ic_signal_cellular_no_sim_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_check_box_outline_blank_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxhdpi/ic_check_box_outline_blank_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_check_box_outline_blank_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxxhdpi/ic_check_box_outline_blank_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_signal_cellular_no_sim_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neberej/Adhell3/HEAD/app/src/main/res/drawable-xxxhdpi/ic_signal_cellular_no_sim_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/net/AdhellInfoResponse.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.net; 2 | 3 | public class AdhellInfoResponse { 4 | public String appDownloadLink; 5 | public Integer appVersion; 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/receiver/CustomDeviceAdminReceiver.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.receiver; 2 | 3 | import android.app.admin.DeviceAdminReceiver; 4 | 5 | public class CustomDeviceAdminReceiver extends DeviceAdminReceiver { 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3f51b5 4 | #303F9F 5 | #FF4081 6 | 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .idea 10 | *.apk 11 | fabric.properties 12 | app/release 13 | /app/libs/edm.jar 14 | /app/libs/license.jar 15 | /app/libs/rc.jar 16 | -------------------------------------------------------------------------------- /app/src/main/res/values/keys.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | currentFragmentName 6 | 7 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue Mar 27 22:35:41 CEST 2018 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/dagger/scope/AdhellApplicationScope.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.dagger.scope; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | import javax.inject.Scope; 7 | 8 | @Scope 9 | @Retention(RetentionPolicy.CLASS) 10 | public @interface AdhellApplicationScope { 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/res/menu/search_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 0dp 4 | 0dp 5 | 16dp 6 | 15sp 7 | 12sp 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/animator/enter_from_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/animator/enter_from_right.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/animator/exit_to_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/animator/exit_to_right.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/model/AndroidDeviceForm.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.model; 2 | 3 | 4 | public class AndroidDeviceForm { 5 | public String deviceModel; 6 | public String deviceManufacturer; 7 | public String releaseVersion; 8 | public Integer sdkVersion; 9 | public String knoxStandardSdkVersion; 10 | public Integer adhellIntVersion; 11 | public String appId; 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/res/menu/profiles_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/net/CustomResponse.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.net; 2 | 3 | 4 | public class CustomResponse { 5 | public int error; 6 | public String message; 7 | public T data; 8 | 9 | public CustomResponse() { 10 | } 11 | 12 | public CustomResponse(int error, String message, T data) { 13 | this.error = error; 14 | this.message = message; 15 | this.data = data; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/checkbox.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 8 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/checkbox.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 8 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_adhell_not_supported.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_fragment_adhell_not_supported.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_fragment_no_internet_connection.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /circle.yml: -------------------------------------------------------------------------------- 1 | general: 2 | artifacts: 3 | - app/build/outputs/apk/ 4 | 5 | dependencies: 6 | pre: 7 | - echo y | android update sdk --no-ui --all --filter "tools,platform-tools,android-23" 8 | - echo y | android update sdk --no-ui --all --filter "build-tools-23.0.3" 9 | - echo y | android update sdk --no-ui --all --filter "extra-android-m2repository" 10 | - ANDROID_HOME=/usr/local/android-sdk-linux ./gradlew dependencies 11 | 12 | test: 13 | override: 14 | - ./gradlew assembleDebug -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/DateConverter.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db; 2 | 3 | import android.arch.persistence.room.TypeConverter; 4 | 5 | import java.util.Date; 6 | 7 | public class DateConverter { 8 | @TypeConverter 9 | public Date fromTimestamp(Long value) { 10 | return value == null ? null : new Date(value); 11 | } 12 | 13 | @TypeConverter 14 | public Long dateToTimestamp(Date date) { 15 | return date == null ? null : date.getTime(); 16 | } 17 | } -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/blocker/ContentBlocker.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.blocker; 2 | 3 | public interface ContentBlocker { 4 | 5 | boolean enableBlocker(); 6 | boolean disableBlocker(); 7 | boolean isEnabled(); 8 | 9 | void processCustomRules() throws Exception; 10 | void processMobileRestrictedApps() throws Exception; 11 | void processWhitelistedApps() throws Exception; 12 | void processWhitelistedDomains() throws Exception; 13 | void processBlockedDomains() throws Exception; 14 | } 15 | -------------------------------------------------------------------------------- /hosts/README.md: -------------------------------------------------------------------------------- 1 | ### A self-baked host file to be used only for Samsung Knox Firewall ### 2 | Generated by mmotti's script. 3 | 4 | Using following spices with enhanced wildcards: 5 | * http://someonewhocares.org/hosts/hosts/ 6 | * https://pgl.yoyo.org/as/serverlist.php?showintro=0;hostformat=hosts 7 | * https://raw.githubusercontent.com/bjornstar/hosts/master/hosts 8 | * https://raw.githubusercontent.com/mmotti/mmotti-host-file/master/resources/manual_additions.txt 9 | * https://raw.githubusercontent.com/StevenBlack/hosts/master/data/StevenBlack/hosts 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_package_disabler.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/migration/Migration_18_19.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.migration; 2 | 3 | import android.arch.persistence.db.SupportSQLiteDatabase; 4 | import android.arch.persistence.room.migration.Migration; 5 | 6 | public class Migration_18_19 extends Migration { 7 | 8 | public Migration_18_19(int startVersion, int endVersion) { 9 | super(startVersion, endVersion); 10 | } 11 | 12 | @Override 13 | public void migrate(SupportSQLiteDatabase database) { 14 | database.execSQL("ALTER TABLE PolicyPackage ADD COLUMN description TEXT"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/migration/Migration_17_18.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.migration; 2 | 3 | import android.arch.persistence.db.SupportSQLiteDatabase; 4 | import android.arch.persistence.room.migration.Migration; 5 | 6 | public class Migration_17_18 extends Migration { 7 | 8 | public Migration_17_18(int startVersion, int endVersion) { 9 | super(startVersion, endVersion); 10 | } 11 | 12 | @Override 13 | public void migrate(SupportSQLiteDatabase database) { 14 | database.execSQL("ALTER TABLE PolicyPackage ADD COLUMN active INTEGER DEFAULT 1"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/viewmodel/AppPermissionsViewModel.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.viewmodel; 2 | 3 | import android.app.Application; 4 | import android.arch.lifecycle.AndroidViewModel; 5 | 6 | import com.fusionjack.adhell3.db.AppDatabase; 7 | 8 | import java.util.List; 9 | 10 | public class AppPermissionsViewModel extends AndroidViewModel { 11 | private AppDatabase mAppDatabase; 12 | private List permissions; 13 | 14 | public AppPermissionsViewModel(Application application) { 15 | super(application); 16 | mAppDatabase = AppDatabase.getAppDatabase(application); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/migration/Migration_15_16.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.migration; 2 | 3 | import android.arch.persistence.db.SupportSQLiteDatabase; 4 | import android.arch.persistence.room.migration.Migration; 5 | 6 | public class Migration_15_16 extends Migration { 7 | 8 | public Migration_15_16(int startVersion, int endVersion) { 9 | super(startVersion, endVersion); 10 | } 11 | 12 | @Override 13 | public void migrate(SupportSQLiteDatabase supportSQLiteDatabase) { 14 | supportSQLiteDatabase.execSQL("ALTER TABLE AppInfo ADD COLUMN disabled INTEGER DEFAULT 0"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/migration/Migration_14_15.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.migration; 2 | 3 | import android.arch.persistence.db.SupportSQLiteDatabase; 4 | import android.arch.persistence.room.migration.Migration; 5 | 6 | 7 | public class Migration_14_15 extends Migration { 8 | 9 | public Migration_14_15(int startVersion, int endVersion) { 10 | super(startVersion, endVersion); 11 | } 12 | 13 | @Override 14 | public void migrate(SupportSQLiteDatabase supportSQLiteDatabase) { 15 | supportSQLiteDatabase.execSQL("ALTER TABLE AppInfo ADD COLUMN adhellWhitelisted INTEGER DEFAULT 0"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_adhell_permission_info.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/xml/bottombar_tabs.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 10 | 14 | 18 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /home/raiym/hdd/Android/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_permission_in_apps.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/fragments/AdhellNotSupportedFragment.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.fragments; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.app.Fragment; 5 | import android.view.LayoutInflater; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | 9 | import com.fusionjack.adhell3.R; 10 | 11 | public class AdhellNotSupportedFragment extends Fragment { 12 | private static final String TAG = AdhellNotSupportedFragment.class.getCanonicalName(); 13 | 14 | @Override 15 | public View onCreateView(LayoutInflater inflater, ViewGroup container, 16 | Bundle savedInstanceState) { 17 | View view = inflater.inflate(R.layout.fragment_adhell_not_supported, container, false); 18 | return view; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/viewmodel/ProfileViewModel.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.viewmodel; 2 | 3 | 4 | import android.arch.lifecycle.LiveData; 5 | import android.arch.lifecycle.MutableLiveData; 6 | import android.arch.lifecycle.ViewModel; 7 | 8 | import com.fusionjack.adhell3.db.entity.PolicyPackage; 9 | 10 | public class ProfileViewModel extends ViewModel { 11 | private MutableLiveData policyPackagesLiveData; 12 | 13 | public LiveData getPolicyPackagesLiveData() { 14 | if (policyPackagesLiveData == null) { 15 | policyPackagesLiveData = new MutableLiveData<>(); 16 | loadPolicyPackages(); 17 | } 18 | return policyPackagesLiveData; 19 | } 20 | 21 | private void loadPolicyPackages() { 22 | 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/model/BillingModel.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.model; 2 | 3 | import android.arch.lifecycle.MutableLiveData; 4 | 5 | public class BillingModel { 6 | public MutableLiveData isSupportedLiveData; 7 | public MutableLiveData isPremiumLiveData; 8 | public MutableLiveData priceLiveData; 9 | public MutableLiveData threeMonthPriceLiveData; 10 | 11 | public BillingModel() { 12 | isSupportedLiveData = new MutableLiveData<>(); 13 | isPremiumLiveData = new MutableLiveData<>(); 14 | priceLiveData = new MutableLiveData<>(); 15 | threeMonthPriceLiveData = new MutableLiveData<>(); 16 | isSupportedLiveData.postValue(false); 17 | isPremiumLiveData.postValue(false); 18 | priceLiveData.postValue(""); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_show_blocked_urls.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 15 | 16 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true -------------------------------------------------------------------------------- /app/src/main/res/menu/settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | 15 | 16 | 19 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/dao/PolicyPackageDao.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.dao; 2 | 3 | import android.arch.lifecycle.LiveData; 4 | import android.arch.persistence.room.Dao; 5 | import android.arch.persistence.room.Insert; 6 | import android.arch.persistence.room.OnConflictStrategy; 7 | import android.arch.persistence.room.Query; 8 | import android.arch.persistence.room.TypeConverters; 9 | 10 | import com.fusionjack.adhell3.db.DateConverter; 11 | import com.fusionjack.adhell3.db.entity.PolicyPackage; 12 | 13 | @Dao 14 | @TypeConverters(DateConverter.class) 15 | public interface PolicyPackageDao { 16 | 17 | @Query("SELECT * FROM PolicyPackage") 18 | LiveData getAllLiveData(); 19 | 20 | @Query("SELECT * FROM PolicyPackage WHERE id = :id") 21 | PolicyPackage getPolicyById(String id); 22 | 23 | @Insert(onConflict = OnConflictStrategy.REPLACE) 24 | void insert(PolicyPackage policyPackage); 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/migration/Migration_20_21.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.migration; 2 | 3 | import android.arch.persistence.db.SupportSQLiteDatabase; 4 | import android.arch.persistence.room.migration.Migration; 5 | 6 | public class Migration_20_21 extends Migration { 7 | 8 | public Migration_20_21(int startVersion, int endVersion) { 9 | super(startVersion, endVersion); 10 | } 11 | 12 | @Override 13 | public void migrate(SupportSQLiteDatabase database) { 14 | database.execSQL("ALTER TABLE BlockUrlProviders ADD COLUMN policyPackageId TEXT DEFAULT 'default-policy' REFERENCES PolicyPackage(id)"); 15 | database.execSQL("ALTER TABLE UserBlockUrl ADD COLUMN policyPackageId TEXT DEFAULT 'default-policy' REFERENCES PolicyPackage(id)"); 16 | database.execSQL("ALTER TABLE WhiteUrl ADD COLUMN policyPackageId TEXT DEFAULT 'default-policy' REFERENCES PolicyPackage(id)"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/entity/DisabledPackage.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.entity; 2 | 3 | import android.arch.persistence.room.ColumnInfo; 4 | import android.arch.persistence.room.Entity; 5 | import android.arch.persistence.room.ForeignKey; 6 | import android.arch.persistence.room.Index; 7 | import android.arch.persistence.room.PrimaryKey; 8 | 9 | @Entity( 10 | tableName = "DisabledPackage", 11 | indices = {@Index("policyPackageId")}, 12 | foreignKeys = @ForeignKey(entity = PolicyPackage.class, 13 | parentColumns = "id", 14 | childColumns = "policyPackageId") 15 | ) 16 | public class DisabledPackage { 17 | 18 | @PrimaryKey(autoGenerate = true) 19 | @ColumnInfo(name = "id") 20 | public long id; 21 | 22 | @ColumnInfo(name = "packageName") 23 | public String packageName; 24 | 25 | @ColumnInfo(name = "policyPackageId") 26 | public String policyPackageId; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/entity/RestrictedPackage.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.entity; 2 | 3 | import android.arch.persistence.room.ColumnInfo; 4 | import android.arch.persistence.room.Entity; 5 | import android.arch.persistence.room.ForeignKey; 6 | import android.arch.persistence.room.Index; 7 | import android.arch.persistence.room.PrimaryKey; 8 | 9 | @Entity( 10 | tableName = "RestrictedPackage", 11 | indices = {@Index("policyPackageId")}, 12 | foreignKeys = @ForeignKey(entity = PolicyPackage.class, 13 | parentColumns = "id", 14 | childColumns = "policyPackageId") 15 | ) 16 | public class RestrictedPackage { 17 | 18 | @PrimaryKey(autoGenerate = true) 19 | @ColumnInfo(name = "id") 20 | public long id; 21 | 22 | @ColumnInfo(name = "packageName") 23 | public String packageName; 24 | 25 | @ColumnInfo(name = "policyPackageId") 26 | public String policyPackageId; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/dagger/module/AdminModule.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.dagger.module; 2 | 3 | import android.app.admin.DevicePolicyManager; 4 | import android.content.ComponentName; 5 | import android.content.Context; 6 | 7 | import com.fusionjack.adhell3.dagger.scope.AdhellApplicationScope; 8 | import com.fusionjack.adhell3.receiver.CustomDeviceAdminReceiver; 9 | 10 | import dagger.Module; 11 | import dagger.Provides; 12 | 13 | @Module(includes = {AppModule.class}) 14 | public class AdminModule { 15 | @Provides 16 | @AdhellApplicationScope 17 | DevicePolicyManager providesDevicePolicyManager(Context appContext) { 18 | return (DevicePolicyManager) appContext.getSystemService(Context.DEVICE_POLICY_SERVICE); 19 | } 20 | 21 | @Provides 22 | @AdhellApplicationScope 23 | ComponentName providesComponentName(Context appContext) { 24 | return new ComponentName(appContext, CustomDeviceAdminReceiver.class); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/migration/Migration_22_23.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.migration; 2 | 3 | import android.arch.persistence.db.SupportSQLiteDatabase; 4 | import android.arch.persistence.room.migration.Migration; 5 | 6 | public class Migration_22_23 extends Migration { 7 | 8 | public Migration_22_23(int startVersion, int endVersion) { 9 | super(startVersion, endVersion); 10 | } 11 | 12 | @Override 13 | public void migrate(SupportSQLiteDatabase database) { 14 | database.execSQL("CREATE TABLE RestrictedPackage " + 15 | "(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " + 16 | "packageName TEXT, " + 17 | "policyPackageId TEXT, " + 18 | "FOREIGN KEY (policyPackageId) REFERENCES PolicyPackage(id))"); 19 | database.execSQL("CREATE INDEX index_RestrictedPackage_policyPackageId " + 20 | "ON RestrictedPackage (policyPackageId)"); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/dao/AppPermissionDao.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.dao; 2 | 3 | import android.arch.persistence.room.Dao; 4 | import android.arch.persistence.room.Delete; 5 | import android.arch.persistence.room.Insert; 6 | import android.arch.persistence.room.OnConflictStrategy; 7 | import android.arch.persistence.room.Query; 8 | 9 | import com.fusionjack.adhell3.db.entity.AppPermission; 10 | 11 | import java.util.List; 12 | 13 | @Dao 14 | public interface AppPermissionDao { 15 | 16 | @Query("SELECT * FROM AppPermission") 17 | List getAll(); 18 | 19 | @Insert(onConflict = OnConflictStrategy.REPLACE) 20 | void insert(AppPermission appPermission); 21 | 22 | @Insert(onConflict = OnConflictStrategy.REPLACE) 23 | void insertAll(List appPermissions); 24 | 25 | @Delete 26 | void delete(AppPermission appPermission); 27 | 28 | @Query("DELETE FROM AppPermission") 29 | void deleteAll(); 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/App.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3; 2 | 3 | 4 | import android.app.Application; 5 | 6 | import com.fusionjack.adhell3.dagger.component.AppComponent; 7 | import com.fusionjack.adhell3.dagger.component.DaggerAppComponent; 8 | import com.fusionjack.adhell3.dagger.module.AppModule; 9 | 10 | public class App extends Application { 11 | private static App instance; 12 | private AppComponent appComponent; 13 | 14 | public static App get() { 15 | return instance; 16 | } 17 | 18 | @Override 19 | public void onCreate() { 20 | super.onCreate(); 21 | instance = this; 22 | appComponent = initDagger(instance); 23 | } 24 | 25 | protected AppComponent initDagger(App application) { 26 | return DaggerAppComponent.builder() 27 | .appModule(new AppModule(application)) 28 | .build(); 29 | } 30 | 31 | 32 | public AppComponent getAppComponent() { 33 | return appComponent; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/migration/Migration_19_20.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.migration; 2 | 3 | import android.arch.persistence.db.SupportSQLiteDatabase; 4 | import android.arch.persistence.room.migration.Migration; 5 | 6 | public class Migration_19_20 extends Migration { 7 | 8 | public Migration_19_20(int startVersion, int endVersion) { 9 | super(startVersion, endVersion); 10 | } 11 | 12 | @Override 13 | public void migrate(SupportSQLiteDatabase database) { 14 | database.execSQL("CREATE TABLE FirewallWhitelistedPackage " + 15 | "(id INTEGER PRIMARY KEY, " + 16 | "packageName TEXT NOT NULL, " + 17 | "policyPackageId TEXT DEFAULT 'default-policy', " + 18 | "FOREIGN KEY (policyPackageId) REFERENCES PolicyPackage(id))"); 19 | database.execSQL("CREATE UNIQUE INDEX firewall_whitelisted_package_policy_package_idx " + 20 | "ON FirewallWhitelistedPackage (packageName, policyPackageId)"); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_app_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 15 | 16 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/entity/WhiteUrl.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.entity; 2 | 3 | import android.arch.persistence.room.ColumnInfo; 4 | import android.arch.persistence.room.Entity; 5 | import android.arch.persistence.room.ForeignKey; 6 | import android.arch.persistence.room.Ignore; 7 | import android.arch.persistence.room.Index; 8 | import android.arch.persistence.room.PrimaryKey; 9 | import android.arch.persistence.room.TypeConverters; 10 | 11 | import com.fusionjack.adhell3.db.DateConverter; 12 | 13 | import java.util.Date; 14 | 15 | @Entity( 16 | tableName = "WhiteUrl" 17 | ) 18 | @TypeConverters(DateConverter.class) 19 | public class WhiteUrl { 20 | @PrimaryKey(autoGenerate = true) 21 | @ColumnInfo(name = "_id") 22 | public long id; 23 | 24 | @ColumnInfo(name = "url") 25 | public String url; 26 | 27 | public Date insertedAt; 28 | 29 | @Ignore 30 | public WhiteUrl(String url) { 31 | this.url = url; 32 | this.insertedAt = new Date(); 33 | } 34 | 35 | public WhiteUrl() { 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/migration/Migration_21_22.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.migration; 2 | 3 | import android.arch.persistence.db.SupportSQLiteDatabase; 4 | import android.arch.persistence.room.migration.Migration; 5 | 6 | public class Migration_21_22 extends Migration { 7 | 8 | public Migration_21_22(int startVersion, int endVersion) { 9 | super(startVersion, endVersion); 10 | } 11 | 12 | @Override 13 | public void migrate(SupportSQLiteDatabase database) { 14 | database.execSQL("ALTER TABLE PolicyPackage ADD COLUMN numberOfDisabledPackages INTEGER DEFAULT 0"); 15 | database.execSQL("ALTER TABLE PolicyPackage ADD COLUMN numberOfHosts INTEGER DEFAULT 0"); 16 | database.execSQL("ALTER TABLE PolicyPackage ADD COLUMN numberOfUserBlockedDomains INTEGER DEFAULT 0"); 17 | database.execSQL("ALTER TABLE PolicyPackage ADD COLUMN numberOfUserWhitelistedDomains INTEGER DEFAULT 0"); 18 | database.execSQL("ALTER TABLE PolicyPackage ADD COLUMN numberOfChangedPermissions INTEGER DEFAULT 0"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/entity/UserBlockUrl.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.entity; 2 | 3 | import android.arch.persistence.room.ColumnInfo; 4 | import android.arch.persistence.room.Entity; 5 | import android.arch.persistence.room.ForeignKey; 6 | import android.arch.persistence.room.Ignore; 7 | import android.arch.persistence.room.Index; 8 | import android.arch.persistence.room.PrimaryKey; 9 | import android.arch.persistence.room.TypeConverters; 10 | 11 | import com.fusionjack.adhell3.db.DateConverter; 12 | 13 | import java.util.Date; 14 | 15 | @Entity( 16 | tableName = "UserBlockUrl" 17 | ) 18 | @TypeConverters(DateConverter.class) 19 | public class UserBlockUrl { 20 | @PrimaryKey(autoGenerate = true) 21 | @ColumnInfo(name = "_id") 22 | public long id; 23 | 24 | @ColumnInfo(name = "url") 25 | public String url; 26 | 27 | public Date insertedAt; 28 | 29 | public UserBlockUrl() { 30 | } 31 | 32 | @Ignore 33 | public UserBlockUrl(String url) { 34 | this.insertedAt = new Date(); 35 | this.url = url; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/dagger/module/NetworkModule.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.dagger.module; 2 | 3 | import android.util.Log; 4 | 5 | import com.fusionjack.adhell3.dagger.scope.AdhellApplicationScope; 6 | import com.google.gson.Gson; 7 | 8 | import java.util.concurrent.TimeUnit; 9 | 10 | import dagger.Module; 11 | import dagger.Provides; 12 | import okhttp3.OkHttpClient; 13 | 14 | @Module 15 | public class NetworkModule { 16 | 17 | private static final String TAG = NetworkModule.class.getCanonicalName(); 18 | 19 | @Provides 20 | @AdhellApplicationScope 21 | OkHttpClient providesOkHttpClient() { 22 | OkHttpClient okHttpClient = new OkHttpClient.Builder() 23 | .connectTimeout(20, TimeUnit.SECONDS) 24 | .readTimeout(20, TimeUnit.SECONDS) 25 | .writeTimeout(15, TimeUnit.SECONDS) 26 | .build(); 27 | Log.i(TAG, "Providing okHttpClient"); 28 | return okHttpClient; 29 | } 30 | 31 | @Provides 32 | @AdhellApplicationScope 33 | Gson providesGson() { 34 | return new Gson(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_mobile_restricter.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 12 | 13 | 19 | 20 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/dao/BlockUrlDao.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.dao; 2 | 3 | import android.arch.persistence.room.Dao; 4 | import android.arch.persistence.room.Insert; 5 | import android.arch.persistence.room.OnConflictStrategy; 6 | import android.arch.persistence.room.Query; 7 | 8 | import com.fusionjack.adhell3.db.entity.BlockUrl; 9 | 10 | import java.util.List; 11 | 12 | @Dao 13 | public interface BlockUrlDao { 14 | 15 | @Query("SELECT * FROM BlockUrl") 16 | List getAll(); 17 | 18 | @Query("SELECT * FROM BlockUrl WHERE urlProviderId = :urlProviderId") 19 | List getUrlsByProviderId(long urlProviderId); 20 | 21 | @Query("DELETE FROM BlockUrl") 22 | void deleteAll(); 23 | 24 | @Insert(onConflict = OnConflictStrategy.REPLACE) 25 | void insertAll(List blockUrls); 26 | 27 | @Insert(onConflict = OnConflictStrategy.REPLACE) 28 | void insert(BlockUrl... blockUrls); 29 | 30 | @Query("SELECT * FROM BlockUrl WHERE urlProviderId = :urlProviderId AND url LIKE :url") 31 | List getByUrl(long urlProviderId, String url); 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/dao/FirewallWhitelistedPackageDao.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.dao; 2 | 3 | import android.arch.persistence.room.Dao; 4 | import android.arch.persistence.room.Insert; 5 | import android.arch.persistence.room.OnConflictStrategy; 6 | import android.arch.persistence.room.Query; 7 | 8 | import com.fusionjack.adhell3.db.entity.FirewallWhitelistedPackage; 9 | 10 | import java.util.List; 11 | 12 | @Dao 13 | public interface FirewallWhitelistedPackageDao { 14 | 15 | @Query("SELECT * FROM FirewallWhitelistedPackage") 16 | List getAll(); 17 | 18 | @Insert(onConflict = OnConflictStrategy.REPLACE) 19 | void insertAll(List firewallWhitelistedPackages); 20 | 21 | @Insert(onConflict = OnConflictStrategy.REPLACE) 22 | void insert(FirewallWhitelistedPackage whitelistedPackage); 23 | 24 | @Query("DELETE FROM FirewallWhitelistedPackage") 25 | void deleteAll(); 26 | 27 | @Query("DELETE FROM FirewallWhitelistedPackage WHERE packageName = :packageName") 28 | void deleteByPackageName(String packageName); 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/dao/RestrictedPackageDao.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.dao; 2 | 3 | import android.arch.persistence.room.Dao; 4 | import android.arch.persistence.room.Insert; 5 | import android.arch.persistence.room.OnConflictStrategy; 6 | import android.arch.persistence.room.Query; 7 | import android.arch.persistence.room.TypeConverters; 8 | 9 | import com.fusionjack.adhell3.db.DateConverter; 10 | import com.fusionjack.adhell3.db.entity.RestrictedPackage; 11 | 12 | import java.util.List; 13 | 14 | @Dao 15 | @TypeConverters(DateConverter.class) 16 | public interface RestrictedPackageDao { 17 | 18 | @Query("SELECT * FROM RestrictedPackage") 19 | List getAll(); 20 | 21 | @Insert 22 | void insertAll(List restrictedPackages); 23 | 24 | @Insert(onConflict = OnConflictStrategy.REPLACE) 25 | void insert(RestrictedPackage restrictedPackage); 26 | 27 | @Query("DELETE FROM RestrictedPackage WHERE packageName = :packageName") 28 | void deleteByPackageName(String packageName); 29 | 30 | @Query("DELETE FROM RestrictedPackage") 31 | void deleteAll(); 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/entity/BlockUrl.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.entity; 2 | 3 | import android.arch.persistence.room.ColumnInfo; 4 | import android.arch.persistence.room.Entity; 5 | import android.arch.persistence.room.ForeignKey; 6 | import android.arch.persistence.room.Index; 7 | import android.arch.persistence.room.PrimaryKey; 8 | 9 | 10 | @Entity( 11 | tableName = "BlockUrl", 12 | indices = {@Index("urlProviderId")}, 13 | foreignKeys = @ForeignKey( 14 | entity = BlockUrlProvider.class, 15 | parentColumns = "_id", 16 | childColumns = "urlProviderId", 17 | onDelete = ForeignKey.CASCADE 18 | ) 19 | ) 20 | public class BlockUrl { 21 | @PrimaryKey(autoGenerate = true) 22 | @ColumnInfo(name = "_id") 23 | public long id; 24 | 25 | @ColumnInfo(name = "url") 26 | public String url; 27 | 28 | @ColumnInfo(name = "urlProviderId") 29 | public long urlProviderId; 30 | 31 | public BlockUrl(String url, long urlProviderId) { 32 | this.url = url; 33 | this.urlProviderId = urlProviderId; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/viewmodel/SharedAppPermissionViewModel.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.viewmodel; 2 | 3 | 4 | import android.arch.lifecycle.LiveData; 5 | import android.arch.lifecycle.MutableLiveData; 6 | import android.arch.lifecycle.ViewModel; 7 | import android.content.pm.PackageManager; 8 | 9 | import com.fusionjack.adhell3.App; 10 | import com.fusionjack.adhell3.db.AppDatabase; 11 | import com.fusionjack.adhell3.model.AdhellPermissionInfo; 12 | 13 | import javax.inject.Inject; 14 | 15 | public class SharedAppPermissionViewModel extends ViewModel { 16 | private final MutableLiveData selected = new MutableLiveData<>(); 17 | 18 | @Inject 19 | AppDatabase appDatabase; 20 | 21 | @Inject 22 | PackageManager packageManager; 23 | 24 | public SharedAppPermissionViewModel() { 25 | App.get().getAppComponent().inject(this); 26 | } 27 | 28 | public void select(AdhellPermissionInfo adhellPermissionInfo) { 29 | selected.setValue(adhellPermissionInfo); 30 | } 31 | 32 | public LiveData getSelected() { 33 | return selected; 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/viewmodel/BlockUrlProvidersViewModel.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.viewmodel; 2 | 3 | import android.arch.lifecycle.LiveData; 4 | import android.arch.lifecycle.MutableLiveData; 5 | import android.arch.lifecycle.ViewModel; 6 | 7 | import com.fusionjack.adhell3.App; 8 | import com.fusionjack.adhell3.db.AppDatabase; 9 | import com.fusionjack.adhell3.db.entity.BlockUrlProvider; 10 | 11 | import java.util.List; 12 | 13 | public class BlockUrlProvidersViewModel extends ViewModel { 14 | private LiveData> blockUrlProviders; 15 | private AppDatabase mDb; 16 | 17 | public BlockUrlProvidersViewModel() { 18 | mDb = AppDatabase.getAppDatabase(App.get().getApplicationContext()); 19 | } 20 | 21 | public LiveData> getBlockUrlProviders() { 22 | if (blockUrlProviders == null) { 23 | blockUrlProviders = new MutableLiveData<>(); 24 | loadBlockUrlProviders(); 25 | } 26 | return blockUrlProviders; 27 | } 28 | 29 | private void loadBlockUrlProviders() { 30 | blockUrlProviders = mDb.blockUrlProviderDao().getAll(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/fusionjack/adhell3/db/dao/DisabledPackageDao.java: -------------------------------------------------------------------------------- 1 | package com.fusionjack.adhell3.db.dao; 2 | 3 | import android.arch.persistence.room.Dao; 4 | import android.arch.persistence.room.Insert; 5 | import android.arch.persistence.room.OnConflictStrategy; 6 | import android.arch.persistence.room.Query; 7 | import android.arch.persistence.room.TypeConverters; 8 | 9 | import com.fusionjack.adhell3.db.DateConverter; 10 | import com.fusionjack.adhell3.db.entity.DisabledPackage; 11 | import com.fusionjack.adhell3.db.entity.UserBlockUrl; 12 | 13 | import java.util.List; 14 | 15 | @Dao 16 | @TypeConverters(DateConverter.class) 17 | public interface DisabledPackageDao { 18 | 19 | @Query("SELECT * FROM DisabledPackage") 20 | List getAll(); 21 | 22 | @Insert 23 | void insertAll(List disabledPackages); 24 | 25 | @Insert(onConflict = OnConflictStrategy.REPLACE) 26 | void insert(DisabledPackage disabledPackage); 27 | 28 | @Query("DELETE FROM DisabledPackage WHERE packageName = :packageName") 29 | void deleteByPackageName(String packageName); 30 | 31 | @Query("DELETE FROM DisabledPackage") 32 | void deleteAll(); 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_app_support.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 18 | 19 |